| 
 
注册时间2006-5-15最后登录1970-1-1 
 | 
 
| 听说YAN(敬礼) 的编译器中的4灰链接中需要用到这些做图函数,所以就利用把黑白版的作图函数反了一下,然后进行了细致的修改,就是下面的这个,由于用最简单的方法写的,所以应该支持所有可以用4灰度的机型,不支持的话可以将地址重新定义一下就好了,还有一个清屏的代码,很简单,大家不要笑哦! 这些函数都是在假定4灰度显存地址为$1380的情况下写的,所以当显存位置不同时可能无法达到预期效果,还有此代码以成功通过zhaofeixxx的汇编编译器的编译!
 目前填充椭圆和填充圆好象还不太理想!
 
 z80   =$80
 z81   =$81
 z82   =$82
 a03C3  =$03C3
 a03C4  =$03C4
 a03C5  =$03C5
 a03C6  =$03C6
 a03C7  =$03C7
 a03C8  =$03C8
 a03C9  =$03C9
 a03CB  =$03CB
 a03CC  =$03CC
 a03CD  =$03CD
 a03CE  =$03CE
 a03CF  =$03CF
 a03D0  =$03D0
 a03D1  =$03D1
 a03D2  =$03D2
 a03D3  =$03D3
 a03D4  =$03D4
 a03D5  =$03D5
 a03D6  =$03D6
 a03D7  =$03D7
 a03D8  =$03D8
 a03D9  =$03D9
 a03DA  =$03DA
 a03DB  =$03DB
 a03DC  =$03DC
 ;程序入口
 jmp aC301;直线($03c3,$03c4,$03c5,$03c6分别为x1,y1,x2,y2)
 jmp Circle;圆($03c3,$03c4为圆心坐标,$03d6为半径)
 jmp Ellipse;椭圆($03c3,$03c4为椭圆中心,$03db,$03dc分别为椭圆的半长轴和半短轴)
 jmp Fcircle;填充圆(同圆)
 jmp Fellipse;填充椭圆(同椭圆)
 jmp Square;方块(同直线)
 jmp Fsquare;填充方块(同直线)
 Fsquare
 LDA a03C4
 STA a03CB
 LDA a03C3
 CMP a03C5
 BCC aC1B9
 LDA a03C3
 LDX a03C5
 STA a03C5
 STX a03C3
 LDA a03C4
 LDX a03C6
 STA a03C6
 STX a03C4
 aC1B9
 LDA a03C4
 CMP a03C6
 BCC aC1CD
 LDA a03C4
 LDX a03C6
 STA a03C6
 STX a03C4
 aC1CD
 LDA a03C6
 PHA
 LDA a03C4
 STA a03C6
 aC1D7
 JSR aC301
 PLA
 CMP a03C6
 BEQ aC1EA
 PHA
 INC a03C6
 INC a03C4
 JMP aC1D7
 aC1EA
 LDA a03CB
 STA a03C4
 RTS
 aC1F1
 STA a03C4
 STX a03C5
 STY a03C6
 Square
 LDA a03C3
 CMP a03C5
 BCC aC21A
 LDA a03C3
 LDX a03C5
 STA a03C5
 STX a03C3
 LDA a03C4
 LDX a03C6
 STA a03C6
 STX a03C4
 aC21A
 LDA a03C5
 PHA
 LDA a03C3
 STA a03C5
 JSR aC301
 PLA
 STA a03C5
 LDA a03C6
 PHA
 LDA a03C4
 STA a03C6
 JSR aC301
 PLA
 STA a03C6
 LDA a03C4
 PHA
 LDA a03C6
 STA a03C4
 JSR aC301
 PLA
 STA a03C4
 LDA a03C3
 PHA
 LDA a03C5
 STA a03C3
 JSR aC301
 PLA
 STA a03C3
 RTS
 LDA a03C7
 CMP a03C8
 BCC aC26C
 SEC
 SBC a03C8
 RTS
 aC26C
 LDA a03C8
 SEC
 SBC a03C7
 RTS
 aC274
 LDA #$80
 STA z80
 LDA #$13
 STA z81
 LDX #$28
 aC27E
 CLC
 LDA a03C8
 ADC z80
 STA z80
 LDA z81
 ADC #$00
 STA z81
 DEX
 BNE aC27E
 LDA a03C7
 LSR
 LSR
 CLC
 ADC z80
 STA z80
 LDA #$00
 ADC z81
 STA z81
 LDA a03C7
 AND #$03
 TAX
 LDA aC2AA,X
 RTS
 aC2AA
 .DB $80
 .DB $20
 .DB $08
 .DB $02
 aC2BB
 LDA a03C7
 BEQ aC2E1
 CMP #$A0
 BCS aC2E1
 LDA a03C8
 CMP #$50
 BCS aC2E1
 LDA a03C9
 BEQ aC2EC
 CMP #$01
 BEQ aC2E2
 CMP #$02
 BNE aC2E1
 JSR aC274
 LDY #$00
 EOR (z80),Y
 STA (z80),Y
 aC2E1
 RTS
 aC2E2
 JSR aC274
 LDY #$00
 ORA (z80),Y
 STA (z80),Y
 RTS
 aC2EC
 JSR aC274
 LDY #$00
 EOR #$FF
 AND (z80),Y
 STA (z80),Y
 RTS
 aC2F8
 STA a03C4
 STX a03C5
 STY a03C6
 aC301
 ;line
 LDX a03C3
 CPX a03C5
 BNE aC30C
 JMP aC3C6
 aC30C
 LDX a03C4
 CPX a03C6
 BNE aC317
 JMP aC431
 aC317
 LDA a03C5
 CMP a03C3
 BCS aC33B
 LDA a03C3
 PHA
 LDA a03C5
 STA a03C3
 PLA
 STA a03C5
 LDA a03C4
 PHA
 LDA a03C6
 STA a03C4
 PLA
 STA a03C6
 aC33B
 LDA a03C5
 SEC
 SBC a03C3
 STA a03CD
 LDA a03C6
 SEC
 SBC a03C4
 STA a03CE
 LDA a03CE
 JSR aC50C
 STA a03CC
 JSR aC4E7
 LDA #$00
 STA a03D1
 STA a03CF
 STA a03D0
 LDA a03C3
 STA a03C7
 LDA a03C4
 STA a03C8
 aC372
 JSR aC2BB
 CLC
 LDA a03CF
 ADC a03CD
 STA a03CF
 CLC
 LDA a03D0
 ADC a03CE
 STA a03D0
 LDA a03CF
 CMP a03D2
 BCC aC39E
 LDA a03CF
 SEC
 SBC a03D2
 STA a03CF
 INC a03C7
 aC39E
 LDA a03D0
 CMP a03D2
 BCC aC3BA
 LDA a03D0
 SEC
 SBC a03D2
 STA a03D0
 CLC
 LDA a03C8
 ADC a03CC
 STA a03C8
 aC3BA
 INC a03D1
 LDA a03D2
 CMP a03D1
 BCS aC372
 RTS
 aC3C6
 LDA a03C6
 SEC
 SBC a03C4
 STA a03CE
 LDA a03CE
 BEQ aC3E7
 BPL aC3ED
 SEC
 SBC #$01
 EOR #$FF
 STA a03CE
 LDA #$FF
 STA a03CC
 JMP aC3F2
 aC3E7
 STA a03CC
 JMP aC3F2
 aC3ED
 LDA #$01
 STA a03CC
 aC3F2
 LDA #$00
 STA a03D1
 LDA a03C3
 STA a03C7
 LDA a03C4
 STA a03C8
 aC403
 JSR aC2BB
 CLC
 LDA a03C8
 ADC a03CC
 STA a03C8
 INC a03D1
 LDA a03CE
 CMP a03D1
 BCS aC403
 RTS
 aC41C
 BEQ aC423
 CMP #$A0
 BCS aC426
 RTS
 aC423
 LDA #$01
 RTS
 aC426
 LDA #$9F
 RTS
 aC429
 CMP #$50
 BCS aC42E
 RTS
 aC42E
 LDA #$4F
 RTS
 aC431
 LDA a03C3
 CMP a03C5
 BCC aC442
 LDX a03C5
 STA a03C5
 STX a03C3
 aC442
 LDA a03C3
 CMP #$A0
 BCC aC44E
 LDA #$9F
 STA a03C3
 aC44E
 LDA a03C5
 CMP #$A0
 BCC aC45A
 LDA #$9F
 STA a03C5
 aC45A
 LDA a03C4
 CMP #$50
 BCC aC463
 LDA #$4F
 aC463
 STA a03C8
 LDA a03C3
 BNE aC470
 LDA #$01
 STA a03C3
 aC470
 STA a03C7
 JSR aC274
 STA z82
 LDA a03C5
 SEC
 SBC a03C3
 TAX
 INX
 JSR aC4A8
 CPX #$00
 BEQ aC4C2
 BNE aC496
 aC48A
 LDA #$AA
 STA z82
 JSR aC4A8
 TXA
 SEC
 SBC #$03
 TAX
 aC496
 INC z80
 BNE aC49C
 INC z81
 aC49C
 CPX #$04
 BCS aC48A
 LDA #$80
 STA z82
 CPX #$00
 BEQ aC4C2
 aC4A8
 LDY #$00
 LDA a03C9
 CMP #$01
 BEQ aC4C3
 BCC aC4D3
 aC4B3
 LDA z82
 EOR (z80),Y
 STA (z80),Y
 DEX
 LSR z82
 LSR z82
 BCS aC4C2
 CPX #$00
 BNE aC4B3
 aC4C2
 RTS
 aC4C3
 LDA z82
 ORA (z80),Y
 STA (z80),Y
 DEX
 LSR z82
 LSR z82
 BCS aC4C2
 CPX #$00
 BNE aC4C3
 RTS
 aC4D3
 LDA (z80),Y
 EOR #$FF
 ORA z82
 EOR #$FF
 STA (z80),Y
 DEX
 LSR z82
 LSR z82
 BCS aC4C2
 CPX #$00
 BNE aC4D3
 RTS
 aC4E7
 LDA a03CE
 JSR aC503
 STA a03CE
 CMP a03CD
 BCC aC4FB
 STA a03D2
 JMP aC501
 aC4FB
 LDA a03CD
 STA a03D2
 aC501
 CLC
 RTS
 aC503
 BPL aC50A
 SEC
 SBC #$01
 EOR #$FF
 aC50A
 CLC
 RTS
 aC50C
 BMI aC511
 LDA #$01
 RTS
 aC511
 LDA #$FF
 RTS
 Fcircle
 LDA #$01
 STA a03DA
 JMP aC529
 Fellipse
 LDA #$01
 STA a03DA
 JMP aC550
 Circle
 LDA #$00
 STA a03DA
 aC529
 LDA #$00
 STA a03D9
 LDA a03D6
 STA a03DB
 STA a03DC
 BEQ aC53C
 JMP aC573
 aC53C
 LDA a03C3
 STA a03C7
 LDA a03C4
 STA a03C8
 JMP aC2BB
 Ellipse
 LDA #$00
 STA a03DA
 aC550
 LDA #$00
 STA a03D9
 LDA a03DB
 CMP a03DC
 BNE aC562
 LDA a03DB
 BEQ aC53C
 aC562
 LDA a03DB
 STA a03D6
 CMP a03DC
 BCS aC573
 LDA a03DC
 STA a03D6
 aC573
 LDA #$FF
 STA a03D5
 LDA #$01
 STA a03CC
 STA a03D1
 JSR aC720
 LDA #$00
 STA a03D3
 STA a03D4
 STA a03D2
 STA a03CD
 STA a03CE
 LDA a03DB
 STA a03D7
 CLC
 ADC a03C3
 STA a03C7
 LDA #$00
 STA a03D8
 LDA a03C4
 STA a03C8
 LDA a03DA
 BEQ aC5B7
 JSR aC7C3
 JMP aC5BA
 aC5B7
 JSR aC849
 aC5BA
 LDA a03D4
 BNE aC63D
 LDA a03CD
 CLC
 ADC a03DB
 STA a03CD
 LDA a03CD
 CMP a03D6
 BMI aC5FE
 CLC
 LDA a03D7
 ADC a03D5
 STA a03D7
 LDA a03CD
 SEC
 SBC a03D6
 STA a03CD
 LDA a03D7
 CLC
 ADC #$01
 CMP a03DB
 BEQ aC5FE
 LDA a03DA
 BEQ aC5FB
 JSR aC7C3
 JMP aC5FE
 aC5FB
 JSR aC849
 aC5FE
 JSR aC730
 JSR aC795
 LDA a03D0
 BEQ aC60C
 JMP aC702
 aC60C
 LDA a03CF
 CMP #$03
 BCC aC616
 JMP aC702
 aC616
 LDA a03CC
 SEC
 SBC #$01
 EOR #$FF
 STA a03CC
 LDA a03D1
 SEC
 SBC #$01
 EOR #$FF
 STA a03D1
 CLC
 ADC #$02
 STA a03D1
 LDA a03D4
 EOR #$01
 STA a03D4
 JMP aC702
 aC63D
 CLC
 LDA a03CE
 ADC a03DC
 STA a03CE
 CMP a03D6
 BMI aC69F
 LDA a03CE
 SEC
 SBC a03D6
 STA a03CE
 CLC
 LDA a03D8
 ADC a03CC
 STA a03D8
 CMP #$01
 BEQ aC668
 CMP #$02
 BNE aC68C
 aC668
 LDA a03D9
 BNE aC68C
 LDA a03D7
 PHA
 LDA a03DB
 STA a03D7
 LDA a03DA
 BEQ aC682
 JSR aC7C3
 JMP aC685
 aC682
 JSR aC849
 aC685
 PLA
 STA a03D7
 JMP aC69F
 aC68C
 LDA #$01
 STA a03D9
 LDA a03DA
 BEQ aC69C
 JSR aC7C3
 JMP aC69F
 aC69C
 JSR aC849
 aC69F
 JSR aC763
 LDA a03CF
 PHA
 LDA a03D0
 PHA
 LDA a03D2
 STA a03D0
 LDA a03D1
 STA a03CF
 JSR aC795
 LDA a03CF
 STA a03D1
 LDA a03D0
 STA a03D2
 PLA
 STA a03D0
 PLA
 STA a03CF
 LDA a03D2
 BNE aC702
 LDA a03D1
 CMP #$02
 BEQ aC6DB
 BCS aC702
 aC6DB
 LDA a03D5
 SEC
 SBC #$01
 EOR #$FF
 STA a03D5
 LDA a03CF
 SEC
 SBC #$01
 EOR #$FF
 STA a03CF
 CLC
 ADC #$02
 STA a03CF
 LDA a03D3
 SEC
 SBC #$01
 EOR #$FF
 STA a03D3
 aC702
 LDA a03D7
 BEQ aC70A
 JMP aC5BA
 aC70A
 RTS
 BEQ aC71C
 BMI aC717
 SEC
 SBC #$02
 BPL aC71E
 JMP aC71C
 aC717
 SEC
 SBC #$02
 BMI aC71E
 aC71C
 SEC
 RTS
 aC71E
 CLC
 RTS
 aC720
 LDA a03D6
 ASL
 SEC
 SBC #$01
 STA a03CF
 LDA #$01
 STA a03D0
 RTS
 aC730
 LDA a03D4
 BEQ aC740
 CLC
 LDA a03D3
 ADC a03CF
 STA a03D3
 RTS
 aC740
 LDA a03D3
 CMP a03CF
 BCC aC753
 LDA a03D3
 SEC
 SBC a03CF
 STA a03D3
 RTS
 aC753
 LDA a03CF
 SEC
 SBC a03D3
 STA a03D3
 LDA #$01
 STA a03D4
 RTS
 aC763
 LDA a03D4
 BEQ aC78A
 LDA a03D3
 CMP a03D1
 BEQ aC772
 BCS aC782
 aC772
 LDA a03D1
 SEC
 SBC a03D3
 STA a03D3
 LDA #$00
 STA a03D4
 RTS
 aC782
 SEC
 SBC a03D1
 STA a03D3
 RTS
 aC78A
 LDA a03D3
 CLC
 ADC a03D1
 STA a03D3
 RTS
 aC795
 LDA a03D0
 BEQ aC7B9
 LDA a03CF
 CMP #$02
 BEQ aC7A3
 BCS aC7B2
 aC7A3
 LDA #$02
 SEC
 SBC a03CF
 STA a03CF
 LDA #$00
 STA a03D0
 RTS
 aC7B2
 SEC
 SBC #$02
 STA a03CF
 RTS
 aC7B9
 LDA a03CF
 CLC
 ADC #$02
 STA a03CF
 RTS
 aC7C3
 LDA a03CD
 PHA
 LDA a03CE
 PHA
 LDA a03C4
 PHA
 CLC
 ADC a03D8
 STA a03C4
 LDA a03C3
 PHA
 SEC
 SBC a03D7
 STA a03C3
 PLA
 PHA
 CLC
 ADC a03D7
 STA a03C5
 LDA a03C3
 CMP a03C5
 BCC aC7FF
 BEQ aC7FF
 LDA #$00
 STA a03C3
 JSR aC431
 JMP aC802
 aC7FF
 JSR aC431
 aC802
 PLA
 TAX
 PLA
 TAY
 PHA
 TXA
 PHA
 SEC
 SBC a03D7
 STA a03C3
 TYA
 SEC
 SBC a03D8
 STA a03C4
 TXA
 CLC
 ADC a03D7
 STA a03C5
 LDA a03C3
 CMP a03C5
 BCC aC835
 BEQ aC835
 LDA #$00
 STA a03C3
 JSR aC431
 JMP aC838
 aC835
 JSR aC431
 aC838
 PLA
 STA a03C3
 PLA
 STA a03C4
 PLA
 STA a03CE
 PLA
 STA a03CD
 RTS
 aC849
 LDA a03C3
 SEC
 SBC a03D7
 STA a03C7
 LDA a03C4
 CLC
 ADC a03D8
 STA a03C8
 JSR aC2BB
 LDA a03C3
 CLC
 ADC a03D7
 STA a03C7
 JSR aC2BB
 LDA a03C3
 SEC
 SBC a03D7
 STA a03C7
 LDA a03C4
 SEC
 SBC a03D8
 STA a03C8
 JSR aC2BB
 LDA a03C3
 CLC
 ADC a03D7
 STA a03C7
 JSR aC2BB
 RTS
 ;这是清屏的代码
 lda #$00
 tax
 desk:
 sta $1380,x
 sta $1400,x
 sta $1500,x
 sta $1600,x
 sta $1700,x
 sta $1800,x
 sta $1900,x
 sta $1a00,x
 sta $1b00,x
 sta $1c00,x
 sta $1d00,x
 sta $1e00,x
 sta $1f00,x
 inx
 bne desk
 rts
 | 
 |