From 28c22e101a3c804d7c33df6af286f97ad9a27007 Mon Sep 17 00:00:00 2001 From: Robbbert Date: Sat, 18 Jul 2020 16:34:08 +1000 Subject: [PATCH] sapi,homez80,dms5000,bob85,a7150: minor cleanup --- src/mame/drivers/a7150.cpp | 49 +++++++++------- src/mame/drivers/bob85.cpp | 27 +++++---- src/mame/drivers/dms5000.cpp | 32 ++++------- src/mame/drivers/homez80.cpp | 106 +++++++++++++++++------------------ src/mame/drivers/sapi1.cpp | 56 ++++++++++-------- 5 files changed, 143 insertions(+), 127 deletions(-) diff --git a/src/mame/drivers/a7150.cpp b/src/mame/drivers/a7150.cpp index cc7be332581..66250419e21 100644 --- a/src/mame/drivers/a7150.cpp +++ b/src/mame/drivers/a7150.cpp @@ -2,20 +2,23 @@ // copyright-holders:Miodrag Milanovic, Sergey Svishchev /*************************************************************************** - Robotron A7150 +Robotron A7150 - 04/10/2009 Skeleton driver. +2009-10-04 Skeleton driver. - http://www.robotrontechnik.de/index.htm?/html/computer/a7150.htm +http://www.robotrontechnik.de/index.htm?/html/computer/a7150.htm - http://www.tiffe.de/Robotron/MMS16/ - - Confidence test is documented in A7150_Rechner...pdf, pp. 112-119 - - Internal test of KGS -- in KGS-K7070.pdf, pp. 19-23 +http://www.tiffe.de/Robotron/MMS16/ +- Confidence test is documented in A7150_Rechner...pdf, pp. 112-119 +- Internal test of KGS -- in KGS-K7070.pdf, pp. 19-23 - To do: - - MMS16 (Multibus clone) and slot devices - - native keyboard - - A7100 model +After about a minute, the self-test will appear. + +To do: +- Machine hangs when screen should scroll +- MMS16 (Multibus clone) and slot devices +- native keyboard +- A7100 model ****************************************************************************/ @@ -109,8 +112,8 @@ private: required_device m_video_bankdev; required_device m_palette; - void a7150_io(address_map &map); - void a7150_mem(address_map &map); + void io_map(address_map &map); + void mem_map(address_map &map); void k7070_cpu_banked(address_map &map); void k7070_cpu_io(address_map &map); void k7070_cpu_mem(address_map &map); @@ -313,14 +316,14 @@ void a7150_state::a7150_kgs_w(offs_t offset, uint8_t data) } -void a7150_state::a7150_mem(address_map &map) +void a7150_state::mem_map(address_map &map) { map.unmap_value_high(); map(0x00000, 0xf7fff).ram(); - map(0xf8000, 0xfffff).rom().region("user1", 0); + map(0xf8000, 0xfffff).rom().region("maincpu", 0); } -void a7150_state::a7150_io(address_map &map) +void a7150_state::io_map(address_map &map) { map.unmap_value_high(); map(0x004a, 0x004a).w("isbc_215g", FUNC(isbc_215g_device::write)); // KES board @@ -448,6 +451,12 @@ void a7150_state::machine_reset() void a7150_state::machine_start() { + save_item(NAME(m_kgs_msel)); + save_item(NAME(m_kgs_iml)); + save_item(NAME(m_kgs_datao)); + save_item(NAME(m_kgs_datai)); + save_item(NAME(m_kgs_ctrl)); + save_item(NAME(m_ifss_loopback)); } static const z80_daisy_config k7070_daisy_chain[] = @@ -469,8 +478,8 @@ static const z80_daisy_config k7070_daisy_chain[] = void a7150_state::a7150(machine_config &config) { I8086(config, m_maincpu, XTAL(9'832'000)/2); - m_maincpu->set_addrmap(AS_PROGRAM, &a7150_state::a7150_mem); - m_maincpu->set_addrmap(AS_IO, &a7150_state::a7150_io); + m_maincpu->set_addrmap(AS_PROGRAM, &a7150_state::mem_map); + m_maincpu->set_addrmap(AS_IO, &a7150_state::io_map); m_maincpu->set_irq_acknowledge_callback("pic8259", FUNC(pic8259_device::inta_cb)); m_maincpu->esc_opcode_handler().set("i8087", FUNC(i8087_device::insn_w)); m_maincpu->esc_data_handler().set("i8087", FUNC(i8087_device::addr_w)); @@ -567,7 +576,7 @@ void a7150_state::a7150(machine_config &config) /* ROM definition */ ROM_START( a7150 ) - ROM_REGION16_LE( 0x10000, "user1", ROMREGION_ERASEFF ) + ROM_REGION16_LE( 0x8000, "maincpu", 0 ) ROM_DEFAULT_BIOS("2.3") // A7100 @@ -596,7 +605,7 @@ ROM_START( a7150 ) ROMX_LOAD("275.rom", 0x4000, 0x2000, CRC(0da54426) SHA1(7492caff98b1d1a896c5964942b17beadf996b60), ROM_BIOS(3) | ROM_SKIP(1)) ROMX_LOAD("276.rom", 0x0000, 0x2000, CRC(5924192a) SHA1(eb494d9f96a0b3ea69f4b9cb2b7add66a8c16946), ROM_BIOS(3) | ROM_SKIP(1)) - ROM_REGION( 0x10000, "user2", ROMREGION_ERASEFF ) + ROM_REGION( 0x2000, "user2", ROMREGION_ERASEFF ) // ROM from A7100 ROM_LOAD( "kgs7070-152.bin", 0x0000, 0x2000, CRC(403f4235) SHA1(d07ccd40f8b600651d513f588bcf1ea4f15ed094)) // ROM_LOAD( "kgs7070-153.rom", 0x0000, 0x2000, CRC(a72fe820) SHA1(4b77ab2b59ea8c3632986847ff359df26b16196b)) @@ -606,4 +615,4 @@ ROM_END /* Driver */ // YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS -COMP( 1986, a7150, 0, 0, a7150, a7150, a7150_state, empty_init, "VEB Robotron", "A7150", MACHINE_NOT_WORKING | MACHINE_NO_SOUND ) +COMP( 1986, a7150, 0, 0, a7150, a7150, a7150_state, empty_init, "VEB Robotron", "A7150", MACHINE_NOT_WORKING | MACHINE_NO_SOUND | MACHINE_SUPPORTS_SAVE ) diff --git a/src/mame/drivers/bob85.cpp b/src/mame/drivers/bob85.cpp index 7e9200affcf..45c61c8113c 100644 --- a/src/mame/drivers/bob85.cpp +++ b/src/mame/drivers/bob85.cpp @@ -46,8 +46,8 @@ public: void bob85(machine_config &config); private: - void bob85_io(address_map &map); - void bob85_mem(address_map &map); + void io_map(address_map &map); + void mem_map(address_map &map); uint8_t bob85_keyboard_r(); void bob85_7seg_w(offs_t offset, uint8_t data); DECLARE_WRITE_LINE_MEMBER(sod_w); @@ -57,8 +57,7 @@ private: uint8_t m_count_key; u16 m_casscnt; bool m_cassold, m_cassbit; - virtual void machine_reset() override; - virtual void machine_start() override { m_digits.resolve(); } + void machine_start() override; required_device m_maincpu; required_device m_cass; required_ioport m_line0; @@ -145,14 +144,14 @@ void bob85_state::bob85_7seg_w(offs_t offset, uint8_t data) m_digits[offset] = bitswap<8>( data,3,2,1,0,7,6,5,4 ); } -void bob85_state::bob85_mem(address_map &map) +void bob85_state::mem_map(address_map &map) { map.unmap_value_high(); map(0x0000, 0x02ff).rom(); map(0x0600, 0x09ff).ram(); } -void bob85_state::bob85_io(address_map &map) +void bob85_state::io_map(address_map &map) { map.unmap_value_high(); map(0x0a, 0x0a).r(FUNC(bob85_state::bob85_keyboard_r)); @@ -191,8 +190,14 @@ static INPUT_PORTS_START( bob85 ) PORT_BIT(0xC0, IP_ACTIVE_HIGH, IPT_UNUSED) INPUT_PORTS_END -void bob85_state::machine_reset() +void bob85_state::machine_start() { + m_digits.resolve(); + save_item(NAME(m_prev_key)); + save_item(NAME(m_count_key)); + save_item(NAME(m_casscnt)); + save_item(NAME(m_cassold)); + save_item(NAME(m_cassbit)); } TIMER_DEVICE_CALLBACK_MEMBER( bob85_state::kansas_r ) @@ -229,8 +234,8 @@ void bob85_state::bob85(machine_config &config) { /* basic machine hardware */ I8085A(config, m_maincpu, XTAL(5'000'000)); - m_maincpu->set_addrmap(AS_PROGRAM, &bob85_state::bob85_mem); - m_maincpu->set_addrmap(AS_IO, &bob85_state::bob85_io); + m_maincpu->set_addrmap(AS_PROGRAM, &bob85_state::mem_map); + m_maincpu->set_addrmap(AS_IO, &bob85_state::io_map); m_maincpu->in_sid_func().set(FUNC(bob85_state::sid_r)); m_maincpu->out_sod_func().set(FUNC(bob85_state::sod_w)); @@ -247,11 +252,11 @@ void bob85_state::bob85(machine_config &config) /* ROM definition */ ROM_START( bob85 ) - ROM_REGION( 0x600, "maincpu", ROMREGION_ERASEFF ) + ROM_REGION( 0x0300, "maincpu", 0 ) ROM_LOAD( "bob85.rom", 0x0000, 0x0300, BAD_DUMP CRC(adde33a8) SHA1(00f26dd0c52005e7705e6cc9cb11a20e572682c6) ) // should be 6 separate 74S287's (256x4) ROM_END /* Driver */ // YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS -COMP( 1984, bob85, 0, 0, bob85, bob85, bob85_state, empty_init, "Josef Kratochvil", "BOB-85", MACHINE_NO_SOUND_HW) +COMP( 1984, bob85, 0, 0, bob85, bob85, bob85_state, empty_init, "Josef Kratochvil", "BOB-85", MACHINE_NO_SOUND_HW | MACHINE_SUPPORTS_SAVE ) diff --git a/src/mame/drivers/dms5000.cpp b/src/mame/drivers/dms5000.cpp index 0e8b51d7d85..ffadaa98778 100644 --- a/src/mame/drivers/dms5000.cpp +++ b/src/mame/drivers/dms5000.cpp @@ -2,9 +2,9 @@ // copyright-holders:Miodrag Milanovic /*************************************************************************** - Digital Microsystems DMS-5000 +Digital Microsystems DMS-5000 - 11/01/2010 Skeleton driver. +2010-01-11 Skeleton driver. ****************************************************************************/ @@ -30,11 +30,9 @@ public: private: uint8_t status_r(offs_t offset); void brightness_w(uint8_t data); - virtual void machine_reset() override; - virtual void video_start() override; uint32_t screen_update_dms5000(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); - void dms5000_io(address_map &map); - void dms5000_mem(address_map &map); + void io_map(address_map &map); + void mem_map(address_map &map); required_device m_maincpu; required_device m_screen; @@ -60,15 +58,15 @@ void dms5000_state::brightness_w(uint8_t data) { } -void dms5000_state::dms5000_mem(address_map &map) +void dms5000_state::mem_map(address_map &map) { map.unmap_value_high(); map(0x00000, 0x1ffff).ram(); map(0x40000, 0x4ffff).ram(); - map(0xfc000, 0xfffff).rom().region("user1", 0); + map(0xfc000, 0xfffff).rom().region("maincpu", 0); } -void dms5000_state::dms5000_io(address_map &map) +void dms5000_state::io_map(address_map &map) { map.unmap_value_high(); map(0x20, 0x2f).r(FUNC(dms5000_state::status_r)).umask16(0xff00); @@ -81,14 +79,6 @@ static INPUT_PORTS_START( dms5000 ) INPUT_PORTS_END -void dms5000_state::machine_reset() -{ -} - -void dms5000_state::video_start() -{ -} - uint32_t dms5000_state::screen_update_dms5000(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) { return 0; @@ -98,8 +88,8 @@ void dms5000_state::dms5000(machine_config &config) { /* basic machine hardware */ I8086(config, m_maincpu, XTAL(9'830'400)); - m_maincpu->set_addrmap(AS_PROGRAM, &dms5000_state::dms5000_mem); - m_maincpu->set_addrmap(AS_IO, &dms5000_state::dms5000_io); + m_maincpu->set_addrmap(AS_PROGRAM, &dms5000_state::mem_map); + m_maincpu->set_addrmap(AS_IO, &dms5000_state::io_map); LS259(config, "cntlatch", 0); // V34 @@ -117,7 +107,7 @@ void dms5000_state::dms5000(machine_config &config) /* ROM definition */ ROM_START( dms5000 ) - ROM_REGION16_LE( 0x4000, "user1", ROMREGION_ERASEFF ) + ROM_REGION16_LE( 0x4000, "maincpu", 0 ) ROM_LOAD16_BYTE( "dms-5000_54-8673o.bin", 0x0001, 0x2000, CRC(dce9823e) SHA1(d36ab87d2e6f5e9f02d59a6a7724ad3ce2428a2f)) ROM_LOAD16_BYTE( "dms-5000_54-8672e.bin", 0x0000, 0x2000, CRC(94d64c06) SHA1(be5a53da7bb29a5fa9ac31efe550d5d6ff8b77cd)) ROM_END @@ -125,4 +115,4 @@ ROM_END /* Driver */ /* YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS */ -COMP( 1982, dms5000, 0, 0, dms5000, dms5000, dms5000_state, empty_init, "Digital Microsystems", "DMS-5000", MACHINE_NOT_WORKING | MACHINE_NO_SOUND) +COMP( 1982, dms5000, 0, 0, dms5000, dms5000, dms5000_state, empty_init, "Digital Microsystems", "DMS-5000", MACHINE_NOT_WORKING | MACHINE_NO_SOUND | MACHINE_SUPPORTS_SAVE ) diff --git a/src/mame/drivers/homez80.cpp b/src/mame/drivers/homez80.cpp index 5b2b38f8df8..0d3f4ddb807 100644 --- a/src/mame/drivers/homez80.cpp +++ b/src/mame/drivers/homez80.cpp @@ -32,53 +32,49 @@ public: homez80_state(const machine_config &mconfig, device_type type, const char *tag) : driver_device(mconfig, type, tag) , m_maincpu(*this, "maincpu") - , m_p_videoram(*this, "videoram") + , m_vram(*this, "videoram") , m_p_chargen(*this, "chargen") + , m_io_keyboard(*this, "X%u", 0U) { } void homez80(machine_config &config); private: - uint8_t homez80_keyboard_r(offs_t offset); + u8 homez80_keyboard_r(offs_t offset); INTERRUPT_GEN_MEMBER(homez80_interrupt); - 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 homez80_io(address_map &map); - void homez80_mem(address_map &map); + void mem_map(address_map &map); bool m_irq; - virtual void machine_reset() override; + void machine_reset() override; + void machine_start() override; required_device m_maincpu; - required_shared_ptr m_p_videoram; + required_shared_ptr m_vram; required_region_ptr m_p_chargen; + required_ioport_array<16> m_io_keyboard; }; -uint8_t homez80_state::homez80_keyboard_r(offs_t offset) +u8 homez80_state::homez80_keyboard_r(offs_t offset) { - char kbdrow[8]; - sprintf(kbdrow,"LINE%d",offset); - return ioport(kbdrow)->read(); + return m_io_keyboard[offset]->read(); } -void homez80_state::homez80_mem(address_map &map) +void homez80_state::mem_map(address_map &map) { map.unmap_value_high(); - map(0x0000, 0x0fff).rom(); // Monitor - map(0x2000, 0x23ff).ram().share("videoram"); // Video RAM - map(0x7020, 0x702f).r(FUNC(homez80_state::homez80_keyboard_r)); - map(0x8000, 0xffff).ram(); // 32 K RAM + map(0x0000, 0x0fff).rom(); // 27C256 (A12,13,14 tied high) + map(0x2000, 0x23ff).mirror(0x0c00).ram().share("videoram"); // IC13, UM61256 (A10-14 tied low) + map(0x7000, 0x700f).mirror(0x0ff0).r(FUNC(homez80_state::homez80_keyboard_r)); + map(0x8000, 0xffff).ram(); // 61256 (32K) } -void homez80_state::homez80_io(address_map &map) -{ - map.unmap_value_high(); -} /* Input ports */ INPUT_PORTS_START( homez80 ) - PORT_START("LINE0") + PORT_START("X0") PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_TILDE) PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_Q) PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_1) @@ -87,16 +83,16 @@ INPUT_PORTS_START( homez80 ) PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_UNUSED) PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_Z) PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_A) - PORT_START("LINE1") + PORT_START("X1") PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_UNUSED) - PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_UNUSED) + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_CAPSLOCK) PORT_TOGGLE // crude, just another shift key PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_UNUSED) PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_LSHIFT) PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_UNUSED) PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_UNUSED) PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_RSHIFT) PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_UNUSED) - PORT_START("LINE2") + PORT_START("X2") PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_LCONTROL) PORT_CODE(KEYCODE_RCONTROL) PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_UNUSED) PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_UNUSED) @@ -105,16 +101,16 @@ INPUT_PORTS_START( homez80 ) PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_UNUSED) PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_UNUSED) PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_UNUSED) - PORT_START("LINE3") + PORT_START("X3") PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_F1) PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_W) PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_2) - PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_CAPSLOCK) + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_UNUSED) PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_UNUSED) PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_UNUSED) PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_X) PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_S) - PORT_START("LINE4") + PORT_START("X4") PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_F2) PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_E) PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_3) @@ -123,7 +119,7 @@ INPUT_PORTS_START( homez80 ) PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_UNUSED) PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_C) PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_D) - PORT_START("LINE5") + PORT_START("X5") PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_5) PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_R) PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_4) @@ -132,7 +128,7 @@ INPUT_PORTS_START( homez80 ) PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_B) PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_V) PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_F) - PORT_START("LINE6") + PORT_START("X6") PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_6) PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_U) PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_7) @@ -141,7 +137,7 @@ INPUT_PORTS_START( homez80 ) PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_N) PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_M) PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_J) - PORT_START("LINE7") + PORT_START("X7") PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_F8) PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_O) PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_9) @@ -150,25 +146,25 @@ INPUT_PORTS_START( homez80 ) PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_UNUSED) PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_STOP) PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_L) - PORT_START("LINE8") + PORT_START("X8") PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_UNUSED) - PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_SCRLOCK) - PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_PRTSCR) + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_SCRLOCK) // nothing + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_PRTSCR) // nothing PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_UNUSED) PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_UNUSED) - PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_LALT) PORT_CODE(KEYCODE_RALT) + PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_LALT) PORT_CODE(KEYCODE_RALT) // nothing PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_UNUSED) PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_UNUSED) - PORT_START("LINE9") + PORT_START("X9") PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_UNUSED) PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_PLUS_PAD) PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_UNUSED) PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_UNUSED) PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_UNUSED) PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_UNUSED) - PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_PAUSE) + PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_PAUSE) // nothing PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_UNUSED) - PORT_START("LINE10") + PORT_START("X10") PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_UNUSED) PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_9_PAD) PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_UNUSED) @@ -177,7 +173,7 @@ INPUT_PORTS_START( homez80 ) PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_MINUS_PAD) PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_ASTERISK) PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_3_PAD) - PORT_START("LINE11") + PORT_START("X11") PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_UNUSED) PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_8_PAD) PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_UNUSED) @@ -186,7 +182,7 @@ INPUT_PORTS_START( homez80 ) PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_UNUSED) PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_SLASH_PAD) PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_2_PAD) - PORT_START("LINE12") + PORT_START("X12") PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_UNUSED) PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_7_PAD) PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_UNUSED) @@ -195,7 +191,7 @@ INPUT_PORTS_START( homez80 ) PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_UNUSED) PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_UNUSED) PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_1_PAD) - PORT_START("LINE13") + PORT_START("X13") PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_MINUS) PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_P) PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_0) @@ -204,7 +200,7 @@ INPUT_PORTS_START( homez80 ) PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_SLASH) PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_BACKSLASH) PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_COLON) - PORT_START("LINE14") + PORT_START("X14") PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_EQUALS) PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_I) PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_8) @@ -213,7 +209,7 @@ INPUT_PORTS_START( homez80 ) PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_UNUSED) PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_COMMA) PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_K) - PORT_START("LINE15") + PORT_START("X15") PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_F9) PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_UNUSED) PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYBOARD) PORT_CODE(KEYCODE_F10) @@ -230,10 +226,15 @@ void homez80_state::machine_reset() m_irq = 0; } -uint32_t homez80_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) +void homez80_state::machine_start() { - uint8_t y,ra,chr,gfx; - uint16_t sy=0,ma=0,x; + save_item(NAME(m_irq)); +} + +u32 homez80_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) +{ + u8 y,ra,chr,gfx; + u16 sy=0,ma=0,x; for (y = 0; y < 32; y++) { @@ -243,7 +244,7 @@ uint32_t homez80_state::screen_update(screen_device &screen, bitmap_ind16 &bitma for (x = ma; x < ma+32; x++) { - chr = m_p_videoram[x]; + chr = m_vram[x]; /* get pattern of pixels for that character scanline */ gfx = m_p_chargen[ (chr<<3) | ra]; @@ -265,7 +266,7 @@ uint32_t homez80_state::screen_update(screen_device &screen, bitmap_ind16 &bitma } -const gfx_layout homez80_charlayout = +const gfx_layout charlayout = { 8, 8, /* 8x8 characters */ 256, /* 256 characters */ @@ -277,7 +278,7 @@ const gfx_layout homez80_charlayout = }; static GFXDECODE_START( gfx_homez80 ) - GFXDECODE_ENTRY( "chargen", 0x0000, homez80_charlayout, 0, 1 ) + GFXDECODE_ENTRY( "chargen", 0x0000, charlayout, 0, 1 ) GFXDECODE_END @@ -291,8 +292,7 @@ void homez80_state::homez80(machine_config &config) { /* basic machine hardware */ Z80(config, m_maincpu, XTAL(8'000'000) / 2); - m_maincpu->set_addrmap(AS_PROGRAM, &homez80_state::homez80_mem); - m_maincpu->set_addrmap(AS_IO, &homez80_state::homez80_io); + m_maincpu->set_addrmap(AS_PROGRAM, &homez80_state::mem_map); m_maincpu->set_periodic_int(FUNC(homez80_state::homez80_interrupt), attotime::from_hz(50)); /* video hardware */ @@ -310,14 +310,14 @@ void homez80_state::homez80(machine_config &config) /* ROM definition */ ROM_START( homez80 ) - ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASEFF ) + ROM_REGION( 0x1000, "maincpu", 0 ) ROM_LOAD( "sysrom.bin", 0x0000, 0x1000, CRC(37ca7545) SHA1(3f597d7e45b1ab211d5bd4a99abb21915723c357) ) ROM_REGION(0x0800, "chargen",0) - ROM_LOAD( "chargen.bin", 0x0000, 0x0800, CRC(93243be3) SHA1(718efc06c131843c15383e50af23f3a5cf44dd9b) ) + ROM_LOAD( "chargen.ic12", 0x0000, 0x0800, CRC(93243be3) SHA1(718efc06c131843c15383e50af23f3a5cf44dd9b) ) // 27C256, A11/12/13/14 tied low. ROM_END /* Driver */ /* YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS */ -COMP( 2008, homez80, 0, 0, homez80, homez80, homez80_state, empty_init, "Kun-Szabo Marton", "Homebrew Z80 Computer", MACHINE_NO_SOUND_HW) +COMP( 2008, homez80, 0, 0, homez80, homez80, homez80_state, empty_init, "Kun-Szabo Marton", "Homebrew Z80 Computer", MACHINE_NO_SOUND_HW | MACHINE_SUPPORTS_SAVE ) diff --git a/src/mame/drivers/sapi1.cpp b/src/mame/drivers/sapi1.cpp index ab4364b9723..0dd6efdc9c2 100644 --- a/src/mame/drivers/sapi1.cpp +++ b/src/mame/drivers/sapi1.cpp @@ -97,11 +97,11 @@ private: uint8_t port11_r(); uint8_t port40_r(); uint8_t port41_r(); - DECLARE_MACHINE_RESET(sapi1); - DECLARE_MACHINE_RESET(sapizps3); MC6845_UPDATE_ROW(crtc_update_row); DECLARE_READ_LINE_MEMBER(si); DECLARE_WRITE_LINE_MEMBER(so); + void machine_reset() override; + void machine_start() override; uint32_t screen_update_sapi1(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); uint32_t screen_update_sapi3(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); @@ -724,24 +724,39 @@ void sapi_state::sapi3_25_w(uint8_t data) m_zps3_25 = data & 0xfc; //?? } -MACHINE_RESET_MEMBER( sapi_state, sapi1 ) +void sapi_state::machine_reset() { m_keyboard_mask = 0; m_refresh_counter = 0x20; - // setup uart to 8N2 for sapi1 -bios 0 - m_uart->write_np(1); - m_uart->write_tsb(1); - m_uart->write_nb1(1); - m_uart->write_nb2(1); - m_uart->write_eps(1); - m_uart->write_cs(1); - m_uart->write_cs(0); + + if (m_uart) + { + // setup uart to 8N2 for sapi1 -bios 0 + m_uart->write_np(1); + m_uart->write_tsb(1); + m_uart->write_nb1(1); + m_uart->write_nb2(1); + m_uart->write_eps(1); + m_uart->write_cs(1); + m_uart->write_cs(0); + } + + if (m_bank1) + m_bank1->set_entry(1); } -MACHINE_RESET_MEMBER( sapi_state, sapizps3 ) +void sapi_state::machine_start() { - m_keyboard_mask = 0; - m_bank1->set_entry(1); + save_item(NAME(m_term_data)); + save_item(NAME(m_keyboard_mask)); + save_item(NAME(m_refresh_counter)); + save_item(NAME(m_zps3_25)); + save_item(NAME(m_cass_data)); + save_item(NAME(m_cassinbit)); + save_item(NAME(m_cassoutbit)); + save_item(NAME(m_cassold)); + save_item(NAME(m_ier)); + save_item(NAME(m_iet)); } void sapi_state::init_sapizps3() @@ -771,7 +786,6 @@ void sapi_state::sapi1(machine_config &config) I8080A(config, m_maincpu, 18_MHz_XTAL / 9); // Tesla MHB8080A + MHB8224 + MHB8228 m_maincpu->set_addrmap(AS_PROGRAM, &sapi_state::sapi1_mem); m_maincpu->set_addrmap(AS_IO, &sapi_state::sapi1_io); - MCFG_MACHINE_RESET_OVERRIDE(sapi_state, sapi1) /* video hardware */ screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); @@ -821,7 +835,6 @@ void sapi_state::sapi3(machine_config &config) /* basic machine hardware */ m_maincpu->set_addrmap(AS_PROGRAM, &sapi_state::sapi3_mem); m_maincpu->set_addrmap(AS_IO, &sapi_state::sapi3_io); - MCFG_MACHINE_RESET_OVERRIDE(sapi_state, sapizps3 ) screen_device &screen(*subdevice("screen")); screen.set_size(40*6, 20*9); @@ -867,7 +880,6 @@ void sapi_state::sapi3a(machine_config &config) I8080A(config, m_maincpu, 18_MHz_XTAL / 9); // Tesla MHB8080A + MHB8224 + MHB8228 m_maincpu->set_addrmap(AS_PROGRAM, &sapi_state::sapi3a_mem); m_maincpu->set_addrmap(AS_IO, &sapi_state::sapi3a_io); - MCFG_MACHINE_RESET_OVERRIDE(sapi_state, sapizps3 ) /* video hardware */ AY51013(config, m_uart); // Tesla MHB1012 @@ -942,9 +954,9 @@ ROM_END /* Driver */ // YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS -COMP( 1985, sapi1, 0, 0, sapi1, sapi1, sapi_state, empty_init, "Tesla", "SAPI-1 ZPS 1", MACHINE_NO_SOUND_HW ) -COMP( 1985, sapizps2, sapi1, 0, sapi2, sapi1, sapi_state, empty_init, "Tesla", "SAPI-1 ZPS 2", MACHINE_NO_SOUND_HW ) -COMP( 1985, sapizps3, sapi1, 0, sapi3, sapi1, sapi_state, init_sapizps3, "Tesla", "SAPI-1 ZPS 3", MACHINE_NOT_WORKING | MACHINE_NO_SOUND_HW ) -COMP( 1985, sapizps3a, sapi1, 0, sapi3a, sapi1, sapi_state, init_sapizps3a, "Tesla", "SAPI-1 ZPS 3 (terminal)", MACHINE_NOT_WORKING | MACHINE_NO_SOUND_HW ) -COMP( 1985, sapizps3b, sapi1, 0, sapi3b, sapi1, sapi_state, init_sapizps3b, "Tesla", "SAPI-1 ZPS 3 (6845)", MACHINE_NOT_WORKING | MACHINE_NO_SOUND_HW ) +COMP( 1985, sapi1, 0, 0, sapi1, sapi1, sapi_state, empty_init, "Tesla", "SAPI-1 ZPS 1", MACHINE_NO_SOUND_HW | MACHINE_SUPPORTS_SAVE ) +COMP( 1985, sapizps2, sapi1, 0, sapi2, sapi1, sapi_state, empty_init, "Tesla", "SAPI-1 ZPS 2", MACHINE_NO_SOUND_HW | MACHINE_SUPPORTS_SAVE ) +COMP( 1985, sapizps3, sapi1, 0, sapi3, sapi1, sapi_state, init_sapizps3, "Tesla", "SAPI-1 ZPS 3", MACHINE_NOT_WORKING | MACHINE_NO_SOUND_HW | MACHINE_SUPPORTS_SAVE ) +COMP( 1985, sapizps3a, sapi1, 0, sapi3a, sapi1, sapi_state, init_sapizps3a, "Tesla", "SAPI-1 ZPS 3 (terminal)", MACHINE_NOT_WORKING | MACHINE_NO_SOUND_HW | MACHINE_SUPPORTS_SAVE ) +COMP( 1985, sapizps3b, sapi1, 0, sapi3b, sapi1, sapi_state, init_sapizps3b, "Tesla", "SAPI-1 ZPS 3 (6845)", MACHINE_NOT_WORKING | MACHINE_NO_SOUND_HW | MACHINE_SUPPORTS_SAVE )