Previous 199869 Revisions Next

r19045 Monday 19th November, 2012 at 16:15:34 UTC by Angelo Salese
Basic Keyboard IRQ hook-up, pending all buttons hook ...
[src/emu/machine]pic8259.c
[src/mess/drivers]apc.c

trunk/src/emu/machine/pic8259.c
r19044r19045
407407               if (LOG_OCW)
408408                  logerror("pic8259_w(): OCW1; data=0x%02X\n", data);
409409
410               //printf("%s %02x\n",pic8259->master ? "master pic8259 mask" : "slave pic8259 mask",data);
410411               pic8259->imr = data;
411412               break;
412413         }
trunk/src/mess/drivers/apc.c
r19044r19045
111111   DECLARE_READ8_MEMBER(apc_dma_r);
112112   DECLARE_WRITE8_MEMBER(apc_dma_w);
113113
114   UINT8 m_keyb_press, m_keyb_status;
115   DECLARE_INPUT_CHANGED_MEMBER(key_stroke);
116
114117   DECLARE_WRITE_LINE_MEMBER(apc_master_set_int_line);
115118   DECLARE_READ8_MEMBER(get_slave_ack);
116119   DECLARE_WRITE_LINE_MEMBER(apc_dma_hrq_changed);
r19044r19045
330333
331334READ8_MEMBER(apc_state::apc_kbd_r)
332335{
333   //printf("%08x\n",offset);
334   return 0;
336   UINT8 res;
337
338   switch(offset)
339   {
340      case 0: res = m_keyb_press; break;
341      case 1: res = m_keyb_status; break;
342      default:
343         res = 0;
344         //printf("KEYB %08x\n",offset);
345         break;
346   }
347
348   return res;
335349}
336350
337351WRITE8_MEMBER(apc_state::apc_kbd_w)
338352{
339   printf("%08x %02x\n",offset,data);
353   printf("KEYB %08x %02x\n",offset,data);
340354}
341355
342356WRITE8_MEMBER(apc_state::apc_dma_segments_w)
r19044r19045
395409//  ADDRESS_MAP_GLOBAL_MASK(0xff)
396410   AM_RANGE(0x00, 0x1f) AM_READWRITE8(apc_dma_r, apc_dma_w,0xff00)
397411   AM_RANGE(0x20, 0x23) AM_DEVREADWRITE8_LEGACY("pic8259_master", pic8259_r, pic8259_w, 0x00ff) // i8259
398   AM_RANGE(0x28, 0x2f) AM_READWRITE8(apc_port_28_r, apc_port_28_w, 0xffff)
412   AM_RANGE(0x28, 0x2f) AM_READWRITE8(apc_port_28_r, apc_port_28_w, 0xffff) // i8259 (even) / pit8253 (odd)
399413//  0x30, 0x37 serial port 0/1 (i8251) (even/odd)
400414   AM_RANGE(0x38, 0x3f) AM_WRITE8(apc_dma_segments_w,0x00ff)
401415   AM_RANGE(0x40, 0x43) AM_READWRITE8(apc_gdc_r, apc_gdc_w, 0xffff)
r19044r19045
410424//  AM_DEVREADWRITE8("upd7220_btm", upd7220_device, read, write, 0x00ff)
411425ADDRESS_MAP_END
412426
427/* TODO: key repeat, remove port impulse! */
428INPUT_CHANGED_MEMBER(apc_state::key_stroke)
429{
430   if(newval && !oldval)
431   {
432      m_keyb_press = (UINT8)(FPTR)(param) & 0xff;
433      //m_keyb_status |= 1; //TODO: what this really signals? busy?
434      pic8259_ir4_w(machine().device("pic8259_master"), 1);
435   }
436
437   if(oldval && !newval)
438   {
439      m_keyb_press = 0;
440      m_keyb_status &= ~1;
441      pic8259_ir4_w(machine().device("pic8259_master"), 0);
442   }
443}
444
445
413446static INPUT_PORTS_START( apc )
447   PORT_START("KEY0")
448   PORT_BIT(0x01,IP_ACTIVE_HIGH,IPT_UNUSED)
449   PORT_BIT(0x02,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("1") PORT_CODE(KEYCODE_1) PORT_CHAR('1') PORT_IMPULSE(1) PORT_CHANGED_MEMBER(DEVICE_SELF, apc_state, key_stroke, 0x31)
450   PORT_BIT(0x04,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("2") PORT_CODE(KEYCODE_2) PORT_CHAR('2') PORT_IMPULSE(1) PORT_CHANGED_MEMBER(DEVICE_SELF, apc_state, key_stroke, 0x32)
451   PORT_BIT(0x08,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("3") PORT_CODE(KEYCODE_3) PORT_CHAR('3') PORT_IMPULSE(1) PORT_CHANGED_MEMBER(DEVICE_SELF, apc_state, key_stroke, 0x33)
452   PORT_BIT(0x10,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("4") PORT_CODE(KEYCODE_4) PORT_CHAR('4') PORT_IMPULSE(1) PORT_CHANGED_MEMBER(DEVICE_SELF, apc_state, key_stroke, 0x34)
453   PORT_BIT(0x20,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("5") PORT_CODE(KEYCODE_5) PORT_CHAR('5') PORT_IMPULSE(1) PORT_CHANGED_MEMBER(DEVICE_SELF, apc_state, key_stroke, 0x35)
454   PORT_BIT(0x40,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("6") PORT_CODE(KEYCODE_6) PORT_CHAR('6') PORT_IMPULSE(1) PORT_CHANGED_MEMBER(DEVICE_SELF, apc_state, key_stroke, 0x36)
455   PORT_BIT(0x80,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("7") PORT_CODE(KEYCODE_7) PORT_CHAR('7') PORT_IMPULSE(1) PORT_CHANGED_MEMBER(DEVICE_SELF, apc_state, key_stroke, 0x37)
456
457   PORT_START("KEY1")
458   PORT_BIT(0x01,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("BREAK") PORT_CODE(KEYCODE_ESC) PORT_IMPULSE(1) PORT_CHANGED_MEMBER(DEVICE_SELF, apc_state, key_stroke, 0x96)
459
460
414461   /* dummy active high structure */
415462   PORT_START("SYSA")
416463   PORT_DIPNAME( 0x01, 0x00, "SYSA" )
r19044r19045
480527   pic8259_ir3_w(machine().device("pic8259_slave"), state);
481528}
482529
530static IRQ_CALLBACK(irq_callback)
531{
532   return pic8259_acknowledge( device->machine().device( "pic8259_master" ));
533}
534
483535void apc_state::machine_start()
484536{
537   machine().device("maincpu")->execute().set_irq_acknowledge_callback(irq_callback);
538
485539   m_fdc->set_rate(500000);
486540   m_fdc->setup_intrq_cb(upd765a_device::line_cb(FUNC(apc_state::fdc_irq), this));
487541   m_fdc->setup_drq_cb(upd765a_device::line_cb(FUNC(apc_state::fdc_drq), this));
r19044r19045
489543
490544void apc_state::machine_reset()
491545{
546   m_keyb_status = m_keyb_press = 0;
492547}
493548
494549
r19044r19045
568623irq assignment:
569624
5706258259 master:
571ir0
626ir0 (enabled at POST, unknown purpose)
572627ir1
573628ir2
574ir3
629ir3 (enabled after CP/M loading, serial?)
575630ir4 keyboard (almost trusted, check code at fe64a)
576631ir5
577632ir6
r19044r19045
588643ir7
589644*/
590645
591
592646WRITE_LINE_MEMBER(apc_state::apc_master_set_int_line)
593647{
594648   //printf("%02x\n",interrupt);
649//   printf("irq %d\n",state);
595650   machine().device("maincpu")->execute().set_input_line(0, state ? HOLD_LINE : CLEAR_LINE);
596651}
597652

Previous 199869 Revisions Next


© 1997-2024 The MAME Team