SHOW:
|
|
- or go back to the newest paste.
1 | #define __KEYBIOS_H__ | |
2 | #include "fxlib.h" | |
3 | #define KEY_CHAR_0 71 | |
4 | #define KEY_CHAR_1 72 | |
5 | - | #define KEY_CHAR_0 OS2(0x30,71) |
5 | + | #define KEY_CHAR_2 62 |
6 | - | #define KEY_CHAR_1 OS2(0x31,72) |
6 | + | #define KEY_CHAR_3 52 |
7 | - | #define KEY_CHAR_2 OS2(0x32,62) |
7 | + | #define KEY_CHAR_4 73 |
8 | - | #define KEY_CHAR_3 OS2(0x33,52) |
8 | + | #define KEY_CHAR_5 63 |
9 | - | #define KEY_CHAR_4 OS2(0x34,73) |
9 | + | #define KEY_CHAR_6 53 |
10 | - | #define KEY_CHAR_5 OS2(0x35,63) |
10 | + | #define KEY_CHAR_7 74 |
11 | - | #define KEY_CHAR_6 OS2(0x36,53) |
11 | + | #define KEY_CHAR_8 64 |
12 | - | #define KEY_CHAR_7 OS2(0x37,74) |
12 | + | #define KEY_CHAR_9 54 |
13 | - | #define KEY_CHAR_8 OS2(0x38,64) |
13 | + | #define KEY_CHAR_DP 61 |
14 | - | #define KEY_CHAR_9 OS2(0x39,54) |
14 | + | #define KEY_CHAR_EXP 51 |
15 | - | #define KEY_CHAR_DP OS2(0x2e,61) |
15 | + | #define KEY_CHAR_PMINUS 41 |
16 | - | #define KEY_CHAR_EXP OS2(0x0f,51) |
16 | + | #define KEY_CHAR_PLUS 42 |
17 | - | #define KEY_CHAR_PMINUS OS2(0x87,41) |
17 | + | #define KEY_CHAR_MINUS 32 |
18 | - | #define KEY_CHAR_PLUS OS2(0x89,42) |
18 | + | #define KEY_CHAR_MULT 43 |
19 | - | #define KEY_CHAR_MINUS OS2(0x99,32) |
19 | + | #define KEY_CHAR_DIV 33 |
20 | - | #define KEY_CHAR_MULT OS2(0xa9,43) |
20 | + | #define KEY_CHAR_FRAC 75 |
21 | - | #define KEY_CHAR_DIV OS2(0xb9,33) |
21 | + | #define KEY_CHAR_LPAR 55 |
22 | - | #define KEY_CHAR_FRAC OS2(0xbb,75) |
22 | + | #define KEY_CHAR_RPAR 45 |
23 | - | #define KEY_CHAR_LPAR OS2(0x28,55) |
23 | + | #define KEY_CHAR_COMMA 35 |
24 | - | #define KEY_CHAR_RPAR OS2(0x29,45) |
24 | + | #define KEY_CHAR_STORE 25 |
25 | - | #define KEY_CHAR_COMMA OS2(0x2c,35) |
25 | + | #define KEY_CHAR_LOG 66 |
26 | - | #define KEY_CHAR_STORE OS2(0x0e,25) |
26 | + | #define KEY_CHAR_LN 56 |
27 | - | #define KEY_CHAR_LOG OS2(0x95,66) |
27 | + | #define KEY_CHAR_SIN 46 |
28 | - | #define KEY_CHAR_LN OS2(0x85,56) |
28 | + | #define KEY_CHAR_COS 36 |
29 | - | #define KEY_CHAR_SIN OS2(0x81,46) |
29 | + | #define KEY_CHAR_TAN 26 |
30 | - | #define KEY_CHAR_COS OS2(0x82,36) |
30 | + | #define KEY_CHAR_SQUARE 67 |
31 | - | #define KEY_CHAR_TAN OS2(0x83,26) |
31 | + | #define KEY_CHAR_POW 57 |
32 | - | #define KEY_CHAR_SQUARE OS2(0x8b,67) |
32 | + | #define KEY_CTRL_EXE 31 |
33 | - | #define KEY_CHAR_POW OS2(0xa8,57) |
33 | + | #define KEY_CTRL_DEL 44 |
34 | - | #define KEY_CTRL_EXE OS2(30004,31) |
34 | + | #define KEY_CTRL_AC 32 |
35 | - | #define KEY_CTRL_DEL OS2(30025,44) |
35 | + | #define KEY_CTRL_FD 65 |
36 | - | #define KEY_CTRL_AC OS2(30015,32) |
36 | + | #define KEY_CTRL_EXIT 47 |
37 | - | #define KEY_CTRL_FD OS2(30046,65) |
37 | + | #define KEY_CTRL_SHIFT 78 |
38 | - | #define KEY_CTRL_EXIT OS2(30002,47) |
38 | + | #define KEY_CTRL_ALPHA 77 |
39 | - | #define KEY_CTRL_SHIFT OS2(30006,78) |
39 | + | #define KEY_CTRL_OPTN 68 |
40 | - | #define KEY_CTRL_ALPHA OS2(30007,77) |
40 | + | #define KEY_CTRL_VARS 58 |
41 | - | #define KEY_CTRL_OPTN OS2(30008,68) |
41 | + | #define KEY_CTRL_UP 28 |
42 | - | #define KEY_CTRL_VARS OS2(30016,58) |
42 | + | #define KEY_CTRL_DOWN 37 |
43 | - | #define KEY_CTRL_UP OS2(30018,28) |
43 | + | #define KEY_CTRL_LEFT 38 |
44 | - | #define KEY_CTRL_DOWN OS2(30023,37) |
44 | + | #define KEY_CTRL_RIGHT 27 |
45 | - | #define KEY_CTRL_LEFT OS2(30020,38) |
45 | + | #define KEY_CTRL_F1 79 |
46 | - | #define KEY_CTRL_RIGHT OS2(30021,27) |
46 | + | #define KEY_CTRL_F2 69 |
47 | - | #define KEY_CTRL_F1 OS2(30009,79) |
47 | + | #define KEY_CTRL_F3 59 |
48 | - | #define KEY_CTRL_F2 OS2(30010,69) |
48 | + | #define KEY_CTRL_F4 49 |
49 | - | #define KEY_CTRL_F3 OS2(30011,59) |
49 | + | #define KEY_CTRL_F5 39 |
50 | - | #define KEY_CTRL_F4 OS2(30012,49) |
50 | + | #define KEY_CTRL_F6 29 |
51 | - | #define KEY_CTRL_F5 OS2(30013,39) |
51 | + | #define KEY_CTRL_MENU 48 |
52 | - | #define KEY_CTRL_F6 OS2(30014,29) |
52 | + | #ifndef OS2Change |
53 | - | #define KEY_CTRL_MENU OS2(30003,48) |
53 | + | #define OS2Change |
54 | #ifndef OS2Change_GetOS2 | |
55 | - | #ifndef isOS2// This is new |
55 | + | #define OS2Change_GetOS2 |
56 | typedef int(*sc_i2cp2sip)(char*, char*, short int*, short int*); | |
57 | const unsigned int sc0015[] = { 0xD201D002, 0x422B0009, 0x80010070, 0x0015 }; | |
58 | #define GlibGetOSVersionInfo (*(sc_i2cp2sip)sc0015) | |
59 | int OSVersionAsInt(void) | |
60 | { | |
61 | unsigned char mainversion; | |
62 | unsigned char minorversion; | |
63 | unsigned short release; | |
64 | unsigned short build; | |
65 | GlibGetOSVersionInfo( &mainversion, &minorversion, &release, &build ); | |
66 | return ( ( mainversion << 24 ) & 0xFF000000 ) | ( ( minorversion << 16 ) & 0x00FF0000 ) | ( release & 0x0000FFFF ); | |
67 | } | |
68 | #define isOS2 (OSVersionAsInt() >= 0x02020000) | |
69 | #define OS2(x,y) ((OSVersionAsInt() >= 0x02020000)?y:x) | |
70 | #endif | |
71 | #ifndef OS2Change_Keyboard | |
72 | #define OS2Change_Keyboard | |
73 | void delay(void) | |
74 | { | |
75 | char i; | |
76 | for (i=0; i<5; i++){}; | |
77 | } | |
78 | - | unsigned short key[8] = {0}; |
78 | + | unsigned char CheckKeyRow(unsigned char code) |
79 | { | |
80 | - | int KeyDown(int keycode) |
80 | + | unsigned char result=0; |
81 | short*PORTB_CTRL=(void*)0xA4000102; | |
82 | short*PORTM_CTRL=(void*)0xA4000118; | |
83 | char*PORTB=(void*)0xA4000122; | |
84 | - | int row, col, word, bit; |
84 | + | char*PORTM=(void*)0xA4000138; |
85 | - | row = keycode%10; |
85 | + | char*PORTA=(void*)0xA4000120; |
86 | - | col = keycode/10-1; |
86 | + | short smask; |
87 | - | word = row>>1; |
87 | + | char cmask; |
88 | - | bit = col + 8*(row&1); |
88 | + | unsigned char column, row; |
89 | - | memcpy(key, keyboardregister, sizeof(unsigned short) << 3); |
89 | + | column = code>>4; |
90 | row = code &0x0F; | |
91 | - | Sleep(1); //slow down, this function is faster than IsKeyDown() :-P |
91 | + | smask = 0x0003 << (( row %8)*2); |
92 | cmask = ~( 1 << ( row %8) ); | |
93 | - | return (0 != (key[word] & 1<<bit)); |
93 | + | if(row <8) |
94 | { | |
95 | *PORTB_CTRL = 0xAAAA ^ smask; | |
96 | *PORTM_CTRL = (*PORTM_CTRL & 0xFF00 ) | 0x00AA; | |
97 | - | return IsKeyDown(keycode); |
97 | + | delay(); |
98 | *PORTB = cmask; | |
99 | *PORTM = (*PORTM & 0xF0 ) | 0x0F; | |
100 | } | |
101 | else | |
102 | - | #define IsKeyUp(x) !KeyDown(x) |
102 | + | |
103 | *PORTB_CTRL = 0xAAAA; | |
104 | *PORTM_CTRL = ((*PORTM_CTRL & 0xFF00 ) | 0x00AA) ^ smask; | |
105 | delay(); | |
106 | *PORTB = 0xFF; | |
107 | *PORTM = (*PORTM & 0xF0 ) | cmask; | |
108 | } | |
109 | ||
110 | delay(); | |
111 | result = (~(*PORTA))>>column & 1; | |
112 | delay(); | |
113 | *PORTB_CTRL = 0xAAAA; | |
114 | *PORTM_CTRL = (*PORTM_CTRL & 0xFF00 ) | 0x00AA; | |
115 | delay(); | |
116 | *PORTB_CTRL = 0x5555; | |
117 | *PORTM_CTRL = (*PORTM_CTRL & 0xFF00 ) | 0x0055; | |
118 | delay(); | |
119 | ||
120 | return result; | |
121 | } | |
122 | ||
123 | unsigned char KeyDown(unsigned char keycode) | |
124 | { | |
125 | unsigned short key[8]; | |
126 | const unsigned short* keyboardregister = (unsigned short*)0xA44B0000; | |
127 | if(isOS2) | |
128 | { | |
129 | unsigned char row = keycode%10; | |
130 | memcpy(key, keyboardregister, sizeof(unsigned short) << 3); | |
131 | ||
132 | return (0 != (key[row >> 1] & 1 << keycode / 10 - 1 + ((row & 1) << 3))); | |
133 | } | |
134 | else | |
135 | { | |
136 | return CheckKeyRow((keycode % 10) + ((keycode / 10 - 1) << 4)); | |
137 | } | |
138 | } | |
139 | unsigned char GetKeyMod(unsigned int *key) | |
140 | { | |
141 | unsigned char x, ret; | |
142 | ||
143 | ret = GetKey(key); | |
144 | ||
145 | for(x = 0; x < 80; x++) | |
146 | { | |
147 | if(KeyDown(x)) | |
148 | { | |
149 | *key = x; | |
150 | break; | |
151 | } | |
152 | } | |
153 | return ret; | |
154 | } | |
155 | #define IsKeyDown(x) KeyDown(x) | |
156 | #define IsKeyUp(x) !KeyDown(x) | |
157 | #define GetKey(x) GetKeyMod(x) | |
158 | #endif | |
159 | #endif |