📄 ps2_lcm1602.lss
字号:
1fe: 28 2f mov r18, r24
200: 33 27 eor r19, r19
202: 3c 83 std Y+4, r19 ; 0x04
204: 2b 83 std Y+3, r18 ; 0x03
206: 8b 81 ldd r24, Y+3 ; 0x03
208: 9c 81 ldd r25, Y+4 ; 0x04
20a: 82 31 cpi r24, 0x12 ; 18
20c: 91 05 cpc r25, r1
20e: d1 f0 breq .+52 ; 0x244 <decode+0x68>
210: 2b 81 ldd r18, Y+3 ; 0x03
212: 3c 81 ldd r19, Y+4 ; 0x04
214: 23 31 cpi r18, 0x13 ; 19
216: 31 05 cpc r19, r1
218: 34 f4 brge .+12 ; 0x226 <decode+0x4a>
21a: 8b 81 ldd r24, Y+3 ; 0x03
21c: 9c 81 ldd r25, Y+4 ; 0x04
21e: 85 30 cpi r24, 0x05 ; 5
220: 91 05 cpc r25, r1
222: c1 f0 breq .+48 ; 0x254 <decode+0x78>
224: 27 c0 rjmp .+78 ; 0x274 <decode+0x98>
226: 2b 81 ldd r18, Y+3 ; 0x03
228: 3c 81 ldd r19, Y+4 ; 0x04
22a: 29 35 cpi r18, 0x59 ; 89
22c: 31 05 cpc r19, r1
22e: 71 f0 breq .+28 ; 0x24c <decode+0x70>
230: 8b 81 ldd r24, Y+3 ; 0x03
232: 9c 81 ldd r25, Y+4 ; 0x04
234: 80 3f cpi r24, 0xF0 ; 240
236: 91 05 cpc r25, r1
238: 09 f0 breq .+2 ; 0x23c <decode+0x60>
23a: 1c c0 rjmp .+56 ; 0x274 <decode+0x98>
{
case 0xF0 : // The up-key identifier
is_up = 1;
23c: 81 e0 ldi r24, 0x01 ; 1
23e: 80 93 87 01 sts 0x0187, r24
break;
242: ce c0 rjmp .+412 ; 0x3e0 <decode+0x204>
case 0x12 : // Left SHIFT
shift = 1;
244: 81 e0 ldi r24, 0x01 ; 1
246: 80 93 88 01 sts 0x0188, r24
break;
24a: ca c0 rjmp .+404 ; 0x3e0 <decode+0x204>
case 0x59 : // Right SHIFT
shift = 1;
24c: 81 e0 ldi r24, 0x01 ; 1
24e: 80 93 88 01 sts 0x0188, r24
break;
252: c6 c0 rjmp .+396 ; 0x3e0 <decode+0x204>
case 0x05 : // F1
if(mode == 0)
254: 80 91 89 01 lds r24, 0x0189
258: 88 23 and r24, r24
25a: 19 f4 brne .+6 ; 0x262 <decode+0x86>
mode = 1; // Enter scan code mode
25c: 81 e0 ldi r24, 0x01 ; 1
25e: 80 93 89 01 sts 0x0189, r24
if(mode == 2)
262: 80 91 89 01 lds r24, 0x0189
266: 82 30 cpi r24, 0x02 ; 2
268: 09 f0 breq .+2 ; 0x26c <decode+0x90>
26a: ba c0 rjmp .+372 ; 0x3e0 <decode+0x204>
mode = 3; // Leave scan code mode
26c: 83 e0 ldi r24, 0x03 ; 3
26e: 80 93 89 01 sts 0x0189, r24
break;
272: b6 c0 rjmp .+364 ; 0x3e0 <decode+0x204>
default:
if(mode == 0 || mode == 3) // If ASCII mode
274: 80 91 89 01 lds r24, 0x0189
278: 88 23 and r24, r24
27a: 29 f0 breq .+10 ; 0x286 <decode+0xaa>
27c: 80 91 89 01 lds r24, 0x0189
280: 83 30 cpi r24, 0x03 ; 3
282: 09 f0 breq .+2 ; 0x286 <decode+0xaa>
284: 76 c0 rjmp .+236 ; 0x372 <decode+0x196>
{
if(!shift) // 识别有没有按下shift键
286: 80 91 88 01 lds r24, 0x0188
28a: 88 23 and r24, r24
28c: c9 f5 brne .+114 ; 0x300 <decode+0x124>
{ // for语句又于寻找键盘码
for(i = 0; unshifted[i][0]!=sc && unshifted[i][0]; i++);//输出没按shift键的码
28e: 1a 82 std Y+2, r1 ; 0x02
290: 8a 81 ldd r24, Y+2 ; 0x02
292: 28 2f mov r18, r24
294: 33 27 eor r19, r19
296: c9 01 movw r24, r18
298: 82 0f add r24, r18
29a: 93 1f adc r25, r19
29c: fc 01 movw r30, r24
29e: ea 58 subi r30, 0x8A ; 138
2a0: ff 4f sbci r31, 0xFF ; 255
2a2: 90 81 ld r25, Z
2a4: 89 81 ldd r24, Y+1 ; 0x01
2a6: 98 17 cp r25, r24
2a8: 81 f0 breq .+32 ; 0x2ca <decode+0xee>
2aa: 8a 81 ldd r24, Y+2 ; 0x02
2ac: 28 2f mov r18, r24
2ae: 33 27 eor r19, r19
2b0: c9 01 movw r24, r18
2b2: 82 0f add r24, r18
2b4: 93 1f adc r25, r19
2b6: fc 01 movw r30, r24
2b8: ea 58 subi r30, 0x8A ; 138
2ba: ff 4f sbci r31, 0xFF ; 255
2bc: 80 81 ld r24, Z
2be: 88 23 and r24, r24
2c0: 21 f0 breq .+8 ; 0x2ca <decode+0xee>
2c2: 8a 81 ldd r24, Y+2 ; 0x02
2c4: 8f 5f subi r24, 0xFF ; 255
2c6: 8a 83 std Y+2, r24 ; 0x02
2c8: e3 cf rjmp .-58 ; 0x290 <decode+0xb4>
if (unshifted[i][0] == sc) {
2ca: 8a 81 ldd r24, Y+2 ; 0x02
2cc: 28 2f mov r18, r24
2ce: 33 27 eor r19, r19
2d0: c9 01 movw r24, r18
2d2: 82 0f add r24, r18
2d4: 93 1f adc r25, r19
2d6: fc 01 movw r30, r24
2d8: ea 58 subi r30, 0x8A ; 138
2da: ff 4f sbci r31, 0xFF ; 255
2dc: 90 81 ld r25, Z
2de: 89 81 ldd r24, Y+1 ; 0x01
2e0: 98 17 cp r25, r24
2e2: 09 f0 breq .+2 ; 0x2e6 <decode+0x10a>
2e4: 7d c0 rjmp .+250 ; 0x3e0 <decode+0x204>
put_kbbuff(unshifted[i][1]);
2e6: 8a 81 ldd r24, Y+2 ; 0x02
2e8: 28 2f mov r18, r24
2ea: 33 27 eor r19, r19
2ec: c9 01 movw r24, r18
2ee: 82 0f add r24, r18
2f0: 93 1f adc r25, r19
2f2: fc 01 movw r30, r24
2f4: e9 58 subi r30, 0x89 ; 137
2f6: ff 4f sbci r31, 0xFF ; 255
2f8: 80 81 ld r24, Z
2fa: 0e 94 f9 01 call 0x3f2 <put_kbbuff>
2fe: 70 c0 rjmp .+224 ; 0x3e0 <decode+0x204>
}
} else { // If shift pressed
for(i = 0; shifted[i][0]!=sc && shifted[i][0]; i++);//输出按下shift键的码
300: 1a 82 std Y+2, r1 ; 0x02
302: 8a 81 ldd r24, Y+2 ; 0x02
304: 28 2f mov r18, r24
306: 33 27 eor r19, r19
308: c9 01 movw r24, r18
30a: 82 0f add r24, r18
30c: 93 1f adc r25, r19
30e: fc 01 movw r30, r24
310: e2 50 subi r30, 0x02 ; 2
312: ff 4f sbci r31, 0xFF ; 255
314: 90 81 ld r25, Z
316: 89 81 ldd r24, Y+1 ; 0x01
318: 98 17 cp r25, r24
31a: 81 f0 breq .+32 ; 0x33c <decode+0x160>
31c: 8a 81 ldd r24, Y+2 ; 0x02
31e: 28 2f mov r18, r24
320: 33 27 eor r19, r19
322: c9 01 movw r24, r18
324: 82 0f add r24, r18
326: 93 1f adc r25, r19
328: fc 01 movw r30, r24
32a: e2 50 subi r30, 0x02 ; 2
32c: ff 4f sbci r31, 0xFF ; 255
32e: 80 81 ld r24, Z
330: 88 23 and r24, r24
332: 21 f0 breq .+8 ; 0x33c <decode+0x160>
334: 8a 81 ldd r24, Y+2 ; 0x02
336: 8f 5f subi r24, 0xFF ; 255
338: 8a 83 std Y+2, r24 ; 0x02
33a: e3 cf rjmp .-58 ; 0x302 <decode+0x126>
if (shifted[i][0] == sc) {
33c: 8a 81 ldd r24, Y+2 ; 0x02
33e: 28 2f mov r18, r24
340: 33 27 eor r19, r19
342: c9 01 movw r24, r18
344: 82 0f add r24, r18
346: 93 1f adc r25, r19
348: fc 01 movw r30, r24
34a: e2 50 subi r30, 0x02 ; 2
34c: ff 4f sbci r31, 0xFF ; 255
34e: 90 81 ld r25, Z
350: 89 81 ldd r24, Y+1 ; 0x01
352: 98 17 cp r25, r24
354: 09 f0 breq .+2 ; 0x358 <decode+0x17c>
356: 44 c0 rjmp .+136 ; 0x3e0 <decode+0x204>
put_kbbuff(shifted[i][1]);
358: 8a 81 ldd r24, Y+2 ; 0x02
35a: 28 2f mov r18, r24
35c: 33 27 eor r19, r19
35e: c9 01 movw r24, r18
360: 82 0f add r24, r18
362: 93 1f adc r25, r19
364: fc 01 movw r30, r24
366: e1 50 subi r30, 0x01 ; 1
368: ff 4f sbci r31, 0xFF ; 255
36a: 80 81 ld r24, Z
36c: 0e 94 f9 01 call 0x3f2 <put_kbbuff>
370: 37 c0 rjmp .+110 ; 0x3e0 <decode+0x204>
}
}
}
else{ // Scan code mode
print_hexbyte(sc); // Print scan code
372: 89 81 ldd r24, Y+1 ; 0x01
374: 0e 94 6f 02 call 0x4de <print_hexbyte>
put_kbbuff(' ');
378: 80 e2 ldi r24, 0x20 ; 32
37a: 0e 94 f9 01 call 0x3f2 <put_kbbuff>
}
break;
37e: 30 c0 rjmp .+96 ; 0x3e0 <decode+0x204>
}
} else {
is_up = 0; // Two 0xF0 in a row not allowed
380: 10 92 87 01 sts 0x0187, r1
switch (sc)
384: 89 81 ldd r24, Y+1 ; 0x01
386: 28 2f mov r18, r24
388: 33 27 eor r19, r19
38a: 3e 83 std Y+6, r19 ; 0x06
38c: 2d 83 std Y+5, r18 ; 0x05
38e: 8d 81 ldd r24, Y+5 ; 0x05
390: 9e 81 ldd r25, Y+6 ; 0x06
392: 82 31 cpi r24, 0x12 ; 18
394: 91 05 cpc r25, r1
396: 89 f0 breq .+34 ; 0x3ba <decode+0x1de>
398: 2d 81 ldd r18, Y+5 ; 0x05
39a: 3e 81 ldd r19, Y+6 ; 0x06
39c: 23 31 cpi r18, 0x13 ; 19
39e: 31 05 cpc r19, r1
3a0: 34 f4 brge .+12 ; 0x3ae <decode+0x1d2>
3a2: 8d 81 ldd r24, Y+5 ; 0x05
3a4: 9e 81 ldd r25, Y+6 ; 0x06
3a6: 85 30 cpi r24, 0x05 ; 5
3a8: 91 05 cpc r25, r1
3aa: 69 f0 breq .+26 ; 0x3c6 <decode+0x1ea>
3ac: 19 c0 rjmp .+50 ; 0x3e0 <decode+0x204>
3ae: 2d 81 ldd r18, Y+5 ; 0x05
3b0: 3e 81 ldd r19, Y+6 ; 0x06
3b2: 29 35 cpi r18, 0x59 ; 89
3b4: 31 05 cpc r19, r1
3b6: 21 f0 breq .+8 ; 0x3c0 <decode+0x1e4>
3b8: 13 c0 rjmp .+38 ; 0x3e0 <decode+0x204>
{
case 0x12 : // Left SHIFT
shift = 0;
3ba: 10 92 88 01 sts 0x0188, r1
break;
3be: 10 c0 rjmp .+32 ; 0x3e0 <decode+0x204>
case 0x59 : // Right SHIFT
shift = 0;
3c0: 10 92 88 01 sts 0x0188, r1
break;
3c4: 0d c0 rjmp .+26 ; 0x3e0 <decode+0x204>
case 0x05 : // F1
if(mode == 1)
3c6: 80 91 89 01 lds r24, 0x0189
3ca: 81 30 cpi r24, 0x01 ; 1
3cc: 19 f4 brne .+6 ; 0x3d4 <decode+0x1f8>
mode = 2;
3ce: 82 e0 ldi r24, 0x02 ; 2
3d0: 80 93 89 01 sts 0x0189, r24
if(mode == 3)
3d4: 80 91 89 01 lds r24, 0x0189
3d8: 83 30 cpi r24, 0x03 ; 3
3da: 11 f4 brne .+4 ; 0x3e0 <decode+0x204>
mode = 0;
3dc: 10 92 89 01 sts 0x0189, r1
3e0: 26 96 adiw r28, 0x06 ; 6
3e2: 0f b6 in r0, 0x3f ; 63
3e4: f8 94 cli
3e6: de bf out 0x3e, r29 ; 62
3e8: 0f be out 0x3f, r0 ; 63
3ea: cd bf out 0x3d, r28 ; 61
3ec: df 91 pop r29
3ee: cf 91 pop r28
3f0: 08 95 ret
000003f2 <put_kbbuff>:
break;
case 0x06 : // F2
break;
}
}
}
/*-----------------------------------------------------------
put_kbbuff :键码保存到缓冲区
输入参数 c :经解码所得键码数据
输出参数 :无
作者 :ken
日期 :2007-8-18
------------------------------------------------------------*/
void put_kbbuff(unsigned char c)
{
3f2: cf 93 push r28
3f4: df 93 push r29
3f6: cd b7 in r28, 0x3d ; 61
3f8: de b7 in r29, 0x3e ; 62
3fa: 21 97 sbiw r28, 0x01 ; 1
3fc: 0f b6 in r0, 0x3f ; 63
3fe: f8 94 cli
400: de bf out 0x3e, r29 ; 62
402: 0f be out 0x3f, r0 ; 63
404: cd bf out 0x3d, r28 ; 61
406: 89 83 std Y+1, r24 ; 0x01
if (buffcnt<BUFF_SIZE) // If buffer not full
408: 80 91 d7 01 lds r24, 0x01D7
40c: 80 34 cpi r24, 0x40 ; 64
40e: 10 f5 brcc .+68 ; 0x454 <put_kbbuff+0x62>
{
*inpt = c; // Put character into buffer
410: e0 91 91 01 lds r30, 0x0191
414: f0 91 92 01 lds r31, 0x0192
418: 89 81 ldd r24, Y+1 ; 0x01
41a: 80 83 st Z, r24
inpt++; // Increment pointer
41c: 80 91 91 01 lds r24, 0x0191
420: 90 91 92 01 lds r25, 0x0192
424: 01 96 adiw r24, 0x01 ; 1
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -