OSDN Git Service

[VM] MEMORY:: class within some VM will change Foo_MEMORY:: to reduce misundestanding...
[csp-qt/common_source_project-fm7.git] / source / src / vm / fmr30 / keyboard.cpp
1 /*
2         FUJITSU FMR-30 Emulator 'eFMR-30'
3
4         Author : Takeda.Toshiya
5         Date   : 2008.12.31 -
6
7         [ keyboard ]
8 */
9
10 #include "keyboard.h"
11 #include "../i8251.h"
12
13 /*
14         \82Ð\82ç\82ª\82È/\83\8d\81[\83}\8e\9a       \82Ð\82ç\82ª\82È
15         \94¼\8ap/\91S\8ap               \94¼\8ap/\91S\8ap
16         \95Ï\8a·                    \95Ï\8a·
17         \96³\95Ï\8a·                  \96³\95Ï\8a·
18         \82©\82È/\8a¿\8e\9a
19         \83J\83^\83J\83i
20         \91O\8ds                    PgUp
21         \8e\9f\8ds                    PgDn
22         \8eÀ\8ds                    F12
23         \8eæ\8fÁ                    F11
24         COPY
25 */
26
27 static const int key_table[256] = {
28         0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x10,0x00,0x00,0x00,0x1D,0x00,0x00,
29         0x53,0x52,0x00,0x7C,0x55,0x52,0x00,0x00,0x00,0x71,0x00,0x01,0x58,0x57,0x00,0x00,
30         0x35,0x6E,0x70,0x00,0x4E,0x4F,0x4D,0x51,0x50,0x00,0x00,0x00,0x00,0x48,0x4B,0x00,
31         0x0B,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x00,0x00,0x00,0x00,0x00,0x00,
32         0x00,0x1E,0x2E,0x2C,0x20,0x13,0x21,0x22,0x23,0x18,0x24,0x25,0x26,0x30,0x2F,0x19,
33         0x1A,0x11,0x14,0x1F,0x15,0x17,0x2D,0x12,0x2B,0x16,0x2A,0x00,0x00,0x00,0x00,0x00,
34         0x46,0x42,0x43,0x44,0x3E,0x3F,0x40,0x3A,0x3B,0x3C,0x36,0x38,0x00,0x39,0x47,0x37,
35         0x5D,0x5E,0x5F,0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x72,0x73,0x00,0x00,0x00,0x00,
36         0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
37         0x00,0x7D,0x6B,0x6C,0x6D,0x57,0x58,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
38         0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
39         0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x28,0x27,0x31,0x0C,0x32,0x33,
40         0x28,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
41         0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1C,0x0E,0x29,0x0D,0x00,
42         0x00,0x00,0x34,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
43         0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
44 };
45
46 void KEYBOARD::reset()
47 {
48         memset(table, 0, sizeof(table));
49 }
50
51 void KEYBOARD::key_down(int code)
52 {
53 //      if(!table[code]) {
54                 table[code] = 1;
55                 if(code = key_table[code]) {
56                         // $11:CTRL, $10:SHIFT
57                         d_sio->write_signal(SIG_I8251_RECV, 0xa0 | (table[0x11] ? 8 : 0) | (table[0x10] ? 4 : 0), 0xff);
58                         d_sio->write_signal(SIG_I8251_RECV, code, 0xff);
59                 }
60 //      }
61 }
62
63 void KEYBOARD::key_up(int code)
64 {
65 //      if(table[code]) {
66                 table[code] = 0;
67                 if(code = key_table[code]) {
68                         d_sio->write_signal(SIG_I8251_RECV, 0xb0, 0xff);
69                         d_sio->write_signal(SIG_I8251_RECV, code, 0xff);
70                 }
71 //      }
72 }
73