(MESS) modernized friskyt and micronic nvram. nw.

This commit is contained in:
Fabio Priuli 2014-04-04 06:03:16 +00:00
parent 85371e8009
commit 8df4134302
5 changed files with 45 additions and 58 deletions

View File

@ -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/ay8910.h"
#include "sound/dac.h" #include "sound/dac.h"
#include "includes/seicross.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<seicross_state>(); static const UINT8 init[32] = {
UINT8 *nvram = state->m_nvram; 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1,
size_t nvram_size = state->m_nvram.bytes(); 0, 1, 0, 1, 0, 1, 0, 3, 0, 1, 0, 0, 0, 0, 0, 0, };
if (read_or_write) memset(data, 0x00, size);
file->write(nvram,nvram_size); memcpy(data, init, sizeof(init));
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;
}
}
} }
void seicross_state::machine_reset() void seicross_state::machine_reset()
{ {
/* start with the protection mcu halted */ /* 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 */ /* basic machine hardware */
MCFG_CPU_ADD("maincpu", Z80, 3072000) /* 3.072 MHz? */ 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_VBLANK_INT_DRIVER("screen", seicross_state, vblank_irq)
MCFG_CPU_ADD("mcu", NSC8105, 3072000) /* ??? */ 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 */ MCFG_QUANTUM_TIME(attotime::from_hz(1200)) /* 20 CPU slices per frame - an high value to ensure proper */
/* synchronization of the CPUs */ /* synchronization of the CPUs */
MCFG_NVRAM_HANDLER(seicross)
/* video hardware */ /* video hardware */
MCFG_SCREEN_ADD("screen", RASTER) MCFG_SCREEN_ADD("screen", RASTER)
@ -435,13 +420,13 @@ static MACHINE_CONFIG_START( nvram, seicross_state )
MACHINE_CONFIG_END MACHINE_CONFIG_END
static MACHINE_CONFIG_DERIVED( no_nvram, nvram ) static MACHINE_CONFIG_DERIVED( nvram, no_nvram )
/* basic machine hardware */ /* basic machine hardware */
MCFG_CPU_MODIFY("mcu") 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 MACHINE_CONFIG_END

View File

@ -1,3 +1,5 @@
#include "machine/nvram.h"
class seicross_state : public driver_device class seicross_state : public driver_device
{ {
public: public:
@ -8,9 +10,9 @@ public:
m_row_scroll(*this, "row_scroll"), m_row_scroll(*this, "row_scroll"),
m_spriteram2(*this, "spriteram2"), m_spriteram2(*this, "spriteram2"),
m_colorram(*this, "colorram"), m_colorram(*this, "colorram"),
m_nvram(*this, "nvram"),
m_maincpu(*this, "maincpu"), m_maincpu(*this, "maincpu"),
m_mcu(*this, "mcu"), m_mcu(*this, "mcu"),
m_nvram(*this, "nvram"),
m_gfxdecode(*this, "gfxdecode"), m_gfxdecode(*this, "gfxdecode"),
m_palette(*this, "palette") { } m_palette(*this, "palette") { }
@ -19,10 +21,10 @@ public:
required_shared_ptr<UINT8> m_row_scroll; required_shared_ptr<UINT8> m_row_scroll;
required_shared_ptr<UINT8> m_spriteram2; required_shared_ptr<UINT8> m_spriteram2;
required_shared_ptr<UINT8> m_colorram; required_shared_ptr<UINT8> m_colorram;
optional_shared_ptr<UINT8> m_nvram;
UINT8 m_portb; UINT8 m_portb;
tilemap_t *m_bg_tilemap; tilemap_t *m_bg_tilemap;
void nvram_init(nvram_device &nvram, void *data, size_t size);
UINT8 m_irq_mask; UINT8 m_irq_mask;
DECLARE_WRITE8_MEMBER(seicross_videoram_w); DECLARE_WRITE8_MEMBER(seicross_videoram_w);
@ -38,6 +40,7 @@ public:
void draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect ); void draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect );
required_device<cpu_device> m_maincpu; required_device<cpu_device> m_maincpu;
required_device<cpu_device> m_mcu; required_device<cpu_device> m_mcu;
optional_device<nvram_device> m_nvram;
required_device<gfxdecode_device> m_gfxdecode; required_device<gfxdecode_device> m_gfxdecode;
required_device<palette_device> m_palette; required_device<palette_device> m_palette;
}; };

View File

