View difference between Paste ID: EUehzqBY and JfcFbBbg
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