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]
This commit is contained in:
hap 2023-07-18 16:08:26 +02:00
parent 4af341e49b
commit 87dbac9f2c
3 changed files with 64 additions and 60 deletions

View file

@ -4,20 +4,42 @@
license:CC0-1.0
-->
<!--
Most KIM-1 software is complex to use. Refer to the manuals for information.
MAME's KIM-1 driver is not good at loading cassette recordings. So instead,
the ones provided here are re-encodings made with a BIN to WAV conversion tool,
such as KIMTAPE 0.5 (at default speed), eg:
kimtape -m -a0 -da1 a1.bin a1.wav
-->
<softwarelist name="kim1_cass" description="KIM-1 cassettes">
<!-- Instruction Manual for use and loading of Microchess is available at viewing and download at -->
<!-- http://archive.computerhistory.org/projects/chess/related_materials/text/4-1.MicroChess_%20Manual_for_6502.Micro-Ware/MicroChessManual.PETER_JENNINGS.062303071.sm.pdf -->
<software name="mchess">
<description>Microchess</description>
<year>1976</year>
<publisher>Micro-Ware Ltd.</publisher>
<info name="usage" value="Press F3, then -00F1=00 -17F9=C1 -1873 enter. When you see 0000 D8 pause tape. Press F3, then -1873 enter. When you see 0000 D8, press F3 enter" />
<!-- Typed in from book -->
<info name="usage" value="Enter 'R -00F1=00 -17F9=C0 -1873X'. Play tape, pause when display shows 0000 (P). 'R -17F9=C1 -1873X', (P), 'R X'." />
<part name="cass" interface="kim1_cass">
<dataarea name="cass" size="22961384">
<rom name="microchess (1976)(micro-ware ltd).wav" size="22961384" crc="e4eb54e3" sha1="44037ea1e736e9ea9336093cc8abc7dc23cc567a"/>
<dataarea name="cass" size="9953338">
<!-- IDs C0,C1 are the main program, IDs 01-05 are optional chess openings -->
<rom name="microchess.wav" size="9953338" crc="c7584ae0" sha1="9f1ac8f439e083dd592664a0f1e6ba1530836120"/>
</dataarea>
</part>
</software>
<software name="kimvent">
<description>KIM-Venture</description>
<year>1979</year>
<publisher>Robert C. Leedom.</publisher>
<info name="usage" value="Enter 'R -00F1=00 -17F9=A1 -1873X'. Play tape, pause when display shows 0000 (P). '-17F9=A2 -1873X', (P), '-17F9=A3 -1873X', (P), '-0100X'." />
<part name="cass" interface="kim1_cass">
<dataarea name="cass" size="9515290">
<!-- IDs A1,A2,A3 are the main program, ID 06 is the K-V SCORE program -->
<rom name="kimventure.wav" size="9515290" crc="bb3fde67" sha1="da525cb544e785d6751d759d905f0f4c7af483d7"/>
</dataarea>
</part>
</software>

View file

@ -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);

View file

@ -4,24 +4,13 @@ license:CC0-1.0
-->
<mamelayout version="2">
<element name="static_black">
<rect>
<color red="0.0" green="0.0" blue="0.0" />
</rect>
</element>
<element name="digit" defstate="0">
<led7seg>
<color red="0.75" green="0.0" blue="0.0" />
<color red="1.0" green="0.1" blue="0.15" />
</led7seg>
</element>
<view name="Default Layout">
<!-- Background -->
<element ref="static_black">
<bounds left="0" top="0" right="110" bottom="24" />
</element>
<!-- LED address display -->
<element name="digit0" ref="digit">
<bounds x="0" y="0" width="18" height="24" />
@ -38,10 +27,10 @@ license:CC0-1.0
<!-- LED data display -->
<element name="digit4" ref="digit">
<bounds x="74" y="0" width="18" height="24" />
<bounds x="78" y="0" width="18" height="24" />
</element>
<element name="digit5" ref="digit">
<bounds x="92" y="0" width="18" height="24" />
<bounds x="96" y="0" width="18" height="24" />
</element>
</view>
</mamelayout>