📄 keyboard.lis
字号:
00C6 .dbline 79
00C6 ;
00C6 ; buffcnt--; // Decrement buffer count
00C6 80910100 lds R24,_buffcnt
00CA 8150 subi R24,1
00CC 80930100 sts _buffcnt,R24
00D0 .dbline 81
00D0 ;
00D0 ; return byte;
00D0 .dbline -2
00D0 L9:
00D0 .dbline 0 ; func end
00D0 0895 ret
00D2 .dbsym r byte 16 I
00D2 .dbend
00D2 .dbfunc e print_hexbyte _print_hexbyte fV
00D2 ; l -> R20
00D2 ; h -> R22
00D2 ; i -> R20
.even
00D2 _print_hexbyte::
00D2 0E940000 xcall push_gset2
00D6 402F mov R20,R16
00D8 .dbline -1
00D8 .dbline 85
00D8 ; }
00D8 ;
00D8 ; void print_hexbyte(unsigned char i) //???
00D8 ; {
00D8 .dbline 88
00D8 ; unsigned char h, l;
00D8 ;
00D8 ; h = i & 0xF0; // High nibble
00D8 642F mov R22,R20
00DA 607F andi R22,240
00DC .dbline 89
00DC ; h = h>>4;
00DC 862F mov R24,R22
00DE 8295 swap R24
00E0 8F70 andi R24,#0x0F
00E2 682F mov R22,R24
00E4 .dbline 90
00E4 ; h = h + '0';
00E4 605D subi R22,208 ; addi 48
00E6 .dbline 92
00E6 ;
00E6 ; if (h > '9')
00E6 89E3 ldi R24,57
00E8 8617 cp R24,R22
00EA 08F4 brsh L17
00EC .dbline 93
00EC ; h = h + 7;
00EC 695F subi R22,249 ; addi 7
00EE L17:
00EE .dbline 95
00EE ;
00EE ; l = (i & 0x0F)+'0'; // Low nibble
00EE 842F mov R24,R20
00F0 8F70 andi R24,15
00F2 805D subi R24,208 ; addi 48
00F4 482F mov R20,R24
00F6 .dbline 96
00F6 ; if (l > '9')
00F6 89E3 ldi R24,57
00F8 8417 cp R24,R20
00FA 08F4 brsh L19
00FC .dbline 97
00FC ; l = l + 7;
00FC 495F subi R20,249 ; addi 7
00FE L19:
00FE .dbline 99
00FE ;
00FE ; put_kbbuff(h);
00FE 062F mov R16,R22
0100 9CDF xcall _put_kbbuff
0102 .dbline 100
0102 ; put_kbbuff(l);
0102 042F mov R16,R20
0104 9ADF xcall _put_kbbuff
0106 .dbline -2
0106 L16:
0106 0E940000 xcall pop_gset2
010A .dbline 0 ; func end
010A 0895 ret
010C .dbsym r l 20 c
010C .dbsym r h 22 c
010C .dbsym r i 20 c
010C .dbend
.area data(ram, con, rel)
0000 .dbfile C:\DOCUME~1\Administrator\桌面\ps2\keyboard.c
0000 L22:
0000 .blkb 1
.area idata
0000 00 .byte 0
.area data(ram, con, rel)
0001 .dbfile C:\DOCUME~1\Administrator\桌面\ps2\keyboard.c
0001 L23:
0001 .blkb 1
.area idata
0001 00 .byte 0
.area data(ram, con, rel)
0002 .dbfile C:\DOCUME~1\Administrator\桌面\ps2\keyboard.c
0002 L24:
0002 .blkb 1
.area idata
0002 00 .byte 0
.area data(ram, con, rel)
0003 .dbfile C:\DOCUME~1\Administrator\桌面\ps2\keyboard.c
.area text(rom, con, rel)
010C .dbfile C:\DOCUME~1\Administrator\桌面\ps2\keyboard.c
010C .dbfunc e decode _decode fV
010C .dbsym s mode L24 c
010C .dbsym s shift L23 c
010C .dbsym s is_up L22 c
010C ; i -> R22
010C ; sc -> R20
.even
010C _decode::
010C 0E940000 xcall push_gset2
0110 402F mov R20,R16
0112 .dbline -1
0112 .dbline 104
0112 ; }
0112 ;
0112 ; void decode(unsigned char sc)
0112 ; {
0112 .dbline 108
0112 ; static unsigned char is_up=0, shift = 0, mode = 0;
0112 ; unsigned char i;
0112 ;
0112 ; if (!is_up) // Last data received was the up-key identifier
0112 20900000 lds R2,L22
0116 2220 tst R2
0118 09F0 breq X2
011A 94C0 xjmp L25
011C X2:
011C .dbline 109
011C ; {
011C .dbline 110
011C ; switch (sc)
011C 642F mov R22,R20
011E 7727 clr R23
0120 6231 cpi R22,18
0122 E0E0 ldi R30,0
0124 7E07 cpc R23,R30
0126 D9F0 breq L31
0128 82E1 ldi R24,18
012A 90E0 ldi R25,0
012C 8617 cp R24,R22
012E 9707 cpc R25,R23
0130 2CF0 brlt L60
0132 L59:
0132 6530 cpi R22,5
0134 E0E0 ldi R30,0
0136 7E07 cpc R23,R30
0138 D1F0 breq L33
013A 29C0 xjmp L27
013C L60:
013C 6935 cpi R22,89
013E E0E0 ldi R30,0
0140 7E07 cpc R23,R30
0142 89F0 breq L32
0144 6935 cpi R22,89
0146 E0E0 ldi R30,0
0148 7E07 cpc R23,R30
014A 0CF1 brlt L27
014C L61:
014C 603F cpi R22,240
014E E0E0 ldi R30,0
0150 7E07 cpc R23,R30
0152 09F0 breq L30
0154 1CC0 xjmp L27
0156 X0:
0156 .dbline 111
0156 ; {
0156 L30:
0156 .dbline 113
0156 ; case 0xF0 : // The up-key identifier
0156 ; is_up = 1;
0156 81E0 ldi R24,1
0158 80930000 sts L22,R24
015C .dbline 114
015C ; break;
015C A4C0 xjmp L26
015E L31:
015E .dbline 117
015E ;
015E ; case 0x12 : // Left SHIFT
015E ; shift = 1;
015E 81E0 ldi R24,1
0160 80930100 sts L23,R24
0164 .dbline 118
0164 ; break;
0164 A0C0 xjmp L26
0166 L32:
0166 .dbline 121
0166 ;
0166 ; case 0x59 : // Right SHIFT
0166 ; shift = 1;
0166 81E0 ldi R24,1
0168 80930100 sts L23,R24
016C .dbline 122
016C ; break;
016C 9CC0 xjmp L26
016E L33:
016E .dbline 125
016E ;
016E ; case 0x05 : // F1
016E ; if(mode == 0) mode = 1; // Enter scan code mode
016E 20900200 lds R2,L24
0172 2220 tst R2
0174 19F4 brne L34
0176 .dbline 125
0176 81E0 ldi R24,1
0178 80930200 sts L24,R24
017C L34:
017C .dbline 126
017C ; if(mode == 2) mode = 3; // Leave scan code mode
017C 80910200 lds R24,L24
0180 8230 cpi R24,2
0182 09F0 breq X3
0184 90C0 xjmp L26
0186 X3:
0186 .dbline 126
0186 83E0 ldi R24,3
0188 80930200 sts L24,R24
018C .dbline 127
018C ; break;
018C 8CC0 xjmp L26
018E L27:
018E .dbline 130
018E ;
018E ; default:
018E ; if(mode == 0 || mode == 3) // If ASCII mode
018E 20900200 lds R2,L24
0192 2220 tst R2
0194 21F0 breq L40
0196 822D mov R24,R2
0198 8330 cpi R24,3
019A 09F0 breq X4
019C 4EC0 xjmp L38
019E X4:
019E L40:
019E .dbline 131
019E ; {
019E .dbline 132
019E ; if(!shift) // If shift is not pressed,
019E 20900100 lds R2,L23
01A2 2220 tst R2
01A4 29F5 brne L41
01A6 .dbline 133
01A6 ; { // do a table look-up
01A6 .dbline 134
01A6 6627 clr R22
01A8 01C0 xjmp L46
01AA L43:
01AA .dbline 134
01AA L44:
01AA .dbline 134
01AA 6395 inc R22
01AC L46:
01AC .dbline 134
01AC ; for(i = 0; unshifted[i][0]!=sc && unshifted[i][0]; i++);//???
01AC 82E0 ldi R24,2
01AE 869F mul R24,R22
01B0 F001 movw R30,R0
01B2 80E0 ldi R24,<_unshifted
01B4 90E0 ldi R25,>_unshifted
01B6 E80F add R30,R24
01B8 F91F adc R31,R25
01BA 2490 lpm R2,Z
01BC 3324 clr R3
01BE 2416 cp R2,R20
01C0 11F0 breq L47
01C2 2220 tst R2
01C4 91F7 brne L43
01C6 L47:
01C6 .dbline 135
01C6 ; if (unshifted[i][0] == sc) {
01C6 82E0 ldi R24,2
01C8 869F mul R24,R22
01CA F001 movw R30,R0
01CC 80E0 ldi R24,<_unshifted
01CE 90E0 ldi R25,>_unshifted
01D0 E80F add R30,R24
01D2 F91F adc R31,R25
01D4 E491 lpm R30,Z
01D6 E417 cp R30,R20
01D8 09F0 breq X5
01DA 65C0 xjmp L26
01DC X5:
01DC .dbline 135
01DC .dbline 136
01DC ; put_kbbuff(unshifted[i][1]);
01DC 82E0 ldi R24,2
01DE 869F mul R24,R22
01E0 F001 movw R30,R0
01E2 80E0 ldi R24,<_unshifted+1
01E4 90E0 ldi R25,>_unshifted+1
01E6 E80F add R30,R24
01E8 F91F adc R31,R25
01EA 0491 lpm R16,Z
01EC 26DF xcall _put_kbbuff
01EE .dbline 137
01EE ; }
01EE .dbline 138
01EE 5BC0 xjmp L26
01F0 L41:
01F0 .dbline 138
01F0 ; } else { // If shift is pressed
01F0 .dbline 139
01F0 6627 clr R22
01F2 01C0 xjmp L54
01F4 L51:
01F4 .dbline 139
01F4 L52:
01F4 .dbline 139
01F4 6395 inc R22
01F6 L54:
01F6 .dbline 139
01F6 ; for(i = 0; shifted[i][0]!=sc && shifted[i][0]; i++);
01F6 82E0 ldi R24,2
01F8 869F mul R24,R22
01FA F001 movw R30,R0
01FC 80E0 ldi R24,<_shifted
01FE 90E0 ldi R25,>_shifted
0200 E80F add R30,R24
0202 F91F adc R31,R25
0204 2490 lpm R2,Z
0206 3324 clr R3
0208 2416 cp R2,R20
020A 11F0 breq L55
020C 2220 tst R2
020E 91F7 brne L51
0210 L55:
0210 .dbline 140
0210 ; if (shifted[i][0] == sc) {
0210 82E0 ldi R24,2
0212 869F mul R24,R22
0214 F001 movw R30,R0
0216 80E0 ldi R24,<_shifted
0218 90E0 ldi R25,>_shifted
021A E80F add R30,R24
021C F91F adc R31,R25
021E E491 lpm R30,Z
0220 E417 cp R30,R20
0222 09F0 breq X6
0224 40C0 xjmp L26
0226 X6:
0226 .dbline 140
0226 .dbline 141
0226 ; put_kbbuff(shifted[i][1]);
0226 82E0 ldi R24,2
0228 869F mul R24,R22
022A F001 movw R30,R0
022C 80E0 ldi R24,<_shifted+1
022E 90E0 ldi R25,>_shifted+1
0230 E80F add R30,R24
0232 F91F adc R31,R25
0234 0491 lpm R16,Z
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -