;*****************************************
;注意:该函数为了提高效率,求平方时用的是直接读取数据的方法
;这样会占用一些空间,而且这里对画的圆有一定要求:R<160
;如果谁有更好的算法,如果能告诉我,非常感谢~
;函数说明:画圆
;函数说明:求平方,入参A(<160).出参80,$81
;函数说明:求两整型数的和(80,81)+(82,83)->(82,83)
;函数说明:比较($80,$81),($82,$83)的大小,前者大(or=):SEC,否则CLC
;*****************************************
PowerData1 .DB $00,$00,$01,$00,$04,$00,$09,$00,$10,$00,$19,$00,$24,$00,$31,$00,$40,$00,$51,$00
.DB $64,$00,$79,$00,$90,$00,$A9,$00,$C4,$00,$E1,$00,$00,$01,$21,$01,$44,$01,$69,$01
.DB $90,$01,$B9,$01,$E4,$01,$11,$02,$40,$02,$71,$02,$A4,$02,$D9,$02,$10,$03,$49,$03
.DB $84,$03,$C1,$03,$00,$04,$41,$04,$84,$04,$C9,$04,$10,$05,$59,$05,$A4,$05,$F1,$05
.DB $40,$06,$91,$06,$E4,$06,$39,$07,$90,$07,$E9,$07,$44,$08,$A1,$08,$00,$09,$61,$09
.DB $C4,$09,$29,$0A,$90,$0A,$F9,$0A,$64,$0B,$D1,$0B,$40,$0C,$B1,$0C,$24,$0D,$99,$0D
.DB $10,$0E,$89,$0E,$04,$0F,$81,$0F,$00,$10,$81,$10,$04,$11,$89,$11,$10,$12,$99,$12
.DB $24,$13,$B1,$13,$40,$14,$D1,$14,$64,$15,$F9,$15,$90,$16,$29,$17,$C4,$17,$61,$18
.DB $00,$19,$A1,$19,$44,$1A,$E9,$1A,$90,$1B,$39,$1C,$E4,$1C,$91,$1D,$40,$1E,$F1,$1E
.DB $A4,$1F,$59,$20,$10,$21,$C9,$21,$84,$22,$41,$23,$00,$24,$C1,$24,$84,$25,$49,$26
.DB $10,$27,$D9,$27,$A4,$28,$71,$29,$40,$2A,$11,$2B,$E4,$2B,$B9,$2C,$90,$2D,$69,$2E
.DB $44,$2F,$21,$30,$00,$31,$E1,$31,$C4,$32,$A9,$33,$90,$34,$79,$35,$64,$36,$51,$37
.DB $40,$38,$31,$39,$24,$3A,$19,$3B,$10,$3C,$09,$3D,$04,$3E
PowerData2 .DB $01,$3F,$00,$40,$01,$41
.DB $04,$42,$09,$43,$10,$44,$19,$45,$24,$46,$31,$47,$40,$48,$51,$49,$64,$4A,$79,$4B
.DB $90,$4C,$A9,$4D,$C4,$4E,$E1,$4F,$00,$51,$21,$52,$44,$53,$69,$54,$90,$55,$B9,$56
.DB $E4,$57,$11,$59,$40,$5A,$71,$5B,$A4,$5C,$D9,$5D,$10,$5F,$49,$60,$84,$61,$C1,$62
Power:
ASL
TAX
BCS PowerLabel
LDA PowerData1,x
STA $80
LDA PowerData1+1,x
STA $81
RTS
PowerLabel:
LDA PowerData2,x
STA $80
LDA PowerData2+1,x
STA $81
RTS
AddInt:
LDA $80
CLC
ADC $82
STA $82
LDA $81
ADC $83
STA $83
RTS
Comp:
LDA $81
CMP $83
BEQ CompLabel
RTS
CompLabel:
LDA $80
CMP $82
RTS
;*****************************************
CircleReturn:
PLA
STA $86
PLA
STA $85
PLA
STA $84
PLA
STA $47
PLA
STA $46
PLA
STA $45
PLA
STA $44
PLA
STA $43
PLA
STA $42
PLA
STA $41
PLA
STA $40
CircleReturn1:
RTS
Circle: STA $300f
LDA $3004
CMP #$a0
BCS CircleReturn1
LDA $40
PHA
LDA $41
PHA
LDA $42
PHA
LDA $43
PHA
LDA $44
PHA
LDA $45
PHA
LDA $46
PHA
LDA $47
PHA
LDA $84
PHA
LDA $85
PHA
LDA $86
PHA
LDA $300f
STA $85 ;save A in $85
LDA $3000 ;将圆周上四点的坐标按上下左右的
STA $40 ;顺序依次送$40~$47
STA $42
TAX
SEC
SBC $3004
STA $44
TXA
CLC
ADC $3004
STA $46
LDA $3001
STA $45
STA $47
TAX
SEC
SBC $3004
STA $41
TXA
CLC
ADC $3004
STA $43 ;*****************************
LDA $3004
STA $84 ;index x
LDA #$00
STA $86 ;index y
JSR CircleDraw
INC $86
CircleLabel1:
LDA $84
JSR Power
LDA $80
STA $82
LDA $81
STA $83
LDA $86
JSR Power
JSR AddInt
LDA $3004
JSR Power
JSR Comp
BCC CircleLabel2
INC $86 ;y->y+1
DEC $40
INC $42
INC $45
DEC $47
JSR CircleDraw
JMP CircleLabel1
CircleLabel2:
DEC $84
BNE CircleLabel3
JMP CircleReturn
CircleLabel3:
INC $41
DEC $43
INC $44
DEC $46
JSR CircleDraw
JMP CircleLabel1
CircleDraw:
LDA $85
LDX $40
LDY $41
JSR PutPoint
LDA $85
LDX $42
LDY $43
JSR PutPoint
LDA $85
LDX $44
LDY $45
JSR PutPoint
LDA $85
LDX $46
LDY $47
JSR PutPoint
RTS
[此贴子已经被作者于2005-1-10 19:12:22编辑过]
|