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