Previous 15994 Revisions Next

r2986 Sunday 27th July, 2008 at 16:59:47 UTC by Wilbert Pol
Added documentation of the keytronic keyboard matrix.
Input port definitions still need to corrected.
[src/mess/machine]at.c kb_keytro.c kb_keytro.h

src/mess/machine/at.c
r2985r2986
640640
641641   /* Attach keyboard to the keyboard controller */
642642   at_kbdc8042_set_keyboard_interface( kb_keytronic_set_clock_signal, kb_keytronic_set_data_signal );
643   kb_keytronic_set_host_interface( at_kbdc8042_set_clock_signal, at_kbdc8042_set_data_signal );
643   kb_keytronic_set_host_interface( machine, at_kbdc8042_set_clock_signal, at_kbdc8042_set_data_signal );
644644}
645645
646646
r2985r2986
664664
665665   /* Attach keyboard to the keyboard controller */
666666   at_kbdc8042_set_keyboard_interface( kb_keytronic_set_clock_signal, kb_keytronic_set_data_signal );
667   kb_keytronic_set_host_interface( at_kbdc8042_set_clock_signal, at_kbdc8042_set_data_signal );
667   kb_keytronic_set_host_interface( machine, at_kbdc8042_set_clock_signal, at_kbdc8042_set_data_signal );
668668}
669669
670670
r2985r2986
679679
680680   /* Attach keyboard to the keyboard controller */
681681   at_kbdc8042_set_keyboard_interface( kb_keytronic_set_clock_signal, kb_keytronic_set_data_signal );
682   kb_keytronic_set_host_interface( at_kbdc8042_set_clock_signal, at_kbdc8042_set_data_signal );
682   kb_keytronic_set_host_interface( machine, at_kbdc8042_set_clock_signal, at_kbdc8042_set_data_signal );
683683}
684684
685685
r2985r2986
736736
737737   /* Attach keyboard to the keyboard controller */
738738   at_kbdc8042_set_keyboard_interface( kb_keytronic_set_clock_signal, kb_keytronic_set_data_signal );
739   kb_keytronic_set_host_interface( at_kbdc8042_set_clock_signal, at_kbdc8042_set_data_signal );
739   kb_keytronic_set_host_interface( machine, at_kbdc8042_set_clock_signal, at_kbdc8042_set_data_signal );
740740}
741741
742742
r2985r2986
753753
754754   /* Attach keyboard to the keyboard controller */
755755   at_kbdc8042_set_keyboard_interface( kb_keytronic_set_clock_signal, kb_keytronic_set_data_signal );
756   kb_keytronic_set_host_interface( at_kbdc8042_set_clock_signal, at_kbdc8042_set_data_signal );
756   kb_keytronic_set_host_interface( machine, at_kbdc8042_set_clock_signal, at_kbdc8042_set_data_signal );
757757}
758758
759759
src/mess/machine/kb_keytro.c
r2985r2986
11/***************************************************************************
22
3Emulation file for Keytronic AT 4270 keyboard.
3Emulation file for Keytronic KB3270/PC keyboard.
44
55This keyboard supports both the PC/XT and the PC/AT keyboard protocols. The
66desired protocol can be selected by a switch on the keybaord.
77
8SW1 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
24TODO:
25- Verify P1 boot up behavior. Right now we ignore the signals when
26  P1 != 0xFF. (Code at 0x0FCF)
27
28Keyboard matrix.
29
30Z5 = XR 22-00950-001
31Z6 = SN74LS132N
32Z7 = XR 22-00950-001
33Z8 = SN74LS374N
34Z11 = 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
80The 'Return', 'Backspace, 'Pad 0', 'Right Shift', 'Pad +'  keys on the keyboard
81are attached to two switches. The keys appear twice in the keyboard matrix.
82
883***************************************************************************/
984
1085#include "driver.h"
86#include "machine/kb_keytro.h"
1187#include "cpu/i8051/i8051.h"
1288
1389static struct {
1490   UINT8               p1;
91   UINT8               p1_data;
1592   UINT8               p2;
1693   UINT8               p3;
1794   UINT8               clock_signal;
1895   UINT8               data_signal;
1996   write8_machine_func      clock_callback;
2097   write8_machine_func      data_callback;
98   int                  cpunum;
2199} kb_keytronic;
22100
23101
102/***************************************************************************
103
104  Input port declaration
105
106***************************************************************************/
107INPUT_PORTS_START( kb_keytronic )
108   PORT_START_TAG( "kb_keytronic_0b" )
109PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNUSED )
110PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNUSED )
111PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNUSED )
112PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNUSED )
113PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNUSED )
114PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNUSED )
115PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNUSED )
116PORT_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
258INPUT_PORTS_END
259
260
24261/* Write handler which is called when the clock signal may have changed */
25262WRITE8_HANDLER( kb_keytronic_set_clock_signal )
26263{
27264   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 );
29266}
30267
31268
r2985r2986
33270WRITE8_HANDLER( kb_keytronic_set_data_signal )
34271{
35272   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 );
37275}
38276
39277
40void kb_keytronic_set_host_interface( write8_machine_func clock_cb, write8_machine_func data_cb )
278void kb_keytronic_set_host_interface( running_machine *machine, write8_machine_func clock_cb, write8_machine_func data_cb )
41279{
42280   kb_keytronic.clock_callback = clock_cb;
43281   kb_keytronic.data_callback = data_cb;
282   kb_keytronic.p3 = 0xff;
283   kb_keytronic.cpunum = mame_find_cpu_index( machine, KEYTRONIC_KB3270PC_CPU );
44284}
45285
46286
47287static READ8_HANDLER( kb_keytronic_p1_r )
48288{
49   UINT8 data = kb_keytronic.p1;
289   UINT8 data = kb_keytronic.p1_data;
50290
51291   return data;
52292}
r2985r2986
56296{
57297   logerror("kb_keytronic_p1_w(): write %02x\n", data );
58298
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   }
59349   kb_keytronic.p1 = data;
60350}
61351
r2985r2986
80370{
81371   UINT8 data = kb_keytronic.p3;
82372
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);
83382   return data;
84383}
85384
r2985r2986
87386static WRITE8_HANDLER( kb_keytronic_p3_w )
88387{
89388   logerror("kb_keytronic_p3_w(): write %02x\n", data );
90
91   kb_keytronic.p3 = data;
92389}
93390
94391
95392static READ8_HANDLER( kb_keytronic_data_r )
96393{
97394   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   }
98406   return 0xFF;
99407}
100408
101409
102410static WRITE8_HANDLER( kb_keytronic_data_w )
103411{
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;
106416
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   }
109422}
110423
111424
r2985r2986
127440
128441
129442MACHINE_DRIVER_START( kb_keytronic )
130   MDRV_CPU_ADD( "kb_keytronic_", I8051, 11060250 )
443   MDRV_CPU_ADD( KEYTRONIC_KB3270PC_CPU, I8051, 11060250 )
131444   MDRV_CPU_PROGRAM_MAP( kb_keytronic_program, 0 )
132445   MDRV_CPU_DATA_MAP( kb_keytronic_data, 0 )
133446   MDRV_CPU_IO_MAP( kb_keytronic_io, 0 )
src/mess/machine/kb_keytro.h
r2985r2986
11#ifndef __KB_KEYTRO_H_
22#define __KB_KEYTRO_H_
33
4#define KEYTRONIC_KB3270PC_CPU   "kb_kb3270/pc"
5
46WRITE8_HANDLER( kb_keytronic_set_clock_signal );
57WRITE8_HANDLER( kb_keytronic_set_data_signal );
68
79/* The code expects kb_keytronic_set_host_interface to be called at init or reset time to
810   initialize the internal callbacks.
911 */
10void kb_keytronic_set_host_interface( write8_machine_func clock_cb, write8_machine_func data_cb );
12void kb_keytronic_set_host_interface( running_machine *machine, write8_machine_func clock_cb, write8_machine_func data_cb );
1113
12
14INPUT_PORTS_EXTERN( kb_keytronic );
1315MACHINE_DRIVER_EXTERN( kb_keytronic );
1416
1517#endif  /* __KB_KEYTRO_H_ */

Previous 15994 Revisions Next


© 1998-2018 The MESS Team