diff options
author | 2014-04-04 06:53:33 +0000 | |
---|---|---|
committer | 2014-04-04 06:53:33 +0000 | |
commit | eb6d490c99f19e30d352ae57216ace89bc420d39 (patch) | |
tree | 4a331dd072d77d76d23d362f8a1af186e7064ed4 | |
parent | 1f5e7ab5e83e4e11979ce4970c6318cbf46c007d (diff) |
(MESS) modernized psion.c nvram. nw.
-rw-r--r-- | src/mess/drivers/psion.c | 44 | ||||
-rw-r--r-- | src/mess/includes/psion.h | 9 |
2 files changed, 25 insertions, 28 deletions
diff --git a/src/mess/drivers/psion.c b/src/mess/drivers/psion.c index 1b5d6aa0fa6..837935d8254 100644 --- a/src/mess/drivers/psion.c +++ b/src/mess/drivers/psion.c @@ -23,7 +23,6 @@ #include "emu.h" #include "includes/psion.h" #include "rendlay.h" -#include "mcfglgcy.h" TIMER_DEVICE_CALLBACK_MEMBER(psion_state::nmi_timer) { @@ -332,35 +331,14 @@ INPUT_PORTS_START( psion ) PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_NAME("D [)]") PORT_CODE(KEYCODE_D) INPUT_PORTS_END -static NVRAM_HANDLER( psion ) -{ - psion_state *state = machine.driver_data<psion_state>(); - - if (read_or_write) - { - file->write(state->m_sys_register, 0xc0); - file->write(state->m_ram, state->m_ram.bytes()); - if (state->m_ram_bank_count) - file->write(state->m_paged_ram, state->m_ram_bank_count * 0x4000); - } - else - { - if (file) - { - file->read(state->m_sys_register, 0xc0); - file->read(state->m_ram, state->m_ram.bytes()); - if (state->m_ram_bank_count) - file->read(state->m_paged_ram, state->m_ram_bank_count * 0x4000); - //warm start - state->m_stby_pwr = 1; - } - else - //cold start - state->m_stby_pwr = 0; - } +void psion_state::nvram_init(nvram_device &nvram, void *data, size_t size) +{ + //cold start (by default is 1=warm start) + m_stby_pwr = 0; } + void psion_state::machine_start() { if (!strcmp(machine().system().name, "psionlam")) @@ -406,6 +384,11 @@ void psion_state::machine_start() membank("rambank")->set_entry(0); } + m_nvram1->set_base(m_sys_register, 0xc0); + m_nvram2->set_base(m_ram, m_ram.bytes()); + if (m_nvram3) + m_nvram3->set_base(m_paged_ram, m_ram_bank_count * 0x4000); + save_item(NAME(m_kb_counter)); save_item(NAME(m_enable_nmi)); save_item(NAME(m_tcsr_value)); @@ -498,7 +481,8 @@ static MACHINE_CONFIG_START( psion_2lines, psion_state ) MCFG_SOUND_ADD( "beeper", BEEP, 0 ) MCFG_SOUND_ROUTE( ALL_OUTPUTS, "mono", 1.00 ) - MCFG_NVRAM_HANDLER(psion) + MCFG_NVRAM_ADD_CUSTOM_DRIVER("nvram1", psion_state, nvram_init) // sys_regs + MCFG_NVRAM_ADD_CUSTOM_DRIVER("nvram2", psion_state, nvram_init) // RAM MCFG_TIMER_DRIVER_ADD_PERIODIC("nmi_timer", psion_state, nmi_timer, attotime::from_seconds(1)) @@ -544,12 +528,16 @@ static MACHINE_CONFIG_DERIVED( psionp350, psion_2lines ) MCFG_CPU_MODIFY("maincpu") MCFG_CPU_PROGRAM_MAP(psionp350_mem) + + MCFG_NVRAM_ADD_CUSTOM_DRIVER("nvram3", psion_state, nvram_init) // paged RAM MACHINE_CONFIG_END static MACHINE_CONFIG_DERIVED( psionlz, psion_4lines ) MCFG_CPU_MODIFY("maincpu") MCFG_CPU_PROGRAM_MAP(psionlz_mem) + + MCFG_NVRAM_ADD_CUSTOM_DRIVER("nvram3", psion_state, nvram_init) // paged RAM MACHINE_CONFIG_END /* ROM definition */ diff --git a/src/mess/includes/psion.h b/src/mess/includes/psion.h index 5caa47348d9..e9dc3d6850d 100644 --- a/src/mess/includes/psion.h +++ b/src/mess/includes/psion.h @@ -12,6 +12,7 @@ #define _PSION_H_ #include "cpu/m6800/m6800.h" +#include "machine/nvram.h" #include "machine/psion_pack.h" #include "video/hd44780.h" #include "sound/beep.h" @@ -29,7 +30,11 @@ public: m_beep(*this, "beeper"), m_pack1(*this, "pack1"), m_pack2(*this, "pack2"), + m_nvram1(*this, "nvram1"), + m_nvram2(*this, "nvram2"), + m_nvram3(*this, "nvram3"), m_sys_register(*this, "sys_register"), + m_stby_pwr(1), m_ram(*this, "ram"){ } required_device<hd63701_cpu_device> m_maincpu; @@ -37,6 +42,9 @@ public: required_device<beep_device> m_beep; required_device<datapack_device> m_pack1; required_device<datapack_device> m_pack2; + required_device<nvram_device> m_nvram1; + required_device<nvram_device> m_nvram2; + optional_device<nvram_device> m_nvram3; UINT16 m_kb_counter; UINT8 m_enable_nmi; @@ -60,6 +68,7 @@ public: virtual void machine_start(); virtual void machine_reset(); + void nvram_init(nvram_device &nvram, void *data, size_t size); UINT8 kb_read(); void update_banks(); |