(MESS) snes: fixed internal RAM saving to battery for SPC7110 games, so that

the chip has to be initialized only the first time. nw.
This commit is contained in:
Fabio Priuli 2013-06-06 11:09:20 +00:00
parent 7012ec5f78
commit ca191571d0
2 changed files with 40 additions and 42 deletions

View File

@ -48,7 +48,8 @@ void sns_rom_spc7110_device::spc7110_start()
{ {
m_decomp = auto_alloc(machine(), SPC7110_Decomp(machine())); m_decomp = auto_alloc(machine(), SPC7110_Decomp(machine()));
memset(m_ram, 0, sizeof(m_ram)); // The SPC7110 works in conjunction with 0x2000 of RAM, which is battery backed up (and hence emulated by our m_nvram)
m_r4801 = 0x00; m_r4801 = 0x00;
m_r4802 = 0x00; m_r4802 = 0x00;
m_r4803 = 0x00; m_r4803 = 0x00;
@ -105,7 +106,6 @@ void sns_rom_spc7110_device::spc7110_start()
m_r4841 = 0x00; m_r4841 = 0x00;
m_r4842 = 0x00; m_r4842 = 0x00;
save_item(NAME(m_ram));
save_item(NAME(m_r4801)); save_item(NAME(m_r4801));
save_item(NAME(m_r4802)); save_item(NAME(m_r4802));
save_item(NAME(m_r4803)); save_item(NAME(m_r4803));
@ -319,49 +319,49 @@ SPC7110_Decomp::SPC7110_Decomp(running_machine &machine)
#undef map #undef map
} }
state_save_register_item(machine, "SNES_SPC7110", 0, 0, m_decomp_mode); state_save_register_item(machine, "SNES_SPC7110", NULL, 0, m_decomp_mode);
state_save_register_item(machine, "SNES_SPC7110", 0, 0, m_decomp_offset); state_save_register_item(machine, "SNES_SPC7110", NULL, 0, m_decomp_offset);
state_save_register_item_pointer(machine, "SNES_SPC7110", 0, 0, m_decomp_buffer, SPC7110_DECOMP_BUFFER_SIZE); state_save_register_item_pointer(machine, "SNES_SPC7110", NULL, 0, m_decomp_buffer, SPC7110_DECOMP_BUFFER_SIZE);
state_save_register_item(machine, "SNES_SPC7110", 0, 0, m_decomp_buffer_rdoffset); state_save_register_item(machine, "SNES_SPC7110", NULL, 0, m_decomp_buffer_rdoffset);
state_save_register_item(machine, "SNES_SPC7110", 0, 0, m_decomp_buffer_wroffset); state_save_register_item(machine, "SNES_SPC7110", NULL, 0, m_decomp_buffer_wroffset);
state_save_register_item(machine, "SNES_SPC7110", 0, 0, m_decomp_buffer_length); state_save_register_item(machine, "SNES_SPC7110", NULL, 0, m_decomp_buffer_length);
for (int i = 0; i < 32; i++) for (int i = 0; i < 32; i++)
{ {
state_save_register_item(machine, "SNES_SPC7110", 0, i, m_context[i].index); state_save_register_item(machine, "SNES_SPC7110", NULL, i, m_context[i].index);
state_save_register_item(machine, "SNES_SPC7110", 0, i, m_context[i].invert); state_save_register_item(machine, "SNES_SPC7110", NULL, i, m_context[i].invert);
} }
state_save_register_item(machine, "SNES_SPC7110", 0, 0, m_m0_val); state_save_register_item(machine, "SNES_SPC7110", NULL, 0, m_m0_val);
state_save_register_item(machine, "SNES_SPC7110", 0, 0, m_m0_in); state_save_register_item(machine, "SNES_SPC7110", NULL, 0, m_m0_in);
state_save_register_item(machine, "SNES_SPC7110", 0, 0, m_m0_span); state_save_register_item(machine, "SNES_SPC7110", NULL, 0, m_m0_span);
state_save_register_item(machine, "SNES_SPC7110", 0, 0, m_m0_out); state_save_register_item(machine, "SNES_SPC7110", NULL, 0, m_m0_out);
state_save_register_item(machine, "SNES_SPC7110", 0, 0, m_m0_inverts); state_save_register_item(machine, "SNES_SPC7110", NULL, 0, m_m0_inverts);
state_save_register_item(machine, "SNES_SPC7110", 0, 0, m_m0_lps); state_save_register_item(machine, "SNES_SPC7110", NULL, 0, m_m0_lps);
state_save_register_item(machine, "SNES_SPC7110", 0, 0, m_m0_in_count); state_save_register_item(machine, "SNES_SPC7110", NULL, 0, m_m0_in_count);
state_save_register_item(machine, "SNES_SPC7110", 0, 0, m_m1_pixelorder); state_save_register_item(machine, "SNES_SPC7110", NULL, 0, m_m1_pixelorder);
state_save_register_item(machine, "SNES_SPC7110", 0, 0, m_m1_realorder); state_save_register_item(machine, "SNES_SPC7110", NULL, 0, m_m1_realorder);
state_save_register_item(machine, "SNES_SPC7110", 0, 0, m_m1_val); state_save_register_item(machine, "SNES_SPC7110", NULL, 0, m_m1_val);
state_save_register_item(machine, "SNES_SPC7110", 0, 0, m_m1_in); state_save_register_item(machine, "SNES_SPC7110", NULL, 0, m_m1_in);
state_save_register_item(machine, "SNES_SPC7110", 0, 0, m_m1_span); state_save_register_item(machine, "SNES_SPC7110", NULL, 0, m_m1_span);
state_save_register_item(machine, "SNES_SPC7110", 0, 0, m_m1_out); state_save_register_item(machine, "SNES_SPC7110", NULL, 0, m_m1_out);
state_save_register_item(machine, "SNES_SPC7110", 0, 0, m_m1_inverts); state_save_register_item(machine, "SNES_SPC7110", NULL, 0, m_m1_inverts);
state_save_register_item(machine, "SNES_SPC7110", 0, 0, m_m1_lps); state_save_register_item(machine, "SNES_SPC7110", NULL, 0, m_m1_lps);
state_save_register_item(machine, "SNES_SPC7110", 0, 0, m_m1_in_count); state_save_register_item(machine, "SNES_SPC7110", NULL, 0, m_m1_in_count);
state_save_register_item(machine, "SNES_SPC7110", 0, 0, m_m2_pixelorder); state_save_register_item(machine, "SNES_SPC7110", NULL, 0, m_m2_pixelorder);
state_save_register_item(machine, "SNES_SPC7110", 0, 0, m_m2_realorder); state_save_register_item(machine, "SNES_SPC7110", NULL, 0, m_m2_realorder);
state_save_register_item(machine, "SNES_SPC7110", 0, 0, m_m2_bitplanebuffer); state_save_register_item(machine, "SNES_SPC7110", NULL, 0, m_m2_bitplanebuffer);
state_save_register_item(machine, "SNES_SPC7110", 0, 0, m_m2_buffer_index); state_save_register_item(machine, "SNES_SPC7110", NULL, 0, m_m2_buffer_index);
state_save_register_item(machine, "SNES_SPC7110", 0, 0, m_m2_val); state_save_register_item(machine, "SNES_SPC7110", NULL, 0, m_m2_val);
state_save_register_item(machine, "SNES_SPC7110", 0, 0, m_m2_in); state_save_register_item(machine, "SNES_SPC7110", NULL, 0, m_m2_in);
state_save_register_item(machine, "SNES_SPC7110", 0, 0, m_m2_span); state_save_register_item(machine, "SNES_SPC7110", NULL, 0, m_m2_span);
state_save_register_item(machine, "SNES_SPC7110", 0, 0, m_m2_out0); state_save_register_item(machine, "SNES_SPC7110", NULL, 0, m_m2_out0);
state_save_register_item(machine, "SNES_SPC7110", 0, 0, m_m2_out1); state_save_register_item(machine, "SNES_SPC7110", NULL, 0, m_m2_out1);
state_save_register_item(machine, "SNES_SPC7110", 0, 0, m_m2_inverts); state_save_register_item(machine, "SNES_SPC7110", NULL, 0, m_m2_inverts);
state_save_register_item(machine, "SNES_SPC7110", 0, 0, m_m2_lps); state_save_register_item(machine, "SNES_SPC7110", NULL, 0, m_m2_lps);
state_save_register_item(machine, "SNES_SPC7110", 0, 0, m_m2_in_count); state_save_register_item(machine, "SNES_SPC7110", NULL, 0, m_m2_in_count);
} }
void SPC7110_Decomp::reset() void SPC7110_Decomp::reset()
@ -1672,10 +1672,10 @@ READ8_MEMBER(sns_rom_spc7110_device::read_h)
READ8_MEMBER( sns_rom_spc7110_device::read_ram ) READ8_MEMBER( sns_rom_spc7110_device::read_ram )
{ {
return m_ram[offset & 0x1fff]; return m_nvram[offset & 0x1fff];
} }
WRITE8_MEMBER( sns_rom_spc7110_device::write_ram ) WRITE8_MEMBER( sns_rom_spc7110_device::write_ram )
{ {
m_ram[offset & 0x1fff] = data; m_nvram[offset & 0x1fff] = data;
} }

View File

@ -194,8 +194,6 @@ public:
//this is now allocated in the main snes cart class, to allow saving to nvram //this is now allocated in the main snes cart class, to allow saving to nvram
//UINT8 m_rtc_ram[16]; // 0-12 secs, min, hrs, etc.; 13-14-15 control registers //UINT8 m_rtc_ram[16]; // 0-12 secs, min, hrs, etc.; 13-14-15 control registers
UINT8 m_ram[0x2000];
}; };
// ======================> sns_rom_spc7110_device // ======================> sns_rom_spc7110_device