Previous 199869 Revisions Next

r23912 Monday 24th June, 2013 at 14:57:13 UTC by Curt Coder
(MESS) ibm5160: Keyboard WIP. (nw)
[src/mess/machine]kb_pcxt83.c kb_pcxt83.h

trunk/src/mess/machine/kb_pcxt83.c
r23911r23912
8686//-------------------------------------------------
8787
8888static MACHINE_CONFIG_FRAGMENT( ibm_pc_xt_83_keyboard )
89   MCFG_CPU_ADD(I8048_TAG, I8048, 5247000)
89   MCFG_CPU_ADD(I8048_TAG, I8048, MCS48_LC_CLOCK(IND_U(47), CAP_P(20.7)))
9090   MCFG_CPU_IO_MAP(ibm_pc_xt_83_keyboard_io)
9191MACHINE_CONFIG_END
9292
r23911r23912
107107//-------------------------------------------------
108108
109109INPUT_PORTS_START( ibm_pc_xt_83_keyboard )
110   PORT_START("P10")
110   PORT_START("MD00")
111111   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD )
112112   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD )
113113   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD )
r23911r23912
117117   PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD )
118118   PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD )
119119
120   PORT_START("P11")
120   PORT_START("MD01")
121121   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD )
122122   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD )
123123   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD )
r23911r23912
127127   PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD )
128128   PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD )
129129
130   PORT_START("P12")
130   PORT_START("MD02")
131131   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD )
132132   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD )
133133   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD )
r23911r23912
137137   PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD )
138138   PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD )
139139
140   PORT_START("P13")
140   PORT_START("MD03")
141141   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD )
142142   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD )
143143   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD )
r23911r23912
147147   PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD )
148148   PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD )
149149
150   PORT_START("P14")
150   PORT_START("MD04")
151151   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD )
152152   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD )
153153   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD )
r23911r23912
157157   PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD )
158158   PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD )
159159
160   PORT_START("P15")
160   PORT_START("MD05")
161161   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD )
162162   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD )
163163   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD )
r23911r23912
167167   PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD )
168168   PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD )
169169
170   PORT_START("P16")
170   PORT_START("MD06")
171171   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD )
172172   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD )
173173   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD )
r23911r23912
177177   PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD )
178178   PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD )
179179
180   PORT_START("P17")
180   PORT_START("MD07")
181181   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD )
182182   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD )
183183   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD )
r23911r23912
187187   PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD )
188188   PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD )
189189
190   PORT_START("P23")
190   PORT_START("MD08")
191191   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD )
192192   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD )
193193   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD )
r23911r23912
197197   PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD )
198198   PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD )
199199
200   PORT_START("P24")
200   PORT_START("MD09")
201201   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD )
202202   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD )
203203   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD )
r23911r23912
207207   PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD )
208208   PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD )
209209
210   PORT_START("P25")
210   PORT_START("MD10")
211211   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD )
212212   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD )
213213   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD )
r23911r23912
217217   PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD )
218218   PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD )
219219
220   PORT_START("P26")
220   PORT_START("MD11")
221221   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD )
222222   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD )
223223   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD )
r23911r23912
226226   PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD )
227227   PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD )
228228   PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD )
229
230   PORT_START("P27")
231   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD )
232   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD )
233   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD )
234   PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD )
235   PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD )
236   PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD )
237   PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD )
238   PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD )
239229INPUT_PORTS_END
240230
241231
r23911r23912
262252   : device_t(mconfig, PC_KBD_IBM_PC_XT_83, "IBM PC/XT Keyboard", tag, owner, clock, "kb_pcxt83", __FILE__),
263253     device_pc_kbd_interface(mconfig, *this),
264254     m_maincpu(*this, I8048_TAG),
265     m_p10(*this, "P10"),
266     m_p11(*this, "P11"),
267     m_p12(*this, "P12"),
268     m_p13(*this, "P13"),
269     m_p14(*this, "P14"),
270     m_p15(*this, "P15"),
271     m_p16(*this, "P16"),
272     m_p17(*this, "P17"),
273     m_p23(*this, "P23"),
274     m_p24(*this, "P24"),
275     m_p25(*this, "P25"),
276     m_p26(*this, "P26"),
277     m_p27(*this, "P27"),
255     m_md00(*this, "MD00"),
256     m_md01(*this, "MD01"),
257     m_md02(*this, "MD02"),
258     m_md03(*this, "MD03"),
259     m_md04(*this, "MD04"),
260     m_md05(*this, "MD05"),
261     m_md06(*this, "MD06"),
262     m_md07(*this, "MD07"),
263     m_md08(*this, "MD08"),
264     m_md09(*this, "MD09"),
265     m_md10(*this, "MD10"),
266     m_md11(*this, "MD11"),
278267     m_p1(0),
279     m_p2(0),
280     m_sense(0)
268     m_p2(0)
281269{
282270}
283271
r23911r23912
293281   // state saving
294282   save_item(NAME(m_p1));
295283   save_item(NAME(m_p2));
296   save_item(NAME(m_sense));
297284}
298285
299286
r23911r23912
308295
309296
310297//-------------------------------------------------
298//  clock_write -
299//-------------------------------------------------
300
301WRITE_LINE_MEMBER( ibm_pc_xt_83_keyboard_device::clock_write )
302{
303}
304
305
306//-------------------------------------------------
307//  data_write -
308//-------------------------------------------------
309
310WRITE_LINE_MEMBER( ibm_pc_xt_83_keyboard_device::data_write )
311{
312   m_maincpu->set_input_line(MCS48_INPUT_IRQ, state ? CLEAR_LINE : ASSERT_LINE);
313}
314
315
316//-------------------------------------------------
311317//  bus_w -
312318//-------------------------------------------------
313319
r23911r23912
322328       2       
323329       3       
324330       4       
325       5       CLOCK
326       6       DATA
327       7       IC4 G
331       5       DATAOUT
332       6       -REQOUT
333       7       RESET
328334   
329335   */
330336
331   m_pc_kbdc->data_write_from_kb(BIT(data, 6));
332   m_pc_kbdc->clock_write_from_kb(BIT(data, 5));
333
334   if (BIT(data, 7))
335   {
336      m_sense = m_p2 & 0x07;
337   }
337   m_pc_kbdc->data_write_from_kb(BIT(data, 5));
338   m_pc_kbdc->clock_write_from_kb(BIT(data, 6));
338339}
339340
340341
r23911r23912
348349   
349350       bit     description
350351   
351       0       
352       1       
353       2       
354       3       
355       4       
356       5       
357       6       
358       7       
352       0       MD00
353       1       MD01
354       2       MD02
355       3       MD03
356       4       MD04
357       5       MD05
358       6       MD06
359       7       MD07
359360   
360361   */
361362
r23911r23912
373374   
374375       bit     description
375376   
376       0       SENSE 0
377       1       SENSE 1
378       2       SENSE 2
379       3       
380       4       
381       5       
382       6       
383       7       
377       0       SELECT 2
378       1       SELECT 1
379       2       SELECT 0
380       3       SA CLOSED, T1
381       4       MD08
382       5       MD09
383       6       MD10
384       7       MD11
384385   
385386   */
386387
r23911r23912
394395
395396READ8_MEMBER( ibm_pc_xt_83_keyboard_device::t0_r )
396397{
397   return data_signal();
398   return clock_signal();
398399}
399400
400401
r23911r23912
404405
405406READ8_MEMBER( ibm_pc_xt_83_keyboard_device::t1_r )
406407{
408   return sa_closed();
409}
410
411
412//-------------------------------------------------
413//  sa_closed -
414//-------------------------------------------------
415
416int ibm_pc_xt_83_keyboard_device::sa_closed()
417{
407418   UINT8 data = 0xff;
408419
409   if (BIT(m_p1, 0)) data &= m_p10->read();
410   if (BIT(m_p1, 1)) data &= m_p11->read();
411   if (BIT(m_p1, 2)) data &= m_p12->read();
412   if (BIT(m_p1, 3)) data &= m_p13->read();
413   if (BIT(m_p1, 4)) data &= m_p14->read();
414   if (BIT(m_p1, 5)) data &= m_p15->read();
415   if (BIT(m_p1, 6)) data &= m_p16->read();
416   if (BIT(m_p1, 7)) data &= m_p17->read();
417   if (BIT(m_p2, 3)) data &= m_p23->read();
418   if (BIT(m_p2, 4)) data &= m_p24->read();
419   if (BIT(m_p2, 5)) data &= m_p25->read();
420   if (BIT(m_p2, 6)) data &= m_p26->read();
421   if (BIT(m_p2, 7)) data &= m_p27->read();
420   logerror("md %03x sense %01x\n", m_p2 << 4 | m_p1, m_p2&0x07);
422421
423   return BIT(data, m_sense);
422   if (BIT(m_p1, 0)) data &= m_md00->read();
423   if (BIT(m_p1, 1)) data &= m_md01->read();
424   if (BIT(m_p1, 2)) data &= m_md02->read();
425   if (BIT(m_p1, 3)) data &= m_md03->read();
426   if (BIT(m_p1, 4)) data &= m_md04->read();
427   if (BIT(m_p1, 5)) data &= m_md05->read();
428   if (BIT(m_p1, 6)) data &= m_md06->read();
429   if (BIT(m_p1, 7)) data &= m_md07->read();
430   if (BIT(m_p2, 4)) data &= m_md08->read();
431   if (BIT(m_p2, 5)) data &= m_md09->read();
432   if (BIT(m_p2, 6)) data &= m_md10->read();
433   if (BIT(m_p2, 7)) data &= m_md11->read();
434
435   return BIT(m_p2, 3) && BIT(data, m_p2 & 0x07);
424436}
trunk/src/mess/machine/kb_pcxt83.h
r23911r23912
4949   virtual void device_reset();
5050
5151   // device_pc_kbd_interface overrides
52   virtual DECLARE_WRITE_LINE_MEMBER( clock_write ) { m_maincpu->set_input_line(MCS48_INPUT_IRQ, !state); };
53   virtual DECLARE_WRITE_LINE_MEMBER( data_write ) { };
52   virtual DECLARE_WRITE_LINE_MEMBER( clock_write );
53   virtual DECLARE_WRITE_LINE_MEMBER( data_write );
5454
5555private:
56   int sa_closed();
57
5658   required_device<cpu_device> m_maincpu;
57   required_ioport m_p10;
58   required_ioport m_p11;
59   required_ioport m_p12;
60   required_ioport m_p13;
61   required_ioport m_p14;
62   required_ioport m_p15;
63   required_ioport m_p16;
64   required_ioport m_p17;
65   required_ioport m_p23;
66   required_ioport m_p24;
67   required_ioport m_p25;
68   required_ioport m_p26;
69   required_ioport m_p27;
59   required_ioport m_md00;
60   required_ioport m_md01;
61   required_ioport m_md02;
62   required_ioport m_md03;
63   required_ioport m_md04;
64   required_ioport m_md05;
65   required_ioport m_md06;
66   required_ioport m_md07;
67   required_ioport m_md08;
68   required_ioport m_md09;
69   required_ioport m_md10;
70   required_ioport m_md11;
7071
7172   UINT8 m_p1;
7273   UINT8 m_p2;
73   int m_sense;
7474};
7575
7676

Previous 199869 Revisions Next


© 1997-2024 The MAME Team