diff --git a/src/mame/drivers/seicross.c b/src/mame/drivers/seicross.c index ec2f7d5d43e..e675a6eeccb 100644 --- a/src/mame/drivers/seicross.c +++ b/src/mame/drivers/seicross.c @@ -48,32 +48,18 @@ This info came from http://www.ne.jp/asahi/cc-sakura/akkun/old/fryski.html #include "sound/ay8910.h" #include "sound/dac.h" #include "includes/seicross.h" -#include "mcfglgcy.h" -static NVRAM_HANDLER( seicross ) + +void seicross_state::nvram_init(nvram_device &nvram, void *data, size_t size) { - seicross_state *state = machine.driver_data(); - UINT8 *nvram = state->m_nvram; - size_t nvram_size = state->m_nvram.bytes(); - - if (read_or_write) - file->write(nvram,nvram_size); - else - { - if (file) - file->read(nvram,nvram_size); - else - { - /* fill in the default values */ - memset(nvram,0,nvram_size); - nvram[0x0d] = nvram[0x0f] = nvram[0x11] = nvram[0x13] = nvram[0x15] = nvram[0x19] = 1; - nvram[0x17] = 3; - } - } + static const UINT8 init[32] = { + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, + 0, 1, 0, 1, 0, 1, 0, 3, 0, 1, 0, 0, 0, 0, 0, 0, }; + + memset(data, 0x00, size); + memcpy(data, init, sizeof(init)); } - - void seicross_state::machine_reset() { /* start with the protection mcu halted */ @@ -395,7 +381,7 @@ INTERRUPT_GEN_MEMBER(seicross_state::vblank_irq) } -static MACHINE_CONFIG_START( nvram, seicross_state ) +static MACHINE_CONFIG_START( no_nvram, seicross_state ) /* basic machine hardware */ MCFG_CPU_ADD("maincpu", Z80, 3072000) /* 3.072 MHz? */ @@ -404,11 +390,10 @@ static MACHINE_CONFIG_START( nvram, seicross_state ) MCFG_CPU_VBLANK_INT_DRIVER("screen", seicross_state, vblank_irq) MCFG_CPU_ADD("mcu", NSC8105, 3072000) /* ??? */ - MCFG_CPU_PROGRAM_MAP(mcu_nvram_map) + MCFG_CPU_PROGRAM_MAP(mcu_no_nvram_map) MCFG_QUANTUM_TIME(attotime::from_hz(1200)) /* 20 CPU slices per frame - an high value to ensure proper */ /* synchronization of the CPUs */ - MCFG_NVRAM_HANDLER(seicross) /* video hardware */ MCFG_SCREEN_ADD("screen", RASTER) @@ -435,13 +420,13 @@ static MACHINE_CONFIG_START( nvram, seicross_state ) MACHINE_CONFIG_END -static MACHINE_CONFIG_DERIVED( no_nvram, nvram ) +static MACHINE_CONFIG_DERIVED( nvram, no_nvram ) /* basic machine hardware */ MCFG_CPU_MODIFY("mcu") - MCFG_CPU_PROGRAM_MAP(mcu_no_nvram_map) + MCFG_CPU_PROGRAM_MAP(mcu_nvram_map) - MCFG_NVRAM_HANDLER(0) + MCFG_NVRAM_ADD_CUSTOM_DRIVER("nvram", seicross_state, nvram_init) MACHINE_CONFIG_END diff --git a/src/mame/includes/seicross.h b/src/mame/includes/seicross.h index 97415048056..093b3c9e4d5 100644 --- a/src/mame/includes/seicross.h +++ b/src/mame/includes/seicross.h @@ -1,3 +1,5 @@ +#include "machine/nvram.h" + class seicross_state : public driver_device { public: @@ -8,9 +10,9 @@ public: m_row_scroll(*this, "row_scroll"), m_spriteram2(*this, "spriteram2"), m_colorram(*this, "colorram"), - m_nvram(*this, "nvram"), m_maincpu(*this, "maincpu"), m_mcu(*this, "mcu"), + m_nvram(*this, "nvram"), m_gfxdecode(*this, "gfxdecode"), m_palette(*this, "palette") { } @@ -19,10 +21,10 @@ public: required_shared_ptr m_row_scroll; required_shared_ptr m_spriteram2; required_shared_ptr m_colorram; - optional_shared_ptr m_nvram; UINT8 m_portb; tilemap_t *m_bg_tilemap; + void nvram_init(nvram_device &nvram, void *data, size_t size); UINT8 m_irq_mask; DECLARE_WRITE8_MEMBER(seicross_videoram_w); @@ -38,6 +40,7 @@ public: void draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect ); required_device m_maincpu; required_device m_mcu; + optional_device m_nvram; required_device m_gfxdecode; required_device m_palette; }; diff --git a/src/mess/drivers/micronic.c b/src/mess/drivers/micronic.c index c83ee8c5890..fa5799d0b16 100644 --- a/src/mess/drivers/micronic.c +++ b/src/mess/drivers/micronic.c @@ -116,7 +116,6 @@ #include "emu.h" #include "includes/micronic.h" #include "rendlay.h" -#include "mcfglgcy.h" READ8_MEMBER( micronic_state::keypad_r ) { @@ -300,30 +299,13 @@ static INPUT_PORTS_START( micronic ) PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("END") PORT_CODE(KEYCODE_END) INPUT_PORTS_END -static NVRAM_HANDLER( micronic ) -{ - micronic_state *state = machine.driver_data(); - if (read_or_write) - { - file->write(state->m_ram_base, 0x8000); - file->write(state->m_ram->pointer(), state->m_ram->size()); - } - else - { - if (file) - { - file->read(state->m_ram_base, 0x8000); - file->read(state->m_ram->pointer(), state->m_ram->size()); - state->m_status_flag = 0x01; - } - else - { - state->m_status_flag = 0x00; - } - } +void micronic_state::nvram_init(nvram_device &nvram, void *data, size_t size) +{ + m_status_flag = 0; } + PALETTE_INIT_MEMBER(micronic_state, micronic) { palette.set_pen_color(0, rgb_t(138, 146, 148)); @@ -336,11 +318,19 @@ void micronic_state::machine_start() m_bank1->configure_entries(0x00, 0x02, memregion(Z80_TAG)->base(), 0x10000); /* RAM banks */ - m_banks_num = (m_ram->size()>>15) + 1; + m_banks_num = (m_ram->size() >> 15) + 1; m_bank1->configure_entries(0x02, m_banks_num - 1, m_ram->pointer(), 0x8000); + m_nvram1->set_base(m_ram_base, 0x8000); + m_nvram2->set_base(m_ram->pointer(), m_ram->size()); + /* register for state saving */ -// save_item(NAME(state->)); + save_item(NAME(m_banks_num)); + save_item(NAME(m_kp_matrix)); + save_item(NAME(m_lcd_contrast)); + save_item(NAME(m_lcd_backlight)); + save_item(NAME(m_status_flag)); + // TODO: restore RAM bank at state load... } void micronic_state::machine_reset() @@ -386,7 +376,8 @@ static MACHINE_CONFIG_START( micronic, micronic_state ) MCFG_RAM_ADD(RAM_TAG) MCFG_RAM_DEFAULT_SIZE("224K") - MCFG_NVRAM_HANDLER(micronic) + MCFG_NVRAM_ADD_CUSTOM_DRIVER("nvram1", micronic_state, nvram_init) // base ram + MCFG_NVRAM_ADD_CUSTOM_DRIVER("nvram2", micronic_state, nvram_init) // additional ram banks MCFG_MC146818_ADD( MC146818_TAG, XTAL_32_768kHz ) MCFG_MC146818_IRQ_HANDLER(WRITELINE(micronic_state, mc146818_irq)) diff --git a/src/mess/drivers/nc.c b/src/mess/drivers/nc.c index 16262d084aa..16d02a7688c 100644 --- a/src/mess/drivers/nc.c +++ b/src/mess/drivers/nc.c @@ -105,7 +105,7 @@ #include "sound/beep.h" #include "machine/ram.h" #include "rendlay.h" -#include "mcfglgcy.h" + #define VERBOSE 0 #define LOG(x) do { if (VERBOSE) logerror x; } while (0) diff --git a/src/mess/includes/micronic.h b/src/mess/includes/micronic.h index 4921712a00d..f55fe9bb586 100644 --- a/src/mess/includes/micronic.h +++ b/src/mess/includes/micronic.h @@ -13,6 +13,7 @@ #include "video/hd61830.h" #include "machine/mc146818.h" #include "machine/ram.h" +#include "machine/nvram.h" #include "sound/beep.h" #include "imagedev/cassette.h" @@ -30,8 +31,11 @@ public: m_lcdc(*this, HD61830_TAG), m_beep(*this, "beeper"), m_rtc(*this, MC146818_TAG), + m_nvram1(*this, "nvram1"), + m_nvram2(*this, "nvram2"), m_ram(*this, RAM_TAG), m_ram_base(*this, "ram_base"), + m_status_flag(1), m_bank1(*this, "bank1"), m_bit0(*this, "BIT0"), m_bit1(*this, "BIT1"), @@ -41,16 +45,20 @@ public: m_bit5(*this, "BIT5"), m_backbattery(*this, "BACKBATTERY"), m_mainbattery(*this, "MAINBATTERY"), - m_cassette(*this, "cassette") { } + m_cassette(*this, "cassette") + { } required_device m_maincpu; required_device m_lcdc; required_device m_beep; required_device m_rtc; + required_device m_nvram1; + required_device m_nvram2; required_device m_ram; virtual void machine_start(); virtual void machine_reset(); + void nvram_init(nvram_device &nvram, void *data, size_t size); DECLARE_READ8_MEMBER( keypad_r ); DECLARE_READ8_MEMBER( status_flag_r ); @@ -70,7 +78,7 @@ public: UINT8 m_banks_num; UINT8 m_kp_matrix; UINT8 m_lcd_contrast; - bool m_lcd_backlight; + int m_lcd_backlight; UINT8 m_status_flag; DECLARE_PALETTE_INIT(micronic);