易码技术论坛

 找回密码
 加入易码
搜索
12
返回列表 发新帖
楼主: markliteng

[源码] [代码]4灰度状态下的作图函数,用汇编完成

[复制链接]
发表于 2007-7-27 11:25:03 | 显示全部楼层
如果4色分为0,1,2,3色
LZ的好像是画时画的是第2色
而清时是画的0色吧
建议LZ修改一下

LZ的方法我没看懂
我就按自己的方法写了个画方块的函数
可以画0~3色的方块

(再佩服LZ一下,我写画方块的函数写了一整下午啊,头都大了)
发表于 2007-7-27 19:10:16 | 显示全部楼层
楼主强!
居然写了个透明色的实心矩形!
 楼主| 发表于 2007-7-2 12:06:24 | 显示全部楼层 |阅读模式
       听说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
您需要登录后才可以回帖 登录 | 加入易码

本版积分规则

Archiver|手机版|小黑屋|EMAX Studio

GMT+8, 2024-3-28 21:57 , Processed in 0.009961 second(s), 17 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表