From 87dbac9f2cfcb7e2a8b8b8d50180b0b964339412 Mon Sep 17 00:00:00 2001 From: hap Date: Tue, 18 Jul 2023 16:08:26 +0200 Subject: [PATCH] kim1: small cleanup to input ports, replace microchess cassette and add kim-venture New working software list items ------------------------------- kim1_cass: KIM-Venture [hap, Bob Leedom, Mark Bush] --- hash/kim1_cass.xml | 36 +++++++++++++++---- src/mame/commodore/kim1.cpp | 71 +++++++++++++++++-------------------- src/mame/layout/kim1.lay | 17 ++------- 3 files changed, 64 insertions(+), 60 deletions(-) diff --git a/hash/kim1_cass.xml b/hash/kim1_cass.xml index 9c08bc6cbcd..62526bb9e22 100644 --- a/hash/kim1_cass.xml +++ b/hash/kim1_cass.xml @@ -4,20 +4,42 @@ license:CC0-1.0 --> + + - - Microchess 1976 Micro-Ware Ltd. - - - + - - + + + + + + + + + KIM-Venture + 1979 + Robert C. Leedom. + + + + + diff --git a/src/mame/commodore/kim1.cpp b/src/mame/commodore/kim1.cpp index bd2e99c3296..f119e01741f 100644 --- a/src/mame/commodore/kim1.cpp +++ b/src/mame/commodore/kim1.cpp @@ -53,13 +53,13 @@ Keyboard: 23 keys and SST switch SST single step slide switch Paste test: - N-0100=11^22^33^44^55^66^77^88^99^-0100= + R-0100=11^22^33^44^55^66^77^88^99^-0100= Press UP to verify data. TODO: - LEDs should be dark at startup (RS key to activate) -- hook up Single Step dip switch +- hook up Single Step switch - slots for expansion & application ports - add TTY support @@ -167,46 +167,39 @@ INPUT_CHANGED_MEMBER(kim1_state::trigger_nmi) static INPUT_PORTS_START( kim1 ) PORT_START("ROW0") - PORT_BIT( 0x80, 0x00, IPT_UNUSED ) - PORT_BIT( 0x40, 0x40, IPT_KEYBOARD ) PORT_NAME("0") PORT_CODE(KEYCODE_0) PORT_CHAR('0') PORT_CODE(KEYCODE_0_PAD) - PORT_BIT( 0x20, 0x20, IPT_KEYBOARD ) PORT_NAME("1") PORT_CODE(KEYCODE_1) PORT_CHAR('1') PORT_CODE(KEYCODE_1_PAD) - PORT_BIT( 0x10, 0x10, IPT_KEYBOARD ) PORT_NAME("2") PORT_CODE(KEYCODE_2) PORT_CHAR('2') PORT_CODE(KEYCODE_2_PAD) - PORT_BIT( 0x08, 0x08, IPT_KEYBOARD ) PORT_NAME("3") PORT_CODE(KEYCODE_3) PORT_CHAR('3') PORT_CODE(KEYCODE_3_PAD) - PORT_BIT( 0x04, 0x04, IPT_KEYBOARD ) PORT_NAME("4") PORT_CODE(KEYCODE_4) PORT_CHAR('4') PORT_CODE(KEYCODE_4_PAD) - PORT_BIT( 0x02, 0x02, IPT_KEYBOARD ) PORT_NAME("5") PORT_CODE(KEYCODE_5) PORT_CHAR('5') PORT_CODE(KEYCODE_5_PAD) - PORT_BIT( 0x01, 0x01, IPT_KEYBOARD ) PORT_NAME("6") PORT_CODE(KEYCODE_6) PORT_CHAR('6') PORT_CODE(KEYCODE_6_PAD) + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_6) PORT_CODE(KEYCODE_6_PAD) PORT_CHAR('6') + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_5) PORT_CODE(KEYCODE_5_PAD) PORT_CHAR('5') + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_4) PORT_CODE(KEYCODE_4_PAD) PORT_CHAR('4') + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_3) PORT_CODE(KEYCODE_3_PAD) PORT_CHAR('3') + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_2) PORT_CODE(KEYCODE_2_PAD) PORT_CHAR('2') + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_1) PORT_CODE(KEYCODE_1_PAD) PORT_CHAR('1') + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_0) PORT_CODE(KEYCODE_0_PAD) PORT_CHAR('0') + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_START("ROW1") - PORT_BIT( 0x80, 0x00, IPT_UNUSED ) - PORT_BIT( 0x40, 0x40, IPT_KEYBOARD ) PORT_NAME("7") PORT_CODE(KEYCODE_7) PORT_CHAR('7') PORT_CODE(KEYCODE_7_PAD) - PORT_BIT( 0x20, 0x20, IPT_KEYBOARD ) PORT_NAME("8") PORT_CODE(KEYCODE_8) PORT_CHAR('8') PORT_CODE(KEYCODE_8_PAD) - PORT_BIT( 0x10, 0x10, IPT_KEYBOARD ) PORT_NAME("9") PORT_CODE(KEYCODE_9) PORT_CHAR('9') PORT_CODE(KEYCODE_9_PAD) - PORT_BIT( 0x08, 0x08, IPT_KEYBOARD ) PORT_NAME("A") PORT_CODE(KEYCODE_A) PORT_CHAR('A') - PORT_BIT( 0x04, 0x04, IPT_KEYBOARD ) PORT_NAME("B") PORT_CODE(KEYCODE_B) PORT_CHAR('B') - PORT_BIT( 0x02, 0x02, IPT_KEYBOARD ) PORT_NAME("C") PORT_CODE(KEYCODE_C) PORT_CHAR('C') - PORT_BIT( 0x01, 0x01, IPT_KEYBOARD ) PORT_NAME("D") PORT_CODE(KEYCODE_D) PORT_CHAR('D') + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_D) PORT_CHAR('D') + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_C) PORT_CHAR('C') + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_B) PORT_CHAR('B') + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_A) PORT_CHAR('A') + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_9) PORT_CODE(KEYCODE_9_PAD) PORT_CHAR('9') + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_8) PORT_CODE(KEYCODE_8_PAD) PORT_CHAR('8') + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_7) PORT_CODE(KEYCODE_7_PAD) PORT_CHAR('7') + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_START("ROW2") - PORT_BIT( 0x80, 0x00, IPT_UNUSED ) - PORT_BIT( 0x40, 0x40, IPT_KEYBOARD ) PORT_NAME("E") PORT_CODE(KEYCODE_E) PORT_CHAR('E') - PORT_BIT( 0x20, 0x20, IPT_KEYBOARD ) PORT_NAME("F") PORT_CODE(KEYCODE_F) PORT_CHAR('F') - PORT_BIT( 0x10, 0x10, IPT_KEYBOARD ) PORT_NAME("AD") PORT_CODE(KEYCODE_MINUS) PORT_CHAR('-') PORT_CODE(KEYCODE_MINUS_PAD) - PORT_BIT( 0x08, 0x08, IPT_KEYBOARD ) PORT_NAME("DA") PORT_CODE(KEYCODE_EQUALS) PORT_CHAR('=') - PORT_BIT( 0x04, 0x04, IPT_KEYBOARD ) PORT_NAME("+") PORT_CODE(KEYCODE_UP) PORT_CHAR('^') PORT_CODE(KEYCODE_PLUS_PAD) - PORT_BIT( 0x02, 0x02, IPT_KEYBOARD ) PORT_NAME("GO") PORT_CODE(KEYCODE_ENTER) PORT_CHAR('X') PORT_CODE(KEYCODE_ENTER_PAD) - PORT_BIT( 0x01, 0x01, IPT_KEYBOARD ) PORT_NAME("PC") PORT_CODE(KEYCODE_F6) + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_P) PORT_CHAR('P') PORT_NAME("PC") + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_ENTER) PORT_CODE(KEYCODE_ENTER_PAD) PORT_CODE(KEYCODE_X) PORT_CHAR('X') PORT_NAME("GO") + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_UP) PORT_CODE(KEYCODE_PLUS_PAD) PORT_CHAR('^') PORT_NAME("+") + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_EQUALS) PORT_CHAR('=') PORT_NAME("DA") + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_MINUS) PORT_CODE(KEYCODE_MINUS_PAD) PORT_CHAR('-') PORT_NAME("AD") + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_F) PORT_CHAR('F') + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_E) PORT_CHAR('E') + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_START("SPECIAL") - PORT_BIT( 0x80, 0x00, IPT_UNUSED ) - PORT_BIT( 0x40, 0x40, IPT_KEYBOARD ) PORT_NAME("sw1: ST") PORT_CODE(KEYCODE_F7) PORT_CHANGED_MEMBER(DEVICE_SELF, kim1_state, trigger_nmi, 0) PORT_CHAR('S') - PORT_BIT( 0x20, 0x20, IPT_KEYBOARD ) PORT_NAME("sw2: RS") PORT_CODE(KEYCODE_F3) PORT_CHANGED_MEMBER(DEVICE_SELF, kim1_state, trigger_reset, 0) PORT_CHAR('N') - PORT_DIPNAME(0x10, 0x10, "sw3: SS") PORT_CODE(KEYCODE_NUMLOCK) PORT_TOGGLE - PORT_DIPSETTING( 0x00, "single step") - PORT_DIPSETTING( 0x10, "run") - PORT_BIT( 0x08, 0x00, IPT_UNUSED ) - PORT_BIT( 0x04, 0x00, IPT_UNUSED ) - PORT_BIT( 0x02, 0x00, IPT_UNUSED ) - PORT_BIT( 0x01, 0x00, IPT_UNUSED ) + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_S) PORT_CHAR('S') PORT_NAME("ST") PORT_CHANGED_MEMBER(DEVICE_SELF, kim1_state, trigger_nmi, 0) + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_R) PORT_CHAR('R') PORT_NAME("RS") PORT_CHANGED_MEMBER(DEVICE_SELF, kim1_state, trigger_reset, 0) + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_F1) PORT_TOGGLE PORT_NAME("SST") INPUT_PORTS_END uint8_t kim1_state::kim1_u2_read_a() @@ -218,7 +211,7 @@ uint8_t kim1_state::kim1_u2_read_a() if (3U > sel) data = m_row[sel]->read(); - return data; + return data & 0x7f; } void kim1_state::kim1_u2_write_a(uint8_t data) @@ -296,13 +289,13 @@ void kim1_state::kim1(machine_config &config) config.set_default_layout(layout_kim1); // devices - MOS6530_NEW(config, m_miot[0], 1_MHz_XTAL); // u2 + MOS6530_NEW(config, m_miot[0], 1_MHz_XTAL); // U2 m_miot[0]->pa_rd_callback().set(FUNC(kim1_state::kim1_u2_read_a)); m_miot[0]->pa_wr_callback().set(FUNC(kim1_state::kim1_u2_write_a)); m_miot[0]->pb_rd_callback().set(FUNC(kim1_state::kim1_u2_read_b)); m_miot[0]->pb_wr_callback().set(FUNC(kim1_state::kim1_u2_write_b)); - MOS6530_NEW(config, m_miot[1], 1_MHz_XTAL); // u3 + MOS6530_NEW(config, m_miot[1], 1_MHz_XTAL); // U3 CASSETTE(config, m_cass); m_cass->set_formats(kim1_cassette_formats); diff --git a/src/mame/layout/kim1.lay b/src/mame/layout/kim1.lay index d8d78366b13..085dd811761 100644 --- a/src/mame/layout/kim1.lay +++ b/src/mame/layout/kim1.lay @@ -4,24 +4,13 @@ license:CC0-1.0 --> - - - - - - - + - - - - - @@ -38,10 +27,10 @@ license:CC0-1.0 - + - +