bsnes/higan/gba/ppu/serialization.cpp
Tim Allen 47d4bd4d81 Update to v096r01 release.
byuu says:

Changelog:

- restructured the project and removed a whole bunch of old/dead
  directives from higan/GNUmakefile
- huge amounts of work on hiro/cocoa (compiles but ~70% of the
  functionality is commented out)
- fixed a masking error in my ARM CPU disassembler [Lioncash]
- SFC: decided to change board cic=(411,413) back to board
  region=(ntsc,pal) ... the former was too obtuse

If you rename Boolean (it's a problem with an include from ruby, not
from hiro) and disable all the ruby drivers, you can compile an
OS X binary, but obviously it's not going to do anything.

It's a boring WIP, I just wanted to push out the project structure
change now at the start of this WIP cycle.
2015-12-30 17:54:59 +11:00

125 lines
3.1 KiB
C++

auto PPU::serialize(serializer& s) -> void {
Thread::serialize(s);
s.array(vram, 96 * 1024);
s.array(pram, 512);
s.integer(regs.control.bgmode);
s.integer(regs.control.cgbmode);
s.integer(regs.control.frame);
s.integer(regs.control.hblank);
s.integer(regs.control.objmapping);
s.integer(regs.control.forceblank);
for(auto& flag : regs.control.enable) s.integer(flag);
for(auto& flag : regs.control.enablewindow) s.integer(flag);
s.integer(regs.greenswap);
s.integer(regs.status.vblank);
s.integer(regs.status.hblank);
s.integer(regs.status.vcoincidence);
s.integer(regs.status.irqvblank);
s.integer(regs.status.irqhblank);
s.integer(regs.status.irqvcoincidence);
s.integer(regs.status.vcompare);
s.integer(regs.vcounter);
for(auto& bg : regs.bg) {
s.integer(bg.control.priority);
s.integer(bg.control.characterbaseblock);
s.integer(bg.control.unused);
s.integer(bg.control.mosaic);
s.integer(bg.control.colormode);
s.integer(bg.control.screenbaseblock);
s.integer(bg.control.affinewrap);
s.integer(bg.control.screensize);
s.integer(bg.hoffset);
s.integer(bg.voffset);
s.integer(bg.pa);
s.integer(bg.pb);
s.integer(bg.pc);
s.integer(bg.pd);
s.integer(bg.x);
s.integer(bg.y);
s.integer(bg.lx);
s.integer(bg.ly);
s.integer(bg.vmosaic);
s.integer(bg.hmosaic);
s.integer(bg.id);
}
for(auto& window : regs.window) {
s.integer(window.x1);
s.integer(window.x2);
s.integer(window.y1);
s.integer(window.y2);
}
for(auto& windowflags : regs.windowflags) {
for(auto& flag : windowflags.enable) s.integer(flag);
}
s.integer(regs.mosaic.bghsize);
s.integer(regs.mosaic.bgvsize);
s.integer(regs.mosaic.objhsize);
s.integer(regs.mosaic.objvsize);
for(auto& flag : regs.blend.control.above) s.integer(flag);
for(auto& flag : regs.blend.control.below) s.integer(flag);
s.integer(regs.blend.control.mode);
s.integer(regs.blend.eva);
s.integer(regs.blend.evb);
s.integer(regs.blend.evy);
for(auto l : range(6)) {
for(auto p : range(240)) {
auto& pixel = layer[l][p];
s.integer(pixel.enable);
s.integer(pixel.priority);
s.integer(pixel.color);
s.integer(pixel.translucent);
s.integer(pixel.mosaic);
}
}
for(auto w : range(3)) {
for(auto p : range(240)) {
s.integer(windowmask[w][p]);
}
}
for(auto& value : vmosaic) s.integer(value);
for(auto& value : hmosaic) s.integer(value);
for(auto& obj : object) {
s.integer(obj.y);
s.integer(obj.affine);
s.integer(obj.affinesize);
s.integer(obj.mode);
s.integer(obj.mosaic);
s.integer(obj.colors);
s.integer(obj.shape);
s.integer(obj.x);
s.integer(obj.affineparam);
s.integer(obj.hflip);
s.integer(obj.vflip);
s.integer(obj.size);
s.integer(obj.character);
s.integer(obj.priority);
s.integer(obj.palette);
s.integer(obj.width);
s.integer(obj.height);
}
for(auto& par : objectparam) {
s.integer(par.pa);
s.integer(par.pb);
s.integer(par.pc);
s.integer(par.pd);
}
}