diff options
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 |
commit | f114358821ba23b566118be6064e57f2c1a43a65 (patch) | |
tree | a1639f8d2d3a89af1ff1e52b0053467f1d955e38 | |
parent | aa49b3a8b5e7ff37f0259a7a3859b7332e20e33f (diff) |
(nw) even more cleanups
-rw-r--r-- | src/mame/drivers/68ksbc.cpp | 8 | ||||
-rw-r--r-- | src/mame/drivers/altos5.cpp | 140 | ||||
-rw-r--r-- | src/mame/drivers/c10.cpp | 38 | ||||
-rw-r--r-- | src/mame/drivers/c900.cpp | 6 | ||||
-rw-r--r-- | src/mame/drivers/et3400.cpp | 2 | ||||
-rw-r--r-- | src/mame/drivers/pcm.cpp | 53 | ||||
-rw-r--r-- | src/mame/drivers/pimps.cpp | 29 | ||||
-rw-r--r-- | src/mame/drivers/sbc6510.cpp | 75 | ||||
-rw-r--r-- | src/mame/drivers/sv8000.cpp | 37 |
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 ) |