auto PPUcounter::serialize(serializer& s) -> void { s.integer(status.interlace); s.integer(status.field); s.integer(status.vcounter); s.integer(status.hcounter); s.array(history.field); s.array(history.vcounter); s.array(history.hcounter); s.integer(history.index); } auto PPU::serialize(serializer& s) -> void { Thread::serialize(s); PPUcounter::serialize(s); s.integer(vram.mask); s.array(vram.data, vram.mask + 1); s.integer(ppu1.version); s.integer(ppu1.mdr); s.integer(ppu2.version); s.integer(ppu2.mdr); s.integer(display.interlace); s.integer(display.overscan); s.integer(latch.vram); s.integer(latch.oam); s.integer(latch.cgram); s.integer(latch.bgofsPPU1); s.integer(latch.bgofsPPU2); s.integer(latch.mode7); s.integer(latch.counters); s.integer(latch.hcounter); s.integer(latch.vcounter); s.integer(latch.oamAddress); s.integer(latch.cgramAddress); s.integer(io.displayDisable); s.integer(io.displayBrightness); s.integer(io.oamBaseAddress); s.integer(io.oamAddress); s.integer(io.oamPriority); s.integer(io.bgPriority); s.integer(io.bgMode); s.integer(io.hoffsetMode7); s.integer(io.voffsetMode7); s.integer(io.vramIncrementMode); s.integer(io.vramMapping); s.integer(io.vramIncrementSize); s.integer(io.vramAddress); s.integer(io.repeatMode7); s.integer(io.vflipMode7); s.integer(io.hflipMode7); s.integer(io.m7a); s.integer(io.m7b); s.integer(io.m7c); s.integer(io.m7d); s.integer(io.m7x); s.integer(io.m7y); s.integer(io.cgramAddress); s.integer(io.cgramAddressLatch); s.integer(io.extbg); s.integer(io.pseudoHires); s.integer(io.overscan); s.integer(io.interlace); s.integer(io.hcounter); s.integer(io.vcounter); bg1.serialize(s); bg2.serialize(s); bg3.serialize(s); bg4.serialize(s); obj.serialize(s); window.serialize(s); screen.serialize(s); } auto PPU::Background::serialize(serializer& s) -> void { s.integer(io.tiledataAddress); s.integer(io.screenAddress); s.integer(io.screenSize); s.integer(io.mosaic); s.integer(io.tileSize); s.integer(io.mode); s.array(io.priority); s.integer(io.aboveEnable); s.integer(io.belowEnable); s.integer(io.hoffset); s.integer(io.voffset); s.integer(latch.hoffset); s.integer(latch.voffset); s.integer(output.above.priority); s.integer(output.above.palette); s.integer(output.above.tile); s.integer(output.below.priority); s.integer(output.below.palette); s.integer(output.below.tile); s.integer(x); s.integer(y); s.integer(mosaic.priority); s.integer(mosaic.palette); s.integer(mosaic.tile); s.integer(mosaic.vcounter); s.integer(mosaic.voffset); s.integer(mosaic.hcounter); s.integer(mosaic.hoffset); s.integer(tileCounter); s.integer(tile); s.integer(priority); s.integer(paletteNumber); s.integer(paletteIndex); s.array(data); } auto PPU::Object::serialize(serializer& s) -> void { for(auto& object : oam.object) { s.integer(object.x); s.integer(object.y); s.integer(object.character); s.integer(object.nameselect); s.integer(object.vflip); s.integer(object.hflip); s.integer(object.priority); s.integer(object.palette); s.integer(object.size); } s.integer(io.aboveEnable); s.integer(io.belowEnable); s.integer(io.interlace); s.integer(io.baseSize); s.integer(io.nameselect); s.integer(io.tiledataAddress); s.integer(io.firstSprite); s.array(io.priority); s.integer(io.timeOver); s.integer(io.rangeOver); s.integer(t.x); s.integer(t.y); s.integer(t.itemCount); s.integer(t.tileCount); s.integer(t.active); for(auto p : range(2)) { for(auto n : range(32)) { s.integer(t.item[p][n].valid); s.integer(t.item[p][n].index); } for(auto n : range(34)) { s.integer(t.tile[p][n].valid); s.integer(t.tile[p][n].x); s.integer(t.tile[p][n].priority); s.integer(t.tile[p][n].palette); s.integer(t.tile[p][n].hflip); s.integer(t.tile[p][n].data); } } s.integer(output.above.priority); s.integer(output.above.palette); s.integer(output.below.priority); s.integer(output.below.palette); } auto PPU::Window::serialize(serializer& s) -> void { s.integer(io.bg1.oneEnable); s.integer(io.bg1.oneInvert); s.integer(io.bg1.twoEnable); s.integer(io.bg1.twoInvert); s.integer(io.bg1.mask); s.integer(io.bg1.aboveEnable); s.integer(io.bg1.belowEnable); s.integer(io.bg2.oneEnable); s.integer(io.bg2.oneInvert); s.integer(io.bg2.twoEnable); s.integer(io.bg2.twoInvert); s.integer(io.bg2.mask); s.integer(io.bg2.aboveEnable); s.integer(io.bg2.belowEnable); s.integer(io.bg3.oneEnable); s.integer(io.bg3.oneInvert); s.integer(io.bg3.twoEnable); s.integer(io.bg3.twoInvert); s.integer(io.bg3.mask); s.integer(io.bg3.aboveEnable); s.integer(io.bg3.belowEnable); s.integer(io.bg4.oneEnable); s.integer(io.bg4.oneInvert); s.integer(io.bg4.twoEnable); s.integer(io.bg4.twoInvert); s.integer(io.bg4.mask); s.integer(io.bg4.aboveEnable); s.integer(io.bg4.belowEnable); s.integer(io.obj.oneEnable); s.integer(io.obj.oneInvert); s.integer(io.obj.twoEnable); s.integer(io.obj.twoInvert); s.integer(io.obj.mask); s.integer(io.obj.aboveEnable); s.integer(io.obj.belowEnable); s.integer(io.col.oneEnable); s.integer(io.col.oneInvert); s.integer(io.col.twoEnable); s.integer(io.col.twoInvert); s.integer(io.col.mask); s.integer(io.col.aboveMask); s.integer(io.col.belowMask); s.integer(io.oneLeft); s.integer(io.oneRight); s.integer(io.twoLeft); s.integer(io.twoRight); s.integer(output.above.colorEnable); s.integer(output.below.colorEnable); s.integer(x); } auto PPU::Screen::serialize(serializer& s) -> void { s.array(cgram); s.integer(io.blendMode); s.integer(io.directColor); s.integer(io.colorMode); s.integer(io.colorHalve); s.integer(io.bg1.colorEnable); s.integer(io.bg2.colorEnable); s.integer(io.bg3.colorEnable); s.integer(io.bg4.colorEnable); s.integer(io.obj.colorEnable); s.integer(io.back.colorEnable); s.integer(io.colorBlue); s.integer(io.colorGreen); s.integer(io.colorRed); s.integer(math.above.color); s.integer(math.above.colorEnable); s.integer(math.below.color); s.integer(math.below.colorEnable); s.integer(math.transparent); s.integer(math.blendMode); s.integer(math.colorHalve); }