From 8b7bbc3698d3b056b53dd337455b15390a94afec Mon Sep 17 00:00:00 2001 From: Fabio Priuli Date: Fri, 4 Apr 2014 06:34:23 +0000 Subject: [PATCH] (MESS) modernized x07 nvram. nw. --- src/mess/drivers/x07.c | 61 ++++++++++++++++++----------------------- src/mess/includes/x07.h | 11 +++++++- 2 files changed, 36 insertions(+), 36 deletions(-) diff --git a/src/mess/drivers/x07.c b/src/mess/drivers/x07.c index 9b3a0d8fa43..5c5a6151411 100644 --- a/src/mess/drivers/x07.c +++ b/src/mess/drivers/x07.c @@ -28,9 +28,7 @@ ****************************************************************************/ - #include "includes/x07.h" -#include "mcfglgcy.h" /*************************************************************************** T6834 IMPLEMENTATION @@ -1324,37 +1322,10 @@ static INPUT_PORTS_START( x07 ) INPUT_PORTS_END -static NVRAM_HANDLER( x07 ) +void x07_state::nvram_init(nvram_device &nvram, void *data, size_t size) { - x07_state *state = machine.driver_data(); - - if (read_or_write) - { - file->write(state->m_t6834_ram, sizeof(state->m_t6834_ram)); - file->write(state->m_ram->pointer(), state->m_ram->size()); - } - else - { - if (file) - { - file->read(state->m_t6834_ram, sizeof(state->m_t6834_ram)); - file->read(state->m_ram->pointer(), state->m_ram->size()); - state->m_warm_start = 1; - } - else - { - memset(state->m_t6834_ram, 0, sizeof(state->m_t6834_ram)); - memset(state->m_ram->pointer(), 0, state->m_ram->size()); - - for(int i = 0; i < 12; i++) - strcpy((char*)state->m_t6834_ram + udk_offset[i], udk_ini[i]); - - //copy default chars in the UDC - memcpy(state->m_t6834_ram + 0x200, (UINT8*)machine.root_device().memregion("gfx1")->base() + 0x400, 0x100); - memcpy(state->m_t6834_ram + 0x300, (UINT8*)machine.root_device().memregion("gfx1")->base() + 0x700, 0x100); - state->m_warm_start = 0; - } - } + memcpy(data, memregion("default")->base(), size); + m_warm_start = 0; } TIMER_DEVICE_CALLBACK_MEMBER(x07_state::blink_timer) @@ -1403,6 +1374,9 @@ void x07_state::machine_start() m_cass_poll = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(x07_state::cassette_poll),this)); m_cass_tick = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(x07_state::cassette_tick),this)); + m_nvram1->set_base(&m_t6834_ram, 0x800); + m_nvram2->set_base(m_ram->pointer(), m_ram->size()); + /* Save State */ save_item(NAME(m_sleep)); save_item(NAME(m_warm_start)); @@ -1525,7 +1499,8 @@ static MACHINE_CONFIG_START( x07, x07_state ) MCFG_TIMER_DRIVER_ADD_PERIODIC("blink_timer", x07_state, blink_timer, attotime::from_msec(300)) - MCFG_NVRAM_HANDLER( x07 ) + MCFG_NVRAM_ADD_CUSTOM_DRIVER("nvram1", x07_state, nvram_init) // t6834 RAM + MCFG_NVRAM_ADD_0FILL("nvram2") // RAM banks /* internal ram */ MCFG_RAM_ADD(RAM_TAG) @@ -1561,9 +1536,25 @@ ROM_START( x07 ) ROM_REGION( 0x0800, "gfx1", 0 ) ROM_LOAD( "charset.rom", 0x0000, 0x0800, BAD_DUMP CRC(b1e59a6e) SHA1(b0c06315a2d5c940a8f288fb6a3428d738696e69) ) + + ROM_REGION( 0x0800, "default", ROMREGION_ERASE00 ) ROM_END +DRIVER_INIT_MEMBER(x07_state, x07) +{ + UINT8 *RAM = memregion("default")->base(); + UINT8 *GFX = memregion("gfx1")->base(); + + for (int i = 0; i < 12; i++) + strcpy((char *)RAM + udk_offset[i], udk_ini[i]); + + //copy default chars in the UDC + memcpy(RAM + 0x200, GFX + 0x400, 0x100); + memcpy(RAM + 0x300, GFX + 0x700, 0x100); +} + + /* Driver */ -/* YEAR NAME PARENT COMPAT MACHINE INPUT INIT COMPANY FULLNAME FLAGS */ -COMP( 1983, x07, 0, 0, x07, x07, driver_device, 0, "Canon", "X-07", GAME_SUPPORTS_SAVE) +/* YEAR NAME PARENT COMPAT MACHINE INPUT INIT COMPANY FULLNAME FLAGS */ +COMP( 1983, x07, 0, 0, x07, x07, x07_state, x07, "Canon", "X-07", GAME_SUPPORTS_SAVE) diff --git a/src/mess/includes/x07.h b/src/mess/includes/x07.h index 587b289cddb..df191b348b5 100644 --- a/src/mess/includes/x07.h +++ b/src/mess/includes/x07.h @@ -9,6 +9,7 @@ #include "emu.h" #include "cpu/z80/z80.h" #include "sound/beep.h" +#include "machine/nvram.h" #include "machine/ram.h" #include "sound/wave.h" #include "imagedev/cartslot.h" @@ -164,13 +165,18 @@ public: m_printer(*this, "printer"), m_beep(*this, "beeper"), m_ram(*this, RAM_TAG), - m_cassette(*this, "cassette") + m_nvram1(*this, "nvram1"), + m_nvram2(*this, "nvram2"), + m_cassette(*this, "cassette"), + m_warm_start(1) { } required_device m_maincpu; required_device m_printer; required_device m_beep; required_device m_ram; + required_device m_nvram1; + required_device m_nvram2; required_device m_cassette; void machine_start(); @@ -184,6 +190,9 @@ public: DECLARE_INPUT_CHANGED_MEMBER( kb_break ); DECLARE_INPUT_CHANGED_MEMBER( kb_update_udk ); + DECLARE_DRIVER_INIT(x07); + void nvram_init(nvram_device &nvram, void *data, size_t size); + void t6834_cmd(UINT8 cmd); void t6834_r(); void t6834_w();