leland.cpp: initial work towards save state support (nw)

This commit is contained in:
Ivan Vangelista 2016-12-02 20:05:22 +01:00
parent 865b76da9d
commit 5ee931216d
6 changed files with 68 additions and 17 deletions

View File

@ -60,9 +60,7 @@
#include "emu.h"
#include "includes/leland.h"
#include "cpu/i86/i186.h"
#include "cpu/z80/z80.h"
#include "machine/eepromser.h"
#include "machine/nvram.h"
#include "sound/volt_reg.h"
@ -2670,6 +2668,9 @@ DRIVER_INIT_MEMBER(leland_state,dangerz)
m_master->space(AS_IO).install_read_handler(0xf4, 0xf4, read8_delegate(FUNC(leland_state::dangerz_input_upper_r),this));
m_master->space(AS_IO).install_read_handler(0xf8, 0xf8, read8_delegate(FUNC(leland_state::dangerz_input_y_r),this));
m_master->space(AS_IO).install_read_handler(0xfc, 0xfc, read8_delegate(FUNC(leland_state::dangerz_input_x_r),this));
save_item(NAME(m_dangerz_x));
save_item(NAME(m_dangerz_y));
}
@ -2749,6 +2750,9 @@ DRIVER_INIT_MEMBER(leland_state,viper)
m_master->space(AS_IO).install_read_handler(0xa4, 0xa4, read8_delegate(FUNC(leland_state::dangerz_input_upper_r),this));
m_master->space(AS_IO).install_read_handler(0xb8, 0xb8, read8_delegate(FUNC(leland_state::dangerz_input_y_r),this));
m_master->space(AS_IO).install_read_handler(0xbc, 0xbc, read8_delegate(FUNC(leland_state::dangerz_input_x_r),this));
save_item(NAME(m_dangerz_x));
save_item(NAME(m_dangerz_y));
}

View File

@ -268,6 +268,6 @@ ROM_START( phklad )
ROM_LOAD( "klad.bin", 0x10000, 0x4000, BAD_DUMP CRC(49cc7d65) SHA1(d966cfc1d973a533df8044a71fad37f7177da554) )
ROM_END
GAME( 19??, phtetris, 0, photon, photon, driver_device, 0, ROT0, "<unknown>", "Tetris (Photon System)", MACHINE_SUPPORTS_SAVE )
GAME( 1989?, phpython, 0, photon, photon, driver_device, 0, ROT0, "<unknown>", "Python (Photon System)", MACHINE_SUPPORTS_SAVE )
GAME( 19??, phklad, 0, photon, photon, driver_device, 0, ROT0, "<unknown>", "Klad / Labyrinth (Photon System)", MACHINE_SUPPORTS_SAVE )
GAME( 19??, phtetris, 0, photon, photon, driver_device, 0, ROT0, "<unknown>", "Tetris (Photon System)", 0 )
GAME( 1989?, phpython, 0, photon, photon, driver_device, 0, ROT0, "<unknown>", "Python (Photon System)", 0 )
GAME( 19??, phklad, 0, photon, photon, driver_device, 0, ROT0, "<unknown>", "Klad / Labyrinth (Photon System)", 0 )

View File

@ -415,6 +415,6 @@ ROM_END
/* Driver */
/* YEAR NAME PARENT COMPAT MACHINE INPUT INIT COMPANY FULLNAME FLAGS */
COMP( 1987, vesta, 0, 0, pk8000, pk8000, driver_device, 0, "BP EVM", "PK8000 Vesta", MACHINE_SUPPORTS_SAVE)
COMP( 1987, hobby, vesta, 0, pk8000, pk8000, driver_device, 0, "BP EVM", "PK8000 Sura/Hobby", MACHINE_SUPPORTS_SAVE)
COMP( 1987, pk8002, vesta, 0, pk8000, pk8000, driver_device, 0, "<unknown>", "PK8002 Elf", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE)
COMP( 1987, vesta, 0, 0, pk8000, pk8000, driver_device, 0, "BP EVM", "PK8000 Vesta", 0 )
COMP( 1987, hobby, vesta, 0, pk8000, pk8000, driver_device, 0, "BP EVM", "PK8000 Sura/Hobby", 0 )
COMP( 1987, pk8002, vesta, 0, pk8000, pk8000, driver_device, 0, "<unknown>", "PK8002 Elf", MACHINE_NOT_WORKING )

View File

