Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
alexbevi
GitHub Repository: alexbevi/BizHawk
Path: blob/master/libsnes/bsnes/snes/alt/ppu-performance/serialization.cpp
2 views
1
#ifdef PPU_CPP
2
3
void PPUcounter::serialize(serializer &s) {
4
s.integer(status.interlace);
5
s.integer(status.field);
6
s.integer(status.vcounter);
7
s.integer(status.hcounter);
8
9
s.array(history.field);
10
s.array(history.vcounter);
11
s.array(history.hcounter);
12
s.integer(history.index);
13
}
14
15
void PPU::serialize(serializer &s) {
16
Processor::serialize(s);
17
PPUcounter::serialize(s);
18
19
s.array(vram, 64 * 1024);
20
s.array(oam, 544);
21
s.array(cgram, 512);
22
23
cache.serialize(s);
24
bg1.serialize(s);
25
bg2.serialize(s);
26
bg3.serialize(s);
27
bg4.serialize(s);
28
sprite.serialize(s);
29
screen.serialize(s);
30
31
s.integer(display.interlace);
32
s.integer(display.overscan);
33
s.integer(display.width);
34
s.integer(display.height);
35
36
s.integer(regs.ppu1_mdr);
37
s.integer(regs.ppu2_mdr);
38
39
s.integer(regs.vram_readbuffer);
40
s.integer(regs.oam_latchdata);
41
s.integer(regs.cgram_latchdata);
42
s.integer(regs.bgofs_latchdata);
43
s.integer(regs.mode7_latchdata);
44
45
s.integer(regs.counters_latched);
46
s.integer(regs.latch_hcounter);
47
s.integer(regs.latch_vcounter);
48
49
s.integer(regs.display_disable);
50
s.integer(regs.display_brightness);
51
52
s.integer(regs.oam_baseaddr);
53
s.integer(regs.oam_addr);
54
s.integer(regs.oam_priority);
55
56
s.integer(regs.bg3_priority);
57
s.integer(regs.bgmode);
58
59
s.integer(regs.mode7_hoffset);
60
61
s.integer(regs.mode7_voffset);
62
63
s.integer(regs.vram_incmode);
64
s.integer(regs.vram_mapping);
65
s.integer(regs.vram_incsize);
66
67
s.integer(regs.vram_addr);
68
69
s.integer(regs.mode7_repeat);
70
s.integer(regs.mode7_vflip);
71
s.integer(regs.mode7_hflip);
72
73
s.integer(regs.m7a);
74
s.integer(regs.m7b);
75
s.integer(regs.m7c);
76
s.integer(regs.m7d);
77
s.integer(regs.m7x);
78
s.integer(regs.m7y);
79
80
s.integer(regs.cgram_addr);
81
82
s.integer(regs.window_one_left);
83
s.integer(regs.window_one_right);
84
s.integer(regs.window_two_left);
85
s.integer(regs.window_two_right);
86
87
s.integer(regs.mode7_extbg);
88
s.integer(regs.pseudo_hires);
89
s.integer(regs.overscan);
90
s.integer(regs.interlace);
91
92
s.integer(regs.hcounter);
93
94
s.integer(regs.vcounter);
95
}
96
97
void PPU::Cache::serialize(serializer &s) {
98
//rather than save ~512KB worth of cached tiledata, invalidate it all
99
for(unsigned i = 0; i < 4096; i++) tilevalid[0][i] = false;
100
for(unsigned i = 0; i < 2048; i++) tilevalid[1][i] = false;
101
for(unsigned i = 0; i < 1024; i++) tilevalid[2][i] = false;
102
}
103
104
void PPU::Background::serialize(serializer &s) {
105
s.integer(regs.mode);
106
s.integer(regs.priority0);
107
s.integer(regs.priority1);
108
109
s.integer(regs.tile_size);
110
s.integer(regs.mosaic);
111
112
s.integer(regs.screen_addr);
113
s.integer(regs.screen_size);
114
s.integer(regs.tiledata_addr);
115
116
s.integer(regs.hoffset);
117
s.integer(regs.voffset);
118
119
s.integer(regs.main_enable);
120
s.integer(regs.sub_enable);
121
122
s.integer(hires);
123
s.integer(width);
124
125
s.integer(tile_width);
126
s.integer(tile_height);
127
128
s.integer(mask_x);
129
s.integer(mask_y);
130
131
s.integer(scx);
132
s.integer(scy);
133
134
s.integer(hscroll);
135
s.integer(vscroll);
136
137
s.integer(mosaic_vcounter);
138
s.integer(mosaic_voffset);
139
140
window.serialize(s);
141
}
142
143
void PPU::Sprite::serialize(serializer &s) {
144
s.integer(regs.priority0);
145
s.integer(regs.priority1);
146
s.integer(regs.priority2);
147
s.integer(regs.priority3);
148
149
s.integer(regs.base_size);
150
s.integer(regs.nameselect);
151
s.integer(regs.tiledata_addr);
152
s.integer(regs.first_sprite);
153
154
s.integer(regs.main_enable);
155
s.integer(regs.sub_enable);
156
157
s.integer(regs.interlace);
158
159
s.integer(regs.time_over);
160
s.integer(regs.range_over);
161
162
for(unsigned i = 0; i < 128; i++) {
163
s.integer(list[i].width);
164
s.integer(list[i].height);
165
s.integer(list[i].x);
166
s.integer(list[i].y);
167
s.integer(list[i].character);
168
s.integer(list[i].use_nameselect);
169
s.integer(list[i].vflip);
170
s.integer(list[i].hflip);
171
s.integer(list[i].palette);
172
s.integer(list[i].priority);
173
s.integer(list[i].size);
174
}
175
s.integer(list_valid);
176
177
s.array(itemlist);
178
for(unsigned i = 0; i < 34; i++) {
179
s.integer(tilelist[i].x);
180
s.integer(tilelist[i].y);
181
s.integer(tilelist[i].priority);
182
s.integer(tilelist[i].palette);
183
s.integer(tilelist[i].tile);
184
s.integer(tilelist[i].hflip);
185
}
186
187
s.array(output.palette);
188
s.array(output.priority);
189
190
window.serialize(s);
191
}
192
193
void PPU::Screen::serialize(serializer &s) {
194
s.integer(regs.addsub_mode);
195
s.integer(regs.direct_color);
196
197
s.integer(regs.color_mode);
198
s.integer(regs.color_halve);
199
s.array(regs.color_enable);
200
201
s.integer(regs.color_b);
202
s.integer(regs.color_g);
203
s.integer(regs.color_r);
204
s.integer(regs.color);
205
206
for(unsigned i = 0; i < 256; i++) {
207
s.integer(output.main[i].color);
208
s.integer(output.main[i].priority);
209
s.integer(output.main[i].source);
210
211
s.integer(output.sub[i].color);
212
s.integer(output.sub[i].priority);
213
s.integer(output.sub[i].source);
214
}
215
216
window.serialize(s);
217
}
218
219
void PPU::LayerWindow::serialize(serializer &s) {
220
s.integer(one_enable);
221
s.integer(one_invert);
222
s.integer(two_enable);
223
s.integer(two_invert);
224
225
s.integer(mask);
226
227
s.integer(main_enable);
228
s.integer(sub_enable);
229
230
s.array(main);
231
s.array(sub);
232
}
233
234
void PPU::ColorWindow::serialize(serializer &s) {
235
s.integer(one_enable);
236
s.integer(one_invert);
237
s.integer(two_enable);
238
s.integer(two_invert);
239
240
s.integer(mask);
241
242
s.integer(main_mask);
243
s.integer(sub_mask);
244
245
s.array(main);
246
s.array(sub);
247
}
248
249
#endif
250
251