@ -116,7 +116,6 @@
#include "emu.h" #include "emu.h"
#include "includes/micronic.h" #include "includes/micronic.h"
#include "rendlay.h" #include "rendlay.h"
#include "mcfglgcy.h"
READ8_MEMBER( micronic_state::keypad_r ) 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) PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("END") PORT_CODE(KEYCODE_END)
INPUT_PORTS_END INPUT_PORTS_END
static NVRAM_HANDLER( micronic )
{
micronic_state *state = machine.driver_data<micronic_state>();
if (read_or_write) void micronic_state::nvram_init(nvram_device &nvram, void *data, size_t size)
{ {
file->write(state->m_ram_base, 0x8000); m_status_flag = 0;
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;
}
}
} }
PALETTE_INIT_MEMBER(micronic_state, micronic) PALETTE_INIT_MEMBER(micronic_state, micronic)
{ {
palette.set_pen_color(0, rgb_t(138, 146, 148)); 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); m_bank1->configure_entries(0x00, 0x02, memregion(Z80_TAG)->base(), 0x10000);
/* RAM banks */ /* 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_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 */ /* 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() void micronic_state::machine_reset()
@ -386,7 +376,8 @@ static MACHINE_CONFIG_START( micronic, micronic_state )
MCFG_RAM_ADD(RAM_TAG) MCFG_RAM_ADD(RAM_TAG)
MCFG_RAM_DEFAULT_SIZE("224K") 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_ADD( MC146818_TAG, XTAL_32_768kHz )
MCFG_MC146818_IRQ_HANDLER(WRITELINE(micronic_state, mc146818_irq)) MCFG_MC146818_IRQ_HANDLER(WRITELINE(micronic_state, mc146818_irq))

View File

@ -105,7 +105,7 @@
#include "sound/beep.h" #include "sound/beep.h"
#include "machine/ram.h" #include "machine/ram.h"
#include "rendlay.h" #include "rendlay.h"
#include "mcfglgcy.h"
#define VERBOSE 0 #define VERBOSE 0
#define LOG(x) do { if (VERBOSE) logerror x; } while (0) #define LOG(x) do { if (VERBOSE) logerror x; } while (0)

View File

@ -13,6 +13,7 @@
#include "video/hd61830.h" #include "video/hd61830.h"
#include "machine/mc146818.h" #include "machine/mc146818.h"
#include "machine/ram.h" #include "machine/ram.h"
#include "machine/nvram.h"
#include "sound/beep.h" #include "sound/beep.h"
#include "imagedev/cassette.h" #include "imagedev/cassette.h"
@ -30,8 +31,11 @@ public:
m_lcdc(*this, HD61830_TAG), m_lcdc(*this, HD61830_TAG),
m_beep(*this, "beeper"), m_beep(*this, "beeper"),
m_rtc(*this, MC146818_TAG), m_rtc(*this, MC146818_TAG),
m_nvram1(*this, "nvram1"),
m_nvram2(*this, "nvram2"),
m_ram(*this, RAM_TAG), m_ram(*this, RAM_TAG),
m_ram_base(*this, "ram_base"), m_ram_base(*this, "ram_base"),
m_status_flag(1),
m_bank1(*this, "bank1"), m_bank1(*this, "bank1"),
m_bit0(*this, "BIT0"), m_bit0(*this, "BIT0"),
m_bit1(*this, "BIT1"), m_bit1(*this, "BIT1"),
@ -41,16 +45,20 @@ public:
m_bit5(*this, "BIT5"), m_bit5(*this, "BIT5"),
m_backbattery(*this, "BACKBATTERY"), m_backbattery(*this, "BACKBATTERY"),
m_mainbattery(*this, "MAINBATTERY"), m_mainbattery(*this, "MAINBATTERY"),
m_cassette(*this, "cassette") { } m_cassette(*this, "cassette")
{ }
required_device<cpu_device> m_maincpu; required_device<cpu_device> m_maincpu;
required_device<hd61830_device> m_lcdc; required_device<hd61830_device> m_lcdc;
required_device<beep_device> m_beep; required_device<beep_device> m_beep;
required_device<mc146818_device> m_rtc; required_device<mc146818_device> m_rtc;
required_device<nvram_device> m_nvram1;
required_device<nvram_device> m_nvram2;
required_device<ram_device> m_ram; required_device<ram_device> m_ram;
virtual void machine_start(); virtual void machine_start();
virtual void machine_reset(); virtual void machine_reset();
void nvram_init(nvram_device &nvram, void *data, size_t size);
DECLARE_READ8_MEMBER( keypad_r ); DECLARE_READ8_MEMBER( keypad_r );
DECLARE_READ8_MEMBER( status_flag_r ); DECLARE_READ8_MEMBER( status_flag_r );
@ -70,7 +78,7 @@ public:
UINT8 m_banks_num; UINT8 m_banks_num;
UINT8 m_kp_matrix; UINT8 m_kp_matrix;
UINT8 m_lcd_contrast; UINT8 m_lcd_contrast;
bool m_lcd_backlight; int m_lcd_backlight;
UINT8 m_status_flag; UINT8 m_status_flag;
DECLARE_PALETTE_INIT(micronic); DECLARE_PALETTE_INIT(micronic);