OSDN Git Service

[VM][FM7] Implementing keyboard.cpp .
[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
17 #include "fm7_common.h"
18
19
20 class KEYBOARD : public DEVICE {
21
22  protected:
23         VM* p_vm;
24         EMU* p_emu;
25    uint8 read_data_reg(void);
26    uint8 read_stat_reg(void);
27    uint8 get_keycode_high(void);
28    uint8 get_keycode_low(void);
29    void turn_on_ins_led(void);
30    void turn_off_ins_led(void);
31    
32    DEVICE *caps_led;
33    DEVICE *kana_led;
34    DEVICE *ins_led;
35    
36    DEVICE *rxrdy;
37    DEVICE *key_ack;
38
39    DEVICE *maincpu;
40    DEVICE *subcpu;
41    DEVICE *z80cpu;
42    
43    uint32 keycode_7;
44    int keymode;
45  private:
46    bool ctrl_pressed; 
47    bool lshift_pressed; 
48    bool rshift_pressed; 
49    bool shift_pressed; 
50    bool graph_pressed;
51    bool caps_pressed;
52    bool kana_pressed;
53    bool break_pressed;
54    
55    int event_ids[0x70];
56    bool key_pressed_flag[0x70];
57    
58    uint8 datareg;
59
60    uint16 vk2scancode(uint32 vk);
61    bool isModifier(uint16 scancode);
62    void set_modifiers(uint16 scancode, bool flag);
63    uint16 scan2fmkeycode(uint16 scancode);
64    void do_repeatkey(uint16 scancode);
65    void reset_keyboard(void);
66    void set_mode(void);
67    void get_mode(void);
68    void set_leds(void);
69    void get_leds(void);
70    void set_repeat_type(void);
71    void set_repeat_time(void);
72    void set_rtc(void);
73    void get_rtc(void);
74    void rtc_count(void);
75    void rtc_adjust(void);
76
77
78    FIFO *cmd_fifo;
79    FIFO *data_fifo;
80    DEVICE *display;
81    DEVICE *mainio;
82  public:
83    KEYBOARD(VM *parent_vm, EMU *parent_emu);
84    ~KEYBOARD();
85    
86    void key_up(uint32 vk);
87    void key_down(uint32 vk);
88    void event_callback(int event_id, int err);
89    void write_signal(int id, uint32 data, uint32 mask);
90    uint32 read_data8(uint32 addr);
91    void write_data8(uint32 addr, uint32 data);
92    
93    void set_context_display(DEVICE *p) {
94       display = p;
95    }
96    void set_context_maincpu(DEVICE *p) {
97       maincpu = p;
98    }
99    void set_context_subcpu(DEVICE *p) {
100       subcpu = p;
101    }
102    void set_context_z80cpu(DEVICE *p) {
103       subcpu = p;
104    }
105    void set_context_mainio(DEVICE *p) {
106       mainio = p;
107    }
108    void set_context_caps_led(DEVICE *p) {
109       caps_led = p;
110    }
111    void set_context_kana_led(DEVICE *p) {
112       kana_led = p;
113    }
114    void set_context_ins_led(DEVICE *p) {
115       ins_led = p;
116    }
117    
118 };
119
120
121          
122 #endif