?? megalcd.s
字號:
.dbline 252
; hz_p++;
subi R20,255 ; offset = 1
sbci R21,255
.dbline 253
; ocmj_write(*hz_p-0xa0);
movw R30,R20
ldd R16,z+0
subi R16,160
xcall _ocmj_write
.dbline 254
; hz_p++;
subi R20,255 ; offset = 1
sbci R21,255
.dbline 255
; if(x<0x09)
mov R24,R10
cpi R24,9
brsh L31
.dbline 256
; x++;
inc R10
xjmp L32
L31:
.dbline 258
; else
; {
.dbline 259
; x=0x02;
ldi R24,2
mov R10,R24
.dbline 260
; y++;
inc R22
.dbline 261
; }
L32:
.dbline 262
L29:
.dbline 246
movw R30,R20
ldd R2,z+0
tst R2
brne L28
.dbline -2
L27:
xcall pop_gset3
.dbline 0 ; func end
ret
.dbsym r hz_p 20 pc
.dbsym r y 22 c
.dbsym r x 10 c
.dbend
.dbfunc e asc_tran _asc_tran fV
; asc_p -> R20,R21
; y -> R22
; x -> R10
.even
_asc_tran::
xcall push_gset3
mov R22,R18
mov R10,R16
ldd R20,y+6
ldd R21,y+7
.dbline -1
.dbline 267
; }
; }
; /* 傳送ASCII字母到LCD */
; /* x:0x00~0x0f y:0~64 */
; void asc_tran(unsigned char x,unsigned char y,unsigned char *asc_p)
; {
.dbline 268
; x+=4;
mov R24,R10
subi R24,252 ; addi 4
mov R10,R24
xjmp L35
L34:
.dbline 270
; while((*asc_p)!=0)
; {
.dbline 271
; ocmj_write(0xf1);
ldi R16,241
xcall _ocmj_write
.dbline 272
; ocmj_write(x);
mov R16,R10
xcall _ocmj_write
.dbline 273
; ocmj_write(y);
mov R16,R22
xcall _ocmj_write
.dbline 274
; ocmj_write(*asc_p);
movw R30,R20
ldd R16,z+0
xcall _ocmj_write
.dbline 275
; asc_p++;
subi R20,255 ; offset = 1
sbci R21,255
.dbline 276
; if (x<0x13)
mov R24,R10
cpi R24,19
brsh L37
.dbline 277
; x++;
inc R10
xjmp L38
L37:
.dbline 279
; else
; {
.dbline 280
; x=0x04;
ldi R24,4
mov R10,R24
.dbline 281
; y+=8;
subi R22,248 ; addi 8
.dbline 282
; }
L38:
.dbline 283
L35:
.dbline 269
movw R30,R20
ldd R2,z+0
tst R2
brne L34
.dbline -2
L33:
xcall pop_gset3
.dbline 0 ; func end
ret
.dbsym r asc_p 20 pc
.dbsym r y 22 c
.dbsym r x 10 c
.dbend
.dbfunc e pset _pset fV
; y -> R20
; x -> R22
.even
_pset::
xcall push_gset2
mov R20,R18
mov R22,R16
.dbline -1
.dbline 287
; }
; }
; /* 畫點函數 */
; void pset(unsigned char x,unsigned char y)
; {
.dbline 288
; ocmj_write(0xf2);
ldi R16,242
xcall _ocmj_write
.dbline 289
; ocmj_write(x+32);
mov R16,R22
subi R16,224 ; addi 32
xcall _ocmj_write
.dbline 290
; ocmj_write(y);
mov R16,R20
xcall _ocmj_write
.dbline -2
L39:
xcall pop_gset2
.dbline 0 ; func end
ret
.dbsym r y 20 c
.dbsym r x 22 c
.dbend
.dbfunc e line _line fV
; incy -> R20
; incx -> R22
; delta_y -> R10,R11
; delta_x -> y+4
; t -> R14
; yerr -> y+2
; xerr -> y+0
; distance -> R12,R13
; y2 -> y+22
; x2 -> y+20
; y1 -> y+18
; x1 -> y+16
.even
_line::
xcall push_arg4
xcall push_gset5
sbiw R28,6
.dbline -1
.dbline 294
; }
; /* 畫線函數 */
; void line(unsigned char x1,unsigned char y1,unsigned char x2,unsigned char y2)
; {
.dbline 296
; unsigned char t;
; signed int xerr=0,yerr=0;
clr R0
clr R1
std y+1,R1
std y+0,R0
.dbline 296
std y+3,R1
std y+2,R0
.dbline 301
; signed int delta_x,delta_y,distance;
; signed char incx,incy;
;
; /* 計算兩個方向的長度 */
; delta_x=x2-x1;
ldd R2,y+16
clr R3
ldd R4,y+20
clr R5
sub R4,R2
sbc R5,R3
std y+5,R5
std y+4,R4
.dbline 302
; delta_y=y2-y1;
ldd R2,y+18
clr R3
ldd R10,y+22
clr R11
sub R10,R2
sbc R11,R3
.dbline 305
;
; /* 計算增量的方向,增量為"0"表示為垂直或水平線 */
; if(delta_x>0)
clr R2
movw R0,R4
cp R2,R4
cpc R3,R5
brge L41
.dbline 306
; incx=1;
ldi R22,1
xjmp L42
L41:
.dbline 308
; else
; {
.dbline 309
; if( delta_x==0 )
ldd R0,y+4
ldd R1,y+5
tst R0
brne L43
tst R1
brne L43
X0:
.dbline 310
; incx=0;
clr R22
xjmp L44
L43:
.dbline 312
; else
; {
.dbline 313
; incx=-1;
ldi R22,255
.dbline 314
; delta_x =-delta_x;
ldd R24,y+4
ldd R25,y+5
com R24
com R25
subi R24,0xFF
sbci R25,0xFF
std y+5,R25
std y+4,R24
.dbline 315
; }
L44:
.dbline 316
; }
L42:
.dbline 317
; if(delta_y>0)
clr R2
clr R3
cp R2,R10
cpc R3,R11
brge L45
.dbline 318
; incy=1;
ldi R20,1
xjmp L46
L45:
.dbline 320
; else
; {
.dbline 321
; if( delta_y==0 )
tst R10
brne L47
tst R11
brne L47
X1:
.dbline 322
; incy=0;
clr R20
xjmp L48
L47:
.dbline 324
; else
; {
.dbline 325
; incy=-1;
ldi R20,255
.dbline 326
; delta_y =-delta_y;
movw R24,R10
com R24
com R25
subi R24,0xFF
sbci R25,0xFF
movw R10,R24
.dbline 327
; }
L48:
.dbline 328
; }
L46:
.dbline 330
; /* 確定畫線的范圍 */
; if( delta_x > delta_y ) distance=delta_x;
ldd R0,y+4
ldd R1,y+5
cp R10,R0
cpc R11,R1
brge L49
.dbline 330
movw R12,R0
xjmp L50
L49:
.dbline 331
; else distance=delta_y;
movw R12,R10
L50:
.dbline 334
;
; /* 畫線 */
; for(t=0;t<= distance+1;t++)
clr R14
xjmp L54
L51:
.dbline 335
; {
.dbline 336
; ocmj_write(0xf2);
ldi R16,242
xcall _ocmj_write
.dbline 337
; ocmj_write(x1+32);
ldd R16,y+16
subi R16,224 ; addi 32
xcall _ocmj_write
.dbline 338
; ocmj_write(y1);
ldd R16,y+18
xcall _ocmj_write
.dbline 339
; xerr += delta_x ;
ldd R0,y+0
ldd R1,y+1
ldd R16,y+4
ldd R17,y+5
add R0,R16
adc R1,R17
std y+1,R1
std y+0,R0
.dbline 340
; yerr += delta_y ;
ldd R0,y+2
ldd R1,y+3
add R0,R10
adc R1,R11
std y+3,R1
std y+2,R0
.dbline 341
; if( xerr > distance )
ldd R0,y+0
ldd R1,y+1
cp R12,R0
cpc R13,R1
brge L55
.dbline 342
; {
.dbline 343
; xerr-=distance;
sub R0,R12
sbc R1,R13
std y+1,R1
std y+0,R0
.dbline 344
; x1+=incx;
ldd R0,y+16
add R0,R22
std y+16,R0
.dbline 345
; }
L55:
.dbline 346
; if( yerr > distance )
ldd R0,y+2
ldd R1,y+3
cp R12,R0
cpc R13,R1
brge L57
.dbline 347
; {
.dbline 348
; yerr-=distance;
sub R0,R12
sbc R1,R13
std y+3,R1
std y+2,R0
.dbline 349
; y1+=incy;
ldd R0,y+18
add R0,R20
std y+18,R0
.dbline 350
; }
L57:
.dbline 351
L52:
.dbline 334
inc R14
L54:
.dbline 334
movw R24,R12
adiw R24,1
mov R2,R14
clr R3
cp R24,R2
cpc R25,R3
brge L51
.dbline -2
L40:
adiw R28,6
xcall pop_gset5
adiw R28,4
.dbline 0 ; func end
ret
.dbsym r incy 20 C
.dbsym r incx 22 C
.dbsym r delta_y 10 I
.dbsym l delta_x 4 I
.dbsym r t 14 c
.dbsym l yerr 2 I
.dbsym l xerr 0 I
.dbsym r distance 12 I
.dbsym l y2 22 c
.dbsym l x2 20 c
.dbsym l y1 18 c
.dbsym l x1 16 c
.dbend
.dbfunc e circle _circle fV
; rs -> R20,R21
; xt -> R22,R23
; rr -> y+2
; xx -> R14,R15
; y -> R12
; x -> R10
; yt -> y+0
; r -> y+18
; y0 -> y+16
; x0 -> y+14
.even
_circle::
xcall push_arg4
xcall push_gset5
sbiw R28,4
.dbline -1
.dbline 355
; }
; }
; /* 畫圓函數 */
; void circle(unsigned char x0,unsigned char y0,unsigned char r)
; {
.dbline 358
; unsigned char x,y;
; unsigned int xx,rr,xt,yt,rs;
; yt=r;
ldd R2,y+18
clr R3
std y+1,R3
std y+0,R2
.dbline 359
; rr=r*r+1; //補償 1 修正方形
ldd R0,y+18
mov R16,R0
mul R0,R16
movw R24,R0
adiw R24,1
std y+3,R25
std y+2,R24
.dbline 360
; rs=yt*3/4; //畫8分之一圓弧
ldi R16,3
ldi R17,0
ldd R18,y+0
ldd R19,y+1
xcall empy16s
movw R20,R16
lsr R21
ror R20
lsr R21
ror R20
.dbline 361
; for (xt=0;xt<=rs;xt++)
clr R22
clr R23
xjmp L63
L60:
.dbline 362
; {
.dbline 363
; xx=xt*xt;
movw R18,R22
movw R16,R22
xcall empy16s
movw R14,R16
xjmp L65
L64:
.dbline 365
ldd R24,y+0
ldd R25,y+1
sbiw R24,1
std y+1,R25
std y+0,R24
L65:
.dbline 364
ldd R2,y+2
ldd R3,y+3
sub R2,R14
sbc R3,R15
ldd R18,y+0
ldd R19,y+1
movw R16,R18
xcall empy16s
cp R2,R16
cpc R3,R17
brlo L64
.dbline 366
ldd R10,y+14
clr R11
add R10,R22
adc R11,R23
.dbline 367
ldd R12,y+16
clr R13
ldd R0,y+0
ldd R1,y+1
sub R12,R0
sbc R13,R1
.dbline 368
mov R18,R12
mov R16,R10
xcall _pset
.dbline 369
ldd R10,y+14
clr R11
sub R10,R22
sbc R11,R23
.dbline 370
mov R18,R12
mov R16,R10
xcall _pset
.dbline 371
ldd R12,y+16
clr R13
ldd R0,y+0
ldd R1,y+1
add R12,R0
adc R13,R1
.dbline 372
mov R18,R12
mov R16,R10
xcall _pset
.dbline 373
ldd R10,y+14
clr R11
add R10,R22
adc R11,R23
.dbline 374
mov R18,R12
mov R16,R10
xcall _pset
.dbline 376
ldd R10,y+14
clr R11
ldd R0,y+0
ldd R1,y+1
add R10,R0
adc R11,R1
.dbline 377
ldd R12,y+16
clr R13
sub R12,R22
sbc R13,R23
.dbline 378
mov R18,R12
mov R16,R10
xcall _pset
.dbline 379
ldd R10,y+14
clr R11
ldd R0,y+0
ldd R1,y+1
sub R10,R0
sbc R11,R1
.dbline 380
mov R18,R12
mov R16,R10
xcall _pset
.dbline 381
ldd R12,y+16
clr R13
add R12,R22
adc R13,R23
.dbline 382
mov R18,R12
mov R16,R10
xcall _pset
.dbline 383
ldd R10,y+14
clr R11
ldd R0,y+0
ldd R1,y+1
add R10,R0
adc R11,R1
.dbline 384
mov R18,R12
mov R16,R10
xcall _pset
.dbline 385
L61:
.dbline 361
subi R22,255 ; offset = 1
sbci R23,255
L63:
.dbline 361
cp R20,R22
cpc R21,R23
brlo X2
xjmp L60
X2:
.dbline -2
L59:
adiw R28,4
xcall pop_gset5
adiw R28,4
.dbline 0 ; func end
ret
.dbsym r rs 20 i
.dbsym r xt 22 i
.dbsym l rr 2 i
.dbsym r xx 14 i
.dbsym r y 12 c
.dbsym r x 10 c
.dbsym l yt 0 i
.dbsym l r 18 c
.dbsym l y0 16 c
.dbsym l x0 14 c
.dbend
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -