summaryrefslogtreecommitdiffstatshomepage
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/mame/drivers/bbcbc.cpp8
-rw-r--r--src/mame/drivers/jtc.cpp8
-rw-r--r--src/mame/drivers/mekd2.cpp44
-rw-r--r--src/mame/drivers/osi.cpp20
-rw-r--r--src/mame/drivers/phc25.cpp36
-rw-r--r--src/mame/drivers/pulsar.cpp16
-rw-r--r--src/mame/drivers/rc702.cpp62
-rw-r--r--src/mame/drivers/systec.cpp28
-rw-r--r--src/mame/drivers/vixen.cpp24
-rw-r--r--src/mame/drivers/vta2000.cpp2
-rw-r--r--src/mame/drivers/z1013.cpp74
-rw-r--r--src/mame/drivers/z9001.cpp92
-rw-r--r--src/mame/includes/phc25.h23
-rw-r--r--src/mame/includes/vixen.h2
14 files changed, 256 insertions, 183 deletions
diff --git a/src/mame/drivers/bbcbc.cpp b/src/mame/drivers/bbcbc.cpp
index 8c36c1ecdba..71d275f0f35 100644
--- a/src/mame/drivers/bbcbc.cpp
+++ b/src/mame/drivers/bbcbc.cpp
@@ -46,13 +46,13 @@ public:
, m_buttons(*this, "BUTTONS.%u", 0)
{ }
+ void bbcbc(machine_config &config);
+
+private:
uint8_t input_r();
void input_select_w(uint8_t data);
-
- void bbcbc(machine_config &config);
void io_map(address_map &map);
void mem_map(address_map &map);
-private:
uint8_t m_input_select;
virtual void machine_start() override;
virtual void machine_reset() override;
@@ -181,4 +181,4 @@ ROM_END
***************************************************************************/
// YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS
-CONS(1985, bbcbc, 0, 0, bbcbc, bbcbc, bbcbc_state, empty_init, "Unicard", "BBC Bridge Companion", MACHINE_NO_SOUND_HW | MACHINE_SUPPORTS_SAVE)
+CONS(1985, bbcbc, 0, 0, bbcbc, bbcbc, bbcbc_state, empty_init, "Unicard", "BBC Bridge Companion", MACHINE_NO_SOUND_HW | MACHINE_SUPPORTS_SAVE )
diff --git a/src/mame/drivers/jtc.cpp b/src/mame/drivers/jtc.cpp
index 484151da7a3..ffd343f3f2c 100644
--- a/src/mame/drivers/jtc.cpp
+++ b/src/mame/drivers/jtc.cpp
@@ -895,27 +895,27 @@ void jtces40_state::jtces40(machine_config &config)
/* ROMs */
ROM_START( jtc )
- ROM_REGION( 0x10000, UB8830D_TAG, 0 )
+ ROM_REGION( 0x2800, UB8830D_TAG, 0 )
ROM_LOAD( "u883rom.bin", 0x0000, 0x0800, CRC(2453c8c1) SHA1(816f5d08f8064b69b1779eb6661fde091aa58ba8) )
ROM_LOAD( "os2k_0800.bin", 0x0800, 0x0800, CRC(c81a2e19) SHA1(97c3b36c7b555081e084403e8f800fc9dbf5e68d) ) // u2716c1.bin
ROM_LOAD( "u2716c2.bin", 0x2000, 0x0800, NO_DUMP ) // doesn't seem to be needed?
ROM_END
ROM_START( jtces88 )
- ROM_REGION( 0x10000, UB8830D_TAG, 0 )
+ ROM_REGION( 0x2800, UB8830D_TAG, 0 )
ROM_LOAD( "u883rom.bin", 0x0000, 0x0800, CRC(2453c8c1) SHA1(816f5d08f8064b69b1779eb6661fde091aa58ba8) )
ROM_LOAD( "es1988_0800.bin", 0x0800, 0x0800, CRC(af3e882f) SHA1(65af0d0f5f882230221e9552707d93ed32ba794d) )
ROM_LOAD( "es1988_2000.bin", 0x2000, 0x0800, CRC(5ff87c1e) SHA1(fbd2793127048bd9706970b7bce84af2cb258dc5) )
ROM_END
ROM_START( jtces23 )
- ROM_REGION( 0x10000, UB8830D_TAG, 0 )
+ ROM_REGION( 0x2800, UB8830D_TAG, 0 )
ROM_LOAD( "u883rom.bin", 0x0000, 0x0800, CRC(2453c8c1) SHA1(816f5d08f8064b69b1779eb6661fde091aa58ba8) )
ROM_LOAD( "es23_0800.bin", 0x0800, 0x1000, CRC(16128b64) SHA1(90fb0deeb5660f4a2bb38d51981cc6223d5ddf6b) )
ROM_END
ROM_START( jtces40 )
- ROM_REGION( 0x10000, UB8830D_TAG, 0 )
+ ROM_REGION( 0x2800, UB8830D_TAG, 0 )
ROM_LOAD( "u883rom.bin", 0x0000, 0x0800, CRC(2453c8c1) SHA1(816f5d08f8064b69b1779eb6661fde091aa58ba8) )
ROM_LOAD( "es40_0800.bin", 0x0800, 0x1800, CRC(770c87ce) SHA1(1a5227ba15917f2a572cb6c27642c456f5b32b90) )
ROM_END
diff --git a/src/mame/drivers/mekd2.cpp b/src/mame/drivers/mekd2.cpp
index fe4b6825491..b0f06299280 100644
--- a/src/mame/drivers/mekd2.cpp
+++ b/src/mame/drivers/mekd2.cpp
@@ -107,16 +107,16 @@ public:
void mekd2(machine_config &config);
private:
- DECLARE_READ_LINE_MEMBER(mekd2_key40_r);
- uint8_t mekd2_key_r();
- DECLARE_WRITE_LINE_MEMBER(mekd2_nmi_w);
- void mekd2_digit_w(uint8_t data);
- void mekd2_segment_w(uint8_t data);
+ DECLARE_READ_LINE_MEMBER(key40_r);
+ uint8_t key_r();
+ DECLARE_WRITE_LINE_MEMBER(nmi_w);
+ void digit_w(uint8_t data);
+ void segment_w(uint8_t data);
DECLARE_QUICKLOAD_LOAD_MEMBER(quickload_cb);
TIMER_DEVICE_CALLBACK_MEMBER(kansas_w);
TIMER_DEVICE_CALLBACK_MEMBER(kansas_r);
- void mekd2_mem(address_map &map);
+ void mem_map(address_map &map);
virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override;
uint8_t m_cass_data[4];
@@ -142,14 +142,14 @@ private:
************************************************************/
-void mekd2_state::mekd2_mem(address_map &map)
+void mekd2_state::mem_map(address_map &map)
{
map(0x0000, 0x00ff).ram(); // user ram
map(0x8004, 0x8007).rw(m_pia_u, FUNC(pia6821_device::read), FUNC(pia6821_device::write));
map(0x8008, 0x8009).rw(m_acia, FUNC(acia6850_device::read), FUNC(acia6850_device::write));
map(0x8020, 0x8023).rw(m_pia_s, FUNC(pia6821_device::read), FUNC(pia6821_device::write));
map(0xa000, 0xa07f).ram(); // system ram
- map(0xe000, 0xe3ff).rom().mirror(0x1c00); /* JBUG ROM */
+ map(0xe000, 0xe3ff).rom().mirror(0x1c00).region("maincpu",0); /* JBUG ROM */
}
/***********************************************************
@@ -216,7 +216,7 @@ void mekd2_state::device_timer(emu_timer &timer, device_timer_id id, int param,
}
-WRITE_LINE_MEMBER( mekd2_state::mekd2_nmi_w )
+WRITE_LINE_MEMBER( mekd2_state::nmi_w )
{
if (state)
m_maincpu->set_input_line(INPUT_LINE_NMI, CLEAR_LINE);
@@ -232,12 +232,12 @@ WRITE_LINE_MEMBER( mekd2_state::mekd2_nmi_w )
************************************************************/
-READ_LINE_MEMBER( mekd2_state::mekd2_key40_r )
+READ_LINE_MEMBER( mekd2_state::key40_r )
{
return BIT(m_keydata, 6);
}
-uint8_t mekd2_state::mekd2_key_r()
+uint8_t mekd2_state::key_r()
{
char kbdrow[4];
uint8_t i;
@@ -275,12 +275,12 @@ uint8_t mekd2_state::mekd2_key_r()
************************************************************/
-void mekd2_state::mekd2_segment_w(uint8_t data)
+void mekd2_state::segment_w(uint8_t data)
{
m_segment = data & 0x7f;
}
-void mekd2_state::mekd2_digit_w(uint8_t data)
+void mekd2_state::digit_w(uint8_t data)
{
if (data < 0x3f)
{
@@ -371,7 +371,7 @@ void mekd2_state::mekd2(machine_config &config)
{
/* basic machine hardware */
M6800(config, m_maincpu, XTAL_MEKD2 / 2); /* 614.4 kHz */
- m_maincpu->set_addrmap(AS_PROGRAM, &mekd2_state::mekd2_mem);
+ m_maincpu->set_addrmap(AS_PROGRAM, &mekd2_state::mem_map);
config.set_default_layout(layout_mekd2);
@@ -383,11 +383,11 @@ void mekd2_state::mekd2(machine_config &config)
/* Devices */
PIA6821(config, m_pia_s, 0);
- m_pia_s->readpa_handler().set(FUNC(mekd2_state::mekd2_key_r));
- m_pia_s->readcb1_handler().set(FUNC(mekd2_state::mekd2_key40_r));
- m_pia_s->writepa_handler().set(FUNC(mekd2_state::mekd2_segment_w));
- m_pia_s->writepb_handler().set(FUNC(mekd2_state::mekd2_digit_w));
- m_pia_s->ca2_handler().set(FUNC(mekd2_state::mekd2_nmi_w));
+ m_pia_s->readpa_handler().set(FUNC(mekd2_state::key_r));
+ m_pia_s->readcb1_handler().set(FUNC(mekd2_state::key40_r));
+ m_pia_s->writepa_handler().set(FUNC(mekd2_state::segment_w));
+ m_pia_s->writepb_handler().set(FUNC(mekd2_state::digit_w));
+ m_pia_s->ca2_handler().set(FUNC(mekd2_state::nmi_w));
m_pia_s->irqa_handler().set_inputline("maincpu", INPUT_LINE_NMI);
m_pia_s->irqb_handler().set_inputline("maincpu", INPUT_LINE_NMI);
@@ -417,8 +417,8 @@ void mekd2_state::mekd2(machine_config &config)
************************************************************/
ROM_START(mekd2)
- ROM_REGION(0x10000,"maincpu",0)
- ROM_LOAD("jbug.rom", 0xe000, 0x0400, CRC(5ed08792) SHA1(b06e74652a4c4e67c4a12ddc191ffb8c07f3332e) )
+ ROM_REGION(0x0400,"maincpu",0)
+ ROM_LOAD("jbug.rom", 0x0000, 0x0400, CRC(5ed08792) SHA1(b06e74652a4c4e67c4a12ddc191ffb8c07f3332e) )
ROM_END
/***************************************************************************
@@ -428,4 +428,4 @@ ROM_END
***************************************************************************/
// YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS
-COMP( 1977, mekd2, 0, 0, mekd2, mekd2, mekd2_state, empty_init, "Motorola", "MEK6800D2" , 0 )
+COMP( 1977, mekd2, 0, 0, mekd2, mekd2, mekd2_state, empty_init, "Motorola", "MEK6800D2" , MACHINE_SUPPORTS_SAVE )
diff --git a/src/mame/drivers/osi.cpp b/src/mame/drivers/osi.cpp
index 08f3f967661..526f0a6e745 100644
--- a/src/mame/drivers/osi.cpp
+++ b/src/mame/drivers/osi.cpp
@@ -663,6 +663,12 @@ void sb2m600_state::machine_start()
/* register for state saving */
save_item(NAME(m_keylatch));
save_pointer(NAME(m_video_ram.target()), OSI600_VIDEORAM_SIZE);
+ save_item(NAME(m_cass_data));
+ save_item(NAME(m_cassbit));
+ save_item(NAME(m_cassold));
+ save_item(NAME(m_fdc_index));
+ save_item(NAME(m_32));
+ save_item(NAME(m_coloren));
}
void c1p_state::machine_start()
@@ -686,6 +692,10 @@ void c1p_state::machine_start()
}
/* register for state saving */
+ save_item(NAME(m_cass_data));
+ save_item(NAME(m_cassbit));
+ save_item(NAME(m_cassold));
+ save_item(NAME(m_fdc_index));
save_item(NAME(m_keylatch));
save_item(NAME(m_32));
save_item(NAME(m_coloren));
@@ -931,8 +941,8 @@ void c1p_state::init_c1p()
/* System Drivers */
// YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS
-COMP( 1978, sb2m600b, 0, 0, osi600, osi600, sb2m600_state, empty_init, "Ohio Scientific", "Superboard II Model 600 (Rev. B)", 0 )
-//COMP( 1980, sb2m600c, 0, 0, osi600c, osi600, sb2m600_state, empty_init, "Ohio Scientific", "Superboard II Model 600 (Rev. C)", MACHINE_NOT_WORKING)
-COMP( 1980, c1p, sb2m600b, 0, c1p, osi600, c1p_state, init_c1p, "Ohio Scientific", "Challenger 1P Series 2", 0 )
-COMP( 1980, c1pmf, sb2m600b, 0, c1pmf, osi600, c1pmf_state, init_c1p, "Ohio Scientific", "Challenger 1P MF Series 2", MACHINE_NOT_WORKING)
-COMP( 1979, uk101, sb2m600b, 0, uk101, uk101, uk101_state, empty_init, "Compukit", "UK101", 0 )
+COMP( 1978, sb2m600b, 0, 0, osi600, osi600, sb2m600_state, empty_init, "Ohio Scientific", "Superboard II Model 600 (Rev. B)", MACHINE_SUPPORTS_SAVE )
+//COMP( 1980, sb2m600c, 0, 0, osi600c, osi600, sb2m600_state, empty_init, "Ohio Scientific", "Superboard II Model 600 (Rev. C)", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE )
+COMP( 1980, c1p, sb2m600b, 0, c1p, osi600, c1p_state, init_c1p, "Ohio Scientific", "Challenger 1P Series 2", MACHINE_SUPPORTS_SAVE )
+COMP( 1980, c1pmf, sb2m600b, 0, c1pmf, osi600, c1pmf_state, init_c1p, "Ohio Scientific", "Challenger 1P MF Series 2", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE )
+COMP( 1979, uk101, sb2m600b, 0, uk101, uk101, uk101_state, empty_init, "Compukit", "UK101", MACHINE_SUPPORTS_SAVE )
diff --git a/src/mame/drivers/phc25.cpp b/src/mame/drivers/phc25.cpp
index ccfeabcb8d2..20d38973bff 100644
--- a/src/mame/drivers/phc25.cpp
+++ b/src/mame/drivers/phc25.cpp
@@ -119,15 +119,15 @@ WRITE_LINE_MEMBER( phc25_state::write_centronics_busy )
/* Memory Maps */
-void phc25_state::phc25_mem(address_map &map)
+void phc25_state::mem_map(address_map &map)
{
map.unmap_value_high();
map(0x0000, 0x5fff).rom().region(Z80_TAG, 0);
- map(0x6000, 0x77ff).ram().share("video_ram");
+ map(0x6000, 0x77ff).ram().share("videoram");
map(0xc000, 0xffff).ram();
}
-void phc25_state::phc25_io(address_map &map)
+void phc25_state::io_map(address_map &map)
{
map.unmap_value_high();
map.global_mask(0xff);
@@ -270,16 +270,16 @@ uint8_t phc25_state::video_ram_r(offs_t offset)
{
if (BIT(m_port40, 7)) // graphics
{
- return m_video_ram[offset];
+ return m_vram[offset];
}
else // text
{
offset &= 0x7ff;
- m_vdg->inv_w(BIT(m_video_ram[offset | 0x800], 0)); // cursor attribute
- m_vdg->as_w(BIT(m_video_ram[offset | 0x800], 1)); // screen2 lores attribute
- m_vdg->css_w(BIT(m_video_ram[offset | 0x800], 2)); // css attribute
+ m_vdg->inv_w(BIT(m_vram[offset | 0x800], 0)); // cursor attribute
+ m_vdg->as_w(BIT(m_vram[offset | 0x800], 1)); // screen2 lores attribute
+ m_vdg->css_w(BIT(m_vram[offset | 0x800], 2)); // css attribute
// bit 7 is set for all text (not spaces), meaning is unknown
- return m_video_ram[offset];
+ return m_vram[offset];
}
}
@@ -299,11 +299,17 @@ MC6847_GET_CHARROM_MEMBER(phc25_state::ntsc_char_rom_r)
return m_char_rom[(ch * 16 + line) & 0xfff];
}
-void phc25_state::video_start()
+void phc25_state::machine_reset()
+{
+ m_port40 = 0;
+}
+
+void phc25_state::machine_start()
{
/* find memory regions */
m_char_rom = memregion(Z80_TAG)->base() + 0x5000;
- m_port40 = 0;
+ save_item(NAME(m_port40));
+ save_item(NAME(m_centronics_busy));
}
/* Machine Driver */
@@ -312,8 +318,8 @@ void phc25_state::phc25(machine_config &config)
{
/* basic machine hardware */
Z80(config, m_maincpu, XTAL(4'000'000));
- m_maincpu->set_addrmap(AS_PROGRAM, &phc25_state::phc25_mem);
- m_maincpu->set_addrmap(AS_IO, &phc25_state::phc25_io);
+ m_maincpu->set_addrmap(AS_PROGRAM, &phc25_state::mem_map);
+ m_maincpu->set_addrmap(AS_IO, &phc25_state::io_map);
/* sound hardware */
SPEAKER(config, "mono").front_center();
@@ -379,6 +385,7 @@ ROM_START( phc25 )
ROM_LOAD( "phc25rom.0", 0x0000, 0x2000, CRC(fa28336b) SHA1(582376bee455e124de24ba4ac02326c8a592fa5a)) // 031_00aa.ic13 ?
ROM_LOAD( "phc25rom.1", 0x2000, 0x2000, CRC(38fd578b) SHA1(dc3db78c0cdc89f1605200d39535be65a4091705)) // 031_01a.ic14 ?
ROM_LOAD( "phc25rom.2", 0x4000, 0x2000, CRC(54392b27) SHA1(1587827fe9438780b50164727ce3fdea1b98078a)) // 031_02a.ic15 ?
+
ROM_REGION( 0x1000, "chargen", 0 )
ROM_LOAD( "031_04a.ic6", 0x0000, 0x1000, CRC(e56fb8c5) SHA1(6fc388c17fb43debfbc1464f767d0ce1375ce27b))
ROM_END
@@ -391,6 +398,7 @@ ROM_START( phc25j )
//ROM_LOAD( "022 00aa.ic", 0x0000, 0x2000, NO_DUMP )
//ROM_LOAD( "022 01aa.ic", 0x2000, 0x2000, NO_DUMP )
//ROM_LOAD( "022 02aa.ic", 0x4000, 0x2000, NO_DUMP )
+
//ROM_REGION( 0x1000, "chargen", 0 )
//ROM_LOAD( "022 04a.ic", 0x0000, 0x1000, NO_DUMP )
ROM_END
@@ -398,5 +406,5 @@ ROM_END
/* Driver */
// YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS
-COMP( 1983, phc25, 0, 0, pal, phc25, phc25_state, empty_init, "Sanyo", "PHC-25 (Europe)", MACHINE_NO_SOUND )
-COMP( 1983, phc25j, phc25, 0, ntsc, phc25j, phc25_state, empty_init, "Sanyo", "PHC-25 (Japan)", MACHINE_NO_SOUND )
+COMP( 1983, phc25, 0, 0, pal, phc25, phc25_state, empty_init, "Sanyo", "PHC-25 (Europe)", MACHINE_NO_SOUND | MACHINE_SUPPORTS_SAVE )
+COMP( 1983, phc25j, phc25, 0, ntsc, phc25j, phc25_state, empty_init, "Sanyo", "PHC-25 (Japan)", MACHINE_NO_SOUND | MACHINE_SUPPORTS_SAVE )
diff --git a/src/mame/drivers/pulsar.cpp b/src/mame/drivers/pulsar.cpp
index 65ace2fa1f0..adc0d86d746 100644
--- a/src/mame/drivers/pulsar.cpp
+++ b/src/mame/drivers/pulsar.cpp
@@ -57,11 +57,11 @@ public:
: driver_device(mconfig, type, tag)
, m_maincpu(*this, "maincpu")
, m_rom(*this, "maincpu")
+ , m_ram(*this, "mainram")
, m_fdc (*this, "fdc")
, m_floppy0(*this, "fdc:0")
, m_floppy1(*this, "fdc:1")
, m_rtc(*this, "rtc")
- , m_ram(*this, "mainram")
{ }
void pulsar(machine_config &config);
@@ -74,27 +74,26 @@ private:
void ppi_pb_w(u8 data);
void ppi_pc_w(u8 data);
u8 ppi_pc_r();
- u8 read_rom(offs_t offset);
void io_map(address_map &map);
void mem_map(address_map &map);
bool m_rom_in_map;
floppy_image_device *m_floppy;
+ memory_passthrough_handler *m_rom_shadow_tap;
required_device<z80_device> m_maincpu;
required_region_ptr<u8> m_rom;
+ required_shared_ptr<u8> m_ram;
required_device<fd1797_device> m_fdc;
required_device<floppy_connector> m_floppy0;
required_device<floppy_connector> m_floppy1;
required_device<msm5832_device> m_rtc;
- memory_passthrough_handler *m_rom_shadow_tap;
- required_shared_ptr<u8> m_ram;
};
void pulsar_state::mem_map(address_map &map)
{
map(0x0000, 0xffff).ram().share("mainram");
- map(0xf800, 0xffff).r(FUNC(pulsar_state::read_rom));
+ map(0xf800, 0xffff).lr8(NAME([this] (offs_t offset) { if(m_rom_in_map) return m_rom[offset]; else return m_ram[offset+0xf800]; }));
}
void pulsar_state::io_map(address_map &map)
@@ -107,13 +106,6 @@ void pulsar_state::io_map(address_map &map)
map(0xf0, 0xf0).mirror(0x0f).w("brg", FUNC(com8116_device::stt_str_w));
}
-u8 pulsar_state::read_rom(offs_t offset)
-{
- if (m_rom_in_map)
- return m_rom[offset];
- else
- return m_ram[offset+0xf800];
-}
/*
d0..d3 Drive select 0-3 (we only emulate 1 drive)
diff --git a/src/mame/drivers/rc702.cpp b/src/mame/drivers/rc702.cpp
index b1bcb54c297..bd039882f36 100644
--- a/src/mame/drivers/rc702.cpp
+++ b/src/mame/drivers/rc702.cpp
@@ -50,6 +50,8 @@ public:
: driver_device(mconfig, type, tag)
, m_palette(*this, "palette")
, m_maincpu(*this, "maincpu")
+ , m_rom(*this, "maincpu")
+ , m_ram(*this, "mainram")
, m_p_chargen(*this, "chargen")
, m_ctc1(*this, "ctc1")
, m_pio(*this, "pio")
@@ -62,12 +64,10 @@ public:
void rc702(machine_config &config);
- void init_rc702();
-
-protected:
- virtual void machine_reset() override;
-
private:
+ void machine_reset() override;
+ void machine_start() override;
+
uint8_t memory_read_byte(offs_t offset);
void memory_write_byte(offs_t offset, uint8_t data);
void port14_w(uint8_t data);
@@ -83,8 +83,8 @@ private:
void rc702_palette(palette_device &palette) const;
void kbd_put(u8 data);
- void rc702_io(address_map &map);
- void rc702_mem(address_map &map);
+ void io_map(address_map &map);
+ void mem_map(address_map &map);
bool m_q_state;
bool m_qbar_state;
@@ -92,8 +92,11 @@ private:
uint16_t m_beepcnt;
bool m_eop;
bool m_dack1;
+ bool m_rom_in_map;
required_device<palette_device> m_palette;
required_device<z80_device> m_maincpu;
+ required_region_ptr<u8> m_rom;
+ required_shared_ptr<u8> m_ram;
required_region_ptr<u8> m_p_chargen;
required_device<z80ctc_device> m_ctc1;
required_device<z80pio_device> m_pio;
@@ -105,13 +108,13 @@ private:
};
-void rc702_state::rc702_mem(address_map &map)
+void rc702_state::mem_map(address_map &map)
{
- map(0x0000, 0x07ff).bankr("bankr0").bankw("bankw0");
+ map(0x0000, 0x07ff).ram().share("mainram").lr8(NAME([this] (offs_t offset) { if(m_rom_in_map) return m_rom[offset]; else return m_ram[offset]; }));
map(0x0800, 0xffff).ram();
}
-void rc702_state::rc702_io(address_map &map)
+void rc702_state::io_map(address_map &map)
{
map.global_mask(0xff);
map.unmap_value_high();
@@ -121,7 +124,7 @@ void rc702_state::rc702_io(address_map &map)
map(0x0c, 0x0f).rw(m_ctc1, FUNC(z80ctc_device::read), FUNC(z80ctc_device::write));
map(0x10, 0x13).rw(m_pio, FUNC(z80pio_device::read), FUNC(z80pio_device::write));
map(0x14, 0x17).portr("DSW").w(FUNC(rc702_state::port14_w)); // motors
- map(0x18, 0x1b).lw8(NAME([this] (u8 data) { membank("bankr0")->set_entry(1); })); // replace roms with ram
+ map(0x18, 0x1b).lw8(NAME([this] (u8 data) { m_rom_in_map = false; })); // replace roms with ram
map(0x1c, 0x1f).w(FUNC(rc702_state::port1c_w)); // sound
map(0xf0, 0xff).rw(m_dma, FUNC(am9517a_device::read), FUNC(am9517a_device::write));
}
@@ -157,8 +160,7 @@ INPUT_PORTS_END
void rc702_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_beepcnt = 0xffff;
m_dack1 = 0;
m_eop = 0;
@@ -168,6 +170,17 @@ void rc702_state::machine_reset()
m_maincpu->reset();
}
+void rc702_state::machine_start()
+{
+ save_item(NAME(m_q_state));
+ save_item(NAME(m_qbar_state));
+ save_item(NAME(m_drq_state));
+ save_item(NAME(m_beepcnt));
+ save_item(NAME(m_eop));
+ save_item(NAME(m_dack1));
+ save_item(NAME(m_rom_in_map));
+}
+
WRITE_LINE_MEMBER( rc702_state::q_w )
{
m_q_state = state;
@@ -251,15 +264,6 @@ void rc702_state::rc702_palette(palette_device &palette) const
palette.set_pen_color(1, rgb_t(0xff, 0xb4, 0x00));
}
-void rc702_state::init_rc702()
-{
- uint8_t *main = memregion("maincpu")->base();
-
- membank("bankr0")->configure_entry(1, &main[0x0000]);
- membank("bankr0")->configure_entry(0, &main[0x10000]);
- membank("bankw0")->configure_entry(0, &main[0x0000]);
-}
-
I8275_DRAW_CHARACTER_MEMBER( rc702_state::display_pixels )
{
const rgb_t *palette = m_palette->palette()->entry_list_raw();
@@ -335,8 +339,8 @@ void rc702_state::rc702(machine_config &config)
{
/* basic machine hardware */
Z80(config, m_maincpu, XTAL(8'000'000) / 2);
- m_maincpu->set_addrmap(AS_PROGRAM, &rc702_state::rc702_mem);
- m_maincpu->set_addrmap(AS_IO, &rc702_state::rc702_io);
+ m_maincpu->set_addrmap(AS_PROGRAM, &rc702_state::mem_map);
+ m_maincpu->set_addrmap(AS_IO, &rc702_state::io_map);
m_maincpu->set_daisy_config(daisy_chain_intf);
CLOCK(config, "ctc_clock", 614000).signal_handler().set(FUNC(rc702_state::clock_w));
@@ -402,13 +406,13 @@ void rc702_state::rc702(machine_config &config)
/* ROM definition */
ROM_START( rc702 )
- ROM_REGION( 0x10800, "maincpu", 0 )
+ ROM_REGION( 0x0800, "maincpu", 0 )
ROM_SYSTEM_BIOS(0, "rc702", "RC702")
- ROMX_LOAD( "roa375.ic66", 0x10000, 0x0800, CRC(034cf9ea) SHA1(306af9fc779e3d4f51645ba04f8a99b11b5e6084), ROM_BIOS(0))
+ ROMX_LOAD( "roa375.ic66", 0x0000, 0x0800, CRC(034cf9ea) SHA1(306af9fc779e3d4f51645ba04f8a99b11b5e6084), ROM_BIOS(0))
ROM_SYSTEM_BIOS(1, "rc703", "RC703")
- ROMX_LOAD( "rob357.rom", 0x10000, 0x0800, CRC(dcf84a48) SHA1(7190d3a898bcbfa212178a4d36afc32bbbc166ef), ROM_BIOS(1))
+ ROMX_LOAD( "rob357.rom", 0x0000, 0x0800, CRC(dcf84a48) SHA1(7190d3a898bcbfa212178a4d36afc32bbbc166ef), ROM_BIOS(1))
ROM_SYSTEM_BIOS(2, "rc700", "RC700")
- ROMX_LOAD( "rob358.rom", 0x10000, 0x0800, CRC(254aa89e) SHA1(5fb1eb8df1b853b931e670a2ff8d062c1bd8d6bc), ROM_BIOS(2))
+ ROMX_LOAD( "rob358.rom", 0x0000, 0x0800, CRC(254aa89e) SHA1(5fb1eb8df1b853b931e670a2ff8d062c1bd8d6bc), ROM_BIOS(2))
ROM_REGION( 0x1000, "chargen", 0 )
ROM_LOAD( "roa296.rom", 0x0000, 0x0800, CRC(7d7e4548) SHA1(efb8b1ece5f9eeca948202a6396865f26134ff2f) ) // char
@@ -418,4 +422,4 @@ ROM_END
/* Driver */
// YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS
-COMP( 1979, rc702, 0, 0, rc702, rc702, rc702_state, init_rc702, "Regnecentralen", "RC702 Piccolo", MACHINE_NOT_WORKING )
+COMP( 1979, rc702, 0, 0, rc702, rc702, rc702_state, empty_init, "Regnecentralen", "RC702 Piccolo", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE )
diff --git a/src/mame/drivers/systec.cpp b/src/mame/drivers/systec.cpp
index 938d8cf439d..d943423689c 100644
--- a/src/mame/drivers/systec.cpp
+++ b/src/mame/drivers/systec.cpp
@@ -46,25 +46,27 @@ public:
systec_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag)
, m_maincpu(*this, "maincpu")
- { }
+ , m_ram(*this, "mainram")
+ { }
void systec(machine_config &config);
private:
- void systec_io(address_map &map);
- void systec_mem(address_map &map);
+ void io_map(address_map &map);
+ void mem_map(address_map &map);
virtual void machine_reset() override;
required_device<cpu_device> m_maincpu;
+ required_shared_ptr<u8> m_ram;
};
-void systec_state::systec_mem(address_map &map)
+void systec_state::mem_map(address_map &map)
{
map.unmap_value_high();
- map(0x0000, 0xffff).ram().region("maincpu", 0);
+ map(0x0000, 0xffff).ram().share("mainram");
}
-void systec_state::systec_io(address_map &map)
+void systec_state::io_map(address_map &map)
{
map.global_mask(0xff);
map(0x68, 0x6b); // fdc?
@@ -78,9 +80,8 @@ INPUT_PORTS_END
void systec_state::machine_reset()
{
- uint8_t *m_p_maincpu = memregion("maincpu")->base();
- uint8_t *m_p_roms = memregion("roms")->base();
- memcpy(m_p_maincpu, m_p_roms, 0x2000);
+ uint8_t *m = memregion("roms")->base();
+ memcpy(m_ram, m, 0x2000);
}
@@ -88,8 +89,8 @@ void systec_state::systec(machine_config &config)
{
/* basic machine hardware */
Z80(config, m_maincpu, XTAL(16'000'000) / 4);
- m_maincpu->set_addrmap(AS_PROGRAM, &systec_state::systec_mem);
- m_maincpu->set_addrmap(AS_IO, &systec_state::systec_io);
+ m_maincpu->set_addrmap(AS_PROGRAM, &systec_state::mem_map);
+ m_maincpu->set_addrmap(AS_IO, &systec_state::io_map);
clock_device &uart_clock(CLOCK(config, "uart_clock", 153600));
uart_clock.signal_handler().set("sio", FUNC(z80sio_device::txca_w));
@@ -110,12 +111,11 @@ void systec_state::systec(machine_config &config)
/* ROM definition */
ROM_START( systec )
- ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASEFF )
- ROM_REGION( 0x10000, "roms", 0 )
+ ROM_REGION( 0x2000, "roms", 0 )
ROM_LOAD( "systec.bin", 0x0000, 0x2000, CRC(967108ab) SHA1(a414db032ca7db0f9fdbe22aa68a099a93efb593))
ROM_END
/* Driver */
// YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS
-COMP(19??, systec, 0, 0, systec, systec, systec_state, empty_init, "Systec", "Systec Z80", MACHINE_NOT_WORKING | MACHINE_NO_SOUND)
+COMP(19??, systec, 0, 0, systec, systec, systec_state, empty_init, "Systec", "Systec Z80", MACHINE_NOT_WORKING | MACHINE_NO_SOUND | MACHINE_SUPPORTS_SAVE )
diff --git a/src/mame/drivers/vixen.cpp b/src/mame/drivers/vixen.cpp
index 4936fff9160..bcc08415b15 100644
--- a/src/mame/drivers/vixen.cpp
+++ b/src/mame/drivers/vixen.cpp
@@ -373,14 +373,6 @@ TIMER_DEVICE_CALLBACK_MEMBER(vixen_state::vsync_tick)
}
}
-void vixen_state::video_start()
-{
- // register for state saving
- save_item(NAME(m_alt));
- save_item(NAME(m_256));
- save_item(NAME(m_vsync));
-}
-
uint32_t vixen_state::screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect)
{
const pen_t *pen = m_palette->pens();
@@ -658,6 +650,20 @@ void vixen_state::machine_start()
save_item(NAME(m_cmd_d0));
save_item(NAME(m_cmd_d1));
save_item(NAME(m_fdint));
+ save_item(NAME(m_alt));
+ save_item(NAME(m_256));
+ save_item(NAME(m_vsync));
+ save_item(NAME(m_srq));
+ save_item(NAME(m_atn));
+ save_item(NAME(m_enb_srq_int));
+ save_item(NAME(m_enb_atn_int));
+ save_item(NAME(m_rxrdy));
+ save_item(NAME(m_txrdy));
+ save_item(NAME(m_int_clk));
+ save_item(NAME(m_enb_xmt_int));
+ save_item(NAME(m_enb_rcv_int));
+ save_item(NAME(m_enb_ring_int));
+
}
void vixen_state::machine_reset()
@@ -777,4 +783,4 @@ void vixen_state::init_vixen()
//**************************************************************************
// YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS
-COMP( 1984, vixen, 0, 0, vixen, vixen, vixen_state, init_vixen, "Osborne", "Vixen", 0 )
+COMP( 1984, vixen, 0, 0, vixen, vixen, vixen_state, init_vixen, "Osborne", "Vixen", MACHINE_SUPPORTS_SAVE )
diff --git a/src/mame/drivers/vta2000.cpp b/src/mame/drivers/vta2000.cpp
index 8850e90af1a..974bd16f0d0 100644
--- a/src/mame/drivers/vta2000.cpp
+++ b/src/mame/drivers/vta2000.cpp
@@ -236,4 +236,4 @@ ROM_END
/* Driver */
// YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS
-COMP( 19??, vta2000, 0, 0, vta2000, vta2000, vta2000_state, empty_init, "<unknown>", "VTA2000-15m", MACHINE_NOT_WORKING )
+COMP( 19??, vta2000, 0, 0, vta2000, vta2000, vta2000_state, empty_init, "<unknown>", "VTA2000-15m", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE )
diff --git a/src/mame/drivers/z1013.cpp b/src/mame/drivers/z1013.cpp
index ac361f0687d..44831c2dad5 100644
--- a/src/mame/drivers/z1013.cpp
+++ b/src/mame/drivers/z1013.cpp
@@ -65,6 +65,8 @@ public:
z1013_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag)
, m_maincpu(*this, "maincpu")
+ , m_rom(*this, "maincpu")
+ , m_ram(*this, "mainram")
, m_cass(*this, "cassette")
, m_p_videoram(*this, "videoram")
, m_p_chargen(*this, "chargen")
@@ -81,13 +83,17 @@ private:
DECLARE_SNAPSHOT_LOAD_MEMBER(snapshot_cb);
uint32_t screen_update_z1013(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
- void z1013_io(address_map &map);
- void z1013_mem(address_map &map);
+ void io_map(address_map &map);
+ void mem_map(address_map &map);
uint8_t m_keyboard_line;
bool m_keyboard_part;
virtual void machine_reset() override;
+ virtual void machine_start() override;
+ memory_passthrough_handler *m_rom_shadow_tap;
required_device<cpu_device> m_maincpu;
+ required_region_ptr<u8> m_rom;
+ required_shared_ptr<u8> m_ram;
required_device<cassette_image_device> m_cass;
required_shared_ptr<uint8_t> m_p_videoram;
required_region_ptr<u8> m_p_chargen;
@@ -95,14 +101,14 @@ private:
/* Address maps */
-void z1013_state::z1013_mem(address_map &map)
+void z1013_state::mem_map(address_map &map)
{
- map(0x0000, 0xebff).ram();
+ map(0x0000, 0xebff).ram().share("mainram");
map(0xec00, 0xefff).ram().share("videoram");
- map(0xf000, 0xffff).rom(); // ROM
+ map(0xf000, 0xffff).rom().region("maincpu",0);
}
-void z1013_state::z1013_io(address_map &map)
+void z1013_state::io_map(address_map &map)
{
map.global_mask(0xff);
map(0x00, 0x03).rw("z80pio", FUNC(z80pio_device::read_alt), FUNC(z80pio_device::write_alt));
@@ -268,9 +274,31 @@ uint32_t z1013_state::screen_update_z1013(screen_device &screen, bitmap_ind16 &b
void z1013_state::machine_reset()
{
- m_maincpu->set_state_int(Z80_PC, 0xF000);
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;
+ });
+}
+
+void z1013_state::machine_start()
+{
+ save_item(NAME(m_keyboard_line));
+ save_item(NAME(m_keyboard_part));
}
void z1013_state::z1013_keyboard_w(uint8_t data)
@@ -352,7 +380,7 @@ SNAPSHOT_LOAD_MEMBER(z1013_state::snapshot_cb)
}
/* F4 Character Displayer */
-static const gfx_layout z1013_charlayout =
+static const gfx_layout charlayout =
{
8, 8, /* 8 x 8 characters */
512, /* 2 x 256 characters */
@@ -366,7 +394,7 @@ static const gfx_layout z1013_charlayout =
};
static GFXDECODE_START( gfx_z1013 )
- GFXDECODE_ENTRY( "chargen", 0x0000, z1013_charlayout, 0, 1 )
+ GFXDECODE_ENTRY( "chargen", 0x0000, charlayout, 0, 1 )
GFXDECODE_END
/* Machine driver */
@@ -374,8 +402,8 @@ void z1013_state::z1013(machine_config &config)
{
/* basic machine hardware */
Z80(config, m_maincpu, XTAL(1'000'000));
- m_maincpu->set_addrmap(AS_PROGRAM, &z1013_state::z1013_mem);
- m_maincpu->set_addrmap(AS_IO, &z1013_state::z1013_io);
+ m_maincpu->set_addrmap(AS_PROGRAM, &z1013_state::mem_map);
+ m_maincpu->set_addrmap(AS_IO, &z1013_state::io_map);
/* video hardware */
screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
@@ -415,12 +443,12 @@ void z1013_state::z1013k76(machine_config &config)
/* ROM definition */
ROM_START( z1013 )
- ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASEFF )
+ ROM_REGION( 0x1000, "maincpu", ROMREGION_ERASEFF )
ROM_SYSTEM_BIOS( 0, "202", "Original" )
- ROMX_LOAD( "mon_202.bin", 0xf000, 0x0800, CRC(5884edab) SHA1(c3a45ea5cc4da2b7c270068ba1e2d75916960709), ROM_BIOS(0))
+ ROMX_LOAD( "mon_202.bin", 0x0000, 0x0800, CRC(5884edab) SHA1(c3a45ea5cc4da2b7c270068ba1e2d75916960709), ROM_BIOS(0))
ROM_SYSTEM_BIOS( 1, "jm", "Jens Muller version" )
- ROMX_LOAD( "mon_jm_1992.bin", 0xf000, 0x0800, CRC(186d2888) SHA1(b52ccb557c41c96bace7db4c4f5031a0cd736168), ROM_BIOS(1))
+ ROMX_LOAD( "mon_jm_1992.bin", 0x0000, 0x0800, CRC(186d2888) SHA1(b52ccb557c41c96bace7db4c4f5031a0cd736168), ROM_BIOS(1))
ROM_REGION(0x1000, "chargen",0)
ROM_LOAD ("z1013font.bin", 0x0000, 0x0800, CRC(7023088f) SHA1(8b197a51c070efeba173d10be197bd41e764358c))
@@ -428,8 +456,8 @@ ROM_START( z1013 )
ROM_END
ROM_START( z1013a2 )
- ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASEFF )
- ROM_LOAD( "mon_a2.bin", 0xf000, 0x0800, CRC(98b19b10) SHA1(97e158f589198cb96aae1567ee0aa6e47824027e))
+ ROM_REGION( 0x1000, "maincpu", ROMREGION_ERASEFF )
+ ROM_LOAD( "mon_a2.bin", 0x0000, 0x0800, CRC(98b19b10) SHA1(97e158f589198cb96aae1567ee0aa6e47824027e))
ROM_REGION(0x1000, "chargen",0)
ROM_LOAD ("z1013font.bin", 0x0000, 0x0800, CRC(7023088f) SHA1(8b197a51c070efeba173d10be197bd41e764358c))
@@ -437,8 +465,8 @@ ROM_START( z1013a2 )
ROM_END
ROM_START( z1013k76 )
- ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASEFF )
- ROM_LOAD( "mon_rb_k7659.bin", 0xf000, 0x1000, CRC(b3d88c45) SHA1(0bcd20338cf0706b384f40901b7f8498c6f6c320))
+ ROM_REGION( 0x1000, "maincpu", ROMREGION_ERASEFF )
+ ROM_LOAD( "mon_rb_k7659.bin", 0x0000, 0x1000, CRC(b3d88c45) SHA1(0bcd20338cf0706b384f40901b7f8498c6f6c320))
ROM_REGION(0x1000, "chargen",0)
ROM_LOAD ("z1013font.bin", 0x0000, 0x0800, CRC(7023088f) SHA1(8b197a51c070efeba173d10be197bd41e764358c))
@@ -472,8 +500,8 @@ ROM_END
/* Driver */
// YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS
-COMP( 1985, z1013, 0, 0, z1013, z1013_8x4, z1013_state, empty_init, "VEB Robotron Electronics Riesa", "Z1013 (matrix 8x4)", 0 )
-COMP( 1985, z1013a2, z1013, 0, z1013, z1013_8x8, z1013_state, empty_init, "VEB Robotron Electronics Riesa", "Z1013 (matrix 8x8)", 0 )
-COMP( 1985, z1013k76, z1013, 0, z1013k76, z1013, z1013_state, empty_init, "VEB Robotron Electronics Riesa", "Z1013 (K7659)", MACHINE_NOT_WORKING | MACHINE_NO_SOUND_HW)
-COMP( 1985, z1013s60, z1013, 0, z1013k76, z1013_8x8, z1013_state, empty_init, "VEB Robotron Electronics Riesa", "Z1013 (K7652/S6009)", MACHINE_NOT_WORKING | MACHINE_NO_SOUND_HW)
-COMP( 1985, z1013k69, z1013, 0, z1013k76, z1013, z1013_state, empty_init, "VEB Robotron Electronics Riesa", "Z1013 (K7669)", MACHINE_NOT_WORKING | MACHINE_NO_SOUND_HW)
+COMP( 1985, z1013, 0, 0, z1013, z1013_8x4, z1013_state, empty_init, "VEB Robotron Electronics Riesa", "Z1013 (matrix 8x4)", MACHINE_SUPPORTS_SAVE )
+COMP( 1985, z1013a2, z1013, 0, z1013, z1013_8x8, z1013_state, empty_init, "VEB Robotron Electronics Riesa", "Z1013 (matrix 8x8)", MACHINE_SUPPORTS_SAVE )
+COMP( 1985, z1013k76, z1013, 0, z1013k76, z1013, z1013_state, empty_init, "VEB Robotron Electronics Riesa", "Z1013 (K7659)", MACHINE_NOT_WORKING | MACHINE_NO_SOUND_HW | MACHINE_SUPPORTS_SAVE )
+COMP( 1985, z1013s60, z1013, 0, z1013k76, z1013_8x8, z1013_state, empty_init, "VEB Robotron Electronics Riesa", "Z1013 (K7652/S6009)", MACHINE_NOT_WORKING | MACHINE_NO_SOUND_HW | MACHINE_SUPPORTS_SAVE )
+COMP( 1985, z1013k69, z1013, 0, z1013k76, z1013, z1013_state, empty_init, "VEB Robotron Electronics Riesa", "Z1013 (K7669)", MACHINE_NOT_WORKING | MACHINE_NO_SOUND_HW | MACHINE_SUPPORTS_SAVE )
diff --git a/src/mame/drivers/z9001.cpp b/src/mame/drivers/z9001.cpp
index 595a011de67..3755fcfdd85 100644
--- a/src/mame/drivers/z9001.cpp
+++ b/src/mame/drivers/z9001.cpp
@@ -57,6 +57,8 @@ public:
: driver_device(mconfig, type, tag)
, m_framecnt(0)
, m_maincpu(*this, "maincpu")
+ , m_rom(*this, "maincpu")
+ , m_ram(*this, "mainram")
, m_beeper(*this, "beeper")
, m_cass(*this, "cassette")
, m_p_colorram(*this, "colorram")
@@ -74,14 +76,17 @@ private:
TIMER_DEVICE_CALLBACK_MEMBER(timer_callback);
uint32_t screen_update_z9001(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
- void z9001_io(address_map &map);
- void z9001_mem(address_map &map);
+ void io_map(address_map &map);
+ void mem_map(address_map &map);
uint8_t m_framecnt;
bool m_cassbit;
virtual void machine_reset() override;
- //virtual void machine_start();
+ virtual void machine_start() override;
+ memory_passthrough_handler *m_rom_shadow_tap;
required_device<z80_device> m_maincpu;
+ required_region_ptr<u8> m_rom;
+ required_shared_ptr<u8> m_ram;
required_device<beep_device> m_beeper;
required_device<cassette_image_device> m_cass;
required_shared_ptr<uint8_t> m_p_colorram;
@@ -89,17 +94,17 @@ private:
required_region_ptr<u8> m_p_chargen;
};
-void z9001_state::z9001_mem(address_map &map)
+void z9001_state::mem_map(address_map &map)
{
map.unmap_value_high();
- map(0x0000, 0xe7ff).ram();
+ map(0x0000, 0xe7ff).ram().share("mainram");
+ map(0xc000, 0xe7ff).rom().region("maincpu",0x1000);
map(0xe800, 0xebff).ram().share("colorram");
- map(0xc000, 0xe7ff).rom();
map(0xec00, 0xefff).ram().share("videoram");
- map(0xf000, 0xffff).rom();
+ map(0xf000, 0xffff).rom().region("maincpu",0);
}
-void z9001_state::z9001_io(address_map &map)
+void z9001_state::io_map(address_map &map)
{
map.unmap_value_high();
map.global_mask(0xff);
@@ -144,7 +149,28 @@ TIMER_DEVICE_CALLBACK_MEMBER(z9001_state::timer_callback)
void z9001_state::machine_reset()
{
- m_maincpu->set_state_int(Z80_PC, 0xf000);
+ address_space &program = m_maincpu->space(AS_PROGRAM);
+ program.install_rom(0x0000, 0x0fff, m_rom); // do it here for F3
+ m_rom_shadow_tap = program.install_read_tap(0xf000, 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, 0x0fff, m_ram);
+ }
+
+ // return the original data
+ return data;
+ });
+}
+
+void z9001_state::machine_start()
+{
+ save_item(NAME(m_framecnt));
+ save_item(NAME(m_cassbit));
}
uint32_t z9001_state::screen_update_z9001(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
@@ -191,7 +217,7 @@ uint32_t z9001_state::screen_update_z9001(screen_device &screen, bitmap_ind16 &b
}
/* F4 Character Displayer */
-static const gfx_layout z9001_charlayout =
+static const gfx_layout charlayout =
{
8, 8, /* 8 x 8 characters */
1024, /* 4 x 256 characters */
@@ -210,7 +236,7 @@ void z9001_state::kbd_put(u8 data)
}
static GFXDECODE_START( gfx_z9001 )
- GFXDECODE_ENTRY( "chargen", 0x0000, z9001_charlayout, 0, 1 )
+ GFXDECODE_ENTRY( "chargen", 0x0000, charlayout, 0, 1 )
GFXDECODE_END
@@ -218,8 +244,8 @@ void z9001_state::z9001(machine_config &config)
{
/* basic machine hardware */
Z80(config, m_maincpu, XTAL(9'830'400) / 4);
- m_maincpu->set_addrmap(AS_PROGRAM, &z9001_state::z9001_mem);
- m_maincpu->set_addrmap(AS_IO, &z9001_state::z9001_io);
+ m_maincpu->set_addrmap(AS_PROGRAM, &z9001_state::mem_map);
+ m_maincpu->set_addrmap(AS_IO, &z9001_state::io_map);
m_maincpu->set_daisy_config(z9001_daisy_chain);
/* video hardware */
@@ -261,13 +287,13 @@ void z9001_state::z9001(machine_config &config)
/* ROM definition */
ROM_START( z9001 )
- ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASEFF )
+ ROM_REGION( 0x3800, "maincpu", 0 )
ROM_SYSTEM_BIOS( 0, "orig", "Original" )
- ROMX_LOAD( "os____f0.851", 0xf000, 0x1000, CRC(9fe60a92) SHA1(553609631f5eaa7d6758a73f56c613e280a5b310), ROM_BIOS(0))
+ ROMX_LOAD( "os____f0.851", 0x0000, 0x1000, CRC(9fe60a92) SHA1(553609631f5eaa7d6758a73f56c613e280a5b310), ROM_BIOS(0))
ROM_SYSTEM_BIOS( 1, "rb20", "ROM-Bank System without menu" )
- ROMX_LOAD( "os_rb20.rom", 0xf000, 0x1000, CRC(c783124d) SHA1(c2893ce5bb23b280ba4e982e860586d21de2469b), ROM_BIOS(1))
+ ROMX_LOAD( "os_rb20.rom", 0x0000, 0x1000, CRC(c783124d) SHA1(c2893ce5bb23b280ba4e982e860586d21de2469b), ROM_BIOS(1))
ROM_SYSTEM_BIOS( 2, "rb21", "ROM-Bank System with menu" )
- ROMX_LOAD( "os_rb21.rom", 0xf000, 0x1000, CRC(11eec2dd) SHA1(5dbb661bdf4daf92d6c4ffbbdec674e57917e9eb), ROM_BIOS(2))
+ ROMX_LOAD( "os_rb21.rom", 0x0000, 0x1000, CRC(11eec2dd) SHA1(5dbb661bdf4daf92d6c4ffbbdec674e57917e9eb), ROM_BIOS(2))
ROM_REGION( 0x2000, "chargen", 0 )
ROM_LOAD( "chargen.851", 0x0000, 0x0800, CRC(dd9c0f4e) SHA1(2e4928ba7161f5cce7173b7d2ded3d6596ae2aa2))
@@ -279,15 +305,15 @@ ROM_END
#define rom_kc85_111 rom_z9001
ROM_START( kc87_10 )
- ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASEFF )
+ ROM_REGION( 0x3800, "maincpu", 0 )
ROM_SYSTEM_BIOS( 0, "orig", "Original" )
- ROMX_LOAD( "os____f0.851", 0xf000, 0x1000, CRC(9fe60a92) SHA1(553609631f5eaa7d6758a73f56c613e280a5b310), ROM_BIOS(0))
+ ROMX_LOAD( "os____f0.851", 0x0000, 0x1000, CRC(9fe60a92) SHA1(553609631f5eaa7d6758a73f56c613e280a5b310), ROM_BIOS(0))
ROM_SYSTEM_BIOS( 1, "rb20", "ROM-Bank System without menu" )
- ROMX_LOAD( "os_rb20.rom", 0xf000, 0x1000, CRC(c783124d) SHA1(c2893ce5bb23b280ba4e982e860586d21de2469b), ROM_BIOS(1))
+ ROMX_LOAD( "os_rb20.rom", 0x0000, 0x1000, CRC(c783124d) SHA1(c2893ce5bb23b280ba4e982e860586d21de2469b), ROM_BIOS(1))
ROM_SYSTEM_BIOS( 2, "rb21", "ROM-Bank System with menu" )
- ROMX_LOAD( "os_rb21.rom", 0xf000, 0x1000, CRC(11eec2dd) SHA1(5dbb661bdf4daf92d6c4ffbbdec674e57917e9eb), ROM_BIOS(2))
+ ROMX_LOAD( "os_rb21.rom", 0x0000, 0x1000, CRC(11eec2dd) SHA1(5dbb661bdf4daf92d6c4ffbbdec674e57917e9eb), ROM_BIOS(2))
- ROM_LOAD( "basic_c0.87a", 0xc000, 0x2800, CRC(c508d45e) SHA1(ea85b53e21429c4cb85cdb81b92f278a8f4eb574))
+ ROM_LOAD( "basic_c0.87a", 0x1000, 0x2800, CRC(c508d45e) SHA1(ea85b53e21429c4cb85cdb81b92f278a8f4eb574))
ROM_REGION( 0x2000, "chargen", 0 )
ROM_LOAD( "chargen.851", 0x0000, 0x0800, CRC(dd9c0f4e) SHA1(2e4928ba7161f5cce7173b7d2ded3d6596ae2aa2))
@@ -299,15 +325,15 @@ ROM_END
#define rom_kc87_11 rom_kc87_10
ROM_START( kc87_20 )
- ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASEFF )
+ ROM_REGION( 0x3800, "maincpu", 0 )
ROM_SYSTEM_BIOS( 0, "orig", "Original" )
- ROMX_LOAD( "os____f0.87b", 0xf000, 0x1000, CRC(a357d093) SHA1(b1df6b499517c8366a0795030ee800e8a258e938), ROM_BIOS(0))
+ ROMX_LOAD( "os____f0.87b", 0x0000, 0x1000, CRC(a357d093) SHA1(b1df6b499517c8366a0795030ee800e8a258e938), ROM_BIOS(0))
ROM_SYSTEM_BIOS( 1, "rb20", "ROM-Bank System without menu" )
- ROMX_LOAD( "os_rb20.rom", 0xf000, 0x1000, CRC(c783124d) SHA1(c2893ce5bb23b280ba4e982e860586d21de2469b), ROM_BIOS(1))
+ ROMX_LOAD( "os_rb20.rom", 0x0000, 0x1000, CRC(c783124d) SHA1(c2893ce5bb23b280ba4e982e860586d21de2469b), ROM_BIOS(1))
ROM_SYSTEM_BIOS( 2, "rb21", "ROM-Bank System with menu" )
- ROMX_LOAD( "os_rb21.rom", 0xf000, 0x1000, CRC(11eec2dd) SHA1(5dbb661bdf4daf92d6c4ffbbdec674e57917e9eb), ROM_BIOS(2))
+ ROMX_LOAD( "os_rb21.rom", 0x0000, 0x1000, CRC(11eec2dd) SHA1(5dbb661bdf4daf92d6c4ffbbdec674e57917e9eb), ROM_BIOS(2))
- ROM_LOAD( "basic_c0.87b", 0xc000, 0x2800, CRC(9e8f6380) SHA1(8ffecc64ba35c953c93738f8568c83dc6af1ae72))
+ ROM_LOAD( "basic_c0.87b", 0x1000, 0x2800, CRC(9e8f6380) SHA1(8ffecc64ba35c953c93738f8568c83dc6af1ae72))
ROM_REGION( 0x2000, "chargen", 0 )
ROM_LOAD( "chargen.851", 0x0000, 0x0800, CRC(dd9c0f4e) SHA1(2e4928ba7161f5cce7173b7d2ded3d6596ae2aa2))
@@ -321,9 +347,9 @@ ROM_END
/* Driver */
// YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS
-COMP( 1984, z9001, 0, 0, z9001, z9001, z9001_state, empty_init, "Robotron", "Z9001 (KC 85/1.10)", MACHINE_NOT_WORKING )
-COMP( 1986, kc85_111, z9001, 0, z9001, z9001, z9001_state, empty_init, "Robotron", "KC 85/1.11", MACHINE_NOT_WORKING )
-COMP( 1987, kc87_10, z9001, 0, z9001, z9001, z9001_state, empty_init, "Robotron", "KC 87.10", MACHINE_NOT_WORKING )
-COMP( 1987, kc87_11, z9001, 0, z9001, z9001, z9001_state, empty_init, "Robotron", "KC 87.11", MACHINE_NOT_WORKING )
-COMP( 1987, kc87_20, z9001, 0, z9001, z9001, z9001_state, empty_init, "Robotron", "KC 87.20", MACHINE_NOT_WORKING )
-COMP( 1987, kc87_21, z9001, 0, z9001, z9001, z9001_state, empty_init, "Robotron", "KC 87.21", MACHINE_NOT_WORKING )
+COMP( 1984, z9001, 0, 0, z9001, z9001, z9001_state, empty_init, "Robotron", "Z9001 (KC 85/1.10)", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE )
+COMP( 1986, kc85_111, z9001, 0, z9001, z9001, z9001_state, empty_init, "Robotron", "KC 85/1.11", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE )
+COMP( 1987, kc87_10, z9001, 0, z9001, z9001, z9001_state, empty_init, "Robotron", "KC 87.10", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE )
+COMP( 1987, kc87_11, z9001, 0, z9001, z9001, z9001_state, empty_init, "Robotron", "KC 87.11", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE )
+COMP( 1987, kc87_20, z9001, 0, z9001, z9001, z9001_state, empty_init, "Robotron", "KC 87.20", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE )
+COMP( 1987, kc87_21, z9001, 0, z9001, z9001, z9001_state, empty_init, "Robotron", "KC 87.21", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE )
diff --git a/src/mame/includes/phc25.h b/src/mame/includes/phc25.h
index 360520185ee..e74b781102a 100644
--- a/src/mame/includes/phc25.h
+++ b/src/mame/includes/phc25.h
@@ -27,13 +27,20 @@ class phc25_state : public driver_device
public:
phc25_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag)
- , m_video_ram(*this, "video_ram")
+ , m_vram(*this, "videoram")
, m_maincpu(*this, Z80_TAG)
, m_vdg(*this, MC6847_TAG)
, m_centronics(*this, CENTRONICS_TAG)
, m_cassette(*this, "cassette")
{ }
+ void phc25(machine_config &config);
+ void pal(machine_config &config);
+ void ntsc(machine_config &config);
+
+private:
+ void io_map(address_map &map);
+ void mem_map(address_map &map);
DECLARE_WRITE_LINE_MEMBER( write_centronics_busy );
uint8_t port40_r();
void port40_w(uint8_t data);
@@ -41,22 +48,16 @@ public:
uint8_t video_ram_r(offs_t offset);
MC6847_GET_CHARROM_MEMBER(ntsc_char_rom_r);
MC6847_GET_CHARROM_MEMBER(pal_char_rom_r);
-
- void phc25(machine_config &config);
- void pal(machine_config &config);
- void ntsc(machine_config &config);
- void phc25_io(address_map &map);
- void phc25_mem(address_map &map);
-private:
- virtual void video_start() override;
+ void machine_start() override;
+ void machine_reset() override;
uint8_t *m_char_rom;
uint8_t m_port40;
- required_shared_ptr<uint8_t> m_video_ram;
+ int m_centronics_busy;
+ required_shared_ptr<uint8_t> m_vram;
required_device<cpu_device> m_maincpu;
required_device<mc6847_base_device> m_vdg;
required_device<centronics_device> m_centronics;
required_device<cassette_image_device> m_cassette;
- int m_centronics_busy;
};
#endif
diff --git a/src/mame/includes/vixen.h b/src/mame/includes/vixen.h
index 0ec2411427f..ecf9802da1d 100644
--- a/src/mame/includes/vixen.h
+++ b/src/mame/includes/vixen.h
@@ -108,8 +108,6 @@ private:
virtual void machine_start() override;
virtual void machine_reset() override;
- virtual void video_start() override;
-
void update_interrupt();
// keyboard state