|
|
1.1 root 1: //
2: // nono
1.1.1.4 ! root 3: // Copyright (C) 2020 nono project
! 4: // Licensed under nono-license.txt
1.1 root 5: //
6:
7: #pragma once
8:
9: #include "device.h"
10:
11: class Keyboard : public Device
12: {
1.1.1.4 ! root 13: using inherited = Device;
1.1 root 14: protected:
15: Keyboard();
16: public:
1.1.1.4 ! root 17: ~Keyboard() override;
1.1 root 18:
19: // キーを押した
20: virtual void MakeKey(uint) = 0;
21: // キーを離した
22: virtual void BreakKey(uint) = 0;
23:
1.1.1.2 root 24: // マウス入力
25: // x, y は X, Y の前回からの移動量。
26: // X は画面右に動く方向をプラス、Y は画面下に動く方向をプラスとする。
27: // 移動量が VM で扱える範囲内か、それを越えていたらどうするかは
28: // 継承クラスが処理する。
29: // rb, lb, mb はボタンの状態。true なら押下中。
30: virtual void MouseInput(int x, int y, bool rb, bool lb, bool mb) = 0;
31:
1.1.1.4 ! root 32: // ホストからの制御コマンド
! 33: virtual void Command(uint32 data) = 0;
! 34:
! 35: // LED 状態取得 (ソフトウェアキーボードなどから)
! 36: const std::vector<bool>& GetLED() const { return led; }
! 37:
1.1 root 38: // キー名を返す (主にデバッグ表示用)
39: static const std::string GetName(uint code);
40:
1.1.1.4 ! root 41: protected:
! 42: // LED (true で点灯)。
! 43: // GetLED() あたりが同じ形式で済むのでここにあるけど、機種によって
! 44: // LED 数が違うので、何番がどのキーに対応するかの取り決めや、初期化も
! 45: // 含めたコードはすべて派生クラス側で用意すること。
! 46: std::vector<bool> led {};
! 47:
1.1 root 48: private:
49: static std::vector<const char *> keyname;
50: };
51:
1.1.1.3 root 52: extern std::unique_ptr<Keyboard> gKeyboard;
1.1 root 53:
54: // 抽象化キーボードレイヤーでのキーコード。
55: // wxWidgets で受け取ったキーコードをこれに変換して VM に入力する。
56: // VM のキーボードデバイスがこれを当該機種ごとのキーコードなり何なりに
57: // 変換して入力する。
58:
59: #define KC_none (0)
60:
61: #define KC_BREAK (0x01) // [X68k] BREAK
62: #define KC_COPY (0x02) // [X68k] COPY
63: #define KC_romaji (0x03) // [X68k] ローマ字
64: #define KC_code (0x04) // [X68k] コード入力
65: #define KC_kigou (0x05) // [X68k] 記号入力
66: #define KC_touroku (0x06) // [X68k] 登録
67: #define KC_HELP (0x07) // [X68k] HELP
68: #define KC_HOME (0x08) // [X68k] HOME
69: #define KC_TAB (0x09)
70: #define KC_CTRL (0x0a)
71: #define KC_kana (0x0b) // かな
72: #define KC_SHIFT_L (0x0c) // SHIFT(左)
73: #define KC_SHIFT_R (0x0d) // SHIFT(右)
74: #define KC_SHIFT KC_SHIRT_L // 区別がない場合は L のほうを使う
75: #define KC_CAPS (0x0e)
76: #define KC_SF (0x0f) // [LUNA] S.F
77:
78: #define KC_ESC (0x10)
79: #define KC_BS (0x11) // BackSpace
80: #define KC_enter (0x12) // Enter (Return)
81: #define KC_INS (0x13) // [X68k] INS
82: #define KC_space (0x14)
83: #define KC_DEL (0x15)
84: #define KC_XFER (0x16) // [LUNA] XFER
85: #define KC_VALID (0x17) // [LUNA] VALID
86: #define KC_PF11 (0x18) // [LUNA] PF11
87: #define KC_PF12 (0x19) // [LUNA] PF12
88: #define KC_PF13 (0x1a) // [LUNA] PF13
89: #define KC_PF14 (0x1b) // [LUNA] PF14
90: #define KC_up (0x1c) // cursor up
91: #define KC_left (0x1d) // cursor left
92: #define KC_right (0x1e) // cursor right
93: #define KC_down (0x1f) // cursor down
94:
95: #define KC_ROLLUP (0x20) // [X68k] ROLL UP
96: #define KC_ROLLDOWN (0x21) // [X68k] ROLL DOWN
97: #define KC_1 (0x22)
98: #define KC_2 (0x23)
99: #define KC_3 (0x24)
100: #define KC_4 (0x25)
101: #define KC_5 (0x26)
102: #define KC_6 (0x27)
103: #define KC_7 (0x28)
104: #define KC_8 (0x29)
105: #define KC_9 (0x2a)
106: #define KC_0 (0x2b)
107: #define KC_minus (0x2c)
108: #define KC_circum (0x2d) // ^~
109: #define KC_backslash (0x2e) // \|
110: #define KC_UNDO (0x2f) // [X68k] UNDO
111:
112: #define KC_OPT1 (0x30) // [X68k] OPT.1
113: #define KC_OPT2 (0x31) // [X68k] OPT.2
114: #define KC_Q (0x32)
115: #define KC_W (0x33)
116: #define KC_E (0x34)
117: #define KC_R (0x35)
118: #define KC_T (0x36)
119: #define KC_Y (0x37)
120: #define KC_U (0x38)
121: #define KC_I (0x39)
122: #define KC_O (0x3a)
123: #define KC_P (0x3b)
124: #define KC_at (0x3c)
125: #define KC_bracketleft (0x3d) // '['
126: #define KC_hira (0x3e) // [X68k] ひらがな
127: #define KC_zenkaku (0x3f) // [X68k] 全角
128:
129: #define KC_A (0x42)
130: #define KC_S (0x43)
131: #define KC_D (0x44)
132: #define KC_F (0x45)
133: #define KC_G (0x46)
134: #define KC_H (0x47)
135: #define KC_J (0x48)
136: #define KC_K (0x49)
137: #define KC_L (0x4a)
138: #define KC_semicolon (0x4b)
139: #define KC_colon (0x4c)
140: #define KC_bracketright (0x4d) // ']'
141:
142: #define KC_Z (0x52)
143: #define KC_X (0x53)
144: #define KC_C (0x54)
145: #define KC_V (0x55)
146: #define KC_B (0x56)
147: #define KC_N (0x57)
148: #define KC_M (0x58)
149: #define KC_comma (0x59)
150: #define KC_period (0x5a)
151: #define KC_slash (0x5b)
152: #define KC_underscore (0x5c)
153:
154: #define KC_PAD_plus (0x61)
155: #define KC_PAD_minus (0x62)
156: #define KC_PAD_7 (0x63)
157: #define KC_PAD_8 (0x64)
158: #define KC_PAD_9 (0x65)
159: #define KC_PAD_4 (0x66)
160: #define KC_PAD_5 (0x67)
161: #define KC_PAD_6 (0x68)
162: #define KC_PAD_1 (0x69)
163: #define KC_PAD_2 (0x6a)
164: #define KC_PAD_3 (0x6b)
165: #define KC_PAD_0 (0x6c)
166: #define KC_PAD_decimal (0x6d) // .
167: #define KC_PAD_enter (0x6e)
168: #define KC_PAD_CLR (0x6f) // [X68k] CLR
169:
170: #define KC_F1 (0x72)
171: #define KC_F2 (0x73)
172: #define KC_F3 (0x74)
173: #define KC_F4 (0x75)
174: #define KC_F5 (0x76)
175: #define KC_F6 (0x77)
176: #define KC_F7 (0x78)
177: #define KC_F8 (0x79)
178: #define KC_F9 (0x7a)
179: #define KC_F10 (0x7b)
180: #define KC_PAD_multiply (0x7c)
181: #define KC_PAD_divide (0x7d)
182: #define KC_PAD_equal (0x7e)
183: #define KC_PAD_comma (0x7f)
184:
185: #define KC_XF1 (0x80) // [X68k] XF1
186: #define KC_XF2 (0x81) // [X68k] XF2
187: #define KC_XF3 (0x82) // [X68k] XF3
188: #define KC_XF4 (0x83) // [X68k] XF4
189: #define KC_XF5 (0x84) // [X68k] XF5
190:
191: #define KC_max (0x85)
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.