Example #1
0
void ICD2::serialize(serializer& s) {
  Thread::serialize(s);
  GameBoy::system.serialize_all(s);

  for(unsigned n = 0; n < 64; n++) s.array(packet[n].data);
  s.integer(packetsize);

  s.integer(joyp_id);
  s.integer(joyp15lock);
  s.integer(joyp14lock);
  s.integer(pulselock);
  s.integer(strobelock);
  s.integer(packetlock);
  s.array(joyp_packet.data);
  s.integer(packetoffset);
  s.integer(bitdata);
  s.integer(bitoffset);

  s.integer(r6000_ly);
  s.integer(r6000_row);
  s.integer(r6001);
  s.integer(r6003);
  s.integer(r6004);
  s.integer(r6005);
  s.integer(r6006);
  s.integer(r6007);
  s.array(r7000);
  s.integer(r7800);
  s.integer(mlt_req);

  s.array(lcd.buffer);
  s.array(lcd.output);
  s.integer(lcd.row);
}
Example #2
0
void sBus::serialize(serializer &s) {
  s.array(memory::wram.data(), memory::wram.size());
  s.array(memory::apuram.data(), memory::apuram.size());
  s.array(memory::vram.data(), memory::vram.size());
  s.array(memory::oam.data(), memory::oam.size());
  s.array(memory::cgram.data(), memory::cgram.size());
}
Example #3
0
void SPC7110::serialize(serializer &s) {
  s.array(ram.data(), ram.size());

  s.integer(r4801);
  s.integer(r4802);
  s.integer(r4803);
  s.integer(r4804);
  s.integer(r4805);
  s.integer(r4806);
  s.integer(r4807);
  s.integer(r4809);
  s.integer(r480a);
  s.integer(r480b);
  s.integer(r480c);

  s.integer(dcu_pending);
  s.integer(dcu_mode);
  s.integer(dcu_addr);
  s.integer(dcu_offset);
  s.array(dcu_tile);
  decompressor->serialize(s);

  s.integer(r4810);
  s.integer(r4811);
  s.integer(r4812);
  s.integer(r4813);
  s.integer(r4814);
  s.integer(r4815);
  s.integer(r4816);
  s.integer(r4817);
  s.integer(r4818);
  s.integer(r481a);

  s.integer(r4820);
  s.integer(r4821);
  s.integer(r4822);
  s.integer(r4823);
  s.integer(r4824);
  s.integer(r4825);
  s.integer(r4826);
  s.integer(r4827);
  s.integer(r4828);
  s.integer(r4829);
  s.integer(r482a);
  s.integer(r482b);
  s.integer(r482c);
  s.integer(r482d);
  s.integer(r482e);
  s.integer(r482f);

  s.integer(mul_pending);
  s.integer(div_pending);

  s.integer(r4830);
  s.integer(r4831);
  s.integer(r4832);
  s.integer(r4833);
  s.integer(r4834);
}
Example #4
0
void DSP::serialize(serializer& s) {
  Thread::serialize(s);

  s.array(state.regs, 128);
  state.echoHistory[0].serialize(s);
  state.echoHistory[1].serialize(s);
  s.integer(state.echoHistoryOffset);

  s.integer(state.everyOtherSample);
  s.integer(state.kon);
  s.integer(state.noise);
  s.integer(state.counter);
  s.integer(state.echoOffset);
  s.integer(state.echoLength);

  s.integer(state.konBuffer);
  s.integer(state.endxBuffer);
  s.integer(state.envxBuffer);
  s.integer(state.outxBuffer);

  s.integer(state._pmon);
  s.integer(state._non);
  s.integer(state._eon);
  s.integer(state._dir);
  s.integer(state._koff);

  s.integer(state._brrNextAddress);
  s.integer(state._adsr0);
  s.integer(state._brrHeader);
  s.integer(state._brrByte);
  s.integer(state._srcn);
  s.integer(state._esa);
  s.integer(state._echoDisabled);

  s.integer(state._dirAddress);
  s.integer(state._pitch);
  s.integer(state._output);
  s.integer(state._looped);
  s.integer(state._echoPointer);

  s.array(state._mainOut, 2);
  s.array(state._echoOut, 2);
  s.array(state._echoIn, 2);

  for(auto n : range(8)) {
    voice[n].buffer.serialize(s);
    s.integer(voice[n].bufferOffset);
    s.integer(voice[n].gaussianOffset);
    s.integer(voice[n].brrAddress);
    s.integer(voice[n].brrOffset);
    s.integer(voice[n].vbit);
    s.integer(voice[n].vidx);
    s.integer(voice[n].konDelay);
    s.integer(voice[n].envelopeMode);
    s.integer(voice[n].envelope);
    s.integer(voice[n].hiddenEnvelope);
    s.integer(voice[n]._envxOut);
  }
}
Example #5
0
void Cx4::serialize(serializer &s) {
  Processor::serialize(s);

  for(auto& n : stack) s.integer(n);
  s.integer(opcode);

  s.integer(regs.halt);
  s.integer(regs.cachePage);
  s.integer(regs.irqPending);
  
  s.integer(regs.rwbusaddr);
  s.integer(regs.rwbustime);
  s.integer(regs.writebus);
  s.integer(regs.writebusdata);

  s.integer(regs.pc);
  s.integer(regs.p);
  s.integer(regs.n);
  s.integer(regs.z);
  s.integer(regs.v);
  s.integer(regs.c);

  s.integer(regs.a);
  s.integer(regs.acch);
  s.integer(regs.accl);
  s.integer(regs.busdata);
  s.integer(regs.romdata);
  s.integer(regs.ramdata);
  s.integer(regs.busaddr);
  s.integer(regs.ramaddr);
  for(auto& n : regs.gpr) s.integer(n);
  s.integer(regs.mdr);

  s.integer(mmio.dma);
  s.integer(mmio.suspend);
  s.integer(mmio.cacheLoading);
  s.integer(mmio.dmaSource);
  s.integer(mmio.dmaLength);
  s.integer(mmio.dmaTarget);
  s.integer(mmio.cachePreload);
  s.integer(mmio.programOffset);
  s.integer(mmio.pageNumber);
  s.integer(mmio.programCounter);
  s.integer(mmio.romSpeed);
  s.integer(mmio.ramSpeed);
  s.integer(mmio.irqDisable);
  s.integer(mmio.r1f52);
  s.integer(mmio.suspendCycles);
  s.array(mmio.vector);
  
  for(auto& page : cache) {
    s.integer(page.lock);
    s.integer(page.pageNumber);
    s.array(page.data);
  }
}
Example #6
0
void PPUcounter::serialize(serializer &s) {
  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);
}
Example #7
0
void Cartridge::serialize(serializer &s) {
  if(memory::cartram.size() != 0 && memory::cartram.size() != ~0) {
    s.array(memory::cartram.data(), memory::cartram.size());
  }

  if(memory::cartrtc.size() != 0 && memory::cartrtc.size() != ~0) {
    s.array(memory::cartrtc.data(), memory::cartrtc.size());
  }

  if(memory::bsxram.size() != 0 && memory::bsxram.size() != ~0) {
    s.array(memory::bsxram.data(), memory::bsxram.size());
  }

  if(memory::bsxpram.size() != 0 && memory::bsxpram.size() != ~0) {
    s.array(memory::bsxpram.data(), memory::bsxpram.size());
  }

  if(memory::stAram.size() != 0 && memory::stAram.size() != ~0) {
    s.array(memory::stAram.data(), memory::stAram.size());
  }

  if(memory::stBram.size() != 0 && memory::stBram.size() != ~0) {
    s.array(memory::stBram.data(), memory::stBram.size());
  }

  if(memory::gbram.size() != 0 && memory::gbram.size() != ~0) {
    s.array(memory::gbram.data(), memory::gbram.size());
  }

  if(memory::gbrtc.size() != 0 && memory::gbrtc.size() != ~0) {
    s.array(memory::gbrtc.data(), memory::gbrtc.size());
  }
}
Example #8
0
void SuperScope::serialize(serializer& s) {
  Processor::serialize(s);
  //Save block.
  unsigned char block[Controller::SaveSize] = {0};
  block[0] = latched ? 1 : 0;
  block[1] = counter;
  block[2] = trigger ? 1 : 0;
  block[3] = cursor ? 1 : 0;
  block[4] = turbo ? 1 : 0;
  block[5] = pause ? 1 : 0;
  block[6] = offscreen ? 1 : 0;
  block[7] = (unsigned short)x >> 8;
  block[8] = (unsigned short)x;
  block[9] = (unsigned short)y >> 8;
  block[10] = (unsigned short)y;

  s.array(block, Controller::SaveSize);
  if(s.mode() == nall::serializer::Load) {
    latched = (block[0] != 0);
    counter = block[1];
    trigger = (block[2] != 0);
    cursor = (block[3] != 0);
    turbo = (block[4] != 0);
    pause = (block[5] != 0);
    offscreen = (block[6] != 0);
    x = (short)(((unsigned short)block[7] << 8) | (unsigned short)block[8]);
    y = (short)(((unsigned short)block[9] << 8) | (unsigned short)block[10]);
  }
}
Example #9
0
bool System::unserialize(serializer& s) {
  unsigned signature, version;
  char hash[64], description[512];

  s.integer(signature);
  s.integer(version);
  s.array(hash);
  s.array(description);

  if(signature != 0x31545342) return false;
  if(version != Info::SerializerVersion) return false;

  power();
  serialize_all(s);
  return true;
}
Example #10
0
void HSU1::serialize(serializer& s) {
  s.integer(txbusy);
  s.integer(rxbusy);
  s.integer(txlatch);

  unsigned size;

  size = txbuffer.size();
  s.integer(size);
  txbuffer.resize(size);
  s.array(txbuffer.data(), txbuffer.size());

  size = rxbuffer.size();
  s.integer(size);
  rxbuffer.resize(size);
  s.array(rxbuffer.data(), rxbuffer.size());
}
Example #11
0
void PPUcounter::serialize(serializer &s) {
  s.integer(status.hcounter);
  s.integer(status.vcounter);
  s.integer(status.lineclocks);
  s.integer(status.prev_lineclocks);
  s.array(status.fieldlines);
  s.integer(status.field);
}
Example #12
0
void PPU::Sprite::serialize(serializer& s) {
  for(unsigned i = 0; i < 128; i++) {
    s.integer(list[i].x);
    s.integer(list[i].y);
    s.integer(list[i].character);
    s.integer(list[i].nameselect);
    s.integer(list[i].vflip);
    s.integer(list[i].hflip);
    s.integer(list[i].priority);
    s.integer(list[i].palette);
    s.integer(list[i].size);
  }

  s.integer(t.x);
  s.integer(t.y);

  s.integer(t.item_count);
  s.integer(t.tile_count);

  s.integer(t.active);
  for(unsigned n = 0; n < 2; n++) {
    s.array(t.item[n]);
    for(unsigned i = 0; i < 34; i++) {
      s.integer(t.tile[n][i].x);
      s.integer(t.tile[n][i].priority);
      s.integer(t.tile[n][i].palette);
      s.integer(t.tile[n][i].hflip);
      s.integer(t.tile[n][i].d0);
      s.integer(t.tile[n][i].d1);
      s.integer(t.tile[n][i].d2);
      s.integer(t.tile[n][i].d3);
    }
  }

  s.integer(regs.main_enable);
  s.integer(regs.sub_enable);
  s.integer(regs.interlace);

  s.integer(regs.base_size);
  s.integer(regs.nameselect);
  s.integer(regs.tiledata_addr);
  s.integer(regs.first_sprite);

  s.integer(regs.priority0);
  s.integer(regs.priority1);
  s.integer(regs.priority2);
  s.integer(regs.priority3);

  s.integer(regs.time_over);
  s.integer(regs.range_over);

  s.integer(output.main.priority);
  s.integer(output.main.palette);

  s.integer(output.sub.priority);
  s.integer(output.sub.palette);
}
Example #13
0
void SMP::serialize(serializer& s) {
  Thread::serialize(s);

  s.array(apuram, 64 * 1024);

  s.integer(opcode_number);
  s.integer(opcode_cycle);

  s.integer(regs.pc);
  s.integer(regs.sp);
  s.integer(regs.a);
  s.integer(regs.x);
  s.integer(regs.y);

  s.integer(regs.p.n);
  s.integer(regs.p.v);
  s.integer(regs.p.p);
  s.integer(regs.p.b);
  s.integer(regs.p.h);
  s.integer(regs.p.i);
  s.integer(regs.p.z);
  s.integer(regs.p.c);

  s.integer(rd);
  s.integer(wr);
  s.integer(dp);
  s.integer(sp);
  s.integer(ya);
  s.integer(bit);

  s.integer(status.iplrom_enable);

  s.integer(status.dsp_addr);

  s.integer(status.ram00f8);
  s.integer(status.ram00f9);

  s.integer(timer0.enable);
  s.integer(timer0.target);
  s.integer(timer0.stage1_ticks);
  s.integer(timer0.stage2_ticks);
  s.integer(timer0.stage3_ticks);

  s.integer(timer1.enable);
  s.integer(timer1.target);
  s.integer(timer1.stage1_ticks);
  s.integer(timer1.stage2_ticks);
  s.integer(timer1.stage3_ticks);

  s.integer(timer2.enable);
  s.integer(timer2.target);

  s.integer(timer2.stage1_ticks);
  s.integer(timer2.stage2_ticks);
  s.integer(timer2.stage3_ticks);
}
Example #14
0
void serialize(serializer &s) {
  Board::serialize(s);

  s.integer(prg_bank);
  s.integer(chr_bank[0][0]);
  s.integer(chr_bank[0][1]);
  s.integer(chr_bank[1][0]);
  s.integer(chr_bank[1][1]);
  s.integer(mirror);
  s.array(latch);
}
Example #15
0
void Gamepad::serialize(serializer& s) {
  Processor::serialize(s);
  //Save block.
  unsigned char block[Controller::SaveSize] = {0};
  block[0] = latched ? 1 : 0;
  block[1] = counter;
  s.array(block, Controller::SaveSize);
  if(s.mode() == nall::serializer::Load) {
    latched = (block[0] != 0);
    counter = block[1];
  }
}
Example #16
0
void DSP2::serialize(serializer &s) {
  s.integer(status.waiting_for_command);
  s.integer(status.command);
  s.integer(status.in_count);
  s.integer(status.in_index);
  s.integer(status.out_count);
  s.integer(status.out_index);

  s.array(status.parameters);
  s.array(status.output);

  s.integer(status.op05transparent);
  s.integer(status.op05haslen);
  s.integer(status.op05len);
  s.integer(status.op06haslen);
  s.integer(status.op06len);
  s.integer(status.op09word1);
  s.integer(status.op09word2);
  s.integer(status.op0dhaslen);
  s.integer(status.op0doutlen);
  s.integer(status.op0dinlen);
}
Example #17
0
void SPC7110::Decomp::serialize(serializer &s) {
  s.integer(decomp_mode);
  s.integer(decomp_offset);

  s.array(decomp_buffer, decomp_buffer_size);
  s.integer(decomp_buffer_rdoffset);
  s.integer(decomp_buffer_wroffset);
  s.integer(decomp_buffer_length);

  for(unsigned n = 0; n < 32; n++) {
    s.integer(context[n].index);
    s.integer(context[n].invert);
  }
}
Example #18
0
void serialize(serializer &s) {
  s.array(prg_bank);
  s.array(chr_bank);
  s.integer(mirror);

  s.integer(irq_latch);
  s.integer(irq_mode);
  s.integer(irq_enable);
  s.integer(irq_acknowledge);

  s.integer(irq_counter);
  s.integer(irq_scalar);
  s.integer(irq_line);
}
Example #19
0
void PPU::Background::serialize(serializer& s) {
  s.integer(id);

  s.integer(regs.tiledata_addr);
  s.integer(regs.screen_addr);
  s.integer(regs.screen_size);
  s.integer(regs.mosaic);
  s.integer(regs.tile_size);

  s.integer(regs.mode);
  s.integer(regs.priority0);
  s.integer(regs.priority1);

  s.integer(regs.main_enable);
  s.integer(regs.sub_enable);

  s.integer(regs.hoffset);
  s.integer(regs.voffset);

  s.integer(cache.hoffset);
  s.integer(cache.voffset);

  s.integer(output.main.priority);
  s.integer(output.main.palette);
  s.integer(output.main.tile);

  s.integer(output.sub.priority);
  s.integer(output.sub.palette);
  s.integer(output.sub.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(tile_counter);
  s.integer(tile);
  s.integer(priority);
  s.integer(palette_number);
  s.integer(palette_index);
  s.array(data);
}
Example #20
0
void SMP::serialize(serializer &s) {
  Processor::serialize(s);
  SMPcore::core_serialize(s);

  s.array(apuram);

  s.integer(status.clock_counter);
  s.integer(status.dsp_counter);
  s.integer(status.timer_step);

  s.integer(status.clock_speed);
  s.integer(status.timer_speed);
  s.integer(status.timers_enable);
  s.integer(status.ram_disable);
  s.integer(status.ram_writable);
  s.integer(status.timers_disable);

  s.integer(status.iplrom_enable);

  s.integer(status.dsp_addr);

  s.integer(status.ram00f8);
  s.integer(status.ram00f9);

  s.integer(timer0.stage0_ticks);
  s.integer(timer0.stage1_ticks);
  s.integer(timer0.stage2_ticks);
  s.integer(timer0.stage3_ticks);
  s.integer(timer0.current_line);
  s.integer(timer0.enable);
  s.integer(timer0.target);

  s.integer(timer1.stage0_ticks);
  s.integer(timer1.stage1_ticks);
  s.integer(timer1.stage2_ticks);
  s.integer(timer1.stage3_ticks);
  s.integer(timer1.current_line);
  s.integer(timer1.enable);
  s.integer(timer1.target);

  s.integer(timer2.stage0_ticks);
  s.integer(timer2.stage1_ticks);
  s.integer(timer2.stage2_ticks);
  s.integer(timer2.stage3_ticks);
  s.integer(timer2.current_line);
  s.integer(timer2.enable);
  s.integer(timer2.target);
}
Example #21
0
void ArmDSP::serialize(serializer &s) {
  ARM::serialize(s);
  Thread::serialize(s);

  s.array(programRAM, 16 * 1024);

  s.integer(bridge.cputoarm.ready);
  s.integer(bridge.cputoarm.data);
  s.integer(bridge.armtocpu.ready);
  s.integer(bridge.armtocpu.data);
  s.integer(bridge.timer);
  s.integer(bridge.timerlatch);
  s.integer(bridge.reset);
  s.integer(bridge.ready);
  s.integer(bridge.signal);
}
Example #22
0
void PPU::serialize(serializer &s) {
  Thread::serialize(s);

  s.array(screen);
  s.array(line);
  s.array(origin);

  s.array(vram);
  s.array(oam);
  s.array(bgp);
  s.array(obp[0]);
  s.array(obp[1]);
  s.array(bgpd);
  s.array(obpd);

  s.integer(status.lx);
  s.integer(status.wyc);

  s.integer(status.display_enable);
  s.integer(status.window_tilemap_select);
  s.integer(status.window_display_enable);
  s.integer(status.bg_tiledata_select);
  s.integer(status.bg_tilemap_select);
  s.integer(status.ob_size);
  s.integer(status.ob_enable);
  s.integer(status.bg_enable);

  s.integer(status.interrupt_lyc);
  s.integer(status.interrupt_oam);
  s.integer(status.interrupt_vblank);
  s.integer(status.interrupt_hblank);

  s.integer(status.scy);
  s.integer(status.scx);

  s.integer(status.ly);
  s.integer(status.lyc);

  s.integer(status.wy);
  s.integer(status.wx);

  s.integer(status.vram_bank);

  s.integer(status.bgpi_increment);
  s.integer(status.bgpi);

  s.integer(status.obpi_increment);
  s.integer(status.obpi);
}
Example #23
0
void serialize(serializer &s) {
  s.integer(chr_mode);
  s.integer(prg_mode);
  s.integer(bank_select);
  s.array(prg_bank);
  s.array(chr_bank);
  s.integer(mirror);
  s.integer(ram_enable);
  s.integer(ram_write_protect);
  s.integer(irq_latch);
  s.integer(irq_counter);
  s.integer(irq_enable);
  s.integer(irq_delay);
  s.integer(irq_line);

  s.integer(chr_abus);
}
Example #24
0
bool System::unserialize(serializer &s) {
  unsigned signature, version, crc32;
  char description[512];

  s.integer(signature);
  s.integer(version);
  s.integer(crc32);
  s.array(description);

  if(signature != 0x31545342) return false;
  if(version != bsnesSerializerVersion) return false;
//if(crc32 != cartridge.crc32()) return false;
  scheduler.init();

  serialize_all(s);
  return true;
}
Example #25
0
void serialize(serializer &s) {
  Board::serialize(s);

  s.integer(mmu_port);
  s.integer(apu_port);

  s.array(prg_bank);
  s.array(chr_bank);
  s.integer(mirror);
  s.integer(irq_enable);
  s.integer(irq_counter_enable);
  s.integer(irq_counter);

  pulse[0].serialize(s);
  pulse[1].serialize(s);
  pulse[2].serialize(s);
}
Example #26
0
void Mouse::serialize(serializer& s) {
  Processor::serialize(s);
  //Save block.
  unsigned char block[Controller::SaveSize] = {0};
  block[0] = latched ? 1 : 0;
  block[1] = counter;
  block[2] = (unsigned short)position_x >> 8;
  block[3] = (unsigned short)position_x;
  block[4] = (unsigned short)position_y >> 8;
  block[5] = (unsigned short)position_y;
  s.array(block, Controller::SaveSize);
  if(s.mode() == nall::serializer::Load) {
    latched = (block[0] != 0);
    counter = block[1];
    position_x = (short)(((unsigned short)block[2] << 8) | (unsigned short)block[3]);
    position_y = (short)(((unsigned short)block[4] << 8) | (unsigned short)block[5]);
  }
}
Example #27
0
void Board::serialize(serializer &s) {
  if(prgram.size) s.array(prgram.data, prgram.size);
  if(chrram.size) s.array(chrram.data, chrram.size);
}
Example #28
0
void SPC7110::serialize(serializer &s) {
  s.integer(r4801);
  s.integer(r4802);
  s.integer(r4803);
  s.integer(r4804);
  s.integer(r4805);
  s.integer(r4806);
  s.integer(r4807);
  s.integer(r4808);
  s.integer(r4809);
  s.integer(r480a);
  s.integer(r480b);
  s.integer(r480c);
  decomp.serialize(s);

  s.integer(r4811);
  s.integer(r4812);
  s.integer(r4813);
  s.integer(r4814);
  s.integer(r4815);
  s.integer(r4816);
  s.integer(r4817);
  s.integer(r4818);
  s.integer(r481x);
  s.integer(r4814_latch);
  s.integer(r4815_latch);

  s.integer(r4820);
  s.integer(r4821);
  s.integer(r4822);
  s.integer(r4823);
  s.integer(r4824);
  s.integer(r4825);
  s.integer(r4826);
  s.integer(r4827);
  s.integer(r4828);
  s.integer(r4829);
  s.integer(r482a);
  s.integer(r482b);
  s.integer(r482c);
  s.integer(r482d);
  s.integer(r482e);
  s.integer(r482f);

  s.integer(r4830);
  s.integer(r4831);
  s.integer(r4832);
  s.integer(r4833);
  s.integer(r4834);

  s.integer(dx_offset);
  s.integer(ex_offset);
  s.integer(fx_offset);

  s.integer(r4840);
  s.integer(r4841);
  s.integer(r4842);

  s.array(rtc,20);
  s.integer(rtc_state);
  s.integer(rtc_mode);
  s.integer(rtc_index);
}
Example #29
0
void SuperFX::serialize(serializer &s) {
  //superfx.hpp
  s.integer(clockmode);
  s.integer(instruction_counter);

  //core/registers.hpp
  s.integer(regs.pipeline);
  s.integer(regs.ramaddr);

  s.integer(regs.r[ 0].data);
  s.integer(regs.r[ 1].data);
  s.integer(regs.r[ 2].data);
  s.integer(regs.r[ 3].data);
  s.integer(regs.r[ 4].data);
  s.integer(regs.r[ 5].data);
  s.integer(regs.r[ 6].data);
  s.integer(regs.r[ 7].data);
  s.integer(regs.r[ 8].data);
  s.integer(regs.r[ 9].data);
  s.integer(regs.r[10].data);
  s.integer(regs.r[11].data);
  s.integer(regs.r[12].data);
  s.integer(regs.r[13].data);
  s.integer(regs.r[14].data);
  s.integer(regs.r[15].data);

  s.integer(regs.sfr.irq);
  s.integer(regs.sfr.b);
  s.integer(regs.sfr.ih);
  s.integer(regs.sfr.il);

  {
   bool alt1 = regs.sfr.alt & 0x100;
   bool alt2 = regs.sfr.alt & 0x200;

   s.integer(alt2);
   s.integer(alt1);

   regs.sfr.alt = (alt1 << 8) | (alt2 << 9);
  }

  s.integer(regs.sfr.r);
  s.integer(regs.sfr.g);
  s.integer(regs.sfr.ov);
  s.integer(regs.sfr.s);
  s.integer(regs.sfr.cy);
  s.integer(regs.sfr.z);

  s.integer(regs.pbr);
  s.integer(regs.rombr);
  s.integer(regs.rambr);
  s.integer(regs.cbr);
  s.integer(regs.scbr);

  s.integer(regs.scmr.ht);
  s.integer(regs.scmr.ron);
  s.integer(regs.scmr.ran);
  s.integer(regs.scmr.md);

  s.integer(regs.colr);

  s.integer(regs.por.obj);
  s.integer(regs.por.freezehigh);
  s.integer(regs.por.highnibble);
  s.integer(regs.por.dither);
  s.integer(regs.por.transparent);

  s.integer(regs.bramr);
  s.integer(regs.vcr);

  s.integer(regs.cfgr.irq);
  s.integer(regs.cfgr.ms0);

  s.integer(regs.clsr);

  s.integer(regs.romcl);
  s.integer(regs.romdr);

  s.integer(regs.ramcl);
  s.integer(regs.ramar);
  s.integer(regs.ramdr);

  s.integer(regs.sreg);
  s.integer(regs.dreg);

  s.array(cache.buffer);
  s.array(cache.valid);

  for(unsigned i = 0; i < 2; i++) {
    s.integer(pixelcache[i].offset);
    s.integer(pixelcache[i].bitpend);
    s.array(pixelcache[i].data);
  }

  //timing/timing.hpp
  s.integer(cache_access_speed);
  s.integer(memory_access_speed);
  r15_NOT_modified = !r15_NOT_modified;
  s.integer(r15_NOT_modified);
  r15_NOT_modified = !r15_NOT_modified;
}
void CPU::serialize(serializer& s) {
  R65816::serialize(s);
  Thread::serialize(s);
  PPUcounter::serialize(s);

  s.array(wram);

  s.integer(cpu_version);

  s.integer(status.interrupt_pending);

  s.integer(status.clock_count);
  s.integer(status.line_clocks);

  s.integer(status.irq_lock);

  s.integer(status.dram_refresh_position);
  s.integer(status.dram_refreshed);

  s.integer(status.hdma_init_position);
  s.integer(status.hdma_init_triggered);

  s.integer(status.hdma_position);
  s.integer(status.hdma_triggered);

  s.integer(status.nmi_valid);
  s.integer(status.nmi_line);
  s.integer(status.nmi_transition);
  s.integer(status.nmi_pending);
  s.integer(status.nmi_hold);

  s.integer(status.irq_valid);
  s.integer(status.irq_line);
  s.integer(status.irq_transition);
  s.integer(status.irq_pending);
  s.integer(status.irq_hold);

  s.integer(status.reset_pending);

  s.integer(status.dma_active);
  s.integer(status.dma_counter);
  s.integer(status.dma_clocks);
  s.integer(status.dma_pending);
  s.integer(status.hdma_pending);
  s.integer(status.hdma_mode);

  s.integer(status.auto_joypad_active);
  s.integer(status.auto_joypad_latch);
  s.integer(status.auto_joypad_counter);
  s.integer(status.auto_joypad_clock);

  s.array(status.port);

  s.integer(status.wram_addr);

  s.integer(status.joypad_strobe_latch);
  s.integer(status.joypad1_bits);
  s.integer(status.joypad2_bits);

  s.integer(status.nmi_enabled);
  s.integer(status.hirq_enabled);
  s.integer(status.virq_enabled);
  s.integer(status.auto_joypad_poll);

  s.integer(status.pio);

  s.integer(status.wrmpya);
  s.integer(status.wrmpyb);

  s.integer(status.wrdiva);
  s.integer(status.wrdivb);

  s.integer(status.hirq_pos);
  s.integer(status.virq_pos);

  s.integer(status.rom_speed);

  s.integer(status.rddiv);
  s.integer(status.rdmpy);

  s.integer(status.joy1);
  s.integer(status.joy2);
  s.integer(status.joy3);
  s.integer(status.joy4);

  s.integer(alu.mpyctr);
  s.integer(alu.divctr);
  s.integer(alu.shift);

  for(unsigned i = 0; i < 8; i++) {
    s.integer(channel[i].dma_enabled);
    s.integer(channel[i].hdma_enabled);
    s.integer(channel[i].direction);
    s.integer(channel[i].indirect);
    s.integer(channel[i].unused);
    s.integer(channel[i].reverse_transfer);
    s.integer(channel[i].fixed_transfer);
    s.integer(channel[i].transfer_mode);
    s.integer(channel[i].dest_addr);
    s.integer(channel[i].source_addr);
    s.integer(channel[i].source_bank);
    s.integer(channel[i].transfer_size);
    s.integer(channel[i].indirect_bank);
    s.integer(channel[i].hdma_addr);
    s.integer(channel[i].line_counter);
    s.integer(channel[i].unknown);
    s.integer(channel[i].hdma_completed);
    s.integer(channel[i].hdma_do_transfer);
  }

  s.integer(pipe.valid);
  s.integer(pipe.addr);
  s.integer(pipe.data);
}