OSDN Git Service

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