mirror of
https://github.com/holub/mame
synced 2025-05-23 06:08:48 +03:00
(MESS) apple3: rewrote keyboard handling from scratch using Curt's AY-5-3600 device. Much, much better. [R. Belmont]
This commit is contained in:
parent
73c35febef
commit
58a32ed83e
@ -47,6 +47,23 @@ static const struct a2bus_interface a2bus_intf =
|
||||
DEVCB_NULL
|
||||
};
|
||||
|
||||
static AY3600_INTERFACE( ay3600_intf )
|
||||
{
|
||||
DEVCB_INPUT_PORT("X0"),
|
||||
DEVCB_INPUT_PORT("X1"),
|
||||
DEVCB_INPUT_PORT("X2"),
|
||||
DEVCB_INPUT_PORT("X3"),
|
||||
DEVCB_INPUT_PORT("X4"),
|
||||
DEVCB_INPUT_PORT("X5"),
|
||||
DEVCB_INPUT_PORT("X6"),
|
||||
DEVCB_INPUT_PORT("X7"),
|
||||
DEVCB_INPUT_PORT("X8"),
|
||||
DEVCB_DRIVER_LINE_MEMBER(apple3_state, ay3600_shift_r),
|
||||
DEVCB_DRIVER_LINE_MEMBER(apple3_state, ay3600_control_r),
|
||||
DEVCB_DRIVER_LINE_MEMBER(apple3_state, ay3600_data_ready_w),
|
||||
DEVCB_NULL
|
||||
};
|
||||
|
||||
static MACHINE_CONFIG_START( apple3, apple3_state )
|
||||
/* basic machine hardware */
|
||||
MCFG_CPU_ADD("maincpu", M6502, 2000000) /* 2 MHz */
|
||||
@ -72,7 +89,7 @@ static MACHINE_CONFIG_START( apple3, apple3_state )
|
||||
MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", apple3_state, apple3_interrupt, "screen", 0, 1)
|
||||
|
||||
/* keyboard controller */
|
||||
MCFG_DEVICE_ADD("ay3600", AY3600N, 0)
|
||||
MCFG_AY3600_ADD("ay3600", 0, ay3600_intf)
|
||||
|
||||
/* slot bus */
|
||||
MCFG_A2BUS_BUS_ADD("a2bus", "maincpu", a2bus_intf)
|
||||
@ -111,77 +128,162 @@ MACHINE_CONFIG_END
|
||||
|
||||
|
||||
static INPUT_PORTS_START( apple3 )
|
||||
PORT_START("keyb_0")
|
||||
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Delete") PORT_CODE(KEYCODE_BACKSPACE)PORT_CHAR(8)
|
||||
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME(UTF8_LEFT) PORT_CODE(KEYCODE_LEFT) PORT_CHAR(UCHAR_MAMEKEY(LEFT))
|
||||
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Tab") PORT_CODE(KEYCODE_TAB) PORT_CHAR(9)
|
||||
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME(UTF8_DOWN) PORT_CODE(KEYCODE_DOWN) PORT_CHAR(UCHAR_MAMEKEY(DOWN))
|
||||
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME(UTF8_UP) PORT_CODE(KEYCODE_UP) PORT_CHAR(UCHAR_MAMEKEY(UP))
|
||||
PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Return") PORT_CODE(KEYCODE_ENTER) PORT_CHAR(13)
|
||||
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME(UTF8_RIGHT) PORT_CODE(KEYCODE_RIGHT) PORT_CHAR(UCHAR_MAMEKEY(RIGHT))
|
||||
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Esc") PORT_CODE(KEYCODE_ESC) PORT_CHAR(27)
|
||||
/*
|
||||
KB3600 Keyboard matrix (KB3600 has custom layout mask ROM, Apple p/n 341-0035)
|
||||
|
||||
PORT_START("keyb_1")
|
||||
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_SPACE) PORT_CHAR(' ')
|
||||
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_QUOTE) PORT_CHAR('\'') PORT_CHAR('\"')
|
||||
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_COMMA) PORT_CHAR(',') PORT_CHAR('<')
|
||||
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_MINUS) PORT_CHAR('-') PORT_CHAR('_')
|
||||
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_STOP) PORT_CHAR('.') PORT_CHAR('>')
|
||||
PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_SLASH) PORT_CHAR('/') PORT_CHAR('?')
|
||||
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_0) PORT_CHAR('0') PORT_CHAR(')')
|
||||
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_1) PORT_CHAR('1') PORT_CHAR('!')
|
||||
| Y0 | Y1 | Y2 | Y3 | Y4 | Y5 | Y6 | Y7 | Y8 | Y9 |
|
||||
| | | | | | | | | | |
|
||||
----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----|
|
||||
X0 | ESC | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
|
||||
----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----|
|
||||
X1 | TAB | Q | W | E | R | T | Y | U | I | O |
|
||||
----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----|
|
||||
X2 | A | S | D | F | H | G | J | K | ;: | L |
|
||||
----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----|
|
||||
X3 | Z | X | C | V | B | N | M | <, | >. | ?/ |
|
||||
----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----|
|
||||
X4 | | KP9 | | KP8 | | KP7 | \| | += | 0 | -_ |
|
||||
----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----|
|
||||
X5 | | KP6 | | KP5 | | KP4 | `~ | ]} | P | [{ |
|
||||
----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----|
|
||||
X6 | | KP3 | KP. | KP2 | KP0 | KP1 |RETRN| UP |BACKS| '" |
|
||||
----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----|
|
||||
X7 | | |KPENT|SPACE| | KP- |RIGHT|DOWN |LEFT | |
|
||||
----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----|
|
||||
*/
|
||||
|
||||
PORT_START("keyb_2")
|
||||
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_2) PORT_CHAR('2') PORT_CHAR('@')
|
||||
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_3) PORT_CHAR('3') PORT_CHAR('#')
|
||||
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_4) PORT_CHAR('4') PORT_CHAR('$')
|
||||
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_5) PORT_CHAR('5') PORT_CHAR('%')
|
||||
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_6) PORT_CHAR('6') PORT_CHAR('^')
|
||||
PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_7) PORT_CHAR('7') PORT_CHAR('&')
|
||||
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_8) PORT_CHAR('8') PORT_CHAR('*')
|
||||
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_9) PORT_CHAR('9') PORT_CHAR('(')
|
||||
/*
|
||||
Esc
|
||||
0x00
|
||||
|
||||
PORT_START("keyb_3")
|
||||
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_COLON) PORT_CHAR(';') PORT_CHAR(':')
|
||||
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_EQUALS) PORT_CHAR('=') PORT_CHAR('+')
|
||||
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_OPENBRACE) PORT_CHAR('[') PORT_CHAR('{')
|
||||
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_BACKSLASH) PORT_CHAR('\\') PORT_CHAR('|')
|
||||
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_CLOSEBRACE) PORT_CHAR(']') PORT_CHAR('}')
|
||||
PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_TILDE) PORT_CHAR('`') PORT_CHAR('~')
|
||||
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_A) PORT_CHAR('A') PORT_CHAR('a')
|
||||
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_B) PORT_CHAR('B') PORT_CHAR('b')
|
||||
` 1 2 3 4 5 6 7 8 9 0 - = BACKSPACE
|
||||
0x38 0x01 0x02 0x03 0x04 0x05 0x06 0x07 0x08 0x09 0x30 0x31 0x2f 0x104
|
||||
|
||||
PORT_START("keyb_4")
|
||||
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_C) PORT_CHAR('C') PORT_CHAR('c')
|
||||
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_D) PORT_CHAR('D') PORT_CHAR('d')
|
||||
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_E) PORT_CHAR('E') PORT_CHAR('e')
|
||||
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_F) PORT_CHAR('F') PORT_CHAR('f')
|
||||
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_G) PORT_CHAR('G') PORT_CHAR('g')
|
||||
PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_H) PORT_CHAR('H') PORT_CHAR('h')
|
||||
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_I) PORT_CHAR('I') PORT_CHAR('i')
|
||||
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_J) PORT_CHAR('J') PORT_CHAR('j')
|
||||
Tab Q W E R T Y U I O P [ ] \
|
||||
0x0a 0x0b 0x0c 0x0d 0x0e 0x0f 0x10 0x11 0x12 0x13 0x3a 0x3b 0x39 0x2e
|
||||
|
||||
PORT_START("keyb_5")
|
||||
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_K) PORT_CHAR('K') PORT_CHAR('k')
|
||||
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_L) PORT_CHAR('L') PORT_CHAR('l')
|
||||
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_M) PORT_CHAR('M') PORT_CHAR('m')
|
||||
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_N) PORT_CHAR('N') PORT_CHAR('n')
|
||||
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_O) PORT_CHAR('O') PORT_CHAR('o')
|
||||
PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_P) PORT_CHAR('P') PORT_CHAR('p')
|
||||
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_Q) PORT_CHAR('Q') PORT_CHAR('q')
|
||||
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_R) PORT_CHAR('R') PORT_CHAR('r')
|
||||
A S D F G H J K L ; ' ENTER
|
||||
0x14 0x15 0x16 0x17 0x19 0x18 0x1a 0x1b 0x1d 0x1c 0x105 0x102
|
||||
|
||||
Z X C V B N M , . /
|
||||
0x1e 0x1f 0x20 0x21 0x22 0x23 0x24 0x25 0x26 0x27
|
||||
|
||||
SPACE UP LT DN RT KP- KP7 KP8 KP9
|
||||
0x109 0x103 0x10e 0x10d 0x10c 0x10b 0x2d 0x2b 0x29
|
||||
|
||||
KP4 KP5 KP6 KP1 KP2 KP3 KPEN KP0 KP.
|
||||
0x37 0x35 0x33 0x101 0x3f 0x3d 0x108 0x100 0x3e
|
||||
*/
|
||||
PORT_START("X0")
|
||||
PORT_BIT( 0x001, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Esc") PORT_CODE(KEYCODE_ESC) PORT_CHAR(27)
|
||||
PORT_BIT( 0x002, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_1) PORT_CHAR('1') PORT_CHAR('!')
|
||||
PORT_BIT( 0x004, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_2) PORT_CHAR('2') PORT_CHAR('\"')
|
||||
PORT_BIT( 0x008, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_3) PORT_CHAR('3') PORT_CHAR('#')
|
||||
PORT_BIT( 0x010, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_4) PORT_CHAR('4') PORT_CHAR('$')
|
||||
PORT_BIT( 0x020, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_5) PORT_CHAR('5') PORT_CHAR('%')
|
||||
PORT_BIT( 0x040, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_6) PORT_CHAR('6') PORT_CHAR('&')
|
||||
PORT_BIT( 0x080, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_7) PORT_CHAR('7') PORT_CHAR('\'')
|
||||
PORT_BIT( 0x100, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_8) PORT_CHAR('8') PORT_CHAR('(')
|
||||
PORT_BIT( 0x200, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_9) PORT_CHAR('9') PORT_CHAR(')')
|
||||
|
||||
PORT_START("keyb_6")
|
||||
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_S) PORT_CHAR('S') PORT_CHAR('s')
|
||||
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_T) PORT_CHAR('T') PORT_CHAR('t')
|
||||
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_U) PORT_CHAR('U') PORT_CHAR('u')
|
||||
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_V) PORT_CHAR('V') PORT_CHAR('v')
|
||||
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_W) PORT_CHAR('W') PORT_CHAR('w')
|
||||
PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_X) PORT_CHAR('X') PORT_CHAR('x')
|
||||
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_Y) PORT_CHAR('Y') PORT_CHAR('y')
|
||||
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_Z) PORT_CHAR('Z') PORT_CHAR('z')
|
||||
PORT_START("X1")
|
||||
PORT_BIT( 0x001, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Tab") PORT_CODE(KEYCODE_TAB) PORT_CHAR(9)
|
||||
PORT_BIT( 0x002, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_Q) PORT_CHAR('Q') PORT_CHAR('q')
|
||||
PORT_BIT( 0x004, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_W) PORT_CHAR('W') PORT_CHAR('w')
|
||||
PORT_BIT( 0x008, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_E) PORT_CHAR('E') PORT_CHAR('e')
|
||||
PORT_BIT( 0x010, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_R) PORT_CHAR('R') PORT_CHAR('r')
|
||||
PORT_BIT( 0x020, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_T) PORT_CHAR('T') PORT_CHAR('t')
|
||||
PORT_BIT( 0x040, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_Y) PORT_CHAR('Y') PORT_CHAR('y')
|
||||
PORT_BIT( 0x080, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_U) PORT_CHAR('U') PORT_CHAR('u')
|
||||
PORT_BIT( 0x100, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_I) PORT_CHAR('I') PORT_CHAR('i')
|
||||
PORT_BIT( 0x200, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_O) PORT_CHAR('O') PORT_CHAR('o')
|
||||
|
||||
PORT_START("X2")
|
||||
PORT_BIT( 0x001, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_A) PORT_CHAR('A') PORT_CHAR('a')
|
||||
PORT_BIT( 0x002, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_S) PORT_CHAR('S') PORT_CHAR('s')
|
||||
PORT_BIT( 0x004, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_D) PORT_CHAR('D') PORT_CHAR('d')
|
||||
PORT_BIT( 0x008, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_F) PORT_CHAR('F') PORT_CHAR('f')
|
||||
PORT_BIT( 0x010, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_H) PORT_CHAR('H') PORT_CHAR('h')
|
||||
PORT_BIT( 0x020, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_G) PORT_CHAR('G') PORT_CHAR('g')
|
||||
PORT_BIT( 0x040, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_J) PORT_CHAR('J') PORT_CHAR('j')
|
||||
PORT_BIT( 0x080, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_K) PORT_CHAR('K') PORT_CHAR('k')
|
||||
PORT_BIT( 0x100, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_COLON) PORT_CHAR(';') PORT_CHAR(':')
|
||||
PORT_BIT( 0x200, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_L) PORT_CHAR('L') PORT_CHAR('l')
|
||||
|
||||
PORT_START("X3")
|
||||
PORT_BIT( 0x001, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_Z) PORT_CHAR('Z') PORT_CHAR('z')
|
||||
PORT_BIT( 0x002, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_X) PORT_CHAR('X') PORT_CHAR('x')
|
||||
PORT_BIT( 0x004, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_C) PORT_CHAR('C') PORT_CHAR('c')
|
||||
PORT_BIT( 0x008, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_V) PORT_CHAR('V') PORT_CHAR('v')
|
||||
PORT_BIT( 0x010, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_B) PORT_CHAR('B') PORT_CHAR('b')
|
||||
PORT_BIT( 0x020, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_N) PORT_CHAR('N') PORT_CHAR('n')
|
||||
PORT_BIT( 0x040, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_M) PORT_CHAR('M') PORT_CHAR('m')
|
||||
PORT_BIT( 0x080, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_COMMA) PORT_CHAR(',') PORT_CHAR('<')
|
||||
PORT_BIT( 0x100, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_STOP) PORT_CHAR('.') PORT_CHAR('>')
|
||||
PORT_BIT( 0x200, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_SLASH) PORT_CHAR('/') PORT_CHAR('?')
|
||||
|
||||
PORT_START("X4")
|
||||
PORT_BIT(0x001, IP_ACTIVE_HIGH, IPT_UNUSED)
|
||||
PORT_BIT(0x002, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_9_PAD) PORT_CHAR(UCHAR_MAMEKEY(9_PAD))
|
||||
PORT_BIT(0x004, IP_ACTIVE_HIGH, IPT_UNUSED)
|
||||
PORT_BIT(0x008, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_8_PAD) PORT_CHAR(UCHAR_MAMEKEY(8_PAD))
|
||||
PORT_BIT(0x010, IP_ACTIVE_HIGH, IPT_UNUSED)
|
||||
PORT_BIT(0x020, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_7_PAD) PORT_CHAR(UCHAR_MAMEKEY(7_PAD))
|
||||
PORT_BIT(0x040, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_BACKSLASH) PORT_CHAR('\\') PORT_CHAR('|')
|
||||
PORT_BIT(0x080, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_EQUALS) PORT_CHAR('=') PORT_CHAR('+')
|
||||
PORT_BIT(0x100, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_0) PORT_CHAR('0') PORT_CHAR(')')
|
||||
PORT_BIT(0x200, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_MINUS) PORT_CHAR('-') PORT_CHAR('_')
|
||||
|
||||
PORT_START("X5")
|
||||
PORT_BIT(0x001, IP_ACTIVE_HIGH, IPT_UNUSED)
|
||||
PORT_BIT(0x002, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_6_PAD) PORT_CHAR(UCHAR_MAMEKEY(6_PAD))
|
||||
PORT_BIT(0x004, IP_ACTIVE_HIGH, IPT_UNUSED)
|
||||
PORT_BIT(0x008, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_5_PAD) PORT_CHAR(UCHAR_MAMEKEY(5_PAD))
|
||||
PORT_BIT(0x010, IP_ACTIVE_HIGH, IPT_UNUSED)
|
||||
PORT_BIT(0x020, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_4_PAD) PORT_CHAR(UCHAR_MAMEKEY(4_PAD))
|
||||
PORT_BIT(0x040, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_TILDE) PORT_CHAR('`') PORT_CHAR('~')
|
||||
PORT_BIT(0x080, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_CLOSEBRACE) PORT_CHAR(']') PORT_CHAR('}')
|
||||
PORT_BIT(0x100, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_P) PORT_CHAR('P') PORT_CHAR('p')
|
||||
PORT_BIT(0x200, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_OPENBRACE) PORT_CHAR('[') PORT_CHAR('{')
|
||||
|
||||
PORT_START("X6")
|
||||
PORT_BIT(0x001, IP_ACTIVE_HIGH, IPT_UNUSED)
|
||||
PORT_BIT(0x002, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_3_PAD) PORT_CHAR(UCHAR_MAMEKEY(3_PAD))
|
||||
PORT_BIT(0x004, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_DEL_PAD) PORT_CHAR(UCHAR_MAMEKEY(DEL_PAD))
|
||||
PORT_BIT(0x008, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_2_PAD) PORT_CHAR(UCHAR_MAMEKEY(2_PAD))
|
||||
PORT_BIT(0x010, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_0_PAD) PORT_CHAR(UCHAR_MAMEKEY(0_PAD))
|
||||
PORT_BIT(0x020, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_1_PAD) PORT_CHAR(UCHAR_MAMEKEY(1_PAD))
|
||||
PORT_BIT(0x040, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Return") PORT_CODE(KEYCODE_ENTER) PORT_CHAR(13)
|
||||
PORT_BIT(0x080, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME(UTF8_UP) PORT_CODE(KEYCODE_UP)
|
||||
PORT_BIT(0x100, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Delete") PORT_CODE(KEYCODE_BACKSPACE)PORT_CHAR(8)
|
||||
PORT_BIT(0x200, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_QUOTE) PORT_CHAR('\'') PORT_CHAR('\"')
|
||||
|
||||
PORT_START("X7")
|
||||
PORT_BIT(0x001, IP_ACTIVE_HIGH, IPT_UNUSED)
|
||||
PORT_BIT(0x002, IP_ACTIVE_HIGH, IPT_UNUSED)
|
||||
PORT_BIT(0x004, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_ENTER_PAD) PORT_CHAR(UCHAR_MAMEKEY(ENTER_PAD))
|
||||
PORT_BIT(0x008, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_SPACE) PORT_CHAR(' ')
|
||||
PORT_BIT(0x010, IP_ACTIVE_HIGH, IPT_UNUSED)
|
||||
PORT_BIT(0x020, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_MINUS_PAD) PORT_CHAR(UCHAR_MAMEKEY(MINUS_PAD))
|
||||
PORT_BIT(0x040, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME(UTF8_RIGHT) PORT_CODE(KEYCODE_RIGHT)
|
||||
PORT_BIT(0x080, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME(UTF8_DOWN) PORT_CODE(KEYCODE_DOWN) PORT_CHAR(10)
|
||||
PORT_BIT(0x100, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME(UTF8_LEFT) PORT_CODE(KEYCODE_LEFT)
|
||||
PORT_BIT(0x200, IP_ACTIVE_HIGH, IPT_UNUSED)
|
||||
|
||||
PORT_START("X8")
|
||||
PORT_BIT(0x001, IP_ACTIVE_HIGH, IPT_UNUSED)
|
||||
PORT_BIT(0x002, IP_ACTIVE_HIGH, IPT_UNUSED)
|
||||
PORT_BIT(0x004, IP_ACTIVE_HIGH, IPT_UNUSED)
|
||||
PORT_BIT(0x008, IP_ACTIVE_HIGH, IPT_UNUSED)
|
||||
PORT_BIT(0x010, IP_ACTIVE_HIGH, IPT_UNUSED)
|
||||
PORT_BIT(0x020, IP_ACTIVE_HIGH, IPT_UNUSED)
|
||||
PORT_BIT(0x040, IP_ACTIVE_HIGH, IPT_UNUSED)
|
||||
PORT_BIT(0x080, IP_ACTIVE_HIGH, IPT_UNUSED)
|
||||
PORT_BIT(0x100, IP_ACTIVE_HIGH, IPT_UNUSED)
|
||||
PORT_BIT(0x200, IP_ACTIVE_HIGH, IPT_UNUSED)
|
||||
|
||||
PORT_START("keyb_special")
|
||||
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Caps Lock") PORT_CODE(KEYCODE_CAPSLOCK) PORT_TOGGLE
|
||||
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Left Shift") PORT_CODE(KEYCODE_LSHIFT) PORT_CHAR(UCHAR_SHIFT_1)
|
||||
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Right Shift") PORT_CODE(KEYCODE_RSHIFT) PORT_CHAR(UCHAR_SHIFT_1)
|
||||
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Control") PORT_CODE(KEYCODE_LCONTROL) PORT_CHAR(UCHAR_SHIFT_2)
|
||||
|
@ -16,7 +16,7 @@
|
||||
#include "machine/applefdc.h"
|
||||
#include "machine/mos6551.h"
|
||||
#include "machine/6522via.h"
|
||||
#include "machine/ay3600.h"
|
||||
#include "machine/kb3600.h"
|
||||
#include "sound/speaker.h"
|
||||
#include "sound/dac.h"
|
||||
|
||||
@ -41,19 +41,25 @@ public:
|
||||
m_ram(*this, RAM_TAG),
|
||||
m_via_0(*this, "via6522_0"),
|
||||
m_via_1(*this, "via6522_1"),
|
||||
m_acia(*this, "acia"),
|
||||
m_fdc(*this, "fdc"),
|
||||
m_ay3600(*this, "ay3600"),
|
||||
m_speaker(*this, SPEAKER_TAG),
|
||||
m_dac(*this, DAC_TAG)
|
||||
m_dac(*this, DAC_TAG),
|
||||
m_kbspecial(*this, "keyb_special")
|
||||
{
|
||||
}
|
||||
|
||||
required_device<cpu_device> m_maincpu;
|
||||
required_device<m6502_device> m_maincpu;
|
||||
required_device<ram_device> m_ram;
|
||||
required_device<via6522_device> m_via_0;
|
||||
required_device<via6522_device> m_via_1;
|
||||
required_device<ay3600n_device> m_ay3600;
|
||||
required_device<mos6551_device> m_acia;
|
||||
required_device<applefdc_base_device> m_fdc;
|
||||
required_device<ay3600_device> m_ay3600;
|
||||
required_device<speaker_sound_device> m_speaker;
|
||||
required_device<dac_device> m_dac;
|
||||
required_ioport m_kbspecial;
|
||||
|
||||
UINT32 m_flags;
|
||||
UINT8 m_via_0_a;
|
||||
@ -103,6 +109,9 @@ public:
|
||||
TIMER_DEVICE_CALLBACK_MEMBER(apple3_c040_tick);
|
||||
DECLARE_PALETTE_INIT(apple3);
|
||||
void apple3_irq_update();
|
||||
DECLARE_READ_LINE_MEMBER(ay3600_shift_r);
|
||||
DECLARE_READ_LINE_MEMBER(ay3600_control_r);
|
||||
DECLARE_WRITE_LINE_MEMBER(ay3600_data_ready_w);
|
||||
|
||||
bool m_sync;
|
||||
UINT8 m_indir_opcode;
|
||||
@ -113,6 +122,8 @@ public:
|
||||
UINT8 *m_bank6, *m_bank7;
|
||||
int m_speaker_state;
|
||||
int m_c040_time;
|
||||
UINT16 m_lastchar, m_strobe;
|
||||
UINT8 m_transchar;
|
||||
};
|
||||
|
||||
|
||||
|
@ -55,8 +55,6 @@ static void apple3_update_drives(device_t *device);
|
||||
|
||||
READ8_MEMBER(apple3_state::apple3_c0xx_r)
|
||||
{
|
||||
mos6551_device *acia = machine().device<mos6551_device>("acia");
|
||||
applefdc_base_device *fdc = machine().device<applefdc_base_device>("fdc");
|
||||
UINT8 result = 0xFF;
|
||||
|
||||
switch(offset)
|
||||
@ -64,44 +62,51 @@ READ8_MEMBER(apple3_state::apple3_c0xx_r)
|
||||
/* keystrobe */
|
||||
case 0x00: case 0x01: case 0x02: case 0x03:
|
||||
case 0x04: case 0x05: case 0x06: case 0x07:
|
||||
result = m_ay3600->keydata_strobe_r();
|
||||
result = (m_transchar & 0x7f) | m_strobe;
|
||||
break;
|
||||
|
||||
/* modifier keys */
|
||||
case 0x08: case 0x09: case 0x0A: case 0x0B:
|
||||
case 0x0C: case 0x0D: case 0x0E: case 0x0F:
|
||||
{
|
||||
UINT8 tmp = m_ay3600->keymod_r();
|
||||
UINT8 tmp = m_kbspecial->read();
|
||||
|
||||
result = 0x7e;
|
||||
if (tmp & AY3600_KEYMOD_SHIFT)
|
||||
result = 0x7c | (m_transchar & 0x80);
|
||||
|
||||
if (m_strobe)
|
||||
{
|
||||
result &= ~0x02;
|
||||
result |= 1;
|
||||
}
|
||||
if (tmp & AY3600_KEYMOD_CONTROL)
|
||||
|
||||
if (tmp & 0x06)
|
||||
{
|
||||
result |= 0x02;
|
||||
}
|
||||
if (tmp & 0x08)
|
||||
{
|
||||
result &= ~0x04;
|
||||
}
|
||||
if (tmp & AY3600_KEYMOD_CAPSLOCK)
|
||||
if (tmp & 0x01)
|
||||
{
|
||||
result &= ~0x08;
|
||||
}
|
||||
if (tmp & AY3600_KEYMOD_COMMAND)
|
||||
if (tmp & 0x10)
|
||||
{
|
||||
result &= ~0x10;
|
||||
}
|
||||
if (tmp & AY3600_KEYMOD_OPTION)
|
||||
if (tmp & 0x20)
|
||||
{
|
||||
result &= ~0x20;
|
||||
}
|
||||
}
|
||||
printf("modifier = %02x\n", result);
|
||||
break;
|
||||
|
||||
case 0x10: case 0x11: case 0x12: case 0x13:
|
||||
case 0x14: case 0x15: case 0x16: case 0x17:
|
||||
case 0x18: case 0x19: case 0x1A: case 0x1B:
|
||||
case 0x1C: case 0x1D: case 0x1E: case 0x1F:
|
||||
m_ay3600->anykey_clearstrobe_r();
|
||||
m_strobe = 0;
|
||||
break;
|
||||
|
||||
case 0x30: case 0x31: case 0x32: case 0x33:
|
||||
@ -157,14 +162,14 @@ READ8_MEMBER(apple3_state::apple3_c0xx_r)
|
||||
case 0xE4: case 0xE5: case 0xE6: case 0xE7:
|
||||
case 0xE8: case 0xE9: case 0xEA: case 0xEB:
|
||||
case 0xEC: case 0xED: case 0xEE: case 0xEF:
|
||||
result = fdc->read(offset);
|
||||
result = m_fdc->read(offset);
|
||||
break;
|
||||
|
||||
case 0xF0:
|
||||
case 0xF1:
|
||||
case 0xF2:
|
||||
case 0xF3:
|
||||
result = acia->read(space, offset & 0x03);
|
||||
result = m_acia->read(space, offset & 0x03);
|
||||
break;
|
||||
}
|
||||
return result;
|
||||
@ -174,16 +179,13 @@ READ8_MEMBER(apple3_state::apple3_c0xx_r)
|
||||
|
||||
WRITE8_MEMBER(apple3_state::apple3_c0xx_w)
|
||||
{
|
||||
mos6551_device *acia = machine().device<mos6551_device>("acia");
|
||||
applefdc_base_device *fdc = machine().device<applefdc_base_device>("fdc");
|
||||
|
||||
switch(offset)
|
||||
{
|
||||
case 0x10: case 0x11: case 0x12: case 0x13:
|
||||
case 0x14: case 0x15: case 0x16: case 0x17:
|
||||
case 0x18: case 0x19: case 0x1A: case 0x1B:
|
||||
case 0x1C: case 0x1D: case 0x1E: case 0x1F:
|
||||
m_ay3600->anykey_clearstrobe_r();
|
||||
m_strobe = 0;
|
||||
break;
|
||||
|
||||
case 0x30: case 0x31: case 0x32: case 0x33:
|
||||
@ -228,21 +230,20 @@ WRITE8_MEMBER(apple3_state::apple3_c0xx_w)
|
||||
case 0xE4: case 0xE5: case 0xE6: case 0xE7:
|
||||
case 0xE8: case 0xE9: case 0xEA: case 0xEB:
|
||||
case 0xEC: case 0xED: case 0xEE: case 0xEF:
|
||||
fdc->write(offset, data);
|
||||
m_fdc->write(offset, data);
|
||||
break;
|
||||
|
||||
case 0xF0:
|
||||
case 0xF1:
|
||||
case 0xF2:
|
||||
case 0xF3:
|
||||
acia->write(space, offset & 0x03, data);
|
||||
m_acia->write(space, offset & 0x03, data);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
TIMER_DEVICE_CALLBACK_MEMBER(apple3_state::apple3_interrupt)
|
||||
{
|
||||
m_via_1->write_ca2((m_ay3600->keydata_strobe_r() & 0x80) ? 1 : 0);
|
||||
m_via_1->write_cb1(machine().primary_screen->vblank());
|
||||
m_via_1->write_cb2(machine().primary_screen->vblank());
|
||||
}
|
||||
@ -421,6 +422,8 @@ MACHINE_RESET_MEMBER(apple3_state,apple3)
|
||||
m_speaker_state = 0;
|
||||
m_speaker->level_w(0);
|
||||
m_c040_time = 0;
|
||||
m_strobe = 0;
|
||||
m_lastchar = 0x0d;
|
||||
}
|
||||
|
||||
|
||||
@ -611,8 +614,6 @@ DRIVER_INIT_MEMBER(apple3_state,apple3)
|
||||
m_via_1->write_pb7(1);
|
||||
|
||||
apple3_update_memory();
|
||||
|
||||
m_ay3600->set_runtime_config(false, false); // no keypad (yet), no repeat key
|
||||
}
|
||||
|
||||
READ8_MEMBER(apple3_state::apple3_memory_r)
|
||||
@ -864,3 +865,135 @@ TIMER_DEVICE_CALLBACK_MEMBER(apple3_state::apple3_c040_tick)
|
||||
}
|
||||
}
|
||||
|
||||
READ_LINE_MEMBER(apple3_state::ay3600_shift_r)
|
||||
{
|
||||
// either shift key
|
||||
if (m_kbspecial->read() & 0x06)
|
||||
{
|
||||
return ASSERT_LINE;
|
||||
}
|
||||
|
||||
return CLEAR_LINE;
|
||||
}
|
||||
|
||||
READ_LINE_MEMBER(apple3_state::ay3600_control_r)
|
||||
{
|
||||
if (m_kbspecial->read() & 0x08)
|
||||
{
|
||||
return ASSERT_LINE;
|
||||
}
|
||||
|
||||
return CLEAR_LINE;
|
||||
}
|
||||
|
||||
static const UINT8 key_remap[0x50][4] =
|
||||
{
|
||||
/* norm shft ctrl both */
|
||||
{ 0x9b,0x9b,0x9b,0x9b }, /* Escape 00 */
|
||||
{ 0x31,0x21,0x31,0x31 }, /* 1 ! 01 */
|
||||
{ 0x32,0x40,0x32,0x00 }, /* 2 @ 02 */
|
||||
{ 0x33,0x23,0x33,0x23 }, /* 3 # 03 */
|
||||
{ 0x34,0x24,0x34,0x24 }, /* 4 $ 04 */
|
||||
{ 0x35,0x25,0x35,0x25 }, /* 5 % 05 */
|
||||
{ 0x36,0x5e,0x35,0x53 }, /* 6 ^ 06 */
|
||||
{ 0x37,0x26,0x37,0x26 }, /* 7 & 07 */
|
||||
{ 0x38,0x2a,0x38,0x2a }, /* 8 * 08 */
|
||||
{ 0x39,0x28,0x39,0x28 }, /* 9 ( 09 */
|
||||
{ 0x89,0x89,0x89,0x89 }, /* Tab 0a */
|
||||
{ 0x51,0x51,0x11,0x11 }, /* q Q 0b */
|
||||
{ 0x57,0x57,0x17,0x17 }, /* w W 0c */
|
||||
{ 0x45,0x45,0x05,0x05 }, /* e E 0d */
|
||||
{ 0x52,0x52,0x12,0x12 }, /* r R 0e */
|
||||
{ 0x54,0x54,0x14,0x14 }, /* t T 0f */
|
||||
{ 0x59,0x59,0x19,0x19 }, /* y Y 10 */
|
||||
{ 0x55,0x55,0x15,0x15 }, /* u U 11 */
|
||||
{ 0x49,0x49,0x09,0x09 }, /* i I 12 */
|
||||
{ 0x4f,0x4f,0x0f,0x0f }, /* o O 13 */
|
||||
{ 0x41,0x41,0x01,0x01 }, /* a A 14 */
|
||||
{ 0x53,0x53,0x13,0x13 }, /* s S 15 */
|
||||
{ 0x44,0x44,0x04,0x04 }, /* d D 16 */
|
||||
{ 0x46,0x46,0x06,0x06 }, /* f F 17 */
|
||||
{ 0x48,0x48,0x08,0x08 }, /* h H 18 */
|
||||
{ 0x47,0x47,0x07,0x07 }, /* g G 19 */
|
||||
{ 0x4a,0x4a,0x0a,0x0a }, /* j J 1a */
|
||||
{ 0x4b,0x4b,0x0b,0x0b }, /* k K 1b */
|
||||
{ 0x3b,0x3a,0x3b,0x3a }, /* ; : 1c */
|
||||
{ 0x4c,0x4c,0x0c,0x0c }, /* l L 1d */
|
||||
{ 0x5a,0x5a,0x1a,0x1a }, /* z Z 1e */
|
||||
{ 0x58,0x58,0x18,0x18 }, /* x X 1f */
|
||||
{ 0x43,0x43,0x03,0x03 }, /* c C 20 */
|
||||
{ 0x56,0x56,0x16,0x16 }, /* v V 21 */
|
||||
{ 0x42,0x42,0x02,0x02 }, /* b B 22 */
|
||||
{ 0x4e,0x4e,0x0e,0x0e }, /* n N 23 */
|
||||
{ 0x4d,0x4d,0x0d,0x0d }, /* m M 24 */
|
||||
{ 0x2c,0x3c,0x2c,0x3c }, /* , < 25 */
|
||||
{ 0x2e,0x3e,0x2e,0x3e }, /* . > 26 */
|
||||
{ 0x3f,0x2f,0x3f,0x2f }, /* / ? 27 */
|
||||
{ 0x00,0x00,0x00,0x00 }, /* 0x28 unused */
|
||||
{ 0xb9,0xb9,0xb9,0xb9 }, /* 9 (KP) 29 */
|
||||
{ 0x00,0x00,0x00,0x00 }, /* 0x2a unused */
|
||||
{ 0xb8,0xb8,0xb8,0xb8 }, /* 8 (KP) 2b */
|
||||
{ 0x00,0x00,0x00,0x00 }, /* 0x2c unused */
|
||||
{ 0xb7,0xb7,0xb7,0xb7 }, /* 7 (KP) 2d */
|
||||
{ 0x5c,0x7c,0x7f,0x1c }, /* \ | 2e */
|
||||
{ 0x3d,0x2b,0x3d,0x2b }, /* = + 2f */
|
||||
{ 0x30,0x29,0x30,0x29 }, /* 0 ) 30 */
|
||||
{ 0x2d,0x5f,0x2d,0x1f }, /* - _ 31 */
|
||||
{ 0x00,0x00,0x00,0x00 }, /* 0x32 unused */
|
||||
{ 0xb6,0xb6,0xb6,0xb6 }, /* 6 (KP) 33 */
|
||||
{ 0x00,0x00,0x00,0x00 }, /* 0x34 unused */
|
||||
{ 0xb5,0xb5,0xb5,0xb5 }, /* 5 (KP) 35 */
|
||||
{ 0x00,0x00,0x00,0x00 }, /* 0x36 unused */
|
||||
{ 0xb4,0xb4,0xb4,0xb4 }, /* 4 (KP) 37 */
|
||||
{ 0x27,0x22,0x27,0x22 }, /* ` ~ 38 */
|
||||
{ 0x5d,0x7d,0x1d,0x1d }, /* ] } 39 */
|
||||
{ 0x50,0x50,0x10,0x10 }, /* p P 3a */
|
||||
{ 0x5b,0x7b,0x1b,0x1b }, /* [ { 3b */
|
||||
{ 0x00,0x00,0x00,0x00 }, /* 0x3c unused */
|
||||
{ 0xb3,0xb3,0xb3,0xb3 }, /* 3 (KP) 3d */
|
||||
{ 0xae,0xae,0xae,0xae }, /* . (KP) 3e */
|
||||
{ 0xb2,0xb2,0xb2,0xb2 }, /* 2 (KP) 3f */
|
||||
{ 0xb0,0xb0,0xb0,0xb0 }, /* 0 (KP) 40 */
|
||||
{ 0xb1,0xb1,0xb1,0xb1 }, /* 1 (KP) 41 */
|
||||
{ 0x0d,0x0d,0x0d,0x0d }, /* Enter 42 */
|
||||
{ 0x8b,0x8b,0x8b,0x8b }, /* Up 43 */
|
||||
{ 0x00,0x00,0x00,0x00 }, /* 0x44 unused */
|
||||
{ 0x3d,0x2b,0x3d,0x2b }, /* ' " 45 */
|
||||
{ 0x00,0x00,0x00,0x00 }, /* 0x46 unused */
|
||||
{ 0x00,0x00,0x00,0x00 }, /* 0x47 unused */
|
||||
{ 0x8d,0x8d,0x8d,0x8d }, /* Ent(KP) 48 */
|
||||
{ 0xa0,0xa0,0xa0,0xa0 }, /* Space 49 */
|
||||
{ 0x00,0x00,0x00,0x00 }, /* 0x4a unused */
|
||||
{ 0xad,0xad,0xad,0xad }, /* - (KP) 4b */
|
||||
{ 0x95,0x95,0x95,0x95 }, /* Right 4c */
|
||||
{ 0x8a,0x8a,0x8a,0x8a }, /* Down 4d */
|
||||
{ 0x8b,0x8b,0x8b,0x8b }, /* Left 4e */
|
||||
{ 0x00,0x00,0x00,0x00 } /* 0x4f unused */
|
||||
};
|
||||
|
||||
WRITE_LINE_MEMBER(apple3_state::ay3600_data_ready_w)
|
||||
{
|
||||
m_via_1->write_ca2(state);
|
||||
|
||||
if (state == ASSERT_LINE)
|
||||
{
|
||||
UINT16 trans;
|
||||
int mod = 0;
|
||||
m_lastchar = m_ay3600->b_r();
|
||||
|
||||
trans = m_lastchar & ~(0x1c0); // clear the 3600's control/shift stuff
|
||||
trans |= (m_lastchar & 0x100)>>2; // bring the 0x100 bit down to the 0x40 place
|
||||
|
||||
mod = (m_kbspecial->read() & 0x06) ? 0x01 : 0x00;
|
||||
mod |= (m_kbspecial->read() & 0x08) ? 0x02 : 0x00;
|
||||
|
||||
m_transchar = key_remap[trans][mod];
|
||||
|
||||
if (m_transchar != 0)
|
||||
{
|
||||
m_strobe = 0x80;
|
||||
// printf("new char = %04x (%02x)\n", trans, m_transchar);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user