OSDN Git Service

[VM][General][WIP] Apply new (Upstream 2016-02-21) APIs to VMs.
[csp-qt/common_source_project-fm7.git] / source / src / vm / ys6464a / keyboard.cpp
1 /*
2         SHINKO SANGYO YS-6464A Emulator 'eYS-6464A'
3
4         Author : Takeda.Toshiya
5         Date   : 2009.12.30 -
6
7         [ keyboard ]
8 */
9
10 #include "keyboard.h"
11 #include "../i8255.h"
12
13 void KEYBOARD::initialize()
14 {
15         key_stat = emu->get_key_buffer();
16 }
17
18 void KEYBOARD::write_signal(int id, uint32 data, uint32 mask)
19 {
20         uint8 val = 0x0f;
21         
22         switch(data & 0xf0) {
23         case 0x80:
24                 if(key_stat[0x30]) val &= ~1;   // 0
25                 if(key_stat[0x34]) val &= ~2;   // 4
26                 if(key_stat[0x38]) val &= ~4;   // 8
27                 if(key_stat[0x43]) val &= ~8;   // c
28                 break;
29         case 0x90:
30                 if(key_stat[0x31]) val &= ~1;   // 1
31                 if(key_stat[0x35]) val &= ~2;   // 5
32                 if(key_stat[0x39]) val &= ~4;   // 9
33                 if(key_stat[0x44]) val &= ~8;   // d
34                 break;
35         case 0xa0:
36                 if(key_stat[0x32]) val &= ~1;   // 2
37                 if(key_stat[0x36]) val &= ~2;   // 6
38                 if(key_stat[0x41]) val &= ~4;   // a
39                 if(key_stat[0x45]) val &= ~8;   // e
40                 break;
41         case 0xb0:
42                 if(key_stat[0x33]) val &= ~1;   // 3
43                 if(key_stat[0x37]) val &= ~2;   // 7
44                 if(key_stat[0x42]) val &= ~4;   // b
45                 if(key_stat[0x46]) val &= ~8;   // f
46                 break;
47         case 0xc0:
48                 if(key_stat[0x70]) val &= ~1;   // wr inc
49                 if(key_stat[0x71]) val &= ~2;   // rd dec
50                 if(key_stat[0x72]) val &= ~4;   // rd inc
51                 if(key_stat[0x73]) val &= ~8;   // ad run
52                 break;
53         }
54         d_pio->write_signal(SIG_I8255_PORT_C, val, 0xf);
55 }
56