📄 ps2.lis
字号:
0224 0895 ret
0226 .dbsym r i 20 c
0226 .dbsym l cs 10 c
0226 .dbsym r y 10 c
0226 .dbsym r x 12 c
0226 .dbsym r disp 22 pkc
0226 .dbend
0226 .dbfunc e WriteCharacter _WriteCharacter fV
0226 ; i -> R20
0226 ; cs -> y+10
0226 ; y -> R10
0226 ; x -> R12
0226 ; disp -> R22,R23
.even
0226 _WriteCharacter::
0226 00D0 rcall push_gset4
0228 C22E mov R12,R18
022A 602F mov R22,R16
022C 712F mov R23,R17
022E A884 ldd R10,y+8
0230 .dbline -1
0230 .dbline 201
0230 ;
0230 ;
0230 ; void WriteCharacter(const uchar *disp,uchar x,uchar y,uchar cs)
0230 ; {uchar i;
0230 .dbline 202
0230 ; if(cs==0) {Set_CS1(1);Set_CS2(0);}//CS1=1选中右屏幕;
0230 0A84 ldd R0,y+10
0232 0020 tst R0
0234 29F4 brne L61
0236 .dbline 202
0236 .dbline 202
0236 01E0 ldi R16,1
0238 FBDE rcall _Set_CS1
023A .dbline 202
023A 0027 clr R16
023C 01DF rcall _Set_CS2
023E .dbline 202
023E 04C0 rjmp L62
0240 L61:
0240 .dbline 203
0240 ; else {Set_CS1(0);Set_CS2(1);}//CS2=1选中左屏幕;
0240 .dbline 203
0240 0027 clr R16
0242 F6DE rcall _Set_CS1
0244 .dbline 203
0244 01E0 ldi R16,1
0246 FCDE rcall _Set_CS2
0248 .dbline 203
0248 L62:
0248 .dbline 204
0248 ; SetX(x);
0248 0C2D mov R16,R12
024A 4FDF rcall _SetX
024C .dbline 205
024C ; SetY(y);
024C 0A2D mov R16,R10
024E 64DF rcall _SetY
0250 .dbline 206
0250 ; for(i=0;i<8;i++)
0250 4427 clr R20
0252 08C0 rjmp L66
0254 L63:
0254 .dbline 207
0254 .dbline 207
0254 E62F mov R30,R22
0256 F72F mov R31,R23
0258 C895 lpm
025A 002D mov R16,R0
025C 74DF rcall _WriteByte
025E .dbline 208
025E 6F5F subi R22,255 ; offset = 1
0260 7F4F sbci R23,255
0262 .dbline 208
0262 L64:
0262 .dbline 206
0262 4395 inc R20
0264 L66:
0264 .dbline 206
0264 4830 cpi R20,8
0266 B0F3 brlo L63
0268 .dbline 209
0268 ; {WriteByte(*disp);
0268 ; disp++;}
0268 ; SetX(x+1);
0268 0C2D mov R16,R12
026A 0F5F subi R16,255 ; addi 1
026C 3EDF rcall _SetX
026E .dbline 210
026E ; SetY(y);
026E 0A2D mov R16,R10
0270 53DF rcall _SetY
0272 .dbline 211
0272 ; for(i=0;i<8;i++)
0272 4427 clr R20
0274 08C0 rjmp L70
0276 L67:
0276 .dbline 212
0276 .dbline 212
0276 E62F mov R30,R22
0278 F72F mov R31,R23
027A C895 lpm
027C 002D mov R16,R0
027E 63DF rcall _WriteByte
0280 .dbline 213
0280 6F5F subi R22,255 ; offset = 1
0282 7F4F sbci R23,255
0284 .dbline 213
0284 L68:
0284 .dbline 211
0284 4395 inc R20
0286 L70:
0286 .dbline 211
0286 4830 cpi R20,8
0288 B0F3 brlo L67
028A .dbline -2
028A .dbline 214
028A ; {WriteByte(*disp);
028A ; disp++;}
028A ; }
028A L60:
028A 00D0 rcall pop_gset4
028C .dbline 0 ; func end
028C 0895 ret
028E .dbsym r i 20 c
028E .dbsym l cs 10 c
028E .dbsym r y 10 c
028E .dbsym r x 12 c
028E .dbsym r disp 22 pkc
028E .dbend
028E .dbfunc e Write_Character _Write_Character fV
028E ; shift1 -> R22
028E ; p -> R20,R21
028E ; i -> R20
.even
028E _Write_Character::
028E 00D0 rcall push_gset3
0290 402F mov R20,R16
0292 2397 sbiw R28,3
0294 .dbline -1
0294 .dbline 217
0294 ;
0294 ; void Write_Character(uchar i)
0294 ; {uchar shift1;
0294 .dbline 219
0294 ; uchar const *p;
0294 ; switch(i)
0294 5527 clr R21
0296 4030 cpi R20,0
0298 4507 cpc R20,R21
029A 09F1 breq L75
029C X2:
029C 4130 cpi R20,1
029E E0E0 ldi R30,0
02A0 5E07 cpc R21,R30
02A2 01F1 breq L76
02A4 4230 cpi R20,2
02A6 E0E0 ldi R30,0
02A8 5E07 cpc R21,R30
02AA F9F0 breq L77
02AC 4330 cpi R20,3
02AE E0E0 ldi R30,0
02B0 5E07 cpc R21,R30
02B2 F1F0 breq L78
02B4 4430 cpi R20,4
02B6 E0E0 ldi R30,0
02B8 5E07 cpc R21,R30
02BA E9F0 breq L79
02BC 4530 cpi R20,5
02BE E0E0 ldi R30,0
02C0 5E07 cpc R21,R30
02C2 E1F0 breq L80
02C4 4630 cpi R20,6
02C6 E0E0 ldi R30,0
02C8 5E07 cpc R21,R30
02CA D9F0 breq L81
02CC 4730 cpi R20,7
02CE E0E0 ldi R30,0
02D0 5E07 cpc R21,R30
02D2 D1F0 breq L82
02D4 4830 cpi R20,8
02D6 E0E0 ldi R30,0
02D8 5E07 cpc R21,R30
02DA C9F0 breq L83
02DC 1BC0 rjmp L72
02DE X3:
02DE .dbline 220
02DE L75:
02DE .dbline 220
02DE ; {case 0:p=X0;break;
02DE 40E0 ldi R20,<_X0
02E0 50E0 ldi R21,>_X0
02E2 .dbline 220
02E2 1AC0 rjmp L73
02E4 L76:
02E4 .dbline 221
02E4 ; case 1:p=X1;break;
02E4 40E0 ldi R20,<_X1
02E6 50E0 ldi R21,>_X1
02E8 .dbline 221
02E8 17C0 rjmp L73
02EA L77:
02EA .dbline 222
02EA ; case 2:p=X2;break;
02EA 40E0 ldi R20,<_X2
02EC 50E0 ldi R21,>_X2
02EE .dbline 222
02EE 14C0 rjmp L73
02F0 L78:
02F0 .dbline 223
02F0 ; case 3:p=X3;break;
02F0 40E0 ldi R20,<_X3
02F2 50E0 ldi R21,>_X3
02F4 .dbline 223
02F4 11C0 rjmp L73
02F6 L79:
02F6 .dbline 224
02F6 ; case 4:p=X4;break;
02F6 40E0 ldi R20,<_X4
02F8 50E0 ldi R21,>_X4
02FA .dbline 224
02FA 0EC0 rjmp L73
02FC L80:
02FC .dbline 225
02FC ; case 5:p=X5;break;
02FC 40E0 ldi R20,<_X5
02FE 50E0 ldi R21,>_X5
0300 .dbline 225
0300 0BC0 rjmp L73
0302 L81:
0302 .dbline 226
0302 ; case 6:p=X6;break;
0302 40E0 ldi R20,<_X6
0304 50E0 ldi R21,>_X6
0306 .dbline 226
0306 08C0 rjmp L73
0308 L82:
0308 .dbline 227
0308 ; case 7:p=X7;break;
0308 40E0 ldi R20,<_X7
030A 50E0 ldi R21,>_X7
030C .dbline 227
030C 05C0 rjmp L73
030E L83:
030E .dbline 228
030E ; case 8:p=X8;break;
030E 40E0 ldi R20,<_X8
0310 50E0 ldi R21,>_X8
0312 .dbline 228
0312 02C0 rjmp L73
0314 L72:
0314 .dbline 229
0314 ; default:p=X9;break;}
0314 40E0 ldi R20,<_X9
0316 50E0 ldi R21,>_X9
0318 .dbline 229
0318 L73:
0318 .dbline 231
0318 ;
0318 ; if(R_flag==1) //若是写右边的屏幕;
0318 80910200 lds R24,_R_flag
031C 8130 cpi R24,1
031E 09F0 breq X4
0320 48C0 rjmp L84
0322 X4:
0322 .dbline 232
0322 ; {if(Column==56)
0322 .dbline 232
0322 80910100 lds R24,_Column
0326 8833 cpi R24,56
0328 61F5 brne L86
032A .dbline 233
032A ; {shift1=1;//若是到了最后一个字节,则写完后要换行
032A .dbline 233
032A 61E0 ldi R22,1
032C .dbline 234
032C ; WriteCharacter(p,Row,Column,!R_flag);
032C 20900200 lds R2,_R_flag
0330 2220 tst R2
0332 29F4 brne L88
0334 81E0 ldi R24,1
0336 90E0 ldi R25,0
0338 A82E mov R10,R24
033A B92E mov R11,R25
033C 02C0 rjmp L89
033E L88:
033E AA24 clr R10
0340 BB24 clr R11
0342 L89:
0342 AA82 std y+2,R10
0344 20900100 lds R2,_Column
0348 2882 std y+0,R2
034A 20910000 lds R18,_Row
034E 042F mov R16,R20
0350 152F mov R17,R21
0352 69DF rcall _WriteCharacter
0354 .dbline 235
0354 ; R_flag=0;//回到左边屏幕第0列;
0354 2224 clr R2
0356 20920200 sts _R_flag,R2
035A .dbline 236
035A ; Column=0;
035A 20920100 sts _Column,R2
035E .dbline 237
035E ; if(shift1==1)
035E 6130 cpi R22,1
0360 31F4 brne L90
0362 .dbline 238
0362 ; {Row+=2;shift1=0;}
0362 .dbline 238
0362 80910000 lds R24,_Row
0366 8E5F subi R24,254 ; addi 2
0368 80930000 sts _Row,R24
036C .dbline 238
036C 6627 clr R22
036E .dbline 238
036E L90:
036E .dbline 239
036E ; if (Row>7) Row=0;
036E 87E0 ldi R24,7
0370 20900000 lds R2,_Row
0374 8215 cp R24,R2
0376 08F0 brlo X5
0378 50C0 rjmp L85
037A X5:
037A .dbline 239
037A 2224 clr R2
037C 20920000 sts _Row,R2
0380 .dbline 240
0380 ; }
0380 4CC0 rjmp L85
0382 L86:
0382 .dbline 242
0382 ; else
0382 ; {WriteCharacter(p,Row,Column,!R_flag);
0382 .dbline 242
0382 20900200 lds R2,_R_flag
0386 2220 tst R2
0388 19F4 brne L94
038A 61E0 ldi R22,1
038C 70E0 ldi R23,0
038E 02C0 rjmp L95
0390 L94:
0390 6627 clr R22
0392 7727 clr R23
0394 L95:
0394 6A83 std y+2,R22
0396 20900100 lds R2,_Column
039A 2882 std y+0,R2
039C 20910000 lds R18,_Row
03A0 042F mov R16,R20
03A2 152F mov R17,R21
03A4 40DF rcall _WriteCharacter
03A6 .dbline 243
03A6 ; Column=Column+8;}
03A6 80910100 lds R24,_Column
03AA 885F subi R24,248 ; addi 8
03AC 80930100 sts _Column,R24
03B0 .dbline 243
03B0 .dbline 244
03B0 ; }
03B0 34C0 rjmp L85
03B2 L84:
03B2 .dbline 246
03B2 ; else
03B2 ; {if(Column==56) //写完后需要换右边的屏幕
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -