diff --git a/src/mame/drivers/pipbug.cpp b/src/mame/drivers/pipbug.cpp index 2fe0274194d..863620d4232 100644 --- a/src/mame/drivers/pipbug.cpp +++ b/src/mame/drivers/pipbug.cpp @@ -66,6 +66,7 @@ public: void pipbug(machine_config &config); private: + virtual void machine_start() override; void pipbug_ctrl_w(u8 data); DECLARE_READ_LINE_MEMBER(serial_r); TIMER_DEVICE_CALLBACK_MEMBER(kansas_r); @@ -73,8 +74,8 @@ private: required_device m_maincpu; required_device m_cass; DECLARE_QUICKLOAD_LOAD_MEMBER(quickload_cb); - void pipbug_data(address_map &map); - void pipbug_mem(address_map &map); + void data_map(address_map &map); + void mem_map(address_map &map); u8 m_cass_data[4]; bool m_cassold, m_cassinbit; }; @@ -113,14 +114,21 @@ READ_LINE_MEMBER( pipbug_state::serial_r ) return m_rs232->rxd_r() & m_cassinbit; } -void pipbug_state::pipbug_mem(address_map &map) +void pipbug_state::machine_start() +{ + save_pointer(NAME(m_cass_data), 4); + save_item(NAME(m_cassold)); + save_item(NAME(m_cassinbit)); +} + +void pipbug_state::mem_map(address_map &map) { map.unmap_value_high(); map(0x0000, 0x03ff).rom(); map(0x0400, 0x7fff).ram(); } -void pipbug_state::pipbug_data(address_map &map) +void pipbug_state::data_map(address_map &map) { // map.unmap_value_high(); map(S2650_CTRL_PORT, S2650_CTRL_PORT).w(FUNC(pipbug_state::pipbug_ctrl_w)); @@ -146,7 +154,7 @@ QUICKLOAD_LOAD_MEMBER(pipbug_state::quickload_cb) int quick_addr = 0x440; int exec_addr; int quick_length; - std::vector quick_data; + std::vector quick_data; int read_; image_init_result result = image_init_result::FAIL; @@ -207,8 +215,8 @@ void pipbug_state::pipbug(machine_config &config) { /* basic machine hardware */ S2650(config, m_maincpu, XTAL(1'000'000)); - m_maincpu->set_addrmap(AS_PROGRAM, &pipbug_state::pipbug_mem); - m_maincpu->set_addrmap(AS_DATA, &pipbug_state::pipbug_data); + m_maincpu->set_addrmap(AS_PROGRAM, &pipbug_state::mem_map); + m_maincpu->set_addrmap(AS_DATA, &pipbug_state::data_map); m_maincpu->flag_handler().set("rs232", FUNC(rs232_port_device::write_txd)); m_maincpu->sense_handler().set(FUNC(pipbug_state::serial_r)); @@ -231,11 +239,11 @@ void pipbug_state::pipbug(machine_config &config) /* ROM definition */ ROM_START( pipbug ) - ROM_REGION( 0x8000, "maincpu", ROMREGION_ERASEFF ) + ROM_REGION( 0x0400, "maincpu", 0 ) ROM_LOAD( "pipbug.rom", 0x0000, 0x0400, CRC(f242b93e) SHA1(f82857cc882e6b5fc9f00b20b375988024f413ff)) ROM_END /* Driver */ // YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS -COMP( 1979, pipbug, 0, 0, pipbug, pipbug, pipbug_state, empty_init, "Signetics", "PIPBUG", MACHINE_NO_SOUND_HW ) +COMP( 1979, pipbug, 0, 0, pipbug, pipbug, pipbug_state, empty_init, "Signetics", "PIPBUG", MACHINE_NO_SOUND_HW | MACHINE_SUPPORTS_SAVE ) diff --git a/src/mame/drivers/pro80.cpp b/src/mame/drivers/pro80.cpp index af705a28c6e..000d0413d60 100644 --- a/src/mame/drivers/pro80.cpp +++ b/src/mame/drivers/pro80.cpp @@ -47,18 +47,19 @@ public: void pro80(machine_config &config); private: - void digit_w(uint8_t data); - void segment_w(uint8_t data); - uint8_t kp_r(); + void digit_w(u8 data); + void segment_w(u8 data); + u8 kp_r(); TIMER_DEVICE_CALLBACK_MEMBER(kansas_r); - void pro80_io(address_map &map); - void pro80_mem(address_map &map); + void io_map(address_map &map); + void mem_map(address_map &map); - uint8_t m_digit_sel; - uint8_t m_cass_in; - uint16_t m_cass_data[4]; - void machine_reset() override; + u8 m_digit_sel; + u8 m_cass_in; + u16 m_cass_data[4]; + virtual void machine_reset() override; + virtual void machine_start() override; required_device m_maincpu; required_device m_cass; required_ioport_array<6> m_io_keyboard; @@ -68,7 +69,7 @@ private: TIMER_DEVICE_CALLBACK_MEMBER( pro80_state::kansas_r ) { m_cass_data[1]++; - uint8_t cass_ws = (m_cass->input() > +0.03) ? 1 : 0; + u8 cass_ws = (m_cass->input() > +0.03) ? 1 : 0; if (cass_ws != m_cass_data[0]) { @@ -79,7 +80,7 @@ TIMER_DEVICE_CALLBACK_MEMBER( pro80_state::kansas_r ) } } -void pro80_state::digit_w(uint8_t data) +void pro80_state::digit_w(u8 data) { // --xx xxxx digit select // -x-- ---- cassette out @@ -88,7 +89,7 @@ void pro80_state::digit_w(uint8_t data) m_cass->output( BIT(data, 6) ? -1.0 : +1.0); } -void pro80_state::segment_w(uint8_t data) +void pro80_state::segment_w(u8 data) { if (m_digit_sel) { @@ -100,9 +101,9 @@ void pro80_state::segment_w(uint8_t data) } } -uint8_t pro80_state::kp_r() +u8 pro80_state::kp_r() { - uint8_t data = 0x0f; + u8 data = 0x0f; for (u8 i = 0; i < 6; i++) if (!BIT(m_digit_sel, i)) @@ -114,7 +115,7 @@ uint8_t pro80_state::kp_r() return data; } -void pro80_state::pro80_mem(address_map &map) +void pro80_state::mem_map(address_map &map) { map.unmap_value_high(); map(0x0000, 0x03ff).rom(); @@ -122,7 +123,7 @@ void pro80_state::pro80_mem(address_map &map) map(0x1400, 0x17ff).ram(); // 2nd RAM is optional } -void pro80_state::pro80_io(address_map &map) +void pro80_state::io_map(address_map &map) { map.unmap_value_high(); map.global_mask(0xff); @@ -172,12 +173,19 @@ void pro80_state::machine_reset() m_cass_in = 0; } +void pro80_state::machine_start() +{ + save_item(NAME(m_digit_sel)); + save_item(NAME(m_cass_in)); + save_pointer(NAME(m_cass_data) ,4); +} + void pro80_state::pro80(machine_config &config) { /* basic machine hardware */ Z80(config, m_maincpu, XTAL(4'000'000) / 2); - m_maincpu->set_addrmap(AS_PROGRAM, &pro80_state::pro80_mem); - m_maincpu->set_addrmap(AS_IO, &pro80_state::pro80_io); + m_maincpu->set_addrmap(AS_PROGRAM, &pro80_state::mem_map); + m_maincpu->set_addrmap(AS_IO, &pro80_state::io_map); /* video hardware */ config.set_default_layout(layout_pro80); @@ -205,4 +213,4 @@ ROM_END /* Driver */ // YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS -COMP( 1981, pro80, 0, 0, pro80, pro80, pro80_state, empty_init, "Protec", "Pro-80", MACHINE_NOT_WORKING ) +COMP( 1981, pro80, 0, 0, pro80, pro80, pro80_state, empty_init, "Protec", "Pro-80", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE ) diff --git a/src/mame/drivers/pyl601.cpp b/src/mame/drivers/pyl601.cpp index de0c1b06f1c..e20146877e1 100644 --- a/src/mame/drivers/pyl601.cpp +++ b/src/mame/drivers/pyl601.cpp @@ -90,10 +90,10 @@ private: uint8_t selectedline(uint16_t data); virtual void machine_reset() override; - virtual void video_start() override; + virtual void machine_start() override; INTERRUPT_GEN_MEMBER(pyl601_interrupt); DECLARE_FLOPPY_FORMATS( floppy_formats ); - void pyl601_mem(address_map &map); + void mem_map(address_map &map); uint8_t m_rom_page; uint32_t m_vdisk_addr; @@ -264,7 +264,7 @@ uint8_t pyl601_state::floppy_r() return m_floppy_ctrl; } -void pyl601_state::pyl601_mem(address_map &map) +void pyl601_state::mem_map(address_map &map) { map.unmap_value_high(); map(0x0000, 0xbfff).bankrw("bank1"); @@ -395,14 +395,21 @@ void pyl601_state::machine_reset() membank("bank2")->set_base(ram + 0xc000); membank("bank3")->set_base(ram + 0xe000); membank("bank4")->set_base(ram + 0xe700); - membank("bank5")->set_base(memregion("maincpu")->base() + 0xf000); + membank("bank5")->set_base(memregion("maincpu")->base()); membank("bank6")->set_base(ram + 0xf000); m_maincpu->reset(); } -void pyl601_state::video_start() +void pyl601_state::machine_start() { + save_item(NAME(m_rom_page)); + save_item(NAME(m_vdisk_addr)); + save_item(NAME(m_key_code)); + save_item(NAME(m_keyboard_clk)); + save_item(NAME(m_video_mode)); + save_item(NAME(m_tick50_mark)); + save_item(NAME(m_floppy_ctrl)); } MC6845_UPDATE_ROW( pyl601_state::pyl601_update_row ) @@ -548,7 +555,7 @@ void pyl601_state::pyl601(machine_config &config) { /* basic machine hardware */ M6800(config, m_maincpu, 1_MHz_XTAL); - m_maincpu->set_addrmap(AS_PROGRAM, &pyl601_state::pyl601_mem); + m_maincpu->set_addrmap(AS_PROGRAM, &pyl601_state::mem_map); m_maincpu->set_vblank_int("screen", FUNC(pyl601_state::pyl601_interrupt)); /* video hardware */ @@ -594,42 +601,42 @@ void pyl601_state::pyl601a(machine_config &config) /* ROM definition */ ROM_START( pyl601 ) - ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASEFF ) - ROM_LOAD( "bios.rom", 0xf000, 0x1000, CRC(41fe4c4b) SHA1(d8ca92aea0eb283e8d7779cb976bcdfa03e81aea)) + ROM_REGION( 0x1000, "maincpu", 0 ) + ROM_LOAD( "bios.rom", 0x0000, 0x1000, CRC(41fe4c4b) SHA1(d8ca92aea0eb283e8d7779cb976bcdfa03e81aea)) ROM_REGION(0x0800, "chargen", 0) ROM_LOAD( "video.rom", 0x0000, 0x0800, CRC(1c23ba43) SHA1(eb1cfc139858abd0aedbbf3d523f8ba55d27a11d)) - ROM_REGION(0x50000, "romdisk", ROMREGION_ERASEFF) + ROM_REGION(0x50000, "romdisk", 0 ) ROM_LOAD( "rom0.rom", 0x00000, 0x10000, CRC(60103920) SHA1(ee5b4ee5b513c4a0204da751e53d63b8c6c0aab9)) ROM_LOAD( "rom1.rom", 0x10000, 0x10000, CRC(cb4a9b22) SHA1(dd09e4ba35b8d1a6f60e6e262aaf2f156367e385)) ROM_LOAD( "rom2.rom", 0x20000, 0x08000, CRC(0b7684bf) SHA1(c02ad1f2a6f484cd9d178d8b060c21c0d4e53442)) - ROM_COPY("romdisk", 0x20000, 0x28000, 0x08000) + ROM_COPY( "romdisk", 0x20000, 0x28000, 0x08000) ROM_LOAD( "rom3.rom", 0x30000, 0x08000, CRC(e4a86dfa) SHA1(96e6bb9ffd66f81fca63bf7491fbba81c4ff1fd2)) - ROM_COPY("romdisk", 0x30000, 0x38000, 0x08000) + ROM_COPY( "romdisk", 0x30000, 0x38000, 0x08000) ROM_LOAD( "rom4.rom", 0x40000, 0x08000, CRC(d88ac21d) SHA1(022db11fdcf8db81ce9efd9cd9fa50ebca88e79e)) - ROM_COPY("romdisk", 0x40000, 0x48000, 0x08000) + ROM_COPY( "romdisk", 0x40000, 0x48000, 0x08000) ROM_REGION(0x0800, "keyboard", 0) ROM_LOAD( "keyboard.rom", 0x0000, 0x0800, CRC(41fbe5ca) SHA1(875adaef53bc37e92ad0b6b6ee3d8fd28344d358)) ROM_END ROM_START( pyl601a ) - ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASEFF ) - ROM_LOAD( "bios_a.rom", 0xf000, 0x1000, CRC(e018b11e) SHA1(884d59abd5fa5af1295d1b5a53693facc7945b63)) + ROM_REGION( 0x1000, "maincpu", 0 ) + ROM_LOAD( "bios_a.rom", 0x0000, 0x1000, CRC(e018b11e) SHA1(884d59abd5fa5af1295d1b5a53693facc7945b63)) ROM_REGION(0x1000, "chargen", 0) ROM_LOAD( "video_a.rom", 0x0000,0x1000, CRC(00fa4077) SHA1(d39d15969a08bdb768d08bea4ec9a9cb498232fd)) - ROM_REGION(0x50000, "romdisk", ROMREGION_ERASEFF) + ROM_REGION(0x50000, "romdisk", 0 ) ROM_LOAD( "rom0.rom", 0x00000, 0x10000, CRC(60103920) SHA1(ee5b4ee5b513c4a0204da751e53d63b8c6c0aab9)) ROM_LOAD( "rom1.rom", 0x10000, 0x10000, CRC(cb4a9b22) SHA1(dd09e4ba35b8d1a6f60e6e262aaf2f156367e385)) ROM_LOAD( "rom2.rom", 0x20000, 0x08000, CRC(0b7684bf) SHA1(c02ad1f2a6f484cd9d178d8b060c21c0d4e53442)) - ROM_COPY("romdisk", 0x20000, 0x28000, 0x08000) + ROM_COPY( "romdisk", 0x20000, 0x28000, 0x08000) ROM_LOAD( "rom3.rom", 0x30000, 0x08000, CRC(e4a86dfa) SHA1(96e6bb9ffd66f81fca63bf7491fbba81c4ff1fd2)) - ROM_COPY("romdisk", 0x30000, 0x38000, 0x08000) + ROM_COPY( "romdisk", 0x30000, 0x38000, 0x08000) ROM_LOAD( "rom4.rom", 0x40000, 0x08000, CRC(d88ac21d) SHA1(022db11fdcf8db81ce9efd9cd9fa50ebca88e79e)) - ROM_COPY("romdisk", 0x40000, 0x48000, 0x08000) + ROM_COPY( "romdisk", 0x40000, 0x48000, 0x08000) ROM_REGION(0x0800, "keyboard", 0) ROM_LOAD( "keyboard.rom", 0x0000, 0x0800, CRC(41fbe5ca) SHA1(875adaef53bc37e92ad0b6b6ee3d8fd28344d358)) @@ -637,5 +644,5 @@ ROM_END /* Driver */ /* YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS */ -COMP( 1989, pyl601, 0, 0, pyl601, pyl601, pyl601_state, init_pyl601, "Mikroelektronika", "Pyldin-601", 0 ) -COMP( 1989, pyl601a, pyl601, 0, pyl601a, pyl601, pyl601_state, init_pyl601, "Mikroelektronika", "Pyldin-601A", 0 ) +COMP( 1989, pyl601, 0, 0, pyl601, pyl601, pyl601_state, init_pyl601, "Mikroelektronika", "Pyldin-601", MACHINE_SUPPORTS_SAVE ) +COMP( 1989, pyl601a, pyl601, 0, pyl601a, pyl601, pyl601_state, init_pyl601, "Mikroelektronika", "Pyldin-601A", MACHINE_SUPPORTS_SAVE )