@ -65,7 +65,6 @@ public:
uint8_t *m_xrom_base;
uint32_t m_master_length;
uint32_t m_slave_length;
uint32_t m_xrom_length;
int m_dangerz_x;
int m_dangerz_y;
uint8_t m_analog_result;
@ -93,6 +92,7 @@ public:
uint8_t m_gfxbank;
uint16_t m_last_scanline;
emu_timer *m_scanline_timer;
DECLARE_READ8_MEMBER(cerberus_dial_1_r);
DECLARE_READ8_MEMBER(cerberus_dial_2_r);
DECLARE_WRITE8_MEMBER(alleymas_joystick_kludge);
@ -138,6 +138,12 @@ public:
DECLARE_WRITE8_MEMBER(ataxx_svram_port_w);
DECLARE_READ8_MEMBER(ataxx_mvram_port_r);
DECLARE_READ8_MEMBER(ataxx_svram_port_r);
DECLARE_READ8_MEMBER(ataxx_eeprom_r);
DECLARE_WRITE8_MEMBER(ataxx_eeprom_w);
DECLARE_READ8_MEMBER(leland_sound_port_r);
DECLARE_WRITE8_MEMBER(leland_sound_port_w);
DECLARE_WRITE8_MEMBER(leland_gfx_port_w);
DECLARE_DRIVER_INIT(dblplay);
DECLARE_DRIVER_INIT(viper);
DECLARE_DRIVER_INIT(quarterb);
@ -171,6 +177,7 @@ public:
DECLARE_VIDEO_START(leland);
DECLARE_VIDEO_START(leland2);
DECLARE_VIDEO_START(ataxx);
uint32_t screen_update_leland(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
uint32_t screen_update_ataxx(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
INTERRUPT_GEN_MEMBER(leland_master_interrupt);
@ -178,15 +185,12 @@ public:
TIMER_CALLBACK_MEMBER(ataxx_interrupt_callback);
TIMER_CALLBACK_MEMBER(scanline_callback);
TIMER_CALLBACK_MEMBER(leland_delayed_mvram_w);
DECLARE_READ8_MEMBER(ataxx_eeprom_r);
DECLARE_WRITE8_MEMBER(ataxx_eeprom_w);
DECLARE_READ8_MEMBER(leland_sound_port_r);
DECLARE_WRITE8_MEMBER(leland_sound_port_w);
DECLARE_WRITE8_MEMBER(leland_gfx_port_w);
void leland_video_addr_w(address_space &space, int offset, int data, int num);
int leland_vram_port_r(address_space &space, int offset, int num);
void leland_vram_port_w(address_space &space, int offset, int data, int num);
int dial_compute_value(int new_val, int indx);
void update_dangerz_xy();
void cerberus_bankswitch();
void mayhem_bankswitch();

View File

@ -9,8 +9,6 @@
***************************************************************************/
#include "emu.h"
#include "cpu/i86/i86.h"
#include "machine/eepromser.h"
#include "cpu/z80/z80.h"
#include "includes/leland.h"
@ -322,6 +320,21 @@ MACHINE_START_MEMBER(leland_state,leland)
/* start scanline interrupts going */
m_master_int_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(leland_state::leland_interrupt_callback),this));
save_item(NAME(m_dac_control));
save_item(NAME(m_wcol_enable));
save_item(NAME(m_analog_result));
save_item(NAME(m_dial_last_input));
save_item(NAME(m_dial_last_result));
save_item(NAME(m_keycard_shift));
save_item(NAME(m_keycard_bit));
save_item(NAME(m_keycard_state));
save_item(NAME(m_keycard_clock));
save_item(NAME(m_keycard_command));
save_item(NAME(m_top_board_bank));
save_item(NAME(m_sound_port_bank));
save_item(NAME(m_alternate_bank));
save_item(NAME(m_battery_ram_enable));
}
@ -372,6 +385,15 @@ MACHINE_START_MEMBER(leland_state,ataxx)
/* start scanline interrupts going */
m_master_int_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(leland_state::ataxx_interrupt_callback),this));
save_item(NAME(m_wcol_enable));
save_item(NAME(m_dial_last_input));
save_item(NAME(m_dial_last_result));
save_item(NAME(m_master_bank));
save_item(NAME(m_xrom1_addr));
save_item(NAME(m_xrom2_addr));
save_item(NAME(m_battery_ram_enable));
save_pointer(NAME(m_extra_tram.get()), ATAXX_EXTRA_TRAM_SIZE);
}
@ -381,7 +403,6 @@ MACHINE_RESET_MEMBER(leland_state,ataxx)
m_master_int_timer->adjust(m_screen->time_until_pos(8), 8);
/* initialize the XROM */
m_xrom_length = memregion("user1")->bytes();
m_xrom_base = memregion("user1")->base();
m_xrom1_addr = 0;
m_xrom2_addr = 0;

View File

@ -63,6 +63,18 @@ VIDEO_START_MEMBER(leland_state,leland)
/* scanline timer */
m_scanline_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(leland_state::scanline_callback),this));
m_scanline_timer->adjust(m_screen->time_until_pos(0));
save_item(NAME(m_gfx_control));
save_pointer(NAME(m_video_ram.get()), VRAM_SIZE);
save_item(NAME(m_xscroll));
save_item(NAME(m_yscroll));
save_item(NAME(m_gfxbank));
save_item(NAME(m_last_scanline));
for (uint8_t i = 0; i < 2; i++)
{
save_item(NAME(m_vram_state[i].m_addr), i);
save_item(NAME(m_vram_state[i].m_latch), i);
}
}
VIDEO_START_MEMBER(leland_state,ataxx)
@ -72,6 +84,16 @@ VIDEO_START_MEMBER(leland_state,ataxx)
/* allocate memory */
m_ataxx_qram = make_unique_clear<uint8_t[]>(QRAM_SIZE);
save_pointer(NAME(m_video_ram.get()), VRAM_SIZE);
save_pointer(NAME(m_ataxx_qram.get()), QRAM_SIZE);
save_item(NAME(m_xscroll));
save_item(NAME(m_yscroll));
for (uint8_t i = 0; i < 2; i++)
{
save_item(NAME(m_vram_state[i].m_addr), i);
save_item(NAME(m_vram_state[i].m_latch), i);
}
}