OSDN Git Service

[BUILD][Qt][WIN32] Build environment with MINGW / Qt, with GNU/Linux host, but, still...
[csp-qt/common_source_project-fm7.git] / source / src / vm / fm7 / fm7_keyboard.h
1 /*
2  * FM-7 Keyboard [fm7_keyboard.h]
3  *
4  * Author: K.Ohta <whatisthis.sowhat _at_ gmail.com>
5  * License: GPLv2
6  * History:
7  *   Mar 11, 2015 : Initial
8  *
9  */
10
11 #ifndef _VM_FM7_KEYBOARD_H_
12 #define _VM_FM7_KEYBOARD_H_
13
14 #include "../device.h"
15 #include "../memory.h"
16 #include "../../fileio.h"
17
18 #include "fm7_common.h"
19 #if defined(_USE_QT)
20 # include "qt_input.h"
21 #endif
22
23 #if defined(_FM77AV_VARIANTS)  
24 class BEEP;
25 #endif
26 class KEYBOARD : public DEVICE {
27  protected:
28         VM* p_vm;
29         EMU* p_emu;
30         uint8 get_keycode_high(void);
31         uint8 get_keycode_low(void);
32         void turn_on_ins_led(void);
33         void turn_off_ins_led(void);
34         
35         outputs_t caps_led;
36         outputs_t kana_led;
37         outputs_t ins_led;
38 #if defined(_FM77AV_VARIANTS)  
39         outputs_t rxrdy;
40         outputs_t key_ack;
41 #endif
42         outputs_t break_line;
43         outputs_t int_line;
44
45         uint32 keycode_7;
46         int keymode;
47  private:
48         bool ctrl_pressed; 
49         bool lshift_pressed; 
50         bool rshift_pressed; 
51         bool shift_pressed; 
52         bool graph_pressed;
53         bool caps_pressed;
54         bool kana_pressed;
55         bool break_pressed;
56         uint8 read_data_reg(void);
57         uint8 read_stat_reg(void);
58         
59         int event_keyrepeat;
60         int event_key_rtc;
61         uint8 repeat_keycode;
62         bool key_pressed_flag[0x70];
63         uint32 scancode;
64         
65         uint8 datareg;
66         uint32 older_vk;
67 #if defined(_FM77AV_VARIANTS)
68         cur_time_t cur_time; 
69         uint8 rtc_yy;
70         uint8 rtc_mm;
71         uint8 rtc_dd;
72         bool  rtc_count24h;
73         uint8 rtc_dayofweek;
74         bool  rtc_ispm;
75         uint8 rtc_hour;
76         uint8 rtc_minute;
77         uint8 rtc_sec;
78         bool rtc_set;
79         bool rtc_set_flag;
80         bool rxrdy_status;
81         bool key_ack_status;
82         int cmd_phase;
83         FIFO *cmd_fifo;
84         FIFO *data_fifo;
85         int event_hidden1_av;
86         uint16 hidden1_ptr;
87
88         DEVICE *beep;
89         bool did_hidden_message_av_1;
90 #endif
91         FIFO *key_fifo;
92         int event_int;
93    
94         uint16 vk2scancode(uint32 vk);
95         bool isModifier(uint16 scancode);
96         void set_modifiers(uint16 scancode, bool flag);
97         uint16 scan2fmkeycode(uint16 scancode);
98         void do_repeatkey(uint16 scancode);
99         void reset_unchange_mode(void);
100         void key_down_main(void);
101    
102 #if defined(_FM77AV_VARIANTS)   
103         void set_mode(void);
104         void get_mode(void);
105         void set_leds(void);
106         void get_leds(void);
107         void set_repeat_type(void);
108         void set_repeat_time(void);
109         void set_rtc(void);
110         void get_rtc(void);
111         void rtc_count(void);
112         void adjust_rtc(void);
113         void do_digitize(void) {};
114         void set_screen_mode(void) {};
115         void get_screen_mode(void) {};
116         void set_brightness(void) {};
117 #endif
118         bool repeat_mode;
119         int repeat_time_short;
120         int repeat_time_long;
121         
122  public:
123         KEYBOARD(VM *parent_vm, EMU *parent_emu);
124         ~KEYBOARD();
125    
126         void key_up(uint32 vk);
127         void key_down(uint32 vk);
128         void event_callback(int event_id, int err);
129         void write_signal(int id, uint32 data, uint32 mask);
130         uint32 read_signal(int id);
131
132         uint32 read_data8(uint32 addr);
133         void write_data8(uint32 addr, uint32 data);
134         void reset(void);
135         void release(void);
136         void save_state(FILEIO *f);
137         bool load_state(FILEIO *f);
138
139         void set_context_rxrdy(DEVICE *p, int id, uint32 mask) {
140 #if defined(_FM77AV_VARIANTS)  
141                 register_output_signal(&rxrdy, p, id, mask);
142 #endif
143         }
144         void set_context_key_ack(DEVICE *p, int id, uint32 mask) {
145 #if defined(_FM77AV_VARIANTS)  
146                 register_output_signal(&key_ack, p, id, mask);
147 #endif
148         }
149         void set_context_caps_led(DEVICE *p, int id, uint32 mask) {
150                 register_output_signal(&caps_led, p, id, mask);
151         }
152         void set_context_kana_led(DEVICE *p, int id, uint32 mask) {
153                 register_output_signal(&kana_led, p, id, mask);
154         }
155         void set_context_ins_led(DEVICE *p, int id, uint32 mask) {
156                 register_output_signal(&ins_led, p, id, mask);
157         }
158         void set_context_break_line(DEVICE *p, int id, uint32 mask) {
159                 register_output_signal(&break_line, p, id, mask);
160         }
161         void set_context_int_line(DEVICE *p, int id, uint32 mask) {
162                 register_output_signal(&int_line, p, id, mask);
163         }
164 #if defined(_FM77AV_VARIANTS)  
165         void set_context_beep(DEVICE *p) {
166                 beep = p;
167         }
168 #endif
169 };
170
171
172          
173 #endif