OSDN Git Service

[VM] TRY:Use namespace {VMNAME} to separate around VMs. This feature still apply...
[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
20 #if defined(_FM77AV_VARIANTS)  
21 class BEEP;
22 #endif
23
24 namespace FM7 {
25 class KEYBOARD : public DEVICE {
26  protected:
27         uint8_t get_keycode_high(void);
28         uint8_t get_keycode_low(void);
29         void turn_on_ins_led(void);
30         void turn_off_ins_led(void);
31         
32 #if defined(_FM77AV_VARIANTS)  
33         outputs_t rxrdy;
34         outputs_t key_ack;
35 #endif
36         outputs_t break_line;
37         outputs_t int_line;
38
39         uint32_t keycode_7;
40         int keymode;
41 private:
42         bool ctrl_pressed; 
43         bool lshift_pressed; 
44         bool rshift_pressed; 
45         bool shift_pressed; 
46         bool graph_pressed;
47         bool caps_pressed;
48         bool kana_pressed;
49         bool break_pressed;
50
51         bool ins_led_status;
52         bool kana_led_status;
53         bool caps_led_status;
54         uint8_t read_data_reg(void);
55         uint8_t read_stat_reg(void);
56         
57         int event_keyrepeat;
58         int event_key_rtc;
59         
60         uint8_t scancode;
61         uint8_t autokey_backup;
62         uint8_t repeat_keycode;
63         
64         uint8_t datareg;
65         uint32_t older_vk;
66         bool override_break_key;
67         
68 #if defined(_FM77AV_VARIANTS)
69         dll_cur_time_t cur_time; 
70         uint8_t rtc_yy;
71         uint8_t rtc_mm;
72         uint8_t rtc_dd;
73         bool  rtc_count24h;
74         uint8_t rtc_dayofweek;
75         bool  rtc_ispm;
76         uint8_t rtc_hour;
77         uint8_t rtc_minute;
78         uint8_t rtc_sec;
79         bool rtc_set;
80         bool rtc_set_flag;
81         bool rxrdy_status;
82         bool key_ack_status;
83         int cmd_phase;
84         FIFO *cmd_fifo;
85         FIFO *data_fifo;
86         int event_hidden1_av;
87         uint16_t hidden1_ptr;
88
89         DEVICE *beep;
90         bool did_hidden_message_av_1;
91         int beep_phase;
92 #endif
93         FIFO *key_fifo;
94         int event_int;
95    
96         uint16_t vk2scancode(uint32_t vk);
97         bool isModifier(uint8_t sc);
98         void set_modifiers(uint8_t sc, bool flag);
99         uint16_t scan2fmkeycode(uint8_t sc);
100         void do_repeatkey(uint8_t sc);
101         void reset_unchange_mode(void);
102         void key_down_main(bool repeat_auto_key);
103         void key_up_main(uint8_t bak_scancode);
104    
105 #if defined(_FM77AV_VARIANTS)   
106         void set_mode(void);
107         void get_mode(void);
108         void set_leds(void);
109         void get_leds(void);
110         void set_repeat_type(void);
111         void set_repeat_time(void);
112         void set_rtc(void);
113         void get_rtc(void);
114         void rtc_count(void);
115         void adjust_rtc(void);
116         void do_digitize(void) {};
117         void set_screen_mode(void) {};
118         void get_screen_mode(void) {};
119         void set_brightness(void) {};
120 #endif
121         bool repeat_mode;
122         int repeat_time_short;
123         int repeat_time_long;
124         
125  public:
126         KEYBOARD(VM_TEMPLATE* parent_vm, EMU *parent_emu);
127         ~KEYBOARD();
128    
129         void key_up(uint32_t vk);
130         void key_down(uint32_t vk);
131         bool get_caps_locked()
132         {
133                 return caps_pressed;
134         }
135         bool get_kana_locked()
136         {
137                 return kana_pressed;
138         }
139         void event_callback(int event_id, int err);
140         void write_signal(int id, uint32_t data, uint32_t mask);
141         uint32_t read_signal(int id);
142
143         uint32_t read_data8(uint32_t addr);
144         void write_data8(uint32_t addr, uint32_t data);
145         void reset(void);
146         void release(void);
147         bool decl_state(FILEIO *state_fio, bool loading);
148         void save_state(FILEIO *f);
149         bool load_state(FILEIO *f);
150         void set_context_rxrdy(DEVICE *p, int id, uint32_t mask) {
151 #if defined(_FM77AV_VARIANTS)  
152                 register_output_signal(&rxrdy, p, id, mask);
153 #endif
154         }
155         void set_context_key_ack(DEVICE *p, int id, uint32_t mask) {
156 #if defined(_FM77AV_VARIANTS)  
157                 register_output_signal(&key_ack, p, id, mask);
158 #endif
159         }
160         void set_context_break_line(DEVICE *p, int id, uint32_t mask) {
161                 register_output_signal(&break_line, p, id, mask);
162         }
163         void set_context_int_line(DEVICE *p, int id, uint32_t mask) {
164                 register_output_signal(&int_line, p, id, mask);
165         }
166 #if defined(_FM77AV_VARIANTS)  
167         void set_context_beep(DEVICE *p) {
168                 beep = p;
169         }
170 #endif
171 };
172
173 }
174          
175 #endif