summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author Robbbert <Robbbert@users.noreply.github.com>2020-06-11 19:44:02 +1000
committer Robbbert <Robbbert@users.noreply.github.com>2020-06-11 19:44:02 +1000
commitd3a7b0ddc1272c2e0e2417a4c6906d6f7c23bd88 (patch)
tree5a7c64940f04f87529514bf09ad282f61fd74073
parent2cb2934f94863ba045b243879c8b5ab19f41f6a7 (diff)
(nw) more cleanups
-rw-r--r--src/mame/drivers/h19.cpp2
-rw-r--r--src/mame/drivers/k8915.cpp47
-rw-r--r--src/mame/drivers/lcmate2.cpp48
-rw-r--r--src/mame/drivers/lola8a.cpp81
-rw-r--r--src/mame/drivers/mbc200.cpp85
-rw-r--r--src/mame/drivers/meritum.cpp64
-rw-r--r--src/mame/drivers/mes.cpp27
-rw-r--r--src/mame/drivers/mits680b.cpp2
-rw-r--r--src/mame/drivers/modellot.cpp74
-rw-r--r--src/mame/drivers/pulsar.cpp7
10 files changed, 256 insertions, 181 deletions
diff --git a/src/mame/drivers/h19.cpp b/src/mame/drivers/h19.cpp
index f1b97ffcabb..8dd9f74013c 100644
--- a/src/mame/drivers/h19.cpp
+++ b/src/mame/drivers/h19.cpp
@@ -1,5 +1,5 @@
// license:BSD-3-Clause
-// copyright-holders:Robbbert, Mark Garlanger
+// copyright-holders:Mark Garlanger
/***************************************************************************
Heathkit H19
diff --git a/src/mame/drivers/k8915.cpp b/src/mame/drivers/k8915.cpp
index aae294342de..c68441f0221 100644
--- a/src/mame/drivers/k8915.cpp
+++ b/src/mame/drivers/k8915.cpp
@@ -24,42 +24,43 @@ public:
k8915_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_p_videoram(*this, "videoram")
, m_p_chargen(*this, "chargen")
{ }
void k8915(machine_config &config);
- void init_k8915();
-
private:
- void k8915_a8_w(uint8_t data);
+ void k8915_a8_w(u8 data);
uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
void io_map(address_map &map);
void mem_map(address_map &map);
- uint8_t m_framecnt;
- virtual void machine_reset() override;
+ u8 m_framecnt;
+ bool m_rom_in_map;
+ void machine_start() override;
+ void machine_reset() override;
required_device<cpu_device> m_maincpu;
- required_shared_ptr<uint8_t> m_p_videoram;
+ required_region_ptr<u8> m_rom;
+ required_shared_ptr<u8> m_ram;
+ required_shared_ptr<u8> m_p_videoram;
required_region_ptr<u8> m_p_chargen;
};
-void k8915_state::k8915_a8_w(uint8_t data)
+void k8915_state::k8915_a8_w(u8 data)
{
// seems to switch ram and rom around.
- if (data == 0x87)
- membank("boot")->set_entry(0); // ram at 0000
- else
- membank("boot")->set_entry(1); // rom at 0000
+ m_rom_in_map = (data == 0x87) ? 0 : 1;
}
void k8915_state::mem_map(address_map &map)
{
map.unmap_value_high();
- map(0x0000, 0x0fff).bankrw("boot");
+ map(0x0000, 0x0fff).ram().share("mainram").lr8(NAME([this] (offs_t offset) { if(m_rom_in_map) return m_rom[offset]; else return m_ram[offset]; }));
map(0x1000, 0x17ff).ram().share("videoram");
map(0x1800, 0xffff).ram();
}
@@ -78,19 +79,19 @@ INPUT_PORTS_END
void k8915_state::machine_reset()
{
- membank("boot")->set_entry(1);
+ m_rom_in_map = 1;
}
-void k8915_state::init_k8915()
+void k8915_state::machine_start()
{
- uint8_t *RAM = memregion("maincpu")->base();
- membank("boot")->configure_entries(0, 2, &RAM[0x0000], 0x10000);
+ save_item(NAME(m_framecnt));
+ save_item(NAME(m_rom_in_map));
}
-uint32_t k8915_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
+u32 k8915_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
{
- uint8_t y,ra,chr,gfx;
- uint16_t sy=0,ma=0,x;
+ u8 y,ra,chr,gfx;
+ u16 sy=0,ma=0,x;
m_framecnt++;
@@ -98,7 +99,7 @@ uint32_t k8915_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap,
{
for (ra = 0; ra < 10; ra++)
{
- uint16_t *p = &bitmap.pix16(sy++);
+ u16 *p = &bitmap.pix16(sy++);
for (x = ma; x < ma + 80; x++)
{
@@ -170,8 +171,8 @@ void k8915_state::k8915(machine_config &config)
/* ROM definition */
ROM_START( k8915 )
- ROM_REGION( 0x11000, "maincpu", ROMREGION_ERASEFF )
- ROM_LOAD( "k8915.bin", 0x10000, 0x1000, CRC(ca70385f) SHA1(a34c14adae9be821678aed7f9e33932ee1f3e61c))
+ ROM_REGION( 0x1000, "maincpu", 0 )
+ ROM_LOAD( "k8915.bin", 0x0000, 0x1000, CRC(ca70385f) SHA1(a34c14adae9be821678aed7f9e33932ee1f3e61c))
/* character generator not dumped, using the one from 'c10' for now */
ROM_REGION( 0x2000, "chargen", 0 )
@@ -181,4 +182,4 @@ ROM_END
/* Driver */
// YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS
-COMP( 1982, k8915, 0, 0, k8915, k8915, k8915_state, init_k8915, "Robotron", "K8915", MACHINE_NOT_WORKING | MACHINE_NO_SOUND)
+COMP( 1982, k8915, 0, 0, k8915, k8915, k8915_state, empty_init, "Robotron", "K8915", MACHINE_NOT_WORKING | MACHINE_NO_SOUND | MACHINE_SUPPORTS_SAVE )
diff --git a/src/mame/drivers/lcmate2.cpp b/src/mame/drivers/lcmate2.cpp
index d0ccef31f32..4c687df074c 100644
--- a/src/mame/drivers/lcmate2.cpp
+++ b/src/mame/drivers/lcmate2.cpp
@@ -43,13 +43,13 @@
class lcmate2_state : public driver_device
{
public:
- lcmate2_state(const machine_config &mconfig, device_type type, const char *tag) :
- driver_device(mconfig, type, tag),
- m_maincpu(*this, "maincpu"),
- m_lcdc(*this, "hd44780"),
- m_rtc(*this, "rtc"),
- m_speaker(*this, "speaker"),
- m_kbdlines(*this, "LINE%u", 0U)
+ lcmate2_state(const machine_config &mconfig, device_type type, const char *tag)
+ : driver_device(mconfig, type, tag)
+ , m_maincpu(*this, "maincpu")
+ , m_lcdc(*this, "hd44780")
+ , m_rtc(*this, "rtc")
+ , m_speaker(*this, "speaker")
+ , m_kbdlines(*this, "LINE%u", 0U)
{ }
void lcmate2(machine_config &config);
@@ -64,23 +64,23 @@ private:
required_device<speaker_sound_device> m_speaker;
required_ioport_array<8> m_kbdlines;
- uint8_t key_r(offs_t offset);
- void speaker_w(uint8_t data);
- void bankswitch_w(uint8_t data);
+ u8 key_r(offs_t offset);
+ void speaker_w(u8 data);
+ void bankswitch_w(u8 data);
void lcmate2_palette(palette_device &palette) const;
- void lcmate2_io(address_map &map);
- void lcmate2_mem(address_map &map);
+ void io_map(address_map &map);
+ void mem_map(address_map &map);
};
-void lcmate2_state::speaker_w(uint8_t data)
+void lcmate2_state::speaker_w(u8 data)
{
m_speaker->level_w(BIT(data, 6));
}
// offsets are FE,FD,FB,F7,EF,DF,BF,7F to scan a particular row, or 00 to check if any key pressed
-uint8_t lcmate2_state::key_r(offs_t offset)
+u8 lcmate2_state::key_r(offs_t offset)
{
- uint8_t data = 0xff;
+ u8 data = 0xff;
for (int i = 0; i < 8; i++)
{
@@ -91,12 +91,12 @@ uint8_t lcmate2_state::key_r(offs_t offset)
return data;
}
-void lcmate2_state::bankswitch_w(uint8_t data)
+void lcmate2_state::bankswitch_w(u8 data)
{
membank("rombank")->set_entry(data&0x0f);
}
-void lcmate2_state::lcmate2_mem(address_map &map)
+void lcmate2_state::mem_map(address_map &map)
{
map.unmap_value_high();
map(0x0000, 0x3fff).rom();
@@ -104,7 +104,7 @@ void lcmate2_state::lcmate2_mem(address_map &map)
map(0x8000, 0x9fff).ram().mirror(0x6000).share("nvram");
}
-void lcmate2_state::lcmate2_io(address_map &map)
+void lcmate2_state::io_map(address_map &map)
{
map.unmap_value_high();
map(0x0000, 0x000f).rw(m_rtc, FUNC(rp5c15_device::read), FUNC(rp5c15_device::write));
@@ -208,10 +208,10 @@ void lcmate2_state::lcmate2_palette(palette_device &palette) const
void lcmate2_state::machine_start()
{
- membank("rombank")->configure_entries(0, 0x10, (uint8_t*)memregion("maincpu")->base(), 0x4000);
+ membank("rombank")->configure_entries(0, 0x10, (u8*)memregion("maincpu")->base(), 0x4000);
}
-static const gfx_layout lcmate2_charlayout =
+static const gfx_layout charlayout =
{
5, 8, /* 5 x 8 characters */
256, /* 256 characters */
@@ -223,7 +223,7 @@ static const gfx_layout lcmate2_charlayout =
};
static GFXDECODE_START( gfx_lcmate2 )
- GFXDECODE_ENTRY( "hd44780:cgrom", 0x0000, lcmate2_charlayout, 0, 1 )
+ GFXDECODE_ENTRY( "hd44780:cgrom", 0x0000, charlayout, 0, 1 )
GFXDECODE_END
@@ -231,8 +231,8 @@ void lcmate2_state::lcmate2(machine_config &config)
{
/* basic machine hardware */
Z80(config, m_maincpu, XTAL(3'579'545)); // confirmed
- m_maincpu->set_addrmap(AS_PROGRAM, &lcmate2_state::lcmate2_mem);
- m_maincpu->set_addrmap(AS_IO, &lcmate2_state::lcmate2_io);
+ m_maincpu->set_addrmap(AS_PROGRAM, &lcmate2_state::mem_map);
+ m_maincpu->set_addrmap(AS_IO, &lcmate2_state::io_map);
/* video hardware */
screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_LCD));
@@ -269,4 +269,4 @@ ROM_END
/* Driver */
// YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS
-COMP( 1984, lcmate2, 0, 0, lcmate2, lcmate2, lcmate2_state, empty_init, "VTech", "Laser Compumate 2", MACHINE_NOT_WORKING )
+COMP( 1984, lcmate2, 0, 0, lcmate2, lcmate2, lcmate2_state, empty_init, "VTech", "Laser Compumate 2", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE )
diff --git a/src/mame/drivers/lola8a.cpp b/src/mame/drivers/lola8a.cpp
index 912023d6ce2..f915bed8bfe 100644
--- a/src/mame/drivers/lola8a.cpp
+++ b/src/mame/drivers/lola8a.cpp
@@ -70,49 +70,55 @@ public:
lola8a_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_palette(*this, "palette")
, m_p_videoram(*this, "videoram")
- , m_io_keyboard(*this, "KEY.%u", 0)
+ , m_io_keyboard(*this, "KEY.%u", 0U)
{ }
void lola8a(machine_config &config);
private:
- uint8_t lola8a_port_a_r();
- void lola8a_port_b_w(uint8_t data);
+ void machine_reset() override;
+ void machine_start() override;
+ u8 lola8a_port_a_r();
+ void lola8a_port_b_w(u8 data);
DECLARE_WRITE_LINE_MEMBER(crtc_vsync);
DECLARE_READ_LINE_MEMBER(cass_r);
DECLARE_WRITE_LINE_MEMBER(cass_w);
- uint8_t keyboard_r();
+ u8 keyboard_r();
MC6845_UPDATE_ROW(crtc_update_row);
- void lola8a_io(address_map &map);
- void lola8a_mem(address_map &map);
+ void io_map(address_map &map);
+ void mem_map(address_map &map);
- uint8_t m_portb;
- virtual void machine_reset() override { m_maincpu->set_pc(0x8000); }
+ u8 m_portb;
+ memory_passthrough_handler *m_rom_shadow_tap;
required_device<i8085a_cpu_device> m_maincpu;
+ required_region_ptr<u8> m_rom;
+ required_shared_ptr<u8> m_ram;
required_device<cassette_image_device> m_cass;
required_device<palette_device> m_palette;
- required_shared_ptr<uint8_t> m_p_videoram;
+ required_shared_ptr<u8> m_p_videoram;
required_ioport_array<10> m_io_keyboard;
};
-void lola8a_state::lola8a_mem(address_map &map)
+void lola8a_state::mem_map(address_map &map)
{
map.unmap_value_high();
- map(0x0000, 0x1fff).ram(); // 6264 at G45
+ map(0x0000, 0x1fff).ram().share("mainram"); // 6264 at G45
map(0x2000, 0x3fff).ram(); // 6264 at F45
// empty place for 6264 at E45
// empty place for 6264 at D45
- map(0x8000, 0x9fff).rom(); // 2764A at B45
- map(0xa000, 0xbfff).rom(); // 2764A at C45
- map(0xc000, 0xdfff).rom(); // 2764A at H67
+ map(0x8000, 0x9fff).rom().region("maincpu", 0); // 2764A at B45
+ map(0xa000, 0xbfff).rom().region("maincpu", 0x2000); // 2764A at C45
+ map(0xc000, 0xdfff).rom().region("maincpu", 0x4000); // 2764A at H67
map(0xe000, 0xffff).ram().share("videoram"); // 6264 at G67
}
-void lola8a_state::lola8a_io(address_map &map)
+void lola8a_state::io_map(address_map &map)
{
map.unmap_value_high();
map(0x80, 0x80).w(AY8910_TAG, FUNC(ay8910_device::address_w));
@@ -251,13 +257,13 @@ MC6845_UPDATE_ROW( lola8a_state::crtc_update_row )
}
-uint8_t lola8a_state::lola8a_port_a_r()
+u8 lola8a_state::lola8a_port_a_r()
{
logerror("lola8a_port_a_r\n");
return 0x00;
}
-void lola8a_state::lola8a_port_b_w(uint8_t data)
+void lola8a_state::lola8a_port_b_w(u8 data)
{
m_portb = data;
}
@@ -272,7 +278,7 @@ WRITE_LINE_MEMBER( lola8a_state::cass_w )
m_cass->output(state ? -1.0 : +1.0);
}
-uint8_t lola8a_state::keyboard_r()
+u8 lola8a_state::keyboard_r()
{
u8 data = 0xff, kbrow = m_portb & 15;
@@ -282,6 +288,31 @@ uint8_t lola8a_state::keyboard_r()
return data;
}
+void lola8a_state::machine_reset()
+{
+ address_space &program = m_maincpu->space(AS_PROGRAM);
+ program.install_rom(0x0000, 0x1fff, m_rom); // do it here for F3
+ m_rom_shadow_tap = program.install_read_tap(0x8000, 0x9fff, "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, 0x1fff, m_ram);
+ }
+
+ // return the original data
+ return data;
+ });
+}
+
+void lola8a_state::machine_start()
+{
+ save_item(NAME(m_portb));
+}
+
WRITE_LINE_MEMBER(lola8a_state::crtc_vsync)
{
m_maincpu->set_input_line(I8085_RST75_LINE, state? ASSERT_LINE : CLEAR_LINE);
@@ -291,8 +322,8 @@ void lola8a_state::lola8a(machine_config &config)
{
/* basic machine hardware */
I8085A(config, m_maincpu, XTAL(4'915'200));
- m_maincpu->set_addrmap(AS_PROGRAM, &lola8a_state::lola8a_mem);
- m_maincpu->set_addrmap(AS_IO, &lola8a_state::lola8a_io);
+ m_maincpu->set_addrmap(AS_PROGRAM, &lola8a_state::mem_map);
+ m_maincpu->set_addrmap(AS_IO, &lola8a_state::io_map);
m_maincpu->in_sid_func().set(FUNC(lola8a_state::cass_r));
m_maincpu->out_sod_func().set(FUNC(lola8a_state::cass_w));
@@ -326,13 +357,13 @@ void lola8a_state::lola8a(machine_config &config)
/* ROM definition */
ROM_START( lola8a )
- ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASEFF )
- ROM_LOAD( "lola 8a r0 w06 22.11.86.b45", 0x8000, 0x2000, CRC(aca1fc08) SHA1(f7076d937bb53b0addcba2a5b7c05ab75d6d0d93))
- ROM_LOAD( "lola 8a r1 w06 22.11.86.c45", 0xa000, 0x2000, CRC(99f8ec9b) SHA1(88eafd09c479f177525fa0039cf04d74bae39dab))
- ROM_LOAD( "lola 8a r2 w06 22.11.86.h67", 0xc000, 0x2000, CRC(1e7cd46b) SHA1(048b2583ee7baeb9621e629b79ed64583ac5d554))
+ ROM_REGION( 0x6000, "maincpu", ROMREGION_ERASEFF )
+ ROM_LOAD( "lola 8a r0 w06 22.11.86.b45", 0x0000, 0x2000, CRC(aca1fc08) SHA1(f7076d937bb53b0addcba2a5b7c05ab75d6d0d93))
+ ROM_LOAD( "lola 8a r1 w06 22.11.86.c45", 0x2000, 0x2000, CRC(99f8ec9b) SHA1(88eafd09c479f177525fa0039cf04d74bae39dab))
+ ROM_LOAD( "lola 8a r2 w06 22.11.86.h67", 0x4000, 0x2000, CRC(1e7cd46b) SHA1(048b2583ee7baeb9621e629b79ed64583ac5d554))
ROM_END
/* Driver */
// YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS
-COMP( 1986, lola8a, 0, 0, lola8a, lola8a, lola8a_state, empty_init, "Institut Ivo Lola Ribar", "Lola 8A", 0 )
+COMP( 1986, lola8a, 0, 0, lola8a, lola8a, lola8a_state, empty_init, "Institut Ivo Lola Ribar", "Lola 8A", MACHINE_SUPPORTS_SAVE )
diff --git a/src/mame/drivers/mbc200.cpp b/src/mame/drivers/mbc200.cpp
index aa063294e98..369cb6ee117 100644
--- a/src/mame/drivers/mbc200.cpp
+++ b/src/mame/drivers/mbc200.cpp
@@ -68,6 +68,8 @@ public:
, m_ppi_m(*this, "ppi_m")
, m_vram(*this, "vram")
, m_maincpu(*this, "maincpu")
+ , m_rom(*this, "maincpu")
+ , m_ram(*this, "mainram")
, m_beep(*this, "beeper")
, m_speaker(*this, "speaker")
, m_fdc(*this, "fdc")
@@ -78,28 +80,30 @@ public:
void mbc200(machine_config &config);
private:
- uint8_t p2_porta_r();
- void p1_portc_w(uint8_t data);
- void pm_porta_w(uint8_t data);
- void pm_portb_w(uint8_t data);
- uint8_t keyboard_r(offs_t offset);
+ u8 p2_porta_r();
+ void p1_portc_w(u8 data);
+ void pm_porta_w(u8 data);
+ void pm_portb_w(u8 data);
+ u8 keyboard_r(offs_t offset);
void kbd_put(u8 data);
MC6845_UPDATE_ROW(update_row);
required_device<palette_device> m_palette;
- void mbc200_io(address_map &map);
- void mbc200_mem(address_map &map);
- void mbc200_sub_io(address_map &map);
- void mbc200_sub_mem(address_map &map);
+ void main_io(address_map &map);
+ void main_mem(address_map &map);
+ void sub_io(address_map &map);
+ void sub_mem(address_map &map);
virtual void machine_start() override;
virtual void machine_reset() override;
- uint8_t m_comm_latch;
- uint8_t m_term_data;
+ u8 m_comm_latch;
+ u8 m_term_data;
required_device<mc6845_device> m_crtc;
required_device<i8255_device> m_ppi_m;
- required_shared_ptr<uint8_t> m_vram;
+ required_shared_ptr<u8> m_vram;
required_device<cpu_device> m_maincpu;
+ required_region_ptr<u8> m_rom;
+ required_shared_ptr<u8> m_ram;
required_device<beep_device> m_beep;
required_device<speaker_sound_device> m_speaker;
required_device<mb8876_device> m_fdc;
@@ -108,26 +112,24 @@ private:
};
-void mbc200_state::mbc200_mem(address_map &map)
+void mbc200_state::main_mem(address_map &map)
{
- map.unmap_value_high();
- map(0x0000, 0x0fff).ram().region("maincpu", 0);
- map(0x1000, 0xffff).ram();
+ map(0x0000, 0xffff).ram().share("mainram");
}
-void mbc200_state::p1_portc_w(uint8_t data)
+void mbc200_state::p1_portc_w(u8 data)
{
m_speaker->level_w(BIT(data,4)); // used by beep command in basic
}
-void mbc200_state::pm_porta_w(uint8_t data)
+void mbc200_state::pm_porta_w(u8 data)
{
machine().scheduler().synchronize(); // force resync
//printf("A %02x %c\n",data,data);
m_comm_latch = data; // to slave CPU
}
-void mbc200_state::pm_portb_w(uint8_t data)
+void mbc200_state::pm_portb_w(u8 data)
{
floppy_image_device *floppy = nullptr;
@@ -148,7 +150,7 @@ void mbc200_state::pm_portb_w(uint8_t data)
m_beep->set_state(BIT(data, 1)); // key-click
}
-void mbc200_state::mbc200_io(address_map &map)
+void mbc200_state::main_io(address_map &map)
{
map.unmap_value_high();
map.global_mask(0xff);
@@ -161,7 +163,7 @@ void mbc200_state::mbc200_io(address_map &map)
-void mbc200_state::mbc200_sub_mem(address_map &map)
+void mbc200_state::sub_mem(address_map &map)
{
map.unmap_value_high();
map(0x0000, 0x2fff).rom();
@@ -169,16 +171,16 @@ void mbc200_state::mbc200_sub_mem(address_map &map)
map(0x8000, 0xffff).ram().share("vram");
}
-uint8_t mbc200_state::p2_porta_r()
+u8 mbc200_state::p2_porta_r()
{
machine().scheduler().synchronize(); // force resync
- uint8_t tmp = m_comm_latch;
+ u8 tmp = m_comm_latch;
m_comm_latch = 0;
m_ppi_m->pc6_w(0); // ppi_ack
return tmp;
}
-void mbc200_state::mbc200_sub_io(address_map &map)
+void mbc200_state::sub_io(address_map &map)
{
map.unmap_value_high();
map.global_mask(0xff);
@@ -192,9 +194,9 @@ void mbc200_state::mbc200_sub_io(address_map &map)
static INPUT_PORTS_START( mbc200 )
INPUT_PORTS_END
-uint8_t mbc200_state::keyboard_r(offs_t offset)
+u8 mbc200_state::keyboard_r(offs_t offset)
{
- uint8_t data = 0;
+ u8 data = 0;
if (offset)
{
if (m_term_data)
@@ -250,13 +252,13 @@ void mbc200_state::kbd_put(u8 data)
void mbc200_state::machine_start()
{
+ save_item(NAME(m_comm_latch));
+ save_item(NAME(m_term_data));
}
void mbc200_state::machine_reset()
{
- uint8_t* roms = memregion("roms")->base();
- uint8_t* main = memregion("maincpu")->base();
- memcpy(main, roms, 0x1000);
+ memcpy(m_ram, m_rom, 0x1000);
}
static void mbc200_floppies(device_slot_interface &device)
@@ -267,9 +269,9 @@ static void mbc200_floppies(device_slot_interface &device)
MC6845_UPDATE_ROW( mbc200_state::update_row )
{
const rgb_t *palette = m_palette->palette()->entry_list_raw();
- uint8_t gfx;
- uint16_t mem,x;
- uint32_t *p = &bitmap.pix32(y);
+ u8 gfx;
+ u16 mem,x;
+ u32 *p = &bitmap.pix32(y);
for (x = 0; x < x_count; x++)
{
@@ -286,7 +288,7 @@ MC6845_UPDATE_ROW( mbc200_state::update_row )
}
}
-static const gfx_layout mbc200_chars_8x8 =
+static const gfx_layout charlayout =
{
8,8,
256,
@@ -298,7 +300,7 @@ static const gfx_layout mbc200_chars_8x8 =
};
static GFXDECODE_START( gfx_mbc200 )
- GFXDECODE_ENTRY( "subcpu", 0x1800, mbc200_chars_8x8, 0, 1 )
+ GFXDECODE_ENTRY( "subcpu", 0x1800, charlayout, 0, 1 )
GFXDECODE_END
@@ -306,12 +308,12 @@ void mbc200_state::mbc200(machine_config &config)
{
/* basic machine hardware */
Z80(config, m_maincpu, 8_MHz_XTAL / 2); // NEC D780C-1
- m_maincpu->set_addrmap(AS_PROGRAM, &mbc200_state::mbc200_mem);
- m_maincpu->set_addrmap(AS_IO, &mbc200_state::mbc200_io);
+ m_maincpu->set_addrmap(AS_PROGRAM, &mbc200_state::main_mem);
+ m_maincpu->set_addrmap(AS_IO, &mbc200_state::main_io);
z80_device &subcpu(Z80(config, "subcpu", 8_MHz_XTAL / 2)); // NEC D780C-1
- subcpu.set_addrmap(AS_PROGRAM, &mbc200_state::mbc200_sub_mem);
- subcpu.set_addrmap(AS_IO, &mbc200_state::mbc200_sub_io);
+ subcpu.set_addrmap(AS_PROGRAM, &mbc200_state::sub_mem);
+ subcpu.set_addrmap(AS_IO, &mbc200_state::sub_io);
/* video hardware */
screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
@@ -359,9 +361,9 @@ void mbc200_state::mbc200(machine_config &config)
/* ROM definition */
ROM_START( mbc200 )
- ROM_REGION( 0x1000, "maincpu", ROMREGION_ERASEFF )
- ROM_REGION( 0x1000, "roms", 0 )
+ ROM_REGION( 0x1000, "maincpu", 0 )
ROM_LOAD( "d2732a.bin", 0x0000, 0x1000, CRC(bf364ce8) SHA1(baa3a20a5b01745a390ef16628dc18f8d682d63b))
+
ROM_REGION( 0x3000, "subcpu", ROMREGION_ERASEFF )
ROM_LOAD( "m5l2764.bin", 0x0000, 0x2000, CRC(377300a2) SHA1(8563172f9e7f84330378a8d179f4138be5fda099))
ROM_END
@@ -369,4 +371,5 @@ ROM_END
/* Driver */
// YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS
-COMP( 1982, mbc200, 0, 0, mbc200, mbc200, mbc200_state, empty_init, "Sanyo", "MBC-200", 0 )
+COMP( 1982, mbc200, 0, 0, mbc200, mbc200, mbc200_state, empty_init, "Sanyo", "MBC-200", MACHINE_SUPPORTS_SAVE )
+
diff --git a/src/mame/drivers/meritum.cpp b/src/mame/drivers/meritum.cpp
index 27938d4b5ff..a91fc301bf8 100644
--- a/src/mame/drivers/meritum.cpp
+++ b/src/mame/drivers/meritum.cpp
@@ -12,7 +12,7 @@ Meritum III hires graphics mode added; only pre-production units were made.
Split from trs80.cpp on 2018-07-15
It is quite similar to the TRS80 Model 1 Level II, however instead of the
-external interface, Intel pheripheral chips were used (i8251, i8253, i8255),
+external interface, Intel peripheral chips were used (i8251, i8253, i8255),
and 2KB of ROM with new subroutines.
Model II has an additional 8255 to act as a floppy interface, plus it has more
@@ -85,14 +85,14 @@ public:
void meritum2(machine_config &config);
private:
- void port_ff_w(uint8_t data);
- uint8_t port_ff_r();
- uint8_t keyboard_r(offs_t offset);
+ void port_ff_w(u8 data);
+ u8 port_ff_r();
+ u8 keyboard_r(offs_t offset);
TIMER_CALLBACK_MEMBER(cassette_data_callback);
DECLARE_QUICKLOAD_LOAD_MEMBER(quickload_cb);
- uint32_t screen_update_meritum1(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
- uint32_t screen_update_meritum2(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
+ u32 screen_update_meritum1(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
+ u32 screen_update_meritum2(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
void mem_map(address_map &map);
void io_map(address_map &map);
@@ -104,8 +104,8 @@ private:
bool m_cassette_data;
emu_timer *m_cassette_data_timer;
double m_old_cassette_val;
- virtual void machine_start() override;
- virtual void machine_reset() override;
+ void machine_start() override;
+ void machine_reset() override;
required_device<cpu_device> m_maincpu;
required_device<screen_device> m_screen;
required_region_ptr<u8> m_p_chargen;
@@ -226,13 +226,13 @@ static INPUT_PORTS_START( meritum )
PORT_BIT(0x01, 0x01, IPT_KEYBOARD) PORT_NAME("NMI") PORT_CODE(KEYCODE_BACKSPACE) PORT_WRITE_LINE_DEVICE_MEMBER("nmigate", input_merger_device, in_w<1>)
INPUT_PORTS_END
-uint32_t meritum_state::screen_update_meritum1(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
+u32 meritum_state::screen_update_meritum1(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
/* lores characters are in the character generator. Each character is 6x12 (basic characters are 6x7 excluding descenders/ascenders). */
{
- uint8_t y,ra,chr,gfx;
- uint16_t sy=0,ma=0,x;
- uint8_t cols = m_mode ? 32 : 64;
- uint8_t skip = m_mode ? 2 : 1;
+ u8 y,ra,chr,gfx;
+ u16 sy=0,ma=0,x;
+ u8 cols = m_mode ? 32 : 64;
+ u8 skip = m_mode ? 2 : 1;
if (m_mode != m_size_store)
{
@@ -244,7 +244,7 @@ uint32_t meritum_state::screen_update_meritum1(screen_device &screen, bitmap_ind
{
for (ra = 0; ra < 12; ra++)
{
- uint16_t *p = &bitmap.pix16(sy++);
+ u16 *p = &bitmap.pix16(sy++);
for (x = ma; x < ma + 64; x+=skip)
{
@@ -275,12 +275,12 @@ uint32_t meritum_state::screen_update_meritum1(screen_device &screen, bitmap_ind
return 0;
}
-uint32_t meritum_state::screen_update_meritum2(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
+u32 meritum_state::screen_update_meritum2(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
{
- uint8_t y,ra,chr,gfx;
- uint16_t sy=0,ma=0,x;
- uint8_t cols = m_mode ? 32 : 64;
- uint8_t skip = m_mode ? 2 : 1;
+ u8 y,ra,chr,gfx;
+ u16 sy=0,ma=0,x;
+ u8 cols = m_mode ? 32 : 64;
+ u8 skip = m_mode ? 2 : 1;
if (m_mode != m_size_store)
{
@@ -326,7 +326,7 @@ TIMER_CALLBACK_MEMBER(meritum_state::cassette_data_callback)
m_old_cassette_val = new_val;
}
-uint8_t meritum_state::port_ff_r()
+u8 meritum_state::port_ff_r()
{
/* ModeSel and cassette data
d7 cassette data from tape
@@ -335,7 +335,7 @@ uint8_t meritum_state::port_ff_r()
return (m_mode ? 0 : 0x40) | (m_cassette_data ? 0x80 : 0) | 0x3f;
}
-void meritum_state::port_ff_w(uint8_t data)
+void meritum_state::port_ff_w(u8 data)
{
/* Standard output port of Model I
d3 ModeSel bit
@@ -359,7 +359,7 @@ void meritum_state::port_ff_w(uint8_t data)
}
}
-uint8_t meritum_state::keyboard_r(offs_t offset)
+u8 meritum_state::keyboard_r(offs_t offset)
{
u8 i, result = 0;
@@ -374,6 +374,10 @@ void meritum_state::machine_start()
{
m_cassette_data_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(meritum_state::cassette_data_callback),this));
m_cassette_data_timer->adjust( attotime::zero, 0, attotime::from_hz(11025) );
+ save_item(NAME(m_mode));
+ save_item(NAME(m_size_store));
+ save_item(NAME(m_cassette_data));
+ save_item(NAME(m_old_cassette_val));
}
void meritum_state::machine_reset()
@@ -404,9 +408,9 @@ QUICKLOAD_LOAD_MEMBER(meritum_state::quickload_cb)
{
address_space &program = m_maincpu->space(AS_PROGRAM);
- uint8_t type, length;
- uint8_t data[0x100];
- uint8_t addr[2];
+ u8 type, length;
+ u8 data[0x100];
+ u8 addr[2];
void *ptr;
while (!image.image_feof())
@@ -455,7 +459,7 @@ QUICKLOAD_LOAD_MEMBER(meritum_state::quickload_cb)
/**************************** F4 CHARACTER DISPLAYER ***********************************************************/
-static const gfx_layout meritum_charlayout =
+static const gfx_layout charlayout =
{
6, 12, /* 6 x 12 characters */
256, /* 256 characters */
@@ -469,7 +473,7 @@ static const gfx_layout meritum_charlayout =
};
static GFXDECODE_START(gfx_meritum)
- GFXDECODE_ENTRY( "chargen", 0, meritum_charlayout, 0, 1 )
+ GFXDECODE_ENTRY( "chargen", 0, charlayout, 0, 1 )
GFXDECODE_END
@@ -587,6 +591,6 @@ ROM_END
// YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS
-COMP( 1983, meritum1, 0, trs80l2, meritum1, meritum, meritum_state, empty_init, "Mera-Elzab", "Meritum I (Model 1)", 0 )
-COMP( 1985, meritum2, meritum1, 0, meritum2, meritum, meritum_state, empty_init, "Mera-Elzab", "Meritum I (Model 2)", 0 )
-COMP( 1985, meritum_net, meritum1, 0, meritum2, meritum, meritum_state, empty_init, "Mera-Elzab", "Meritum I (Model 2) (network)", 0 )
+COMP( 1983, meritum1, 0, trs80l2, meritum1, meritum, meritum_state, empty_init, "Mera-Elzab", "Meritum I (Model 1)", MACHINE_SUPPORTS_SAVE )
+COMP( 1985, meritum2, meritum1, 0, meritum2, meritum, meritum_state, empty_init, "Mera-Elzab", "Meritum I (Model 2)", MACHINE_SUPPORTS_SAVE )
+COMP( 1985, meritum_net, meritum1, 0, meritum2, meritum, meritum_state, empty_init, "Mera-Elzab", "Meritum I (Model 2) (network)", MACHINE_SUPPORTS_SAVE )
diff --git a/src/mame/drivers/mes.cpp b/src/mame/drivers/mes.cpp
index dfefe69f66b..24b69b6866a 100644
--- a/src/mame/drivers/mes.cpp
+++ b/src/mame/drivers/mes.cpp
@@ -31,7 +31,9 @@ public:
void mes(machine_config &config);
private:
- uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
+ void machine_reset() override;
+ void machine_start() override;
+ u32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
void kbd_put(u8 data);
u8 port00_r();
u8 port08_r();
@@ -41,9 +43,8 @@ private:
u8 m_term_data;
u8 m_port08;
- virtual void machine_reset() override;
required_device<cpu_device> m_maincpu;
- required_shared_ptr<uint8_t> m_p_videoram;
+ required_shared_ptr<u8> m_p_videoram;
required_region_ptr<u8> m_p_chargen;
};
@@ -63,7 +64,7 @@ u8 mes_state::port08_r()
void mes_state::mem_map(address_map &map)
{
map.unmap_value_high();
- map(0x0000, 0x0fff).rom().region("roms", 0);
+ map(0x0000, 0x0fff).rom();
map(0x1000, 0xefff).ram();
map(0xf000, 0xffff).ram().share("videoram");
}
@@ -82,6 +83,12 @@ void mes_state::io_map(address_map &map)
static INPUT_PORTS_START( mes )
INPUT_PORTS_END
+void mes_state::machine_start()
+{
+ save_item(NAME(m_term_data));
+ save_item(NAME(m_port08));
+}
+
void mes_state::machine_reset()
{
m_port08 = 0;
@@ -92,14 +99,14 @@ void mes_state::machine_reset()
Also the screen dimensions are a guess. */
uint32_t mes_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
{
- uint8_t y,ra,chr,gfx;
- uint16_t sy=0,ma=0,x;
+ u8 y,ra,chr,gfx;
+ u16 sy=0,ma=0,x;
for (y = 0; y < 25; y++)
{
for (ra = 0; ra < 10; ra++)
{
- uint16_t *p = &bitmap.pix16(sy++);
+ u16 *p = &bitmap.pix16(sy++);
for (x = ma; x < ma + 80; x++)
{
@@ -160,10 +167,10 @@ void mes_state::mes(machine_config &config)
/* ROM definition */
ROM_START( mes )
- ROM_REGION( 0x1000, "roms", ROMREGION_ERASEFF )
+ ROM_REGION( 0x1000, "maincpu", 0 )
ROM_LOAD( "mescpu.bin", 0x0000, 0x1000, CRC(b6d90cf4) SHA1(19e608af5bdaabb00a134e1106b151b00e2a0b04))
- ROM_REGION( 0x2000, "xebec", ROMREGION_ERASEFF )
+ ROM_REGION( 0x2000, "xebec", 0 )
ROM_LOAD( "mesxebec.bin", 0x0000, 0x2000, CRC(061b7212) SHA1(c5d600116fb7563c69ebd909eb9613269b2ada0f))
/* character generator not dumped, using the one from 'c10' for now */
@@ -174,4 +181,4 @@ ROM_END
/* Driver */
// YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS
-COMP( 198?, mes, 0, 0, mes, mes, mes_state, empty_init, "Schleicher", "MES", MACHINE_NOT_WORKING | MACHINE_NO_SOUND)
+COMP( 198?, mes, 0, 0, mes, mes, mes_state, empty_init, "Schleicher", "MES", MACHINE_NOT_WORKING | MACHINE_NO_SOUND | MACHINE_SUPPORTS_SAVE )
diff --git a/src/mame/drivers/mits680b.cpp b/src/mame/drivers/mits680b.cpp
index 41e41c7c028..581a3239a50 100644
--- a/src/mame/drivers/mits680b.cpp
+++ b/src/mame/drivers/mits680b.cpp
@@ -93,4 +93,4 @@ ROM_END
/* Driver */
// YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS
-COMP( 1976, mits680b, 0, 0, mits680b, mits680b, mits680b_state, empty_init, "MITS", "Altair 680b", MACHINE_NOT_WORKING | MACHINE_NO_SOUND)
+COMP( 1976, mits680b, 0, 0, mits680b, mits680b, mits680b_state, empty_init, "MITS", "Altair 680b", MACHINE_NOT_WORKING | MACHINE_NO_SOUND | MACHINE_SUPPORTS_SAVE )
diff --git a/src/mame/drivers/modellot.cpp b/src/mame/drivers/modellot.cpp
index 762468eecdc..8e8e710fe06 100644
--- a/src/mame/drivers/modellot.cpp
+++ b/src/mame/drivers/modellot.cpp
@@ -53,35 +53,41 @@ class modellot_state : public driver_device
public:
modellot_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_rom(*this, "maincpu")
+ , m_ram(*this, "mainram")
+ , m_p_videoram(*this, "videoram")
, m_p_chargen(*this, "chargen")
{ }
void modellot(machine_config &config);
private:
- uint8_t port77_r();
- uint8_t portff_r();
+ u8 port77_r();
+ u8 portff_r();
void kbd_put(u8 data);
- uint32_t screen_update_modellot(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
+ u32 screen_update_modellot(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
void io_map(address_map &map);
void mem_map(address_map &map);
- uint8_t m_term_data;
- virtual void machine_reset() override;
- required_shared_ptr<uint8_t> m_p_videoram;
+ u8 m_term_data;
+ void machine_start() override;
+ void machine_reset() 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_shared_ptr<u8> m_p_videoram;
required_region_ptr<u8> m_p_chargen;
};
void modellot_state::mem_map(address_map &map)
{
map.unmap_value_high();
- map(0x0000, 0xbfff).ram(); // 48k ram
+ map(0x0000, 0xbfff).ram().share("mainram"); // 48k ram
map(0xc000, 0xc3ff).ram().share("videoram");
- map(0xe000, 0xffff).rom();
+ map(0xe000, 0xffff).rom().region("maincpu", 0);
}
void modellot_state::io_map(address_map &map)
@@ -97,14 +103,14 @@ void modellot_state::io_map(address_map &map)
static INPUT_PORTS_START( modellot )
INPUT_PORTS_END
-uint8_t modellot_state::port77_r()
+u8 modellot_state::port77_r()
{
return 4;
}
-uint8_t modellot_state::portff_r()
+u8 modellot_state::portff_r()
{
- uint8_t data = (m_term_data) ? m_term_data ^ 0x7f : 0xff;
+ u8 data = (m_term_data) ? (m_term_data ^ 0x7f) : 0xff;
m_term_data = 0;
return data;
}
@@ -117,10 +123,31 @@ void modellot_state::kbd_put(u8 data)
void modellot_state::machine_reset()
{
m_term_data = 1;
- m_maincpu->set_state_int(Z80_PC, 0xe000);
+
+ 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(0xe000, 0xe7ff, "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 modellot_state::machine_start()
+{
+ save_item(NAME(m_term_data));
}
-const gfx_layout modellot_charlayout =
+const gfx_layout charlayout =
{
8, 16, /* 8x16 characters */
128, /* 128 characters */
@@ -133,20 +160,20 @@ const gfx_layout modellot_charlayout =
};
static GFXDECODE_START( gfx_modellot )
- GFXDECODE_ENTRY( "chargen", 0x0000, modellot_charlayout, 0, 1 )
+ GFXDECODE_ENTRY( "chargen", 0x0000, charlayout, 0, 1 )
GFXDECODE_END
-uint32_t modellot_state::screen_update_modellot(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
+u32 modellot_state::screen_update_modellot(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
{
- uint8_t y,ra,chr,gfx,inv;
- uint16_t sy=0,ma=0,x;
+ u8 y,ra,chr,gfx,inv;
+ u16 sy=0,ma=0,x;
for (y = 0; y < 16; y++)
{
for (ra = 0; ra < 16; ra++)
{
- uint16_t *p = &bitmap.pix16(sy++);
+ u16 *p = &bitmap.pix16(sy++);
for (x = 0; x < 64; x++)
{
@@ -207,10 +234,10 @@ void modellot_state::modellot(machine_config &config)
/* ROM definition */
ROM_START( modellot )
- ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASEFF )
+ ROM_REGION( 0x2000, "maincpu", ROMREGION_ERASEFF )
//ROM_LOAD( "fdc8119.u3", 0x0000, 0x0400, CRC(a8aee944) SHA1(f2cc598ed2e7a1a620e2f3f53c1a573965f6af26))
- ROM_LOAD( "dt49-48.u1", 0xe000, 0x0400, CRC(2441c438) SHA1(832994a4214a744b7e19e5f74000c95ae65e3759))
- ROM_LOAD( "ht20.u2", 0xe400, 0x0400, CRC(497c0495) SHA1(d03beebc4c31284729f6eac3bdf1fbf44adf7fff))
+ ROM_LOAD( "dt49-48.u1", 0x0000, 0x0400, CRC(2441c438) SHA1(832994a4214a744b7e19e5f74000c95ae65e3759))
+ ROM_LOAD( "ht20.u2", 0x0400, 0x0400, CRC(497c0495) SHA1(d03beebc4c31284729f6eac3bdf1fbf44adf7fff))
ROM_REGION( 0x0800, "chargen", ROMREGION_INVERT )
ROM_LOAD( "gcem1.u3", 0x0000, 0x0200, CRC(e7739268) SHA1(091ef69282abe657d5f38c70a572964f5200a1d5))
@@ -220,4 +247,5 @@ ROM_START( modellot )
ROM_END
/* Driver */
-COMP( 1979, modellot, 0, 0, modellot, modellot, modellot_state, empty_init, "General Processor", "Modello T", MACHINE_IS_SKELETON )
+COMP( 1979, modellot, 0, 0, modellot, modellot, modellot_state, empty_init, "General Processor", "Modello T", MACHINE_IS_SKELETON | MACHINE_SUPPORTS_SAVE )
+
diff --git a/src/mame/drivers/pulsar.cpp b/src/mame/drivers/pulsar.cpp
index 68102fb59ee..65ace2fa1f0 100644
--- a/src/mame/drivers/pulsar.cpp
+++ b/src/mame/drivers/pulsar.cpp
@@ -193,6 +193,10 @@ INPUT_PORTS_END
void pulsar_state::machine_reset()
{
+
+ m_rom_in_map = true;
+ m_rtc->cs_w(1); // always enabled
+
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)
@@ -209,9 +213,6 @@ void pulsar_state::machine_reset()
// return the original data
return data;
});
-
- m_rom_in_map = true;
- m_rtc->cs_w(1); // always enabled
}
void pulsar_state::machine_start()