OSDN Git Service

[VM][Qt][UI][EMU][WIP] Use EMU_TEMPLATE:: instead of EMU:: . Some VMs are not apply...
[csp-qt/common_source_project-fm7.git] / source / src / vm / fmtowns / keyboard.h
1 /*
2         FUJITSU FMR-50 Emulator 'eFMR-50'
3         FUJITSU FMR-60 Emulator 'eFMR-60'
4
5         Author : Takeda.Toshiya
6         Date   : 2008.05.01 -
7
8         [ keyboard ]
9 */
10
11 #ifndef _KEYBOARD_H_
12 #define _KEYBOARD_H_
13
14 #include "../vm.h"
15 #include "../../emu.h"
16 #include "../device.h"
17 #include "../../fifo.h"
18
19 /*
20         BREAK                           Pause Break
21         ひらがな/ローマ字       ひらがな
22         半角/全角                   半角/全角
23         変換                          変換
24         無変換                               無変換
25         かな/漢字                   F11
26         カタカナ                    F12
27         前行                          PgUp
28         次行                          PgDn
29         実行                          Right WIN
30         取消                          Left WIN
31         漢字 辞書                 RALT + Print Screen
32         単語 抹消                 RALT + Scroll Lock
33         単語 登録                 RALT + Pause
34         COPY                            Print Screen
35         PF11                            RALT + F1
36         PF12                            RALT + F2
37         PF13                            RALT + F3
38         PF14                            RALT + F4
39         PF15                            RALT + F5
40         PF16                            RALT + F6
41         PF17                            RALT + F7
42         PF18                            RALT + F8
43         PF19                            RALT + F9
44         PF20                            RALT + F10
45         ALT                                     LALT
46 */
47 namespace FMTOWNS {
48 /* 
49  * From 
50  * http://www.nurs.or.jp/~kurati/towns/scancode.html
51  * and http://m0115.web.fc2.com/fmr60kb212.jpg :
52  * TOWNS の ScanCode
53            +0           +1              +2              +3              +4              +5              +6              +7
54 0x00                    ESC             1               2               3               4               5               6
55 0x08    7               8               9               0               -               =               \               後退
56 0x10    TAB             Q               W               E               R               T               Y               U
57 0x18    I               O               P               @               [               改行  A               S
58 0x20    D               F               G               H               J               K               L               :
59 0x28    ;               ]               Z               X               C               V               B               N
60 0x30    M               ,               .               /               "               空白  [KP]*   [KP]/
61 0x38    [KP]+   [KP]-   [KP]7   [KP]8   [KP]9   [KP]=   [KP]4   [KP]5
62 0x40    [KP]6   ---             [KP]1   [KP]2   [KP]3   [KP]改行[KP]0 [KP].
63 0x48    INS             ---             [KP]0   DEL             ---             ↑             HOME    ←
64 0x50    ↓             →             CTRL    SHIFT   ---             CAPS    LANG    ALT
65 0x58    CTRL    SPACE   LANG    F12             ALT             F1              F2              F3
66 0x60    F4              F5              F6              F7              F8              F9              F10             ---
67 0x68    ---             F11             英字  辞書  抹消  登録  前行  ---
68 0x70    次行  半/全 END             実行  F13             F14             F15             F16
69 0x78    F17             F18             F19             F20                                             
70 */
71 static const int key_table[256] = {
72 /*      VK -> RAW code table                    +8                                           */
73         0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x10,0x00,0x00,0x00,0x1D,0x00,0x00,/*0x*/
74         0x53,0x52,0x00,0x7C,0x55,0x56,0x00,0x00,0x00,0x71,0x00,0x01,0x58,0x57,0x00,0x00,/*1x*/
75         0x35,0x70,0x6E,0x00,0x4E,0x4F,0x4D,0x51,0x50,0x00,0x7D,0x00,0x00,0x48,0x4B,0x00,/*2x*/
76         0x0B,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x00,0x00,0x00,0x00,0x00,0x00,/*3x*/
77         0x00,0x1E,0x2E,0x2C,0x20,0x13,0x21,0x22,0x23,0x18,0x24,0x25,0x26,0x30,0x2F,0x19,/*4x*/
78         0x1A,0x11,0x14,0x1F,0x15,0x17,0x2D,0x12,0x2B,0x16,0x2A,0x72,0x73,0x00,0x00,0x00,/*5x*/
79         0x46,0x42,0x43,0x44,0x3E,0x3F,0x40,0x3A,0x3B,0x3C,0x36,0x38,0x00,0x39,0x47,0x37,/*6x*/
80         0x5D,0x5E,0x5F,0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x59,0x5a,0x74,0x75,0x76,0x77,/*7x*/
81         0x78,0x79,0x7A,0x7B,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*8x*/
82         0x00,0x6C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*9x*/
83         0x00,0x00,0x00,0x00,0x5C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*ax*/
84         0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x28,0x27,0x31,0x0C,0x32,0x33,/*bx*/
85         0x1b,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*cx*/
86         0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1C,0x0E,0x29,0x0D,0x00,/*dx*/
87         0x00,0x00,0x34,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*ex*/
88         0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 /*fx*/
89 };
90 }
91
92 class FIFO;
93
94 namespace FMTOWNS {
95 class KEYBOARD : public DEVICE
96 {
97 protected:
98         outputs_t output_intr_line;
99         outputs_t output_nmi_line;
100         
101         FIFO *key_buf;
102         FIFO *cmd_buf;
103         
104         uint8_t kbstat, kbdata, kbint, kbmsk;
105         int repeat_start_ms;
106         int repeat_tick_ms;
107         bool enable_double_pressed_cursor;
108         bool device_order;
109         
110         bool nmi_status;
111         uint8_t table[256];
112
113         int event_keycode;
114         
115         virtual void do_common_command(uint8_t cmd);
116         void register_key_interrupt(bool first);
117
118 public:
119         KEYBOARD(VM_TEMPLATE* parent_vm, EMU_TEMPLATE* parent_emu) : DEVICE(parent_vm, parent_emu)
120         {
121                 key_buf = NULL;
122                 cmd_buf = NULL;
123                 
124                 initialize_output_signals(&output_intr_line);
125                 initialize_output_signals(&output_nmi_line);
126                 set_device_name(_T("FM-Towns Keyboard (JIS)"));
127         }
128         ~KEYBOARD() {}
129         
130         // common functions
131         void initialize();
132         void release();
133         void reset();
134         void __FASTCALL write_io8(uint32_t addr, uint32_t data);
135         uint32_t __FASTCALL read_io8(uint32_t addr);
136         void event_callback(int event_id, int err);
137         bool process_state(FILEIO* state_fio, bool loading);
138         
139         // unique functions
140         void set_context_intr_line(DEVICE* dev, int id, uint32_t mask)
141         {
142                 register_output_signal(&output_intr_line, dev, id, mask);
143         }
144         void set_context_nmi_line(DEVICE* dev, int id, uint32_t mask)
145         {
146                 register_output_signal(&output_nmi_line, dev, id, mask);
147         }
148         void key_down(int code);
149         void key_up(int code);
150 };
151 }
152
153 #endif