diff --git a/hash/phc25_cass.xml b/hash/phc25_cass.xml
index ef6e049d809..478e42f9778 100644
--- a/hash/phc25_cass.xml
+++ b/hash/phc25_cass.xml
@@ -153,7 +153,7 @@ license:CC0
- Démonstration
+ Demonstration
1983
Sanyo
@@ -165,7 +165,7 @@ license:CC0
- Département
+ Departement
1983
Sanyo
@@ -333,7 +333,7 @@ license:CC0
- Raid Aérien
+ Raid Aerien
1983
Sanyo
diff --git a/src/mame/drivers/amust.cpp b/src/mame/drivers/amust.cpp
index 36a07f99ba7..f2c6a026670 100644
--- a/src/mame/drivers/amust.cpp
+++ b/src/mame/drivers/amust.cpp
@@ -98,7 +98,8 @@ public:
: driver_device(mconfig, type, tag)
, m_palette(*this, "palette")
, m_maincpu(*this, "maincpu")
- , m_p_videoram(*this, "videoram")
+ , m_rom(*this, "maincpu")
+ , m_ram(*this, "mainram")
, m_p_chargen(*this, "chargen")
, m_beep(*this, "beeper")
, m_fdc (*this, "fdc")
@@ -108,8 +109,6 @@ public:
void amust(machine_config &config);
- void init_amust();
-
private:
enum
{
@@ -137,6 +136,7 @@ private:
void io_map(address_map &map);
void mem_map(address_map &map);
void machine_reset() override;
+ void machine_start() override;
void do_int();
u8 m_port04;
@@ -149,10 +149,14 @@ private:
//bool m_intrq;
bool m_hsync;
bool m_vsync;
+ bool m_rom_in_map;
+ std::unique_ptr m_vram;
virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override;
+ memory_passthrough_handler *m_rom_shadow_tap;
required_device m_palette;
required_device m_maincpu;
- required_region_ptr m_p_videoram;
+ required_region_ptr m_rom;
+ required_shared_ptr m_ram;
required_region_ptr m_p_chargen;
required_device m_beep;
required_device m_fdc;
@@ -185,9 +189,8 @@ void amust_state::device_timer(emu_timer &timer, device_timer_id id, int param,
void amust_state::mem_map(address_map &map)
{
- map.unmap_value_high();
- map(0x0000, 0xf7ff).ram();
- map(0xf800, 0xffff).bankr("bankr0").bankw("bankw0");
+ map(0x0000, 0xffff).ram().share("mainram");
+ map(0xf800, 0xffff).lr8(NAME([this] (offs_t offset) { if(m_rom_in_map) return m_rom[offset]; else return m_ram[offset]; }));
}
void amust_state::io_map(address_map &map)
@@ -357,11 +360,11 @@ void amust_state::port0a_w(u8 data)
void amust_state::port0d_w(u8 data)
{
uint16_t video_address = m_port08 | ((m_port0a & 7) << 8);
- m_p_videoram[video_address] = data;
+ m_vram[video_address] = data;
}
/* F4 Character Displayer */
-static const gfx_layout amust_charlayout =
+static const gfx_layout charlayout =
{
8, 8, /* 8 x 8 characters */
256, /* 256 characters */
@@ -375,7 +378,7 @@ static const gfx_layout amust_charlayout =
};
static GFXDECODE_START( gfx_amust )
- GFXDECODE_ENTRY( "chargen", 0x0000, amust_charlayout, 0, 1 )
+ GFXDECODE_ENTRY( "chargen", 0x0000, charlayout, 0, 1 )
GFXDECODE_END
MC6845_UPDATE_ROW( amust_state::crtc_update_row )
@@ -389,7 +392,7 @@ MC6845_UPDATE_ROW( amust_state::crtc_update_row )
{
inv = (x == cursor_x) ? 0xff : 0;
mem = (ma + x) & 0x7ff;
- chr = m_p_videoram[mem];
+ chr = m_vram[mem];
if (ra < 8)
gfx = m_p_chargen[(chr<<3) | ra] ^ inv;
else
@@ -409,8 +412,7 @@ MC6845_UPDATE_ROW( amust_state::crtc_update_row )
void amust_state::machine_reset()
{
- membank("bankr0")->set_entry(0); // point at rom
- membank("bankw0")->set_entry(0); // always write to ram
+ m_rom_in_map = true;
m_port04 = 0;
m_port06 = 0;
m_port08 = 0;
@@ -421,16 +423,40 @@ void amust_state::machine_reset()
m_drq = false;
m_fdc->set_ready_line_connected(1); // always ready for minifloppy; controlled by fdc for 20cm
m_fdc->set_unscaled_clock(4000000); // 4MHz for minifloppy; 8MHz for 20cm
- m_maincpu->set_state_int(Z80_PC, 0xf800);
+
+ address_space &program = m_maincpu->space(AS_PROGRAM);
+ program.install_rom(0x0000, 0x07ff, m_rom); // do it here for F3
+ m_rom_shadow_tap = program.install_read_tap(0xf800, 0xffff, "rom_shadow_r",[this](offs_t offset, u8 &data, u8 mem_mask)
+ {
+ if (!machine().side_effects_disabled())
+ {
+ // delete this tap
+ m_rom_shadow_tap->remove();
+
+ // reinstall ram over the rom shadow
+ m_maincpu->space(AS_PROGRAM).install_ram(0x0000, 0x07ff, m_ram);
+ }
+
+ // return the original data
+ return data;
+ });
}
-void amust_state::init_amust()
+void amust_state::machine_start()
{
- u8 *main = memregion("maincpu")->base();
-
- membank("bankr0")->configure_entry(1, &main[0xf800]);
- membank("bankr0")->configure_entry(0, &main[0x10800]);
- membank("bankw0")->configure_entry(0, &main[0xf800]);
+ m_vram = make_unique_clear(0x800);
+ save_pointer(NAME(m_vram), 0x800);
+ save_item(NAME(m_port04));
+ save_item(NAME(m_port06));
+ save_item(NAME(m_port08));
+ save_item(NAME(m_port09));
+ save_item(NAME(m_port0a));
+ save_item(NAME(m_term_data));
+ save_item(NAME(m_drq));
+ //save_item(NAME(m_intrq));
+ save_item(NAME(m_hsync));
+ save_item(NAME(m_vsync));
+ save_item(NAME(m_rom_in_map));
}
void amust_state::amust(machine_config &config)
@@ -507,19 +533,17 @@ void amust_state::amust(machine_config &config)
/* ROM definition */
ROM_START( amust )
- ROM_REGION( 0x11000, "maincpu", ROMREGION_ERASEFF )
- ROM_LOAD( "mon_h.ic25", 0x10000, 0x1000, CRC(10dceac6) SHA1(1ef80039063f7a6455563d59f1bcc23e09eca369) )
+ ROM_REGION( 0x1000, "maincpu", 0 )
+ ROM_LOAD( "mon_h.ic25", 0x0000, 0x1000, CRC(10dceac6) SHA1(1ef80039063f7a6455563d59f1bcc23e09eca369) )
ROM_REGION( 0x800, "chargen", 0 )
ROM_LOAD( "cg4.ic74", 0x000, 0x800, CRC(52e7b9d8) SHA1(cc6d457634eb688ccef471f72bddf0424e64b045) )
ROM_REGION( 0x800, "keyboard", 0 )
ROM_LOAD( "kbd_3.rom", 0x000, 0x800, CRC(d9441b35) SHA1(ce250ab1e892a13fd75182703f259855388c6bf4) )
-
- ROM_REGION( 0x800, "videoram", ROMREGION_ERASE00 )
ROM_END
/* Driver */
// YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS
-COMP( 1983, amust, 0, 0, amust, amust, amust_state, init_amust, "Amust", "Amust Executive 816", MACHINE_NOT_WORKING )
+COMP( 1983, amust, 0, 0, amust, amust, amust_state, empty_init, "Amust", "Amust Executive 816", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE )
diff --git a/src/mame/drivers/basic52.cpp b/src/mame/drivers/basic52.cpp
index df1875dbf08..83bf1d693a7 100644
--- a/src/mame/drivers/basic52.cpp
+++ b/src/mame/drivers/basic52.cpp
@@ -54,13 +54,14 @@ public:
void basic52(machine_config &config);
void basic31(machine_config &config);
-protected:
+private:
+ void machine_start() override;
void kbd_put(u8 data);
void port1_w(u8 data);
uint8_t unk_r();
uint8_t from_term();
- void basic52_io(address_map &map);
- void basic52_mem(address_map &map);
+ void io_map(address_map &map);
+ void mem_map(address_map &map);
uint8_t m_term_data;
required_device m_maincpu;
required_device m_terminal;
@@ -68,13 +69,13 @@ protected:
};
-void basic52_state::basic52_mem(address_map &map)
+void basic52_state::mem_map(address_map &map)
{
map.unmap_value_high();
map(0x0000, 0x1fff).rom();
}
-void basic52_state::basic52_io(address_map &map)
+void basic52_state::io_map(address_map &map)
{
map.unmap_value_high();
map(0x0000, 0x7fff).ram();
@@ -113,12 +114,17 @@ void basic52_state::kbd_put(u8 data)
m_term_data = data;
}
+void basic52_state::machine_start()
+{
+ save_item(NAME(m_term_data));
+}
+
void basic52_state::basic31(machine_config &config)
{
/* basic machine hardware */
I8031(config, m_maincpu, XTAL(11'059'200));
- m_maincpu->set_addrmap(AS_PROGRAM, &basic52_state::basic52_mem);
- m_maincpu->set_addrmap(AS_IO, &basic52_state::basic52_io);
+ m_maincpu->set_addrmap(AS_PROGRAM, &basic52_state::mem_map);
+ m_maincpu->set_addrmap(AS_IO, &basic52_state::io_map);
m_maincpu->port_out_cb<1>().set(FUNC(basic52_state::port1_w));
m_maincpu->port_in_cb<3>().set(FUNC(basic52_state::unk_r));
m_maincpu->serial_tx_cb().set(m_terminal, FUNC(generic_terminal_device::write));
@@ -140,8 +146,8 @@ void basic52_state::basic52(machine_config &config)
basic31(config);
/* basic machine hardware */
I8052(config.replace(), m_maincpu, XTAL(11'059'200));
- m_maincpu->set_addrmap(AS_PROGRAM, &basic52_state::basic52_mem);
- m_maincpu->set_addrmap(AS_IO, &basic52_state::basic52_io);
+ m_maincpu->set_addrmap(AS_PROGRAM, &basic52_state::mem_map);
+ m_maincpu->set_addrmap(AS_IO, &basic52_state::io_map);
m_maincpu->port_in_cb<3>().set(FUNC(basic52_state::unk_r));
m_maincpu->serial_tx_cb().set(m_terminal, FUNC(generic_terminal_device::write));
m_maincpu->serial_rx_cb().set(FUNC(basic52_state::from_term));
@@ -149,7 +155,7 @@ void basic52_state::basic52(machine_config &config)
/* ROM definition */
ROM_START( basic52 )
- ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASEFF )
+ ROM_REGION( 0x2000, "maincpu", 0 )
ROM_SYSTEM_BIOS(0, "v11", "v 1.1")
ROMX_LOAD( "mcs-51-11.bin", 0x0000, 0x2000, CRC(4157b22b) SHA1(bd9e6869b400cc1c9b163243be7bdcf16ce72789), ROM_BIOS(0))
ROM_SYSTEM_BIOS(1, "v11b", "v 1.1b")
@@ -159,7 +165,7 @@ ROM_START( basic52 )
ROM_END
ROM_START( basic31 )
- ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASEFF )
+ ROM_REGION( 0x2000, "maincpu", 0 )
ROM_SYSTEM_BIOS(0, "v12", "v 1.2")
ROMX_LOAD( "mcs-51-12.bin", 0x0000, 0x2000, CRC(ee667c7c) SHA1(e69b32e69ecda2012c7113649634a3a64e984bed), ROM_BIOS(0))
ROM_SYSTEM_BIOS(1, "v12a", "v 1.2a")
@@ -168,5 +174,5 @@ ROM_END
/* Driver */
/* YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS */
-COMP( 1985, basic52, 0, 0, basic52, basic52, basic52_state, empty_init, "Intel", "MCS BASIC 52", MACHINE_NO_SOUND_HW)
-COMP( 1985, basic31, basic52, 0, basic31, basic52, basic52_state, empty_init, "Intel", "MCS BASIC 31", 0 )
+COMP( 1985, basic52, 0, 0, basic52, basic52, basic52_state, empty_init, "Intel", "MCS BASIC 52", MACHINE_NO_SOUND_HW | MACHINE_SUPPORTS_SAVE )
+COMP( 1985, basic31, basic52, 0, basic31, basic52, basic52_state, empty_init, "Intel", "MCS BASIC 31", MACHINE_SUPPORTS_SAVE )
diff --git a/src/mame/drivers/d6800.cpp b/src/mame/drivers/d6800.cpp
index 4324da54f12..25dd3194179 100644
--- a/src/mame/drivers/d6800.cpp
+++ b/src/mame/drivers/d6800.cpp
@@ -126,9 +126,9 @@ void d6800_state::d6800_map(address_map &map)
map(0x0000, 0x00ff).ram();
map(0x0100, 0x01ff).ram().share("videoram");
map(0x0200, 0x17ff).ram();
- //map(0x1800, 0x1fff).rom(); // for dreamsoft_1, if we can find a good copy
+ //map(0x1800, 0x1fff).rom().region("maincpu",0x800); // for dreamsoft_1, if we can find a good copy
map(0x8010, 0x8013).rw(m_pia, FUNC(pia6821_device::read), FUNC(pia6821_device::write));
- map(0xc000, 0xc7ff).mirror(0x3800).rom();
+ map(0xc000, 0xc7ff).mirror(0x3800).rom().region("maincpu",0);
}
/* Input Ports */
@@ -352,6 +352,11 @@ void d6800_state::d6800_keyboard_w(uint8_t data)
void d6800_state::machine_start()
{
+ save_item(NAME(m_rtc));
+ save_item(NAME(m_cb2));
+ save_item(NAME(m_cassold));
+ save_item(NAME(m_cass_data));
+ save_item(NAME(m_portb));
}
void d6800_state::machine_reset()
@@ -451,16 +456,16 @@ void d6800_state::d6800(machine_config &config)
/* ROMs */
ROM_START( d6800 )
- ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_REGION( 0x1000, "maincpu", ROMREGION_ERASEFF )
ROM_SYSTEM_BIOS(0, "0", "Original") // "chipos"
- ROMX_LOAD( "d6800.bin", 0xc000, 0x0400, CRC(3f97ca2e) SHA1(60f26e57a058262b30befceceab4363a5d65d877), ROM_BIOS(0) )
- ROM_RELOAD( 0xc400, 0x0400 )
- //ROMX_LOAD( "d6800d1.bin", 0x1800, 0x0800, BAD_DUMP CRC(e552cae3) SHA1(0b90504922d46b9c46278924768c45b1b276709f), ROM_BIOS(0) ) // need a good dump, this one is broken
+ ROMX_LOAD( "d6800.bin", 0x0000, 0x0400, CRC(3f97ca2e) SHA1(60f26e57a058262b30befceceab4363a5d65d877), ROM_BIOS(0) )
+ ROM_RELOAD( 0x0400, 0x0400 )
+ //ROMX_LOAD( "d6800d1.bin", 0x0800, 0x0800, BAD_DUMP CRC(e552cae3) SHA1(0b90504922d46b9c46278924768c45b1b276709f), ROM_BIOS(0) ) // need a good dump, this one is broken
ROM_SYSTEM_BIOS(1, "d2", "Dreamsoft2")
- ROMX_LOAD( "d6800d2.bin", 0xc000, 0x0800, CRC(ded5712f) SHA1(f594f313a74d7135c9fdd0bcb0093fc5771a9b7d), ROM_BIOS(1) )
+ ROMX_LOAD( "d6800d2.bin", 0x0000, 0x0800, CRC(ded5712f) SHA1(f594f313a74d7135c9fdd0bcb0093fc5771a9b7d), ROM_BIOS(1) )
ROM_SYSTEM_BIOS(2, "d2m", "Dreamsoft2m")
- ROMX_LOAD( "d6800d2m.bin", 0xc000, 0x0800, CRC(eec8e56f) SHA1(f587ccbc0872f2982d61120d033f481a862b902b), ROM_BIOS(2) )
+ ROMX_LOAD( "d6800d2m.bin", 0x0000, 0x0800, CRC(eec8e56f) SHA1(f587ccbc0872f2982d61120d033f481a862b902b), ROM_BIOS(2) )
ROM_END
// YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS
-COMP( 1979, d6800, 0, 0, d6800, d6800, d6800_state, empty_init, "Michael Bauer", "Dream 6800", 0 )
+COMP( 1979, d6800, 0, 0, d6800, d6800, d6800_state, empty_init, "Michael Bauer", "Dream 6800", MACHINE_SUPPORTS_SAVE )
diff --git a/src/mame/drivers/jr100.cpp b/src/mame/drivers/jr100.cpp
index e9aa6f2cba6..8514b1f5f8d 100644
--- a/src/mame/drivers/jr100.cpp
+++ b/src/mame/drivers/jr100.cpp
@@ -122,13 +122,13 @@ void jr100_state::mem_map(address_map &map)
map(0x0000, 0x3fff).ram().share("ram");
//map(0x4000, 0x7fff).ram(); expansion ram
//map(0x8000, 0xbfff).rom(); expansion rom
- map(0xc000, 0xc0ff).ram().share("pcg").region("maincpu", 0xc000);
+ map(0xc000, 0xc0ff).ram().share("pcg");
map(0xc100, 0xc3ff).ram().share("vram");
map(0xc800, 0xc80f).m(m_via, FUNC(via6522_device::map));
//map(0xcc00, 0xcfff).; expansion i/o
//map(0xd000, 0xd7ff).rom(); expansion rom for printer control
//map(0xd800, 0xdfff).rom(); expansion rom
- map(0xe000, 0xffff).rom().share("rom");
+ map(0xe000, 0xffff).rom().share("rom").region("maincpu",0);
}
// Input ports - names in [ ] are screen actions; otherwise the text is literally printed onscreen
@@ -202,6 +202,10 @@ void jr100_state::machine_start()
{
if (!m_sound_timer)
m_sound_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(jr100_state::sound_tick), this));
+
+ save_item(NAME(m_keyboard_line));
+ save_item(NAME(m_use_pcg));
+ save_item(NAME(m_pb7));
}
void jr100_state::machine_reset()
@@ -271,8 +275,8 @@ static const gfx_layout tilesram_layout =
};
static GFXDECODE_START( gfx_jr100 )
- GFXDECODE_ENTRY( "maincpu", 0xe000, tilesrom_layout, 0, 1 ) // inside rom
- GFXDECODE_ENTRY( "maincpu", 0xc000, tilesram_layout, 0, 1 ) // user defined
+ GFXDECODE_ENTRY( "maincpu", 0x0000, tilesrom_layout, 0, 1 ) // inside rom
+ GFXDECODE_RAM ( "pcg", 0x0000, tilesram_layout, 0, 1 ) // user defined
GFXDECODE_END
uint8_t jr100_state::pb_r()
@@ -410,17 +414,17 @@ void jr100_state::jr100(machine_config &config)
/* ROM definition */
ROM_START( jr100 )
- ROM_REGION( 0x10000, "maincpu", 0 )
- ROM_LOAD( "jr100.ic5", 0xe000, 0x2000, CRC(951d08a1) SHA1(edae3daaa94924e444bbe485ac2bcd5cb5b22ca2))
+ ROM_REGION( 0x2000, "maincpu", 0 )
+ ROM_LOAD( "jr100.ic5", 0x0000, 0x2000, CRC(951d08a1) SHA1(edae3daaa94924e444bbe485ac2bcd5cb5b22ca2))
ROM_END
ROM_START( jr100u )
- ROM_REGION( 0x10000, "maincpu", 0 )
- ROM_LOAD( "jr100u.ic5", 0xe000, 0x2000, CRC(f589dd8d) SHA1(78a51f2ae055bf4dc1b0887a6277f5dbbd8ba512))
+ ROM_REGION( 0x2000, "maincpu", 0 )
+ ROM_LOAD( "jr100u.ic5", 0x0000, 0x2000, CRC(f589dd8d) SHA1(78a51f2ae055bf4dc1b0887a6277f5dbbd8ba512))
ROM_END
/* Driver */
// YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS
-COMP( 1981, jr100, 0, 0, jr100, jr100, jr100_state, empty_init, "National", "JR-100", 0 )
-COMP( 1981, jr100u, jr100, 0, jr100, jr100, jr100_state, empty_init, "Panasonic", "JR-100U", 0 )
+COMP( 1981, jr100, 0, 0, jr100, jr100, jr100_state, empty_init, "National", "JR-100", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE )
+COMP( 1981, jr100u, jr100, 0, jr100, jr100, jr100_state, empty_init, "Panasonic", "JR-100U", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE )
diff --git a/src/mame/drivers/junior.cpp b/src/mame/drivers/junior.cpp
index 3cd24880620..fbdbf395a62 100644
--- a/src/mame/drivers/junior.cpp
+++ b/src/mame/drivers/junior.cpp
@@ -68,7 +68,7 @@ private:
virtual void machine_start() override;
- void junior_mem(address_map &map);
+ void mem_map(address_map &map);
required_device m_riot;
required_device m_maincpu;
@@ -79,7 +79,7 @@ private:
-void junior_state::junior_mem(address_map &map)
+void junior_state::mem_map(address_map &map)
{
map.global_mask(0x1FFF);
map.unmap_value_high();
@@ -193,7 +193,7 @@ void junior_state::junior(machine_config &config)
{
/* basic machine hardware */
M6502(config, m_maincpu, 1_MHz_XTAL);
- m_maincpu->set_addrmap(AS_PROGRAM, &junior_state::junior_mem);
+ m_maincpu->set_addrmap(AS_PROGRAM, &junior_state::mem_map);
/* video hardware */
config.set_default_layout(layout_junior);
@@ -227,4 +227,4 @@ ROM_END
/* Driver */
/* YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS */
-COMP( 1980, junior, 0, 0, junior, junior, junior_state, empty_init, "Elektor Electronics", "Junior Computer", MACHINE_SUPPORTS_SAVE | MACHINE_NO_SOUND_HW)
+COMP( 1980, junior, 0, 0, junior, junior, junior_state, empty_init, "Elektor Electronics", "Junior Computer", MACHINE_SUPPORTS_SAVE | MACHINE_NO_SOUND_HW | MACHINE_SUPPORTS_SAVE )
diff --git a/src/mame/drivers/mkit09.cpp b/src/mame/drivers/mkit09.cpp
index 5264d667880..aa4c45c1a0d 100644
--- a/src/mame/drivers/mkit09.cpp
+++ b/src/mame/drivers/mkit09.cpp
@@ -68,7 +68,8 @@ protected:
u8 pb_r();
u8 m_digit;
u8 m_seg;
- virtual void machine_reset() override;
+ void machine_reset() override;
+ void machine_start() override;
required_device m_pia;
required_device m_cass;
required_device m_maincpu;
@@ -222,6 +223,11 @@ void mkit09_state::machine_reset()
m_digit = 0;
}
+void mkit09_state::machine_start()
+{
+ save_item(NAME(m_digit));
+ save_item(NAME(m_seg));
+}
// read keyboard
u8 mkit09_state::pa_r()
{
@@ -348,5 +354,5 @@ ROM_END
/* Driver */
// YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS
-COMP( 1983, mkit09, 0, 0, mkit09, mkit09, mkit09_state, empty_init, "Multitech", "Microkit09", MACHINE_NO_SOUND_HW )
-COMP( 1983, mkit09a, mkit09, 0, mkit09a, mkit09a, mkit09a_state, empty_init, "Multitech", "Microkit09 (Alt version)", MACHINE_NOT_WORKING | MACHINE_NO_SOUND_HW )
+COMP( 1983, mkit09, 0, 0, mkit09, mkit09, mkit09_state, empty_init, "Multitech", "Microkit09", MACHINE_NO_SOUND_HW | MACHINE_SUPPORTS_SAVE )
+COMP( 1983, mkit09a, mkit09, 0, mkit09a, mkit09a, mkit09a_state, empty_init, "Multitech", "Microkit09 (Alt version)", MACHINE_NOT_WORKING | MACHINE_NO_SOUND_HW | MACHINE_SUPPORTS_SAVE )
diff --git a/src/mame/drivers/phc25.cpp b/src/mame/drivers/phc25.cpp
index 20d38973bff..efde441e1a2 100644
--- a/src/mame/drivers/phc25.cpp
+++ b/src/mame/drivers/phc25.cpp
@@ -142,8 +142,8 @@ void phc25_state::io_map(address_map &map)
map(0x86, 0x86).portr("KEY6");
map(0x87, 0x87).portr("KEY7");
map(0x88, 0x88).portr("KEY8");
- map(0xc0, 0xc0).rw(AY8910_TAG, FUNC(ay8910_device::data_r), FUNC(ay8910_device::data_w));
- map(0xc1, 0xc1).w(AY8910_TAG, FUNC(ay8910_device::address_w));
+ map(0xc0, 0xc0).w(AY8910_TAG, FUNC(ay8910_device::data_w));
+ map(0xc1, 0xc1).rw(AY8910_TAG, FUNC(ay8910_device::data_r), FUNC(ay8910_device::address_w));
}
/* Input Ports */
diff --git a/src/mame/drivers/spc1000.cpp b/src/mame/drivers/spc1000.cpp
index adcaade6e9d..4740f4fca85 100644
--- a/src/mame/drivers/spc1000.cpp
+++ b/src/mame/drivers/spc1000.cpp
@@ -173,8 +173,8 @@ private:
return m_p_videoram[0x1000 + (ch & 0x7f) * 16 + line];
}
- void spc1000_io(address_map &map);
- void spc1000_mem(address_map &map);
+ void io_map(address_map &map);
+ void mem_map(address_map &map);
uint8_t m_IPLK;
uint8_t m_GMODE;
@@ -194,7 +194,7 @@ private:
required_device m_centronics;
};
-void spc1000_state::spc1000_mem(address_map &map)
+void spc1000_state::mem_map(address_map &map)
{
map.unmap_value_high();
map(0x0000, 0x7fff).bankr("bank1").bankw("bank2");
@@ -263,7 +263,7 @@ uint8_t spc1000_state::keyboard_r(offs_t offset)
}
-void spc1000_state::spc1000_io(address_map &map)
+void spc1000_state::io_map(address_map &map)
{
map.unmap_value_high();
map(0x0000, 0x1fff).ram().share("videoram");
@@ -391,6 +391,8 @@ INPUT_PORTS_END
void spc1000_state::machine_start()
{
+ m_work_ram = make_unique_clear(0x10000);
+
uint8_t *mem = memregion("maincpu")->base();
uint8_t *ram = m_ram->pointer();
@@ -399,20 +401,26 @@ void spc1000_state::machine_start()
membank("bank1")->configure_entry(1, mem);
membank("bank3")->configure_entry(0, ram + 0x8000);
membank("bank3")->configure_entry(1, mem);
- membank("bank1")->set_entry(1);
- membank("bank3")->set_entry(1);
// intialize banks 2 & 4 (write banks)
membank("bank2")->set_base(ram);
membank("bank4")->set_base(ram + 0x8000);
m_time = machine().scheduler().time();
+
+ save_item(NAME(m_IPLK));
+ save_item(NAME(m_GMODE));
+ save_item(NAME(m_page));
+ save_pointer(NAME(m_work_ram), 0x10000);
+ save_item(NAME(m_time));
+ save_item(NAME(m_centronics_busy));
}
void spc1000_state::machine_reset()
{
- m_work_ram = make_unique_clear(0x10000);
m_IPLK = 1;
+ membank("bank1")->set_entry(1);
+ membank("bank3")->set_entry(1);
}
uint8_t spc1000_state::mc6847_videoram_r(offs_t offset)
@@ -466,8 +474,8 @@ void spc1000_state::spc1000(machine_config &config)
{
/* basic machine hardware */
Z80(config, m_maincpu, XTAL(4'000'000));
- m_maincpu->set_addrmap(AS_PROGRAM, &spc1000_state::spc1000_mem);
- m_maincpu->set_addrmap(AS_IO, &spc1000_state::spc1000_io);
+ m_maincpu->set_addrmap(AS_PROGRAM, &spc1000_state::mem_map);
+ m_maincpu->set_addrmap(AS_IO, &spc1000_state::io_map);
/* video hardware */
SCREEN(config, "screen", SCREEN_TYPE_RASTER);
@@ -511,20 +519,13 @@ void spc1000_state::spc1000(machine_config &config)
/* ROM definition */
ROM_START( spc1000 )
- ROM_REGION(0x10000, "maincpu", ROMREGION_ERASEFF)
+ ROM_REGION(0x8000, "maincpu", ROMREGION_ERASEFF)
+ //ROM_LOAD("spcall.rom", 0x0000, 0x8000, CRC(2fbb6eca) SHA1(cc9a076b0f00d54b2aec31f1f558b10f43ef61c8)) // bad?
ROM_LOAD("spcall.rom", 0x0000, 0x8000, CRC(240426be) SHA1(8eb32e147c17a6d0f947b8bb3c6844750a7b64a8))
ROM_END
-#if 0
-ROM_START( spc1000 )
- ROM_REGION(0x10000, "maincpu", ROMREGION_ERASEFF)
- ROM_LOAD("spcall.rom", 0x0000, 0x8000, CRC(2fbb6eca) SHA1(cc9a076b0f00d54b2aec31f1f558b10f43ef61c8))
- /// more roms to come...
-ROM_END
-#endif
-
/* Driver */
// YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS
-COMP( 1982, spc1000, 0, 0, spc1000, spc1000, spc1000_state, empty_init, "Samsung", "SPC-1000", 0 )
+COMP( 1982, spc1000, 0, 0, spc1000, spc1000, spc1000_state, empty_init, "Samsung", "SPC-1000", MACHINE_SUPPORTS_SAVE )
diff --git a/src/mame/drivers/tk80bs.cpp b/src/mame/drivers/tk80bs.cpp
index f8c7ce114bc..a5b0caa08f6 100644
--- a/src/mame/drivers/tk80bs.cpp
+++ b/src/mame/drivers/tk80bs.cpp
@@ -32,29 +32,28 @@ TODO:
class tk80bs_state : public driver_device
{
public:
- tk80bs_state(const machine_config &mconfig, device_type type, const char *tag) :
- driver_device(mconfig, type, tag),
- m_p_videoram(*this, "videoram"),
- m_maincpu(*this, "maincpu"),
- m_ppi(*this, "ppi"),
- m_gfxdecode(*this, "gfxdecode"),
- m_palette(*this, "palette")
- {
- }
+ tk80bs_state(const machine_config &mconfig, device_type type, const char *tag)
+ : driver_device(mconfig, type, tag)
+ , m_p_videoram(*this, "videoram")
+ , m_maincpu(*this, "maincpu")
+ , m_ppi(*this, "ppi")
+ , m_gfxdecode(*this, "gfxdecode")
+ , m_palette(*this, "palette")
+ { }
void tk80bs(machine_config &config);
private:
uint8_t ppi_custom_r(offs_t offse);
+ void machine_start() override;
void ppi_custom_w(offs_t offset, uint8_t data);
void kbd_put(u8 data);
uint8_t port_a_r();
uint8_t port_b_r();
uint32_t screen_update_tk80bs(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
- required_shared_ptr m_p_videoram;
- void tk80bs_mem(address_map &map);
-
+ void mem_map(address_map &map);
uint8_t m_term_data;
+ required_shared_ptr m_p_videoram;
required_device m_maincpu;
required_device m_ppi;
required_device m_gfxdecode;
@@ -111,7 +110,7 @@ void tk80bs_state::ppi_custom_w(offs_t offset, uint8_t data)
}
}
-void tk80bs_state::tk80bs_mem(address_map &map)
+void tk80bs_state::mem_map(address_map &map)
{
map.unmap_value_high();
map(0x0000, 0x07ff).rom();
@@ -155,8 +154,14 @@ void tk80bs_state::kbd_put(u8 data)
m_term_data = data;
}
+void tk80bs_state::machine_start()
+{
+ save_item(NAME(m_term_data));
+}
+
+
/* F4 Character Displayer */
-static const gfx_layout tk80bs_charlayout =
+static const gfx_layout charlayout =
{
8, 8,
512,
@@ -168,7 +173,7 @@ static const gfx_layout tk80bs_charlayout =
};
static GFXDECODE_START( gfx_tk80bs )
- GFXDECODE_ENTRY( "chargen", 0x0000, tk80bs_charlayout, 0, 1 )
+ GFXDECODE_ENTRY( "chargen", 0x0000, charlayout, 0, 1 )
GFXDECODE_END
@@ -176,7 +181,7 @@ void tk80bs_state::tk80bs(machine_config &config)
{
/* basic machine hardware */
I8080(config, m_maincpu, XTAL(1'000'000)); //unknown clock
- m_maincpu->set_addrmap(AS_PROGRAM, &tk80bs_state::tk80bs_mem);
+ m_maincpu->set_addrmap(AS_PROGRAM, &tk80bs_state::mem_map);
/* video hardware */
screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
@@ -221,11 +226,11 @@ ROM_START( tk80bs )
ROMX_LOAD( "lv2basic.11",0xd000, 0x2000, BAD_DUMP CRC(3df9a3bd) SHA1(9539409c876bce27d630fe47d07a4316d2ce09cb), ROM_BIOS(2))
ROMX_LOAD( "bsmon.11", 0xf000, 0x0ff6, BAD_DUMP CRC(fca7a609) SHA1(7c7eb5e5e4cf1e0021383bdfc192b88262aba6f5), ROM_BIOS(2))
- ROM_REGION( 0x1000, "chargen", ROMREGION_ERASEFF )
+ ROM_REGION( 0x1000, "chargen", 0 )
ROM_LOAD( "font.rom", 0x0000, 0x1000, BAD_DUMP CRC(94d95199) SHA1(9fe741eab866b0c520d4108bccc6277172fa190c))
ROM_END
/* Driver */
// YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS
-COMP( 1980, tk80bs, tk80, 0, tk80bs, tk80bs, tk80bs_state, empty_init, "NEC", "TK-80BS", MACHINE_NOT_WORKING | MACHINE_NO_SOUND_HW)
+COMP( 1980, tk80bs, tk80, 0, tk80bs, tk80bs, tk80bs_state, empty_init, "NEC", "TK-80BS", MACHINE_NOT_WORKING | MACHINE_NO_SOUND_HW | MACHINE_SUPPORTS_SAVE )
diff --git a/src/mame/drivers/votrpss.cpp b/src/mame/drivers/votrpss.cpp
index 4910e1f3c8b..d9e8f521bd8 100644
--- a/src/mame/drivers/votrpss.cpp
+++ b/src/mame/drivers/votrpss.cpp
@@ -399,8 +399,8 @@ private:
DECLARE_WRITE_LINE_MEMBER(write_uart_clock);
IRQ_CALLBACK_MEMBER(irq_ack);
- void votrpss_io(address_map &map);
- void votrpss_mem(address_map &map);
+ void io_map(address_map &map);
+ void mem_map(address_map &map);
uint8_t m_term_data;
uint8_t m_porta;
@@ -417,7 +417,7 @@ private:
Address Maps
******************************************************************************/
-void votrpss_state::votrpss_mem(address_map &map)
+void votrpss_state::mem_map(address_map &map)
{
map.unmap_value_high();
map(0x0000, 0x3fff).rom(); /* main roms (in potted module) */
@@ -428,7 +428,7 @@ void votrpss_state::votrpss_mem(address_map &map)
map(0xe000, 0xffff).noprw(); /* open bus (space for more personality rom, not normally used) */
}
-void votrpss_state::votrpss_io(address_map &map)
+void votrpss_state::io_map(address_map &map)
{
map.global_mask(0xff);
map(0x00, 0x03).mirror(0x3c).rw(m_ppi, FUNC(i8255_device::read), FUNC(i8255_device::write));
@@ -473,6 +473,10 @@ INPUT_PORTS_END
void votrpss_state::machine_start()
{
+ save_item(NAME(m_term_data));
+ save_item(NAME(m_porta));
+ save_item(NAME(m_portb));
+ save_item(NAME(m_portc));
}
TIMER_DEVICE_CALLBACK_MEMBER( votrpss_state::irq_timer )
@@ -542,8 +546,8 @@ void votrpss_state::votrpss(machine_config &config)
{
/* basic machine hardware */
Z80(config, m_maincpu, XTAL(8'000'000)/2); /* 4.000 MHz, verified */
- m_maincpu->set_addrmap(AS_PROGRAM, &votrpss_state::votrpss_mem);
- m_maincpu->set_addrmap(AS_IO, &votrpss_state::votrpss_io);
+ m_maincpu->set_addrmap(AS_PROGRAM, &votrpss_state::mem_map);
+ m_maincpu->set_addrmap(AS_IO, &votrpss_state::io_map);
m_maincpu->set_irq_acknowledge_callback(FUNC(votrpss_state::irq_ack));
/* video hardware */
@@ -621,4 +625,4 @@ ROM_END
******************************************************************************/
// YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS
-COMP( 1982, votrpss, 0, 0, votrpss, votrpss, votrpss_state, empty_init, "Votrax", "Personal Speech System", 0 )
+COMP( 1982, votrpss, 0, 0, votrpss, votrpss, votrpss_state, empty_init, "Votrax", "Personal Speech System", MACHINE_SUPPORTS_SAVE )
diff --git a/src/mame/drivers/z1013.cpp b/src/mame/drivers/z1013.cpp
index 44831c2dad5..fba061a158f 100644
--- a/src/mame/drivers/z1013.cpp
+++ b/src/mame/drivers/z1013.cpp
@@ -90,7 +90,7 @@ private:
bool m_keyboard_part;
virtual void machine_reset() override;
virtual void machine_start() override;
- memory_passthrough_handler *m_rom_shadow_tap;
+
required_device m_maincpu;
required_region_ptr m_rom;
required_shared_ptr m_ram;
@@ -277,22 +277,7 @@ void z1013_state::machine_reset()
m_keyboard_part = 0;
m_keyboard_line = 0;
- address_space &program = m_maincpu->space(AS_PROGRAM);
- program.install_rom(0x0000, 0x07ff, m_rom); // do it here for F3
- m_rom_shadow_tap = program.install_read_tap(0xf000, 0xf7ff, "rom_shadow_r",[this](offs_t offset, u8 &data, u8 mem_mask)
- {
- if (!machine().side_effects_disabled())
- {
- // delete this tap
- m_rom_shadow_tap->remove();
-
- // reinstall ram over the rom shadow
- m_maincpu->space(AS_PROGRAM).install_ram(0x0000, 0x07ff, m_ram);
- }
-
- // return the original data
- return data;
- });
+ m_maincpu->set_state_int(Z80_PC, 0xf000);
}
void z1013_state::machine_start()
@@ -443,7 +428,7 @@ void z1013_state::z1013k76(machine_config &config)
/* ROM definition */
ROM_START( z1013 )
- ROM_REGION( 0x1000, "maincpu", ROMREGION_ERASEFF )
+ ROM_REGION( 0x1000, "maincpu", 0 )
ROM_SYSTEM_BIOS( 0, "202", "Original" )
ROMX_LOAD( "mon_202.bin", 0x0000, 0x0800, CRC(5884edab) SHA1(c3a45ea5cc4da2b7c270068ba1e2d75916960709), ROM_BIOS(0))
@@ -456,7 +441,7 @@ ROM_START( z1013 )
ROM_END
ROM_START( z1013a2 )
- ROM_REGION( 0x1000, "maincpu", ROMREGION_ERASEFF )
+ ROM_REGION( 0x1000, "maincpu", 0 )
ROM_LOAD( "mon_a2.bin", 0x0000, 0x0800, CRC(98b19b10) SHA1(97e158f589198cb96aae1567ee0aa6e47824027e))
ROM_REGION(0x1000, "chargen",0)
@@ -465,7 +450,7 @@ ROM_START( z1013a2 )
ROM_END
ROM_START( z1013k76 )
- ROM_REGION( 0x1000, "maincpu", ROMREGION_ERASEFF )
+ ROM_REGION( 0x1000, "maincpu", 0 )
ROM_LOAD( "mon_rb_k7659.bin", 0x0000, 0x1000, CRC(b3d88c45) SHA1(0bcd20338cf0706b384f40901b7f8498c6f6c320))
ROM_REGION(0x1000, "chargen",0)
@@ -477,12 +462,12 @@ ROM_START( z1013k76 )
ROM_END
ROM_START( z1013s60 )
- ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASEFF )
+ ROM_REGION( 0x1000, "maincpu", 0 )
ROM_SYSTEM_BIOS( 0, "v1", "Version 1" )
- ROMX_LOAD( "mon_rb_s6009.bin", 0xf000, 0x1000, CRC(b37faeed) SHA1(ce2e69af5378d39284e8b3be23da50416a0b0fbe), ROM_BIOS(0))
+ ROMX_LOAD( "mon_rb_s6009.bin", 0x0000, 0x1000, CRC(b37faeed) SHA1(ce2e69af5378d39284e8b3be23da50416a0b0fbe), ROM_BIOS(0))
ROM_SYSTEM_BIOS( 1, "v2", "Version 2" )
- ROMX_LOAD( "4k-moni-k7652.bin", 0xf000, 0x1000, CRC(a1625fce) SHA1(f0847399502b38a73ad26b38ee2d85ba04ab85ec), ROM_BIOS(1))
+ ROMX_LOAD( "4k-moni-k7652.bin", 0x0000, 0x1000, CRC(a1625fce) SHA1(f0847399502b38a73ad26b38ee2d85ba04ab85ec), ROM_BIOS(1))
ROM_REGION(0x1000, "chargen",0)
ROM_LOAD ("z1013font.bin", 0x0000, 0x0800, CRC(7023088f) SHA1(8b197a51c070efeba173d10be197bd41e764358c))
@@ -490,8 +475,8 @@ ROM_START( z1013s60 )
ROM_END
ROM_START( z1013k69 )
- ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASEFF )
- ROM_LOAD( "4k-moni-k7669.bin", 0xf000, 0x1000, CRC(09cd2a7a) SHA1(0b8500320d464469868a6b48db31105f34710c41))
+ ROM_REGION( 0x1000, "maincpu", 0 )
+ ROM_LOAD( "4k-moni-k7669.bin", 0x0000, 0x1000, CRC(09cd2a7a) SHA1(0b8500320d464469868a6b48db31105f34710c41))
ROM_REGION(0x1000, "chargen",0)
ROM_LOAD ("z1013font.bin", 0x0000, 0x0800, CRC(7023088f) SHA1(8b197a51c070efeba173d10be197bd41e764358c))