mirror of
https://github.com/mamedev/mame.git
synced 2024-11-16 07:48:32 +01:00
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:
parent
4af341e49b
commit
87dbac9f2c
3 changed files with 64 additions and 60 deletions
|
@ -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>
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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>
|
||||
|
|
Loading…
Reference in a new issue