📄 keyboard.lis
字号:
1103
1104 .globl P1DR
1105 .desc P1DR, 8bit register
1106 P1DR= 225
GAS LISTING C:\DOCUME~1\REF\LOCALS~1\Temp\cc001908.s page 25
1107
1108 .globl P6DR
1109 .desc P6DR, 8bit register
1110 P6DR= 251
1111
1112 .globl P5DR
1113 .desc P5DR, 8bit register
1114 P5DR= 229
1116
1117 .globl cols_poll
1118
1119 .desc cols_poll, near
1120 .proc cols_poll
1121 cols_poll:
348:../src/keyboard.c ****
349:../src/keyboard.c **** void cols_poll( void)
350:../src/keyboard.c **** {
1123 011b 74D8 pushw rr8
1124 .LMM53:
351:../src/keyboard.c **** BYTE bit ;
1126 .LBB4:
1127 .LMM54:
352:../src/keyboard.c **** BYTE col = 0 ;
353:../src/keyboard.c ****
354:../src/keyboard.c **** /* Poll Row0 */
355:../src/keyboard.c **** P3DR = 0x7F ;
1129 011d F5E37F ld @P3DR,#127
1130 .LMM55:
356:../src/keyboard.c **** cols[ col] = get_key() ;
1132 0120 D200EE call @get_key
1133 0123 C5F10008 ld dpr:pof(@cols),r1
1134 .LMM56:
357:../src/keyboard.c **** col += 1 ;
358:../src/keyboard.c **** P3DR = 0xFF ;
1136 0127 8CFF ld r8,#255
1137 0129 89E3 ld @P3DR,r8
1138 .LMM57:
359:../src/keyboard.c ****
360:../src/keyboard.c **** /* Poll Row1 */
361:../src/keyboard.c **** P1DR = 0x40 ;
1140 012b F5E140 ld @P1DR,#64
1141 .LMM58:
362:../src/keyboard.c **** cols[ col] = get_key() ;
1143 012e D200EE call @get_key
1144 0131 C5F10009 ld dpr:pof(@cols+1),r1
1145 .LMM59:
363:../src/keyboard.c **** col += 1 ;
1147 0135 9C02 ld r9,#2
1148 .LMM60:
364:../src/keyboard.c **** P1DR = 0xFF ;
1150 0137 89E1 ld @P1DR,r8
1151 .LMM61:
365:../src/keyboard.c ****
366:../src/keyboard.c **** /* Poll Row2-7 */
367:../src/keyboard.c **** spp( P6C_PG) ;
1153 ; #APP
1154 0139 C70E spp #3
GAS LISTING C:\DOCUME~1\REF\LOCALS~1\Temp\cc001908.s page 26
1155 ; #NO_APP
1156 .LMM62:
368:../src/keyboard.c **** for( bit = 0x20 ; bit ; bit >>= 1)
1158 013b 8C20 ld r8,#32
1159 .L42:
1160 .LMM63:
369:../src/keyboard.c **** {
370:../src/keyboard.c **** P6DR = ~bit ;
1162 013d 08D8 ld r0,r8
1163 013f 80D0 cpl r0
1164 0141 09FB ld @P6DR,r0
1165 .LMM64:
371:../src/keyboard.c **** cols[ col] = get_key() ;
1167 0143 D200EE call @get_key
1168 0146 38D9 ld r3,r9
1169 0148 2C00 ld r2,#0
1170 014a 26F20008 ld dpr:pof(@cols)(rr2),r1
1170 D1
1171 .LMM65:
372:../src/keyboard.c **** col += 1 ;
1173 014f 50D9 inc r9
1174 .LMM66:
1176 0151 11 rcf
1177 0152 D0D8 rrc r8
1178 0154 EBE7 jxnz .L42
1179 .LMM67:
373:../src/keyboard.c **** }
374:../src/keyboard.c ****
375:../src/keyboard.c **** P6DR = 0xFF ;
1181 0156 F5FBFF ld @P6DR,#-1
1182 .LMM68:
376:../src/keyboard.c ****
377:../src/keyboard.c **** /* Poll Row8-14 */
378:../src/keyboard.c **** for( bit = 1 ; bit < 0x80 ; bit <<= 1)
1184 0159 8C01 ld r8,#1
1185 .L47:
1186 .LMM69:
379:../src/keyboard.c **** {
380:../src/keyboard.c **** P5DR = ~bit ;
1188 015b 08D8 ld r0,r8
1189 015d 80D0 cpl r0
1190 015f 09E5 ld @P5DR,r0
1191 .LMM70:
381:../src/keyboard.c **** cols[ col] = get_key() ;
1193 0161 D200EE call @get_key
1194 0164 38D9 ld r3,r9
1195 0166 2C00 ld r2,#0
1196 0168 26F20008 ld dpr:pof(@cols)(rr2),r1
1196 D1
1197 .LMM71:
382:../src/keyboard.c **** col += 1 ;
1199 016d 50D9 inc r9
1200 .LMM72:
1202 016f 4288 add r8,r8
1203 0171 95D87F cp r8,#127
1204 0174 3BE5 jxule .L47
1205 .LMM73:
GAS LISTING C:\DOCUME~1\REF\LOCALS~1\Temp\cc001908.s page 27
383:../src/keyboard.c **** }
384:../src/keyboard.c ****
385:../src/keyboard.c **** P5DR = 0xFF ;
1207 0176 8CFF ld r8,#255
1208 0178 89E5 ld @P5DR,r8
1209 .LMM74:
386:../src/keyboard.c ****
387:../src/keyboard.c **** // if( !configuration_status[ 3]) /* Joystick is not active */
388:../src/keyboard.c **** // {
389:../src/keyboard.c **** // P5DR = 0x7F ;
390:../src/keyboard.c **** // cols[ col] = get_key() ;
391:../src/keyboard.c **** // P5DR = 0xFF ;
392:../src/keyboard.c **** // }
393:../src/keyboard.c ****
394:../src/keyboard.c **** /* Row 15: Joystick buttons */
395:../src/keyboard.c **** P5DR = 0x7F ;
1211 017a F5E57F ld @P5DR,#127
1212 .LMM75:
396:../src/keyboard.c **** cols[ col] = get_key() ;
1214 017d D200EE call @get_key
1215 0180 38D9 ld r3,r9
1216 0182 2C00 ld r2,#0
1217 0184 26F20008 ld dpr:pof(@cols)(rr2),r1
1217 D1
1218 .LMM76:
397:../src/keyboard.c **** P5DR = 0xFF ;
1220 0189 89E5 ld @P5DR,r8
1221 .LMM77:
398:../src/keyboard.c **** }
1223 .LBE4:
1224 018b 75D8 popw rr8
1225 018d 46 ret
1226 .endproc
1231 .Lscope4:
1234
1235 .desc check_ghost, near
1236 .proc check_ghost
1237 check_ghost:
399:../src/keyboard.c ****
400:../src/keyboard.c **** BYTE ghost_f ;
401:../src/keyboard.c ****
402:../src/keyboard.c **** static BYTE check_ghost( void)
403:../src/keyboard.c **** {
1239 018e 66DA push r10
1240 0190 74D8 pushw rr8
1241 .LMM79:
404:../src/keyboard.c **** BYTE i, j, t ;
1243 .LBB5:
1244 .LMM80:
405:../src/keyboard.c ****
406:../src/keyboard.c **** for( i = 0 ; i < 15 ; i++)
1246 0192 90D5 clr r5
1247 0194 BFD80008 ldw rr8,#dpr:pof(@cols)
1248 .L53:
1249 .LMM81:
407:../src/keyboard.c **** {
408:../src/keyboard.c **** for( j = i + 1 ; j < 16 ; j++)
GAS LISTING C:\DOCUME~1\REF\LOCALS~1\Temp\cc001908.s page 28
1251 0198 48D5 ld r4,r5
1252 019a 50D4 inc r4
1253 019c 95D40F cp r4,#15
1254 019f BB35 jxugt .L52
1255 01a1 78D5 ld r7,r5
1256 01a3 6C00 ld r6,#0
1257 .L57:
1258 .LMM82:
409:../src/keyboard.c **** {
410:../src/keyboard.c **** if( cols[ i] & cols[ j]) /* At least one bit in common */
1260 01a5 18D4 ld r1,r4
1261 01a7 0C00 ld r0,#0
1262 01a9 6078FA ld r10,rr6(rr8)
1263 01ac 6018AA tm r10,rr0(rr8)
1264 01af 6B1E jxz .L56
1265 .LMM83:
411:../src/keyboard.c **** {
412:../src/keyboard.c **** t = cols[ i] | cols[ j] ; /* Ghost key effect */
1267 01b1 6078FA ld r10,rr6(rr8)
1268 01b4 60180A or r10,rr0(rr8)
1269 01b7 08DA ld r0,r10
1270 .LMM84:
413:../src/keyboard.c **** if( t & ~( t & -t)) /* Check at least 2 bits */
1272 01b9 18D0 ld r1,r0
1273 01bb 0C00 ld r0,#0
1274 01bd 6E22 xorw rr2,rr2
1275 01bf 5E20 subw rr2,rr0
1276 01c1 1E20 andw rr2,rr0
1277 01c3 67D3FFFF xorw rr2,#-1
1278 01c7 AE02 tmw rr0,rr2
1279 01c9 6B04 jxz .L56
1280 .LMM85:
414:../src/keyboard.c **** return 1 ;
1282 01cb 1C01 ld r1,#1
1283 01cd 8B10 jxt .L62
1284 .LMM86:
1286 .L56:
1287 01cf 50D4 inc r4
1288 01d1 95D40F cp r4,#15
1289 01d4 3BCF jxule .L57
1290 .LMM87:
1292 .L52:
1293 01d6 50D5 inc r5
1294 01d8 95D50E cp r5,#14
1295 01db 3BBB jxule .L53
1296 .LMM88:
415:../src/keyboard.c **** }
416:../src/keyboard.c **** }
417:../src/keyboard.c **** }
418:../src/keyboard.c ****
419:../src/keyboard.c **** return 0 ;
1298 01dd 90D1 clr r1
1299 .L62:
1300 .LMM89:
420:../src/keyboard.c **** #if 0
421:../src/keyboard.c **** j = cols[ i] ;
422:../src/keyboard.c **** if( j & ~( j & -j)) /* if at least 2 bits are set */
GAS LISTING C:\DOCUME~1\REF\LOCALS~1\Temp\cc001908.s page 29
423:../src/keyboard.c **** {
424:../src/keyboard.c **** BYTE sum ;
425:../src/keyboard.c ****
426:../src/keyboard.c **** sum = 0 ;
427:../src/keyboard.c **** for( j = i + 1 ; j < 16 ; j++)
428:../src/keyboard.c **** {
429:../src/keyboard.c **** // if( i != j)
430:../src/keyboard.c **** // sum |= cols[ j] ;
431:../src/keyboard.c **** // }
432:../src/keyboard.c ****
433:../src/keyboard.c **** if( cols[ i] & cols[ j])
434:../src/keyboard.c **** {
435:../src/keyboard.c **** return 1 ;
436:../src/keyboard.c **** }
437:../src/keyboard.c **** }
438:../src/keyboard.c **** }
439:../src/keyboard.c **** }
440:../src/keyboard.c ****
441:../src/keyboard.c **** return 0 ;
442:../src/keyboard.c **** #endif
443:../src/keyboard.c **** }
1302 .LBE5:
1303 01df 75D8 popw rr8
1304 01e1 76DA pop r10
1305 01e3 46 ret
1306 .endproc
1312 .Lscope5:
1315
1316 .globl kbd_poll
1317
1318 .desc kbd_poll, near
1319 .proc kbd_poll
1320 kbd_poll:
444:../src/keyboard.c ****
445:../src/keyboard.c **** void kbd_poll( void)
446:../src/keyboard.c **** {
1322 01e4 74DA pushw rr10
1323 01e6 66D8 push r8
1324 .LMM91:
447:../src/keyboard.c **** BYTE col ;
1326 .LBB6:
1327 .LMM92:
448:../src/keyboard.c ****
449:../src/keyboard.c **** cols_poll() ;
1329 01e8 D2011B call @cols_poll
1330 .LMM93:
450:../src/keyboard.c **** ghost_f = check_ghost() ;
1332 01eb D2018E call @check_ghost
1333 01ee C5F10000 ld dpr:pof(@ghost_f),r1
1334 .LMM94:
451:../src/keyboard.c **** if( ghost_f)
1336 01f2 0211 or r1,r1
1337 01f4 6B06 jxz .L64
1338 .LMM95:
452:../src/keyboard.c **** {
453:../src/keyboard.c **** kbd_rollover() ;
1340 01f6 D20000 call @kbd_rollover
GAS LISTING C:\DOCUME~1\REF\LOCALS~1\Temp\cc001908.s page 30
1341 .LMM96:
454:../src/keyboard.c **** }
1343 01f9 8D02A0 jxt .L65
1344 .L64:
1345 .LMM97:
455:../src/keyboard.c **** else
456:../src/keyboard.c **** {
457:../src/keyboard.c **** kbd_idx = 2 ; /* Index for insertion in Buffer */
1347 01fc 2FF10200 ld dpr:pof(@kbd_idx),#2
1347 00
1348 .LMM98:
458:../src/keyboard.c **** kbd_Buffer[ 0] = kbd_Buffer[ 1] = 0 ;
1350 0201 90D0 clr r0
1351 0203 C5F00001 ld dpr:pof(@kbd_Buffer+1),r0
1352 0207 C5F00000 ld dpr:pof(@kbd_Buffer),r0
1353 .LMM99:
459:../src/keyboard.c **** for( col = 0 ; col < 15 ; col++)
1355 020b 88D0 ld r8,r0
1356 020d BFDA0008 ldw rr10,#dpr:pof(@cols)
1357 .L69:
1358 .LMM100:
460:../src/keyboard.c **** {
461:../src/keyboard.c **** if( cols[ col] != 0)
1360 0211 18D8 ld r1,r8
1361 0213 0C00 ld r0,#0
1362 0215 601AF5 ld r5,rr0(rr10)
1363 0218 0255 or r5,r5
1364 021a 6B07 jxz .L68
1365 .LMM101:
462:../src/keyboard.c **** do_col( col, cols[ col]) ;
1367 021c 18D5 ld r1,r5
1368 021e 08D8 ld r0,r8
1369 0220 D2003F call @do_col
1370 .LMM102:
1372 .L68:
1373 0223 50D8 inc r8
1374 0225 95D80E cp r8,#14
1375 0228 3BE7 jxule .L69
1376 .LMM103:
463:../src/keyboard.c **** }
464:../src/keyboard.c ****
465:../src/keyboard.c **** if( configuration_status[ 3]) /* Joystick is active */
1378 022a 2F910000 cp dpr:pof(@configuration_status+3),#0
1378 03
1379 022f 6B0A jxz .L72
1380 .LMM104:
466:../src/keyboard.c **** {
467:../src/keyboard.c **** extern
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -