1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
|
SH SERIES C/C++ Compiler (Ver. 6.0C) 02-Apr-2013 12:26:12 PAGE 1
************ OBJECT LISTING ************
FILE NAME: G:\Casio SDK\Projekte\Matris\key.c
SCT OFFSET CODE C LABEL INSTRUCTION OPERAND COMMENT
key.c 1 int OSVersionAsInt(void)
P 00000000 _OSVersionAsInt: ; function: OSVersionAsInt
; frame size=20
00000000 4F22 STS.L PR,@-R15
00000002 7FF0 ADD #-16,R15
key.c 2 {
key.c 3 unsigned char mainversion;
key.c 4 unsigned char minorversion;
key.c 5 unsigned short release;
key.c 6 unsigned short build;
key.c 7 GlibGetOSVersionInfo( &mainversion, &minorversion, &release, &build );
00000004 D333 MOV.L L259,R3 ; _GlibGetOSVersionInfo
00000006 67F3 MOV R15,R7
00000008 770C ADD #12,R7
0000000A 66F3 MOV R15,R6
0000000C 7608 ADD #8,R6
0000000E 65F3 MOV R15,R5
00000010 7504 ADD #4,R5
00000012 430B JSR @R3
00000014 64F3 MOV R15,R4
key.c 8 return ( ( mainversion << 24 ) & 0xFF000000 ) | ( ( minorversion << 16 ) & 0x00FF0000 ) | ( releas
+e & 0x0000FFFF );
00000016 60F0 MOV.B @R15,R0
00000018 D32F MOV.L L259+4,R3 ; H'FF000000
0000001A 600C EXTU.B R0,R0
0000001C D22F MOV.L L259+8,R2 ; H'00FF0000
0000001E 4028 SHLL16 R0
00000020 4018 SHLL8 R0
00000022 2039 AND R3,R0
00000024 6103 MOV R0,R1
00000026 84F4 MOV.B @(4,R15),R0
00000028 600C EXTU.B R0,R0
0000002A 4028 SHLL16 R0
0000002C 2029 AND R2,R0
0000002E 201B OR R1,R0
00000030 6103 MOV R0,R1
00000032 85F4 MOV.W @(8,R15),R0
00000034 600D EXTU.W R0,R0
key.c 9 }
00000036 7F10 ADD #16,R15
00000038 4F26 LDS.L @R15+,PR
0000003A 000B RTS
0000003C 201B OR R1,R0
key.c 10
key.c 11 #define isOS2 (OSVersionAsInt() >= 0x02020000)
key.c 12
key.c 13 const unsigned short* keyboardregister = (unsigned short*)0xA44B0000;
key.c 14
key.c 15 unsigned short key[8];
key.c 16
key.c 17 int KeyDown(int keycode)
0000003E _KeyDown: ; function: KeyDown
; frame size=32
; used runtime library name:
SH SERIES C/C++ Compiler (Ver. 6.0C) 02-Apr-2013 12:26:12 PAGE 2
SCT OFFSET CODE C LABEL INSTRUCTION OPERAND COMMENT
; __divls, __modls
0000003E 2FE6 MOV.L R14,@-R15
00000040 2FD6 MOV.L R13,@-R15
00000042 4F22 STS.L PR,@-R15
00000044 7FEC ADD #-20,R15
key.c 18 {
key.c 19 if(isOS2)
00000046 BFDB BSR _OSVersionAsInt
00000048 6E43 MOV R4,R14
0000004A D225 MOV.L L259+12,R2 ; H'02020000
0000004C 3023 CMP/GE R2,R0
0000004E 8B27 BF L255
key.c 20 {
key.c 21 int row, col, word, bit;
key.c 22
key.c 23 row = keycode%10;
00000050 D324 MOV.L L259+16,R3 ; __modls
00000052 E50A MOV #10,R5
00000054 61E3 MOV R14,R1
00000056 430B JSR @R3
00000058 6053 MOV R5,R0
0000005A 6403 MOV R0,R4
key.c 24 col = keycode/10-1;
0000005C D322 MOV.L L259+20,R3 ; __divls
0000005E 61E3 MOV R14,R1
00000060 430B JSR @R3
00000062 6053 MOV R5,R0
key.c 25 word = row>>1;
key.c 26 bit = col + 8*(row&1);
key.c 27
key.c 28 memcpy(&key, keyboardregister, 8 * sizeof(unsigned short));
00000064 D221 MOV.L L259+24,R2 ; _keyboardregister
00000066 6503 MOV R0,R5
00000068 75FF ADD #-1,R5
0000006A 6143 MOV R4,R1
0000006C 4121 SHAR R1
0000006E E301 MOV #1,R3
00000070 1F11 MOV.L R1,@(4,R15)
00000072 E610 MOV #16,R6
00000074 D11F MOV.L L259+32,R1 ; _memcpy
00000076 2439 AND R3,R4
00000078 4408 SHLL2 R4
0000007A 4400 SHLL R4
0000007C 345C ADD R5,R4
0000007E 2F42 MOV.L R4,@R15
00000080 D41B MOV.L L259+28,R4 ; _key
00000082 410B JSR @R1
00000084 6522 MOV.L @R2,R5
key.c 29
key.c 30 return (0 != (key[word] & 1<<bit));
00000086 E201 MOV #1,R2
00000088 50F1 MOV.L @(4,R15),R0
0000008A 4000 SHLL R0
0000008C D118 MOV.L L259+28,R1 ; _key
0000008E 001D MOV.W @(R0,R1),R0
00000090 63F2 MOV.L @R15,R3
00000092 600D EXTU.W R0,R0
SH SERIES C/C++ Compiler (Ver. 6.0C) 02-Apr-2013 12:26:12 PAGE 3
SCT OFFSET CODE C LABEL INSTRUCTION OPERAND COMMENT
00000094 423C SHAD R3,R2
00000096 2029 AND R2,R0
00000098 2008 TST R0,R0
0000009A 0029 MOVT R0
0000009C A015 BRA L257
0000009E CA01 XOR #1,R0
000000A0 L255:
key.c 31 }
key.c 32 else
key.c 33 {
key.c 34 unsigned char buffer[12];
key.c 35 KBD_PRGM_GetKey( buffer );
000000A0 D115 MOV.L L259+36,R1 ; _KBD_PRGM_GetKey
000000A2 6DF3 MOV R15,R13
000000A4 7D08 ADD #8,R13
000000A6 410B JSR @R1
000000A8 64D3 MOV R13,R4
key.c 36 return ( buffer[1] & 0x0F ) * 10 + ( ( buffer[2] & 0xF0 ) >> 4 ) == keycode;
000000AA 84D1 MOV.B @(1,R13),R0
000000AC 600C EXTU.B R0,R0
000000AE C90F AND #15,R0
000000B0 6303 MOV R0,R3
000000B2 4008 SHLL2 R0
000000B4 303C ADD R3,R0
000000B6 4000 SHLL R0
000000B8 6203 MOV R0,R2
000000BA E3FC MOV #-4,R3
000000BC 84D2 MOV.B @(2,R13),R0
000000BE 600C EXTU.B R0,R0
000000C0 C9F0 AND #240,R0
000000C2 403C SHAD R3,R0
000000C4 302C ADD R2,R0
000000C6 30E0 CMP/EQ R14,R0
000000C8 0029 MOVT R0
key.c 37 }
key.c 38 }
000000CA L257:
000000CA 7F14 ADD #20,R15
000000CC 4F26 LDS.L @R15+,PR
000000CE 6DF6 MOV.L @R15+,R13
000000D0 000B RTS
000000D2 6EF6 MOV.L @R15+,R14
000000D4 L259:
000000D4 <00000000> .DATA.L _GlibGetOSVersionInfo
000000D8 FF000000 .DATA.L H'FF000000
000000DC 00FF0000 .DATA.L H'00FF0000
000000E0 02020000 .DATA.L H'02020000
000000E4 <00000000> .DATA.L __modls
000000E8 <00000000> .DATA.L __divls
000000EC <00000000> .DATA.L _keyboardregister
000000F0 <00000000> .DATA.L _key
000000F4 <00000000> .DATA.L _memcpy
000000F8 <00000000> .DATA.L _KBD_PRGM_GetKey
key.c 39
D 00000000 _keyboardregister: ; static: keyboardregister
00000000 A44B0000 .DATA.L H'A44B0000
B 00000000 _key: ; static: key
SH SERIES C/C++ Compiler (Ver. 6.0C) 02-Apr-2013 12:26:12 PAGE 4
SCT OFFSET CODE C LABEL INSTRUCTION OPERAND COMMENT
00000000 00000010 .RES.W 8
SH SERIES C/C++ Compiler (Ver. 6.0C) 02-Apr-2013 12:26:12 PAGE 1
******** STATISTICS INFORMATION ********
********** ERROR INFORMATION ***********
NUMBER OF ERRORS: 0
NUMBER OF WARNINGS: 0
******* SOURCE LINE INFORMATION ********
COMPILED SOURCE LINE: 39
******* SECTION SIZE INFORMATION *******
PROGRAM SECTION (P): 000000FC Byte(s)
CONSTANT SECTION (C): 00000000 Byte(s)
DATA SECTION (D): 00000004 Byte(s)
BSS SECTION (B): 00000010 Byte(s)
TOTAL PROGRAM SIZE: 00000110 Byte(s)
********** LABEL INFORMATION ***********
NUMBER OF EXTERNAL REFERENCE SYMBOLS: 5
NUMBER OF EXTERNAL DEFINITION SYMBOLS: 4
NUMBER OF INTERNAL/EXTERNAL SYMBOLS: 12
*** COMMAND PARAMETER ***
-subcommand=C:\Users\Timo\AppData\Local\Temp\hmk46D1.tmp
|