summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author Robbbert <Robbbert@users.noreply.github.com>2020-06-14 18:31:38 +1000
committer Robbbert <Robbbert@users.noreply.github.com>2020-06-14 18:31:38 +1000
commitf114358821ba23b566118be6064e57f2c1a43a65 (patch)
treea1639f8d2d3a89af1ff1e52b0053467f1d955e38
parentaa49b3a8b5e7ff37f0259a7a3859b7332e20e33f (diff)
(nw) even more cleanups
-rw-r--r--src/mame/drivers/68ksbc.cpp8
-rw-r--r--src/mame/drivers/altos5.cpp140
-rw-r--r--src/mame/drivers/c10.cpp38
-rw-r--r--src/mame/drivers/c900.cpp6
-rw-r--r--src/mame/drivers/et3400.cpp2
-rw-r--r--src/mame/drivers/pcm.cpp53
-rw-r--r--src/mame/drivers/pimps.cpp29
-rw-r--r--src/mame/drivers/sbc6510.cpp75
-rw-r--r--src/mame/drivers/sv8000.cpp37
9 files changed, 191 insertions, 197 deletions
diff --git a/src/mame/drivers/68ksbc.cpp b/src/mame/drivers/68ksbc.cpp
index ab7f60956ba..8985da41479 100644
--- a/src/mame/drivers/68ksbc.cpp
+++ b/src/mame/drivers/68ksbc.cpp
@@ -44,12 +44,12 @@ public:
void c68ksbc(machine_config &config);
private:
- void c68ksbc_mem(address_map &map);
+ void mem_map(address_map &map);
required_device<cpu_device> m_maincpu;
};
-void c68ksbc_state::c68ksbc_mem(address_map &map)
+void c68ksbc_state::mem_map(address_map &map)
{
map.unmap_value_high();
map(0x000000, 0x002fff).rom();
@@ -66,7 +66,7 @@ INPUT_PORTS_END
void c68ksbc_state::c68ksbc(machine_config &config)
{
M68000(config, m_maincpu, 8000000); // text says 8MHz, schematic says 10MHz
- m_maincpu->set_addrmap(AS_PROGRAM, &c68ksbc_state::c68ksbc_mem);
+ m_maincpu->set_addrmap(AS_PROGRAM, &c68ksbc_state::mem_map);
acia6850_device &acia(ACIA6850(config, "acia", 0));
acia.txd_handler().set("rs232", FUNC(rs232_port_device::write_txd));
@@ -90,4 +90,4 @@ ROM_END
/* Driver */
/* YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS */
-COMP( 2002, 68ksbc, 0, 0, c68ksbc, c68ksbc, c68ksbc_state, empty_init, "Wichit Sirichote", "68k Single Board Computer", MACHINE_NO_SOUND_HW)
+COMP( 2002, 68ksbc, 0, 0, c68ksbc, c68ksbc, c68ksbc_state, empty_init, "Wichit Sirichote", "68k Single Board Computer", MACHINE_NO_SOUND_HW | MACHINE_SUPPORTS_SAVE )
diff --git a/src/mame/drivers/altos5.cpp b/src/mame/drivers/altos5.cpp
index 3c0d6f218c1..fdd74c31a5b 100644
--- a/src/mame/drivers/altos5.cpp
+++ b/src/mame/drivers/altos5.cpp
@@ -34,17 +34,17 @@ public:
, m_pio0(*this, "pio0")
, m_dma (*this, "dma")
, m_fdc (*this, "fdc")
+ , m_p_prom(*this, "proms")
, m_floppy0(*this, "fdc:0")
, m_floppy1(*this, "fdc:1")
+ , m_bankr(*this, "bankr%d", 0)
+ , m_bankw(*this, "bankw%d", 0)
{ }
void altos5(machine_config &config);
- void init_altos5();
-
- DECLARE_QUICKLOAD_LOAD_MEMBER(quickload_cb);
-
private:
+ DECLARE_QUICKLOAD_LOAD_MEMBER(quickload_cb);
uint8_t memory_read_byte(offs_t offset);
void memory_write_byte(offs_t offset, uint8_t data);
uint8_t io_read_byte(offs_t offset);
@@ -54,6 +54,8 @@ private:
void port08_w(uint8_t data);
void port09_w(uint8_t data);
void port14_w(uint8_t data);
+ void setup_banks(uint8_t source);
+ uint8_t convert(offs_t offset, bool state);
DECLARE_WRITE_LINE_MEMBER(busreq_w);
DECLARE_WRITE_LINE_MEMBER(fdc_intrq_w);
@@ -62,19 +64,22 @@ private:
uint8_t m_port08;
uint8_t m_port09;
- uint8_t *m_p_prom;
bool m_ipl;
offs_t m_curr_bank;
floppy_image_device *m_floppy;
- uint8_t convert(offs_t offset, bool state);
- void setup_banks(uint8_t source);
- virtual void machine_reset() override;
+ std::unique_ptr<u8[]> m_ram; // main ram 192k
+ std::unique_ptr<u8[]> m_dummy; // for wrpt
+ void machine_reset() override;
+ void machine_start() override;
required_device<z80_device> m_maincpu;
required_device<z80pio_device> m_pio0;
required_device<z80dma_device> m_dma;
required_device<fd1797_device> m_fdc;
+ required_region_ptr<u8> m_p_prom;
required_device<floppy_connector> m_floppy0;
required_device<floppy_connector> m_floppy1;
+ required_memory_bank_array<16> m_bankr;
+ required_memory_bank_array<16> m_bankw;
};
@@ -91,12 +96,12 @@ void altos5_state::mem_map(address_map &map)
map(0x7000, 0x7fff).bankr("bankr7").bankw("bankw7");
map(0x8000, 0x8fff).bankr("bankr8").bankw("bankw8");
map(0x9000, 0x9fff).bankr("bankr9").bankw("bankw9");
- map(0xa000, 0xafff).bankr("bankra").bankw("bankwa");
- map(0xb000, 0xbfff).bankr("bankrb").bankw("bankwb");
- map(0xc000, 0xcfff).bankr("bankrc").bankw("bankwc");
- map(0xd000, 0xdfff).bankr("bankrd").bankw("bankwd");
- map(0xe000, 0xefff).bankr("bankre").bankw("bankwe");
- map(0xf000, 0xffff).bankr("bankrf").bankw("bankwf");
+ map(0xa000, 0xafff).bankr("bankr10").bankw("bankw10");
+ map(0xb000, 0xbfff).bankr("bankr11").bankw("bankw11");
+ map(0xc000, 0xcfff).bankr("bankr12").bankw("bankw12");
+ map(0xd000, 0xdfff).bankr("bankr13").bankw("bankw13");
+ map(0xe000, 0xefff).bankr("bankr14").bankw("bankw14");
+ map(0xf000, 0xffff).bankr("bankr15").bankw("bankw15");
}
void altos5_state::io_map(address_map &map)
@@ -147,40 +152,12 @@ void altos5_state::setup_banks(uint8_t source)
temp = offs;
if ((source == 2) || (temp != m_curr_bank))
{
- membank("bankr0")->set_entry(convert(offs++, 0));
- membank("bankr1")->set_entry(convert(offs++, 0));
- membank("bankr2")->set_entry(convert(offs++, 0));
- membank("bankr3")->set_entry(convert(offs++, 0));
- membank("bankr4")->set_entry(convert(offs++, 0));
- membank("bankr5")->set_entry(convert(offs++, 0));
- membank("bankr6")->set_entry(convert(offs++, 0));
- membank("bankr7")->set_entry(convert(offs++, 0));
- membank("bankr8")->set_entry(convert(offs++, 0));
- membank("bankr9")->set_entry(convert(offs++, 0));
- membank("bankra")->set_entry(convert(offs++, 0));
- membank("bankrb")->set_entry(convert(offs++, 0));
- membank("bankrc")->set_entry(convert(offs++, 0));
- membank("bankrd")->set_entry(convert(offs++, 0));
- membank("bankre")->set_entry(convert(offs++, 0));
- membank("bankrf")->set_entry(convert(offs++, 0));
+ for (auto &bank : m_bankr)
+ bank->set_entry(convert(offs++, 0));
offs = temp;
- membank("bankw0")->set_entry(convert(offs++, 1));
- membank("bankw1")->set_entry(convert(offs++, 1));
- membank("bankw2")->set_entry(convert(offs++, 1));
- membank("bankw3")->set_entry(convert(offs++, 1));
- membank("bankw4")->set_entry(convert(offs++, 1));
- membank("bankw5")->set_entry(convert(offs++, 1));
- membank("bankw6")->set_entry(convert(offs++, 1));
- membank("bankw7")->set_entry(convert(offs++, 1));
- membank("bankw8")->set_entry(convert(offs++, 1));
- membank("bankw9")->set_entry(convert(offs++, 1));
- membank("bankwa")->set_entry(convert(offs++, 1));
- membank("bankwb")->set_entry(convert(offs++, 1));
- membank("bankwc")->set_entry(convert(offs++, 1));
- membank("bankwd")->set_entry(convert(offs++, 1));
- membank("bankwe")->set_entry(convert(offs++, 1));
- membank("bankwf")->set_entry(convert(offs++, 1));
+ for (auto &bank : m_bankw)
+ bank->set_entry(convert(offs++, 1));
}
m_curr_bank = temp;
@@ -368,44 +345,33 @@ WRITE_LINE_MEMBER( altos5_state::fdc_intrq_w )
m_pio0->port_a_write(data);
}
-void altos5_state::init_altos5()
+void altos5_state::machine_start()
{
- m_p_prom = memregion("proms")->base();
-
- uint8_t *RAM = memregion("maincpu")->base();
-
- membank("bankr0")->configure_entries(0, 50, &RAM[0], 0x1000);
- membank("bankr1")->configure_entries(0, 50, &RAM[0], 0x1000);
- membank("bankr2")->configure_entries(0, 50, &RAM[0], 0x1000);
- membank("bankr3")->configure_entries(0, 50, &RAM[0], 0x1000);
- membank("bankr4")->configure_entries(0, 50, &RAM[0], 0x1000);
- membank("bankr5")->configure_entries(0, 50, &RAM[0], 0x1000);
- membank("bankr6")->configure_entries(0, 50, &RAM[0], 0x1000);
- membank("bankr7")->configure_entries(0, 50, &RAM[0], 0x1000);
- membank("bankr8")->configure_entries(0, 50, &RAM[0], 0x1000);
- membank("bankr9")->configure_entries(0, 50, &RAM[0], 0x1000);
- membank("bankra")->configure_entries(0, 50, &RAM[0], 0x1000);
- membank("bankrb")->configure_entries(0, 50, &RAM[0], 0x1000);
- membank("bankrc")->configure_entries(0, 50, &RAM[0], 0x1000);
- membank("bankrd")->configure_entries(0, 50, &RAM[0], 0x1000);
- membank("bankre")->configure_entries(0, 50, &RAM[0], 0x1000);
- membank("bankrf")->configure_entries(0, 50, &RAM[0], 0x1000);
- membank("bankw0")->configure_entries(0, 50, &RAM[0], 0x1000);
- membank("bankw1")->configure_entries(0, 50, &RAM[0], 0x1000);
- membank("bankw2")->configure_entries(0, 50, &RAM[0], 0x1000);
- membank("bankw3")->configure_entries(0, 50, &RAM[0], 0x1000);
- membank("bankw4")->configure_entries(0, 50, &RAM[0], 0x1000);
- membank("bankw5")->configure_entries(0, 50, &RAM[0], 0x1000);
- membank("bankw6")->configure_entries(0, 50, &RAM[0], 0x1000);
- membank("bankw7")->configure_entries(0, 50, &RAM[0], 0x1000);
- membank("bankw8")->configure_entries(0, 50, &RAM[0], 0x1000);
- membank("bankw9")->configure_entries(0, 50, &RAM[0], 0x1000);
- membank("bankwa")->configure_entries(0, 50, &RAM[0], 0x1000);
- membank("bankwb")->configure_entries(0, 50, &RAM[0], 0x1000);
- membank("bankwc")->configure_entries(0, 50, &RAM[0], 0x1000);
- membank("bankwd")->configure_entries(0, 50, &RAM[0], 0x1000);
- membank("bankwe")->configure_entries(0, 50, &RAM[0], 0x1000);
- membank("bankwf")->configure_entries(0, 50, &RAM[0], 0x1000);
+ m_ram = make_unique_clear<u8[]>(0x30000);
+ m_dummy = std::make_unique<u8[]>(0x1000);
+
+ u8 *r = m_ram.get();
+ u8 *d = m_dummy.get();
+ u8 *m = memregion("maincpu")->base();
+
+ for (auto &bank : m_bankr)
+ bank->configure_entries(0, 48, r, 0x1000);
+ for (auto &bank : m_bankw)
+ bank->configure_entries(0, 48, r, 0x1000);
+ for (auto &bank : m_bankr)
+ bank->configure_entry(48, d);
+ for (auto &bank : m_bankw)
+ bank->configure_entry(48, d);
+ for (auto &bank : m_bankr)
+ bank->configure_entry(49, m);
+ for (auto &bank : m_bankw)
+ bank->configure_entry(49, m);
+
+ save_pointer(NAME(m_ram), 0x30000);
+ save_item(NAME(m_port08));
+ save_item(NAME(m_port09));
+ save_item(NAME(m_ipl));
+ save_item(NAME(m_curr_bank));
}
void altos5_state::altos5(machine_config &config)
@@ -479,9 +445,9 @@ void altos5_state::altos5(machine_config &config)
/* ROM definition */
-ROM_START( altos5 ) // 00000-2FFFF = ram banks; 30000-30FFF wprt space; 31000-31FFF ROM
- ROM_REGION( 0x32000, "maincpu", ROMREGION_ERASEFF )
- ROM_LOAD("2732.bin", 0x31000, 0x1000, CRC(15fdc7eb) SHA1(e15bdf5d5414ad56f8c4bb84edc6f967a5f01ba9)) // bios
+ROM_START( altos5 )
+ ROM_REGION( 0x1000, "maincpu", 0 )
+ ROM_LOAD("2732.bin", 0x0000, 0x1000, CRC(15fdc7eb) SHA1(e15bdf5d5414ad56f8c4bb84edc6f967a5f01ba9)) // bios
ROM_REGION( 0x200, "proms", 0 )
ROM_LOAD("82s141.bin", 0x0000, 0x0200, CRC(35c8078c) SHA1(dce24374bfcc5d23959e2c03485d82a119c0c3c9)) // banking control
@@ -490,4 +456,4 @@ ROM_END
/* Driver */
/* YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS */
-COMP( 1982, altos5, 0, 0, altos5, altos5, altos5_state, init_altos5, "Altos", "Altos 5-15", MACHINE_NOT_WORKING )
+COMP( 1982, altos5, 0, 0, altos5, altos5, altos5_state, empty_init, "Altos", "Altos 5-15", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE )
diff --git a/src/mame/drivers/c10.cpp b/src/mame/drivers/c10.cpp
index 9c52a68d2b2..628082f4987 100644
--- a/src/mame/drivers/c10.cpp
+++ b/src/mame/drivers/c10.cpp
@@ -29,38 +29,38 @@ public:
: driver_device(mconfig, type, tag)
, m_maincpu(*this, "maincpu")
, m_rom(*this, "maincpu")
- , m_p_videoram(*this, "videoram")
- , m_p_chargen(*this, "chargen")
, m_ram(*this, "mainram")
+ , m_vram(*this, "videoram")
+ , m_p_chargen(*this, "chargen")
{ }
- uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
+ u32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
void c10(machine_config &config);
private:
- void c10_io(address_map &map);
- void c10_mem(address_map &map);
- virtual void machine_reset() override;
+ void io_map(address_map &map);
+ void mem_map(address_map &map);
+ void machine_reset() override;
+ 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_p_videoram;
- required_region_ptr<u8> m_p_chargen;
- memory_passthrough_handler *m_rom_shadow_tap;
required_shared_ptr<u8> m_ram;
+ required_shared_ptr<u8> m_vram;
+ required_region_ptr<u8> m_p_chargen;
};
-void c10_state::c10_mem(address_map &map)
+void c10_state::mem_map(address_map &map)
{
- map.unmap_value_high();
map(0x0000, 0x7fff).ram().share("mainram");
map(0x8000, 0xbfff).rom().region("maincpu", 0);
map(0xc000, 0xf0a1).ram();
map(0xf0a2, 0xffff).ram().share("videoram");
}
-void c10_state::c10_io(address_map &map)
+void c10_state::io_map(address_map &map)
{
map.global_mask(0xff);
}
@@ -69,6 +69,10 @@ void c10_state::c10_io(address_map &map)
static INPUT_PORTS_START( c10 )
INPUT_PORTS_END
+void c10_state::machine_start()
+{
+}
+
void c10_state::machine_reset()
{
address_space &program = m_maincpu->space(AS_PROGRAM);
@@ -111,7 +115,7 @@ uint32_t c10_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, c
gfx = 0;
if (ra < 9)
{
- chr = m_p_videoram[xx++];
+ chr = m_vram[xx++];
// /* Take care of flashing characters */
// if ((chr < 0x80) && (framecnt & 0x08))
@@ -139,7 +143,7 @@ uint32_t c10_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, c
}
/* F4 Character Displayer */
-static const gfx_layout c10_charlayout =
+static const gfx_layout charlayout =
{
8, 9, /* 8 x 9 characters */
512, /* 512 characters */
@@ -153,7 +157,7 @@ static const gfx_layout c10_charlayout =
};
static GFXDECODE_START( gfx_c10 )
- GFXDECODE_ENTRY( "chargen", 0x0000, c10_charlayout, 0, 1 )
+ GFXDECODE_ENTRY( "chargen", 0x0000, charlayout, 0, 1 )
GFXDECODE_END
@@ -161,8 +165,8 @@ void c10_state::c10(machine_config &config)
{
/* basic machine hardware */
Z80(config, m_maincpu, XTAL(8'000'000) / 2);
- m_maincpu->set_addrmap(AS_PROGRAM, &c10_state::c10_mem);
- m_maincpu->set_addrmap(AS_IO, &c10_state::c10_io);
+ m_maincpu->set_addrmap(AS_PROGRAM, &c10_state::mem_map);
+ m_maincpu->set_addrmap(AS_IO, &c10_state::io_map);
/* video hardware */
screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
diff --git a/src/mame/drivers/c900.cpp b/src/mame/drivers/c900.cpp
index 72604266091..8a0bda9c801 100644
--- a/src/mame/drivers/c900.cpp
+++ b/src/mame/drivers/c900.cpp
@@ -105,7 +105,7 @@ static INPUT_PORTS_START( c900 )
INPUT_PORTS_END
/* F4 Character Displayer */
-static const gfx_layout c900_charlayout =
+static const gfx_layout charlayout =
{
8, 16, /* 8 x 16 characters */
256, /* 256 characters */
@@ -119,7 +119,7 @@ static const gfx_layout c900_charlayout =
};
static GFXDECODE_START( gfx_c900 )
- GFXDECODE_ENTRY( "chargen", 0x0000, c900_charlayout, 0, 1 )
+ GFXDECODE_ENTRY( "chargen", 0x0000, charlayout, 0, 1 )
GFXDECODE_END
void c900_state::c900(machine_config &config)
@@ -168,4 +168,4 @@ ROM_START( c900 )
ROM_END
/* YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS */
-COMP( 1985, c900, 0, 0, c900, c900, c900_state, empty_init, "Commodore", "Commodore 900", MACHINE_IS_SKELETON )
+COMP( 1985, c900, 0, 0, c900, c900, c900_state, empty_init, "Commodore", "Commodore 900", MACHINE_IS_SKELETON | MACHINE_SUPPORTS_SAVE )
diff --git a/src/mame/drivers/et3400.cpp b/src/mame/drivers/et3400.cpp
index ad007626b8c..30bce561ba9 100644
--- a/src/mame/drivers/et3400.cpp
+++ b/src/mame/drivers/et3400.cpp
@@ -265,4 +265,4 @@ ROM_END
/* Driver */
/* YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS */
-COMP( 1976, et3400, 0, 0, et3400, et3400, et3400_state, empty_init, "Heath Company", "Heathkit Model ET-3400 Microprocessor Trainer", 0 )
+COMP( 1976, et3400, 0, 0, et3400, et3400, et3400_state, empty_init, "Heath Company", "Heathkit Model ET-3400 Microprocessor Trainer", MACHINE_SUPPORTS_SAVE )
diff --git a/src/mame/drivers/pcm.cpp b/src/mame/drivers/pcm.cpp
index ae865824b55..ecc6a0a5b29 100644
--- a/src/mame/drivers/pcm.cpp
+++ b/src/mame/drivers/pcm.cpp
@@ -86,17 +86,17 @@ public:
void pcm(machine_config &config);
private:
- uint8_t pcm_85_r();
- DECLARE_WRITE_LINE_MEMBER( pcm_82_w );
- void pcm_85_w(uint8_t data);
+ uint8_t port85_r();
+ DECLARE_WRITE_LINE_MEMBER( port82_w );
+ void port85_w(uint8_t data);
uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
- void pcm_io(address_map &map);
- void pcm_mem(address_map &map);
+ void io_map(address_map &map);
+ void mem_map(address_map &map);
bool m_cone;
uint8_t m_85;
- virtual void machine_reset() override;
+ void machine_start() override;
required_device<z80_device> m_maincpu;
required_device<z80pio_device> m_pio_s;
required_device<z80pio_device> m_pio_u;
@@ -109,7 +109,7 @@ private:
};
-WRITE_LINE_MEMBER( pcm_state::pcm_82_w )
+WRITE_LINE_MEMBER( pcm_state::port82_w )
{
if (state)
{
@@ -139,7 +139,7 @@ There is also a HALT LED, connected directly to the processor.
*/
-uint8_t pcm_state::pcm_85_r()
+uint8_t pcm_state::port85_r()
{
uint8_t data = m_85 & 0x7f;
@@ -149,7 +149,7 @@ uint8_t pcm_state::pcm_85_r()
return data;
}
-void pcm_state::pcm_85_w(uint8_t data)
+void pcm_state::port85_w(uint8_t data)
{
if (BIT(data, 5))
m_cass->change_state(CASSETTE_MOTOR_ENABLED,CASSETTE_MASK_MOTOR);
@@ -162,15 +162,14 @@ void pcm_state::pcm_85_w(uint8_t data)
-void pcm_state::pcm_mem(address_map &map)
+void pcm_state::mem_map(address_map &map)
{
- map.unmap_value_high();
- map(0x0000, 0x1fff).rom(); // ROM
- map(0x2000, 0xf7ff).ram(); // RAM
- map(0xf800, 0xffff).ram().share("videoram"); // Video RAM
+ map(0x0000, 0x1fff).rom();
+ map(0x2000, 0xf7ff).ram();
+ map(0xf800, 0xffff).ram().share("videoram");
}
-void pcm_state::pcm_io(address_map &map)
+void pcm_state::io_map(address_map &map)
{
map.unmap_value_high();
map.global_mask(0xff);
@@ -189,8 +188,10 @@ void pcm_state::pcm_io(address_map &map)
static INPUT_PORTS_START( pcm )
INPUT_PORTS_END
-void pcm_state::machine_reset()
+void pcm_state::machine_start()
{
+ save_item(NAME(m_cone));
+ save_item(NAME(m_85));
}
uint32_t pcm_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
@@ -226,7 +227,7 @@ uint32_t pcm_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, c
}
-static const z80_daisy_config pcm_daisy_chain[] =
+static const z80_daisy_config daisy_chain[] =
{
{ "ctc_s" }, /* System ctc */
{ "pio_s" }, /* System pio */
@@ -238,7 +239,7 @@ static const z80_daisy_config pcm_daisy_chain[] =
/* F4 Character Displayer */
-static const gfx_layout pcm_charlayout =
+static const gfx_layout charlayout =
{
8, 8, /* 8 x 8 characters */
256, /* 256 characters */
@@ -252,16 +253,16 @@ static const gfx_layout pcm_charlayout =
};
static GFXDECODE_START( gfx_pcm )
- GFXDECODE_ENTRY( "chargen", 0x0000, pcm_charlayout, 0, 1 )
+ GFXDECODE_ENTRY( "chargen", 0x0000, charlayout, 0, 1 )
GFXDECODE_END
void pcm_state::pcm(machine_config &config)
{
/* basic machine hardware */
Z80(config, m_maincpu, XTAL(10'000'000) /4);
- m_maincpu->set_addrmap(AS_PROGRAM, &pcm_state::pcm_mem);
- m_maincpu->set_addrmap(AS_IO, &pcm_state::pcm_io);
- m_maincpu->set_daisy_config(pcm_daisy_chain);
+ m_maincpu->set_addrmap(AS_PROGRAM, &pcm_state::mem_map);
+ m_maincpu->set_addrmap(AS_IO, &pcm_state::io_map);
+ m_maincpu->set_daisy_config(daisy_chain);
/* video hardware */
screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
@@ -290,8 +291,8 @@ void pcm_state::pcm(machine_config &config)
Z80PIO(config, m_pio_s, XTAL(10'000'000)/4);
m_pio_s->out_int_callback().set_inputline(m_maincpu, INPUT_LINE_IRQ0);
m_pio_s->in_pa_callback().set(K7659_KEYBOARD_TAG, FUNC(k7659_keyboard_device::read));
- m_pio_s->in_pb_callback().set(FUNC(pcm_state::pcm_85_r));
- m_pio_s->out_pb_callback().set(FUNC(pcm_state::pcm_85_w));
+ m_pio_s->in_pb_callback().set(FUNC(pcm_state::port85_r));
+ m_pio_s->out_pb_callback().set(FUNC(pcm_state::port85_w));
Z80SIO(config, "sio", XTAL(10'000'000) /4);
@@ -303,7 +304,7 @@ void pcm_state::pcm(machine_config &config)
m_ctc_s->zc_callback<0>().set("sio", FUNC(z80sio_device::rxca_w));
m_ctc_s->zc_callback<0>().append("sio", FUNC(z80sio_device::txca_w));
m_ctc_s->zc_callback<1>().set("sio", FUNC(z80sio_device::rxtxcb_w));
- m_ctc_s->zc_callback<2>().set(FUNC(pcm_state::pcm_82_w)); // speaker
+ m_ctc_s->zc_callback<2>().set(FUNC(pcm_state::port82_w)); // speaker
}
/* ROM definition */
@@ -332,4 +333,4 @@ ROM_END
/* Driver */
/* YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS */
-COMP( 1988, pcm, 0, 0, pcm, pcm, pcm_state, empty_init, "Mugler/Mathes", "PC/M", 0)
+COMP( 1988, pcm, 0, 0, pcm, pcm, pcm_state, empty_init, "Mugler/Mathes", "PC/M", MACHINE_SUPPORTS_SAVE )
diff --git a/src/mame/drivers/pimps.cpp b/src/mame/drivers/pimps.cpp
index 6370b8c3724..12212d11e22 100644
--- a/src/mame/drivers/pimps.cpp
+++ b/src/mame/drivers/pimps.cpp
@@ -80,6 +80,8 @@ public:
pimps_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag)
, m_maincpu(*this, "maincpu")
+ , m_rom(*this, "roms")
+ , m_ram(*this, "mainram")
{ }
void pimps(machine_config &config);
@@ -89,14 +91,16 @@ private:
void mem_map(address_map &map);
virtual 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;
};
void pimps_state::mem_map(address_map &map)
{
- map.unmap_value_high();
- map(0x0000, 0xefff).ram();
+ map(0x0000, 0xefff).ram().share("mainram");
map(0xf000, 0xffff).rom().region("roms", 0);
}
@@ -114,7 +118,22 @@ INPUT_PORTS_END
void pimps_state::machine_reset()
{
- m_maincpu->set_pc(0xf000);
+ 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;
+ });
}
// baud is not documented, we will use 9600
@@ -163,11 +182,11 @@ void pimps_state::pimps(machine_config &config)
/* ROM definition */
ROM_START( pimps )
- ROM_REGION( 0x1000, "roms", ROMREGION_ERASEFF )
+ ROM_REGION( 0x1000, "roms", 0 )
ROM_LOAD( "pimps.bin", 0x0000, 0x1000, CRC(5da1898f) SHA1(d20e31d0981a1f54c83186dbdfcf4280e49970d0))
ROM_END
/* Driver */
/* YEAR NAME PARENT COMPAT MACHINE INPUT STATE INIT COMPANY FULLNAME FLAGS */
-COMP( 197?, pimps, 0, 0, pimps, pimps, pimps_state, empty_init, "Henry Colford", "P.I.M.P.S.", MACHINE_NO_SOUND_HW) // terminal beeps
+COMP( 197?, pimps, 0, 0, pimps, pimps, pimps_state, empty_init, "Henry Colford", "P.I.M.P.S.", MACHINE_NO_SOUND_HW | MACHINE_SUPPORTS_SAVE ) // terminal beeps
diff --git a/src/mame/drivers/sbc6510.cpp b/src/mame/drivers/sbc6510.cpp
index 1ba5b8373ff..d8222e2c1fe 100644
--- a/src/mame/drivers/sbc6510.cpp
+++ b/src/mame/drivers/sbc6510.cpp
@@ -68,26 +68,26 @@ public:
, m_maincpu(*this, "maincpu")
, m_videocpu(*this, "videocpu")
, m_terminal(*this, "terminal")
- , m_keyboard(*this, "X%u", 0)
+ , m_keyboard(*this, "X%u", 0U)
{ }
void sbc6510(machine_config &config);
private:
- uint8_t a2_r();
- void a2_w(uint8_t data);
- uint8_t psg_a_r();
- uint8_t psg_b_r();
- void key_w(uint8_t data);
- uint8_t key_r();
-
- void sbc6510_mem(address_map &map);
- void sbc6510_video_data(address_map &map);
- void sbc6510_video_io(address_map &map);
- void sbc6510_video_mem(address_map &map);
-
- uint8_t m_key_row;
- uint8_t m_2;
+ u8 a2_r();
+ void a2_w(u8 data);
+ u8 psg_a_r();
+ u8 psg_b_r();
+ void key_w(u8 data);
+ u8 key_r();
+
+ void main_mem_map(address_map &map);
+ void video_data_map(address_map &map);
+ void video_io_map(address_map &map);
+ void video_mem_map(address_map &map);
+
+ u8 m_key_row;
+ u8 m_2;
virtual void machine_start() override;
virtual void machine_reset() override;
required_device<cpu_device> m_maincpu;
@@ -97,7 +97,7 @@ private:
};
-void sbc6510_state::sbc6510_mem(address_map &map)
+void sbc6510_state::main_mem_map(address_map &map)
{
map.unmap_value_high();
map(0x0000, 0x0001).ram();
@@ -106,20 +106,20 @@ void sbc6510_state::sbc6510_mem(address_map &map)
map(0xe000, 0xe00f).mirror(0x1f0).rw("cia6526", FUNC(mos6526_device::read), FUNC(mos6526_device::write));
map(0xe800, 0xe800).mirror(0x1ff).w("ay8910", FUNC(ay8910_device::address_w));
map(0xea00, 0xea00).mirror(0x1ff).rw("ay8910", FUNC(ay8910_device::data_r), FUNC(ay8910_device::data_w));
- map(0xf000, 0xffff).rom();
+ map(0xf000, 0xffff).rom().region("maincpu",0);
}
-void sbc6510_state::sbc6510_video_mem(address_map &map)
+void sbc6510_state::video_mem_map(address_map &map)
{
map(0x0000, 0x1fff).rom();
}
-void sbc6510_state::sbc6510_video_data(address_map &map)
+void sbc6510_state::video_data_map(address_map &map)
{
map(0x0100, 0x04ff).ram();
}
-void sbc6510_state::sbc6510_video_io(address_map &map)
+void sbc6510_state::video_io_map(address_map &map)
{
}
@@ -213,12 +213,12 @@ static INPUT_PORTS_START( sbc6510 ) // cbm keyboard
INPUT_PORTS_END
-uint8_t sbc6510_state::a2_r()
+u8 sbc6510_state::a2_r()
{
return m_2;
}
-void sbc6510_state::a2_w(uint8_t data)
+void sbc6510_state::a2_w(u8 data)
{
m_2 = data;
m_terminal->write(data);
@@ -226,6 +226,8 @@ void sbc6510_state::a2_w(uint8_t data)
void sbc6510_state::machine_start()
{
+ save_item(NAME(m_key_row));
+ save_item(NAME(m_2));
}
@@ -233,17 +235,17 @@ void sbc6510_state::machine_reset()
{
}
-uint8_t sbc6510_state::psg_a_r()
+u8 sbc6510_state::psg_a_r()
{
return 0xff;
}
-uint8_t sbc6510_state::psg_b_r()
+u8 sbc6510_state::psg_b_r()
{
return 0x7f;
}
-uint8_t sbc6510_state::key_r()
+u8 sbc6510_state::key_r()
{
u8 i, data=0;
@@ -254,7 +256,7 @@ uint8_t sbc6510_state::key_r()
return ~data;
}
-void sbc6510_state::key_w(uint8_t data)
+void sbc6510_state::key_w(u8 data)
{
m_key_row = data;
}
@@ -280,12 +282,12 @@ void sbc6510_state::sbc6510(machine_config &config)
{
/* basic machine hardware */
M6510(config, m_maincpu, XTAL(1'000'000));
- m_maincpu->set_addrmap(AS_PROGRAM, &sbc6510_state::sbc6510_mem);
+ m_maincpu->set_addrmap(AS_PROGRAM, &sbc6510_state::main_mem_map);
ATMEGA88(config, m_videocpu, XTAL(16'000'000)); // Video CPU trips SLEEP opcode, needs to be emulated
- m_videocpu->set_addrmap(AS_PROGRAM, &sbc6510_state::sbc6510_video_mem);
- m_videocpu->set_addrmap(AS_DATA, &sbc6510_state::sbc6510_video_data);
- m_videocpu->set_addrmap(AS_IO, &sbc6510_state::sbc6510_video_io);
+ m_videocpu->set_addrmap(AS_PROGRAM, &sbc6510_state::video_mem_map);
+ m_videocpu->set_addrmap(AS_DATA, &sbc6510_state::video_data_map);
+ m_videocpu->set_addrmap(AS_IO, &sbc6510_state::video_io_map);
m_videocpu->set_eeprom_tag("eeprom");
PALETTE(config, "palette", palette_device::MONOCHROME); // for F4 displayer only
@@ -311,16 +313,19 @@ void sbc6510_state::sbc6510(machine_config &config)
/* ROM definition */
ROM_START( sbc6510 )
- ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASEFF )
- ROM_LOAD( "sbc6510.rom", 0xf000, 0x1000, CRC(e13a5e62) SHA1(1e7482e9b98b39d0cc456254fbe8fd0981e9377e))
- ROM_REGION( 0x10000, "videocpu", ROMREGION_ERASEFF ) // ATMEGA8 at 16MHz
+ ROM_REGION( 0x1000, "maincpu", 0 )
+ ROM_LOAD( "sbc6510.rom", 0x0000, 0x1000, CRC(e13a5e62) SHA1(1e7482e9b98b39d0cc456254fbe8fd0981e9377e))
+
+ ROM_REGION( 0x2000, "videocpu", 0 ) // ATMEGA8 at 16MHz
ROM_LOAD( "video.bin", 0x0000, 0x2000, CRC(809f31ce) SHA1(4639de5f7b8f6c036d74f217ba85e7e897039094))
- ROM_REGION( 0x200, "gal", ROMREGION_ERASEFF )
+
+ ROM_REGION( 0x0200, "gal", ROMREGION_ERASEFF )
ROM_LOAD( "sbc6510.gal", 0x0000, 0x0117, CRC(f78f9927) SHA1(b951163958f5722032826d0d17a07c81dbd5f68e))
+
ROM_REGION( 0x2000, "eeprom", ROMREGION_ERASEFF )
ROM_END
/* Driver */
/* YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS */
-COMP( 2009, sbc6510, 0, 0, sbc6510, sbc6510, sbc6510_state, empty_init, "Josip Perusanec", "SBC6510", MACHINE_NOT_WORKING )
+COMP( 2009, sbc6510, 0, 0, sbc6510, sbc6510, sbc6510_state, empty_init, "Josip Perusanec", "SBC6510", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE )
diff --git a/src/mame/drivers/sv8000.cpp b/src/mame/drivers/sv8000.cpp
index c8a263236fc..d671302c563 100644
--- a/src/mame/drivers/sv8000.cpp
+++ b/src/mame/drivers/sv8000.cpp
@@ -72,8 +72,8 @@ private:
virtual void machine_start() override;
virtual void machine_reset() override;
- void sv8000_io(address_map &map);
- void sv8000_mem(address_map &map);
+ void io_map(address_map &map);
+ void mem_map(address_map &map);
required_device<cpu_device> m_maincpu;
required_device<s68047_device> m_s68047p;
@@ -98,7 +98,7 @@ private:
};
-void sv8000_state::sv8000_mem(address_map &map)
+void sv8000_state::mem_map(address_map &map)
{
map.unmap_value_high();
//map(0x0000, 0x0fff) // mapped by the cartslot
@@ -107,7 +107,7 @@ void sv8000_state::sv8000_mem(address_map &map)
}
-void sv8000_state::sv8000_io(address_map &map)
+void sv8000_state::io_map(address_map &map)
{
map.unmap_value_high();
map.global_mask(0xff);
@@ -172,15 +172,6 @@ INPUT_PORTS_END
void sv8000_state::machine_start()
{
- m_ag = 0;
- m_gm2 = 0;
- m_gm1 = 0;
- m_gm0 = 0;
- m_as = 0;
- m_css = 0;
- m_intext = 0;
- m_inv = 0;
-
if (m_cart->exists())
m_maincpu->space(AS_PROGRAM).install_read_handler(0x0000, 0x0fff, read8sm_delegate(*m_cart, FUNC(generic_slot_device::read_rom)));
@@ -199,6 +190,14 @@ void sv8000_state::machine_start()
void sv8000_state::machine_reset()
{
m_column = 0xff;
+ m_ag = 0;
+ m_gm2 = 0;
+ m_gm1 = 0;
+ m_gm0 = 0;
+ m_as = 0;
+ m_css = 0;
+ m_intext = 0;
+ m_inv = 0;
}
@@ -238,15 +237,15 @@ uint8_t sv8000_state::i8255_portb_r()
//logerror("i8255_portb_r\n");
- if (!(m_column & 0x01))
+ if (!BIT(m_column, 0))
{
data &= m_io_row0->read();
}
- if (!(m_column & 0x02))
+ if (!BIT(m_column, 1))
{
data &= m_io_row1->read();
}
- if (!(m_column & 0x04))
+ if (!BIT(m_column, 2))
{
data &= m_io_row2->read();
}
@@ -378,8 +377,8 @@ void sv8000_state::sv8000(machine_config &config)
{
/* basic machine hardware */
Z80(config, m_maincpu, XTAL(10'738'635)/3); /* Not verified */
- m_maincpu->set_addrmap(AS_PROGRAM, &sv8000_state::sv8000_mem);
- m_maincpu->set_addrmap(AS_IO, &sv8000_state::sv8000_io);
+ m_maincpu->set_addrmap(AS_PROGRAM, &sv8000_state::mem_map);
+ m_maincpu->set_addrmap(AS_IO, &sv8000_state::io_map);
m_maincpu->set_vblank_int("screen", FUNC(sv8000_state::irq0_line_hold));
i8255_device &ppi(I8255(config, "i8255"));
@@ -424,4 +423,4 @@ ROM_END
/* Driver */
/* YEAR NAME PARENT COMPAT MACHINE INPUT STATE INIT COMPANY FULLNAME FLAGS */
-CONS( 1979, sv8000, 0, 0, sv8000, sv8000, sv8000_state, empty_init, "Bandai", "Super Vision 8000 (TV Jack 8000)", 0 )
+CONS( 1979, sv8000, 0, 0, sv8000, sv8000, sv8000_state, empty_init, "Bandai", "Super Vision 8000 (TV Jack 8000)", MACHINE_SUPPORTS_SAVE )