src/mess/machine/kb_keytro.c
| r2985 | r2986 | |
| 1 | 1 | /*************************************************************************** |
| 2 | 2 | |
| 3 | | Emulation file for Keytronic AT 4270 keyboard. |
| 3 | Emulation file for Keytronic KB3270/PC keyboard. |
| 4 | 4 | |
| 5 | 5 | This keyboard supports both the PC/XT and the PC/AT keyboard protocols. The |
| 6 | 6 | desired protocol can be selected by a switch on the keybaord. |
| 7 | 7 | |
| 8 | SW1 is connected to Port 1 of a 8031. |
| 9 | P1.0 - On - Standard PC and XT |
| 10 | Off - Enhanced XT, AT and PS/2 Models. |
| 11 | P1.1 - On - IRMA Emulation |
| 12 | Off - Native Scan Code Set |
| 13 | P1.2 - On - Enhanced 101 Scan Code Set |
| 14 | Off - Native Scan Code Set |
| 15 | P1.3 - On - Disable E0 |
| 16 | Off - Enable E0 |
| 17 | P1.4 - On - Int'l Code Tables |
| 18 | Off - U.S. Code Tables |
| 19 | P1.5 - Off - Not Used |
| 20 | P1.6 - Off - Not Used |
| 21 | P1.7 - On - Key click |
| 22 | Off - No key click |
| 23 | |
| 24 | TODO: |
| 25 | - Verify P1 boot up behavior. Right now we ignore the signals when |
| 26 | P1 != 0xFF. (Code at 0x0FCF) |
| 27 | |
| 28 | Keyboard matrix. |
| 29 | |
| 30 | Z5 = XR 22-00950-001 |
| 31 | Z6 = SN74LS132N |
| 32 | Z7 = XR 22-00950-001 |
| 33 | Z8 = SN74LS374N |
| 34 | Z11 = XR 22-908-03B |
| 35 | |
| 36 | |
| 37 | Z11 pin 8 |
| 38 | | Z11 pin 7 |
| 39 | | | Z11 pin 6 |
| 40 | | | | Z11 pin 5 |
| 41 | | | | | Z11 pin 4 |
| 42 | | | | | | | |
| 43 | F1 -------- F2 ------------- F3 ----- F4 ----- F5 ----- F6 -------- J2 pin 2 - Z5 pin 19 |
| 44 | | | | | | | |
| 45 | F7 -------- F8 ------------- LShift - < ------ Z ------ X --------- J2 pin 1 - Z5 pin 18 |
| 46 | | | | | | | |
| 47 | F9 -------- F10 ------------ LCtrl -- LAlt --- Space -- RAlt ------ J1 pin 9 - Z5 pin 17 |
| 48 | | | | | | | |
| 49 | 1 --------- ` -------------- Q ------ TAB ---- A ------ Caps Lock - J1 pin 8 - Z5 pin 16 |
| 50 | | | | | | | |
| 51 | 2 --------- 3 -------------- W ------ E ------ S ------ D --------- J1 pin 7 - Z5 pin 15 |
| 52 | | | | | | | |
| 53 | 5 --------- 4 -------------- T ------ R ------ G ------ F --------- J2 pin 3 - Z7 pin 20 |
| 54 | | | | | | | |
| 55 | N --------- M -------------- B ------ V ------ C ------ , -------------------- Z7 pin 19 |
| 56 | | | | | | | |
| 57 | 6 --------- 7 -------------- Y ------ U ------ H ------ J -------------------- Z7 pin 18 |
| 58 | | | | | | | |
| 59 | 9 --------- 8 -------------- O ------ I ------ L ------ K -------------------- Z7 pin 17 |
| 60 | | | | | | | |
| 61 | Pad 2 ----- Pad 1 ---------- Unused - Unused - Down --- Enter ---------------- Z7 pin 16 |
| 62 | | | | | | | |
| 63 | | / -------------- Rshift - Rshift - Left --- . --------- J9 pin 8 - Z7 pin 15 |
| 64 | | | | | | | |
| 65 | 0 --------- - -------------- P ------ [ ------ ; ------ ' --------- J9 pin 7 - Z7 pin 14 |
| 66 | | | | | | | |
| 67 | Backspace - = -------------- Return - \ ------ Return - ] --------- J9 pin 6 - Z7 pin 13 |
| 68 | | | | | | | |
| 69 | Backspace - PA1/Dup -------- |<-- --- /a\ ---- Pad + -- Pad + ----- J9 pin 5 - Z7 pin 12 |
| 70 | | | | | | | |
| 71 | Esc ------- NumLock -------- Pad 7 -- Pad 8 -- Pad 4 -- Pad 5 ---------------- Can't finish trace, goes under SW1 |
| 72 | | | | | | | |
| 73 | SysReq ---- ScrLk ---------- -->| --- Pad 9 -- Pad - -- Pad 6 ---------------- Can't finish trace, goes under Z8 between pins 5 and 6 |
| 74 | | | | | | | |
| 75 | Pad 3 ----- Pad 0 ---------- Pad 0 -- Pad . -- Unused - Up ------------------- Z7 pin 7 |
| 76 | | | | | | | |
| 77 | PrtSc * --- PA2/Field Mark - Right -- /a ----- Center - Unused --------------- Can't finish trace, SW1 blocks view |
| 78 | | | | | | | |
| 79 | |
| 80 | The 'Return', 'Backspace, 'Pad 0', 'Right Shift', 'Pad +' keys on the keyboard |
| 81 | are attached to two switches. The keys appear twice in the keyboard matrix. |
| 82 | |
| 8 | 83 | ***************************************************************************/ |
| 9 | 84 | |
| 10 | 85 | #include "driver.h" |
| 86 | #include "machine/kb_keytro.h" |
| 11 | 87 | #include "cpu/i8051/i8051.h" |
| 12 | 88 | |
| 13 | 89 | static struct { |
| 14 | 90 | UINT8 p1; |
| 91 | UINT8 p1_data; |
| 15 | 92 | UINT8 p2; |
| 16 | 93 | UINT8 p3; |
| 17 | 94 | UINT8 clock_signal; |
| 18 | 95 | UINT8 data_signal; |
| 19 | 96 | write8_machine_func clock_callback; |
| 20 | 97 | write8_machine_func data_callback; |
| 98 | int cpunum; |
| 21 | 99 | } kb_keytronic; |
| 22 | 100 | |
| 23 | 101 | |
| 102 | /*************************************************************************** |
| 103 | |
| 104 | Input port declaration |
| 105 | |
| 106 | ***************************************************************************/ |
| 107 | INPUT_PORTS_START( kb_keytronic ) |
| 108 | PORT_START_TAG( "kb_keytronic_0b" ) |
| 109 | PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNUSED ) |
| 110 | PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNUSED ) |
| 111 | PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNUSED ) |
| 112 | PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNUSED ) |
| 113 | PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNUSED ) |
| 114 | PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNUSED ) |
| 115 | PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNUSED ) |
| 116 | PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNUSED ) |
| 117 | |
| 118 | PORT_START_TAG( "kb_keytronic_0e" ) |
| 119 | PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNUSED ) |
| 120 | PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNUSED ) |
| 121 | PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNUSED ) |
| 122 | PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNUSED ) |
| 123 | PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNUSED ) |
| 124 | PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNUSED ) |
| 125 | PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNUSED ) |
| 126 | PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNUSED ) |
| 127 | |
| 128 | PORT_START_TAG( "kb_keytronic_0f" ) |
| 129 | PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_5) PORT_CHAR('5') /* 06 */ |
| 130 | PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_4) PORT_CHAR('4') /* 05 */ |
| 131 | PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_T) PORT_CHAR('T') /* 14 */ |
| 132 | PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_R) PORT_CHAR('R') /* 13 */ |
| 133 | PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_G) PORT_CHAR('G') /* 22 */ |
| 134 | PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_F) PORT_CHAR('F') /* 21 */ |
| 135 | PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_RIGHT) PORT_NAME("Cursor Right (MF2?)") /* 6a */ |
| 136 | PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_F7) PORT_CHAR(UCHAR_MAMEKEY(F7)) /* 41 */ |
| 137 | |
| 138 | PORT_START_TAG( "kb_keytronic_30" ) |
| 139 | PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_F12) PORT_CHAR(UCHAR_MAMEKEY(F12)) /* 58 */ |
| 140 | PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_M) PORT_CHAR('M') /* 32 */ |
| 141 | PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_B) PORT_CHAR('B') /* 30 */ |
| 142 | PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) /* 5b */ |
| 143 | PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) /* 5c */ |
| 144 | PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) /* 5d */ |
| 145 | PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_END) PORT_NAME("End (MF2?)") /* 6b */ |
| 146 | PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_F8) PORT_CHAR(UCHAR_MAMEKEY(F8)) /* 42 */ |
| 147 | |
| 148 | PORT_START_TAG( "kb_keytronic_31" ) |
| 149 | PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_ASTERISK) PORT_NAME("KP *") /* 37 */ |
| 150 | PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_7) PORT_CHAR('7') /* 08 */ |
| 151 | PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_LSHIFT) PORT_CHAR(UCHAR_MAMEKEY(LSHIFT)) /* 2a */ |
| 152 | PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) /* 70 */ |
| 153 | PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_Z) PORT_CHAR('Z') /* 2c */ |
| 154 | PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_J) PORT_CHAR('J') /* 24 */ |
| 155 | PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_DOWN) PORT_NAME("Cursor Down (MF2?)") /* 6c */ |
| 156 | PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_F9) PORT_CHAR(UCHAR_MAMEKEY(F9)) /* 43 */ |
| 157 | |
| 158 | PORT_START_TAG( "kb_keytronic_32" ) |
| 159 | PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_9) PORT_CHAR('9') /* 0a */ |
| 160 | PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_LCONTROL) PORT_CHAR(UCHAR_MAMEKEY(LCONTROL)) /* 1d */ |
| 161 | PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) /* 71 */ |
| 162 | PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_LALT) PORT_NAME("Alt") /* 38 */ |
| 163 | PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_SPACE) PORT_NAME("Space") /* 39 */ |
| 164 | PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_LALT) PORT_NAME("Alt") /* 38 */ |
| 165 | PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_LEFT) PORT_NAME("Cursor Left (MF2?)") /* 69 */ |
| 166 | PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_F6) PORT_CHAR(UCHAR_MAMEKEY(F6)) /* 40 */ |
| 167 | |
| 168 | PORT_START_TAG( "kb_keytronic_33" ) |
| 169 | PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_1) PORT_CHAR('1') /* 02 */ |
| 170 | PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_TILDE) PORT_CHAR('`') /* 29 */ |
| 171 | PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_Q) PORT_CHAR('Q') /* 10 */ |
| 172 | PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_TAB) PORT_CHAR(9) /* 0f */ |
| 173 | PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_A) PORT_CHAR('A') /* 1e */ |
| 174 | PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_CAPSLOCK) PORT_NAME("Caps") /* 3a */ |
| 175 | PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_PGUP) PORT_NAME("Page Up (MF2?)") /* 68 */ |
| 176 | PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_F5) PORT_CHAR(UCHAR_MAMEKEY(F5)) /* 3f */ |
| 177 | |
| 178 | PORT_START_TAG( "kb_keytronic_34" ) |
| 179 | PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_2) PORT_CHAR('2') /* 02 */ |
| 180 | PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_3) PORT_CHAR('3') /* 03 */ |
| 181 | PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_W) PORT_CHAR('W') /* 11 */ |
| 182 | PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_E) PORT_CHAR('E') /* 12 */ |
| 183 | PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_S) PORT_CHAR('S') /* 1f */ |
| 184 | PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_D) PORT_CHAR('D') /* 20 */ |
| 185 | PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_UP) PORT_NAME("Cursor Up (MF2?)") /* 67 */ |
| 186 | PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_F4) PORT_CHAR(UCHAR_MAMEKEY(F4)) /* 3e */ |
| 187 | |
| 188 | PORT_START_TAG( "kb_keytronic_35" ) |
| 189 | PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_0) PORT_CHAR('0') /* 0b */ |
| 190 | PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_MINUS) PORT_CHAR('-') /* 0c */ |
| 191 | PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_P) PORT_CHAR('P') /* 19 */ |
| 192 | PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_OPENBRACE) PORT_CHAR('[') /* 1a */ |
| 193 | PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_COLON) PORT_CHAR(';') /* 27 */ |
| 194 | PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_QUOTE) PORT_CHAR('\'') /* 28 */ |
| 195 | PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_HOME) PORT_NAME("Home (MF2?)") /* 66 */ |
| 196 | PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_F3) PORT_CHAR(UCHAR_MAMEKEY(F3)) /* 3d */ |
| 197 | |
| 198 | PORT_START_TAG( "kb_keytronic_36" ) |
| 199 | PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_BACKSPACE) PORT_CHAR(8) /* 0e */ |
| 200 | PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_EQUALS) PORT_CHAR('=') /* 0d */ |
| 201 | PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_ENTER) PORT_CHAR(13) /* 1c */ |
| 202 | PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_BACKSLASH) PORT_CHAR('\\') /* 2b */ |
| 203 | PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNUSED ) |
| 204 | PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_CLOSEBRACE) PORT_CHAR(']') /* 1b */ |
| 205 | PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_PAUSE) PORT_NAME("Pause (MF2?)") /* 65 */ |
| 206 | PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_F2) PORT_CHAR(UCHAR_MAMEKEY(F2)) /* 3c */ |
| 207 | |
| 208 | PORT_START_TAG( "kb_keytronic_37" ) |
| 209 | PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNUSED ) |
| 210 | PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) /* 7b */ |
| 211 | PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) /* 7e */ |
| 212 | PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) /* 7a */ |
| 213 | PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_PLUS_PAD) PORT_NAME("KP +") /* 4e */ |
| 214 | PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNUSED ) |
| 215 | PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_RALT) PORT_NAME("AltGr (MF2?)") /* 64 */ |
| 216 | PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_F1) PORT_CHAR(UCHAR_MAMEKEY(F1)) /* 3b */ |
| 217 | |
| 218 | PORT_START_TAG( "kb_keytronic_38" ) |
| 219 | PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) /* 54 */ |
| 220 | PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_SCRLOCK) PORT_NAME("ScrLock") /* 46 */ |
| 221 | PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) /* 7c */ |
| 222 | PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_9_PAD) PORT_NAME("KP 9") /* 49 */ |
| 223 | PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_MINUS_PAD) PORT_NAME("KP -") /* 4a */ |
| 224 | PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_6_PAD) PORT_NAME("KP 6") /* 4d */ |
| 225 | PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNUSED ) |
| 226 | PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNUSED ) |
| 227 | |
| 228 | PORT_START_TAG( "kb_keytronic_39" ) |
| 229 | PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_ESC) PORT_NAME("Esc") /* 01 */ |
| 230 | PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_NUMLOCK) PORT_NAME("NumLock") /* 45 */ |
| 231 | PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_7_PAD) PORT_NAME("KP 7") /* 47 */ |
| 232 | PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_8_PAD) PORT_NAME("KP 8") /* 48 */ |
| 233 | PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_4_PAD) PORT_NAME("KP 4") /* 4b */ |
| 234 | PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_5_PAD) PORT_NAME("KP 5") /* 4c */ |
| 235 | PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) /* 76 */ |
| 236 | PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_PRTSCR) PORT_NAME("PrtScr (MF2?)") /* 63 */ |
| 237 | |
| 238 | PORT_START_TAG( "kb_keytronic_3a" ) |
| 239 | PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_DEL) PORT_NAME("Delete (MF2?)") /* 6f */ |
| 240 | PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) /* 7f */ |
| 241 | PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) /* 7d */ |
| 242 | PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) /* 79 */ |
| 243 | PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) /* 77 */ |
| 244 | PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNUSED ) |
| 245 | PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_INSERT) PORT_NAME("Insert (MF2?)") /* 6e */ |
| 246 | PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_SLASH_PAD) PORT_NAME("KP / (MF2?)") /* 62 */ |
| 247 | |
| 248 | PORT_START_TAG( "kb_keytronic_3b" ) |
| 249 | PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_3_PAD) PORT_NAME("KP 3") /* 51 */ |
| 250 | PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNUSED ) |
| 251 | PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_0_PAD) PORT_NAME("KP 0") /* 52 */ |
| 252 | PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_DEL_PAD) PORT_NAME("KP .") /* 53 */ |
| 253 | PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNUSED ) |
| 254 | PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) /* 78 */ |
| 255 | PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_PGDN) PORT_NAME("Page Down (MF2?)") /* 6d */ |
| 256 | PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_F10) PORT_CHAR(UCHAR_MAMEKEY(F10)) /* 44 */ |
| 257 | |
| 258 | INPUT_PORTS_END |
| 259 | |
| 260 | |
| 24 | 261 | /* Write handler which is called when the clock signal may have changed */ |
| 25 | 262 | WRITE8_HANDLER( kb_keytronic_set_clock_signal ) |
| 26 | 263 | { |
| 27 | 264 | kb_keytronic.clock_signal = data; |
| 28 | | cpunum_set_input_line( machine, 2, I8051_INT0_LINE, (data & 0x40 ) ? HOLD_LINE : CLEAR_LINE ); |
| 265 | cpunum_set_input_line( machine, kb_keytronic.cpunum, I8051_INT0_LINE, data ? HOLD_LINE : CLEAR_LINE ); |
| 29 | 266 | } |
| 30 | 267 | |
| 31 | 268 | |
| r2985 | r2986 | |
| 33 | 270 | WRITE8_HANDLER( kb_keytronic_set_data_signal ) |
| 34 | 271 | { |
| 35 | 272 | kb_keytronic.data_signal = data; |
| 36 | | cpunum_set_input_line( machine, 2, I8051_T0_LINE, ( data & 0x80 ) ? HOLD_LINE : CLEAR_LINE ); |
| 273 | //printf("kb_keytronic_set_data_signal(): data = %d\n", data); |
| 274 | cpunum_set_input_line( machine, kb_keytronic.cpunum, I8051_T0_LINE, data ? HOLD_LINE : CLEAR_LINE ); |
| 37 | 275 | } |
| 38 | 276 | |
| 39 | 277 | |
| 40 | | void kb_keytronic_set_host_interface( write8_machine_func clock_cb, write8_machine_func data_cb ) |
| 278 | void kb_keytronic_set_host_interface( running_machine *machine, write8_machine_func clock_cb, write8_machine_func data_cb ) |
| 41 | 279 | { |
| 42 | 280 | kb_keytronic.clock_callback = clock_cb; |
| 43 | 281 | kb_keytronic.data_callback = data_cb; |
| 282 | kb_keytronic.p3 = 0xff; |
| 283 | kb_keytronic.cpunum = mame_find_cpu_index( machine, KEYTRONIC_KB3270PC_CPU ); |
| 44 | 284 | } |
| 45 | 285 | |
| 46 | 286 | |
| 47 | 287 | static READ8_HANDLER( kb_keytronic_p1_r ) |
| 48 | 288 | { |
| 49 | | UINT8 data = kb_keytronic.p1; |
| 289 | UINT8 data = kb_keytronic.p1_data; |
| 50 | 290 | |
| 51 | 291 | return data; |
| 52 | 292 | } |
| r2985 | r2986 | |
| 56 | 296 | { |
| 57 | 297 | logerror("kb_keytronic_p1_w(): write %02x\n", data ); |
| 58 | 298 | |
| 299 | switch( data ) |
| 300 | { |
| 301 | case 0x0b: |
| 302 | kb_keytronic.p1_data = input_port_read( machine, "kb_keytronic_0b" ); |
| 303 | kb_keytronic.p1_data = 0xFF; |
| 304 | break; |
| 305 | case 0x0e: |
| 306 | kb_keytronic.p1_data = input_port_read( machine, "kb_keytronic_0e" ); |
| 307 | kb_keytronic.p1_data = 0xFE; |
| 308 | break; |
| 309 | case 0x0f: |
| 310 | kb_keytronic.p1_data = input_port_read( machine, "kb_keytronic_0f" ); |
| 311 | break; |
| 312 | case 0x30: |
| 313 | kb_keytronic.p1_data = input_port_read( machine, "kb_keytronic_30" ); |
| 314 | break; |
| 315 | case 0x31: |
| 316 | kb_keytronic.p1_data = input_port_read( machine, "kb_keytronic_31" ); |
| 317 | break; |
| 318 | case 0x32: |
| 319 | kb_keytronic.p1_data = input_port_read( machine, "kb_keytronic_32" ); |
| 320 | break; |
| 321 | case 0x33: |
| 322 | kb_keytronic.p1_data = input_port_read( machine, "kb_keytronic_33" ); |
| 323 | break; |
| 324 | case 0x34: |
| 325 | kb_keytronic.p1_data = input_port_read( machine, "kb_keytronic_34" ); |
| 326 | break; |
| 327 | case 0x35: |
| 328 | kb_keytronic.p1_data = input_port_read( machine, "kb_keytronic_35" ); |
| 329 | break; |
| 330 | case 0x36: |
| 331 | kb_keytronic.p1_data = input_port_read( machine, "kb_keytronic_36" ); |
| 332 | break; |
| 333 | case 0x37: |
| 334 | kb_keytronic.p1_data = input_port_read( machine, "kb_keytronic_37" ); |
| 335 | break; |
| 336 | case 0x38: |
| 337 | kb_keytronic.p1_data = input_port_read( machine, "kb_keytronic_38" ); |
| 338 | break; |
| 339 | case 0x39: |
| 340 | kb_keytronic.p1_data = input_port_read( machine, "kb_keytronic_39" ); |
| 341 | break; |
| 342 | case 0x3a: |
| 343 | kb_keytronic.p1_data = input_port_read( machine, "kb_keytronic_3a" ); |
| 344 | break; |
| 345 | case 0x3b: |
| 346 | kb_keytronic.p1_data = input_port_read( machine, "kb_keytronic_3b" ); |
| 347 | break; |
| 348 | } |
| 59 | 349 | kb_keytronic.p1 = data; |
| 60 | 350 | } |
| 61 | 351 | |
| r2985 | r2986 | |
| 80 | 370 | { |
| 81 | 371 | UINT8 data = kb_keytronic.p3; |
| 82 | 372 | |
| 373 | data &= ~ 0x14; |
| 374 | |
| 375 | /* -INT0 signal */ |
| 376 | data |= ( kb_keytronic.clock_signal ? 0x04 : 0x00 ); |
| 377 | |
| 378 | /* T0 signal */ |
| 379 | data |= ( kb_keytronic.data_signal ? 0x00 : 0x10 ); |
| 380 | |
| 381 | //printf("kb_keytronic_p3_r(): %02x\n", data); |
| 83 | 382 | return data; |
| 84 | 383 | } |
| 85 | 384 | |
| r2985 | r2986 | |
| 87 | 386 | static WRITE8_HANDLER( kb_keytronic_p3_w ) |
| 88 | 387 | { |
| 89 | 388 | logerror("kb_keytronic_p3_w(): write %02x\n", data ); |
| 90 | | |
| 91 | | kb_keytronic.p3 = data; |
| 92 | 389 | } |
| 93 | 390 | |
| 94 | 391 | |
| 95 | 392 | static READ8_HANDLER( kb_keytronic_data_r ) |
| 96 | 393 | { |
| 97 | 394 | logerror("kb_keytronic_data_r(): read from %04x\n", offset ); |
| 395 | |
| 396 | if ( kb_keytronic.p1 == 0xFF ) |
| 397 | { |
| 398 | kb_keytronic.data_signal = ( offset & 0x0100 ) ? 1 : 0; |
| 399 | kb_keytronic.clock_signal = ( offset & 0x0200 ) ? 1 : 0; |
| 400 | |
| 401 | kb_keytronic.data_callback( machine, 0, kb_keytronic.data_signal ); |
| 402 | kb_keytronic.clock_callback( machine, 0, kb_keytronic.clock_signal ); |
| 403 | |
| 404 | //printf("data = %d, clock = %d\n", kb_keytronic.data_signal, kb_keytronic.clock_signal ); |
| 405 | } |
| 98 | 406 | return 0xFF; |
| 99 | 407 | } |
| 100 | 408 | |
| 101 | 409 | |
| 102 | 410 | static WRITE8_HANDLER( kb_keytronic_data_w ) |
| 103 | 411 | { |
| 104 | | kb_keytronic.data_signal = ( offset & 0x0100 ) ? 1 : 0; |
| 105 | | kb_keytronic.clock_signal = ( offset & 0x0200 ) ? 1 : 0; |
| 412 | if ( kb_keytronic.p1 == 0xFF ) |
| 413 | { |
| 414 | kb_keytronic.data_signal = ( offset & 0x0100 ) ? 1 : 0; |
| 415 | kb_keytronic.clock_signal = ( offset & 0x0200 ) ? 1 : 0; |
| 106 | 416 | |
| 107 | | kb_keytronic.data_callback( machine, 0, kb_keytronic.data_signal ); |
| 108 | | kb_keytronic.clock_callback( machine, 0, kb_keytronic.clock_signal ); |
| 417 | kb_keytronic.data_callback( machine, 0, kb_keytronic.data_signal ); |
| 418 | kb_keytronic.clock_callback( machine, 0, kb_keytronic.clock_signal ); |
| 419 | |
| 420 | //printf("data = %d, clock = %d\n", kb_keytronic.data_signal, kb_keytronic.clock_signal ); |
| 421 | } |
| 109 | 422 | } |
| 110 | 423 | |
| 111 | 424 | |
| r2985 | r2986 | |
| 127 | 440 | |
| 128 | 441 | |
| 129 | 442 | MACHINE_DRIVER_START( kb_keytronic ) |
| 130 | | MDRV_CPU_ADD( "kb_keytronic_", I8051, 11060250 ) |
| 443 | MDRV_CPU_ADD( KEYTRONIC_KB3270PC_CPU, I8051, 11060250 ) |
| 131 | 444 | MDRV_CPU_PROGRAM_MAP( kb_keytronic_program, 0 ) |
| 132 | 445 | MDRV_CPU_DATA_MAP( kb_keytronic_data, 0 ) |
| 133 | 446 | MDRV_CPU_IO_MAP( kb_keytronic_io, 0 ) |