Previous 15994 Revisions Next

r4232 Thursday 5th February, 2009 at 13:30:32 UTC by Dirk Best
[PX4] Fixed keyboard issues and added keyboard status LEDs
[src/mess/drivers]px4.c
[src/mess/layout]px4.lay

src/mess/layout/px4.lay
r4231r4232
11<?xml version="1.0"?>
22<mamelayout version="2">
3   <element name="background">
4   </element>
5   <element name="led" defstate="0">
6      <rect state="0">
7         <color red="0" green="0.2" blue="0" />
8      </rect>
9      <rect state="1">
10         <color red="0" green="0.8" blue="0" />
11      </rect>
12   </element>
313   <view name="LCD with square pixels">
14      <bezel element="background">
15         <bounds x="0" y="0" width="68" height="16" />
16      </bezel>
417      <screen index="0">
5         <bounds left="0" top="0" right="15" bottom="4" />
18         <bounds left="0" top="0" right="60" bottom="16" />
619      </screen>
20      <bezel name="led_0" element="led">
21         <bounds x="62" y="1" width="4" height="1" />
22      </bezel>
23      <bezel name="led_1" element="led">
24         <bounds x="62" y="3" width="4" height="1" />
25      </bezel>
26      <bezel name="led_2" element="led">
27         <bounds x="62" y="5" width="4" height="1" />
28      </bezel>
729   </view>
830</mamelayout>
src/mess/drivers/px4.c
r4231r4232
300300         px4->sior = 0xc1 | px4->interrupt_status;
301301         px4->interrupt_status = 0x00;
302302      }
303      else if (px4->key_status != 0x00)
303      else if (px4->key_status != 0xff)
304304      {
305305         px4->sior = px4->key_status;
306         px4->key_status = 0x00;
306         px4->key_status = 0xff;
307307      }
308308      else
309309      {
r4231r4232
483483static WRITE8_HANDLER( px4_ioctlr_w )
484484{
485485   logerror("%s: px4_ioctlr_w (0x%02x)\n", cpuexec_describe_context(space->machine), data);
486
487   output_set_value("led_0", BIT(data, 4)); /* caps lock */
488   output_set_value("led_1", BIT(data, 5)); /* num lock */
489   output_set_value("led_2", BIT(data, 6));
486490}
487491
488492
r4231r4232
510514   px4_state *px4 = field->port->machine->driver_data;
511515   UINT32 oldvalue = oldval * field->mask, newvalue = newval * field->mask;
512516   UINT32 delta = oldvalue ^ newvalue;
513   int i, scancode = 0, down = 0;
517   int i, scancode = 0xff, down = 0;
514518
515519   for (i = 0; i < 32; i++)
516520   {
517521      if (delta & (1 << i))
518522      {
519         down = (newvalue & (1 << i)) ? 0x00 : 0x10;
523         down = (newvalue & (1 << i)) ? 0x10 : 0x00;
520524         scancode = (int)param * 32 + i;
521525
522526         /* control keys */
523         if (scancode >= 0xa0)
527         if ((scancode & 0xa0) == 0xa0)
524528            scancode |= down;
525529
526530         logerror("upd7508: key callback, key=0x%02x\n", scancode);
r4231r4232
529533      }
530534   }
531535
532   if (down || scancode >= 0xa0)
536   if (down || (scancode & 0xa0) == 0xa0)
533537   {
534538      px4->key_status = scancode;
535539

Previous 15994 Revisions Next


© 1998-2018 The MESS Team