- 注册时间
- 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 |
|