📄 draw.asm
字号:
; ***************************************************************************
; * Project : Electronic Dictionary *
; * Date : 2003.9 *
; * File Name : DRAW.ASM *
; ***************************************************************************
pw 128
case off
externs on
include st2202.def ;; Include st2202 I/O define.
include Data.def ;; Data RAM define.
include Bios.h
include Graphics.h
include Graph.def
include KeyDef.def
include draw.h
public ShowAnim
public DelayForAnim
public DspChar8x16
public DspChinese
public DrawWhiteDotAtOXOY
public DrawDotAtOXOY
FrameChar equ CData+0
FrameLen equ CData+1
FrameFlag equ CData+2
Animy equ CData+3
Animx equ CData+4
Reanimh equ CData+5
Reaniml equ CData+6
StoreFrame equ CData+7
Frames equ CData+8
Repeats equ CData+9
PS1 .SECTION
BankNo equ ps1_Bank
DrawRowTbl:
dw 0980H,0994H,09A8H,09BCH,09D0H,09E4H,09F8H,0A0CH,0A20H,0A34H
dw 0A48H,0A5CH,0A70H,0A84H,0A98H,0AACH,0AC0H,0AD4H,0AE8H,0AFCH
dw 0B10H,0B24H,0B38H,0B4CH,0B60H,0B74H,0B88H,0B9CH,0BB0H,0BC4H
dw 0BD8H,0BECH,0C00H,0C14H,0C28H,0C3CH,0C50H,0C64H,0C78H,0C8CH
dw 0CA0H,0CB4H,0CC8H,0CDCH,0CF0H,0D04H,0D18H,0D2CH,0D40H,0D54H
dw 0D68H,0D7CH,0D90H,0DA4H,0DB8H,0DCCH,0DE0H,0DF4H,0E08H,0E1CH
dw 0E30H,0E44H,0E58H,0E6CH,0E80H,0E94H,0EA8H,0EBCH,0ED0H,0EE4H
dw 0EF8H,0F0CH,0F20H,0F34H,0F48H,0F5CH,0F70H,0F84H,0F98H,0FACH
; dw 0fach,0f98h,0f84h,0f70h,0f5ch,0f48h,0f34h,0f20h,0f0ch,0ef8h
; dw 0ee4h,0ed0h,0ebch,0ea8h,0e94h,0e80h,0e6ch,0e58h,0e44h,0e30h
; dw 0e1ch,0e08h,0df4h,0de0h,0dcch,0db8h,0da4h,0d90h,0d7ch,0d68h
; dw 0d54h,0d40h,0d2ch,0d18h,0d04h,0cf0h,0cdch,0cc8h,0cb4h,0ca0h
; dw 0c8ch,0c78h,0c64h,0c50h,0c3ch,0c28h,0c14h,0c00h,0bech,0bd8h
; dw 0bc4h,0bb0h,0b9ch,0b88h,0b74h,0b60h,0b4ch,0b38h,0b24h,0b10h
; dw 0afch,0ae8h,0ad4h,0ac0h,0aach,0a98h,0a84h,0a70h,0a5ch,0a48h
; dw 0a34h,0a20h,0a0ch,09f8h,09e4h,09d0h,09bch,09a8h,0994h,0980h
Bit_Table: db 128,64,32,16,8,4,2,1
Bit_WhiteTable: db 01111111b
db 10111111b
db 11011111b
db 11101111b
db 11110111b
db 11111011b
db 11111101b
db 11111110b
;Input: (OX,OY)
;Output: 在(OX,OY)位置输出一个黑点
DrawDotAtOXOY:
pha
phx
lda <OY
asl
tax
lda DrawRowTbl,x
sta <INDL
lda <OX
lsr
lsr
lsr ;OX/8
clc
adc <INDL
sta <INDL
lda DrawRowTbl+1,x
adc #0
sta <INDH
lda <OX
and #7 ;OX mode 8
tax
lda (<IND)
ora Bit_Table,x
sta (<IND)
plx
pla
rts
;Input: (OX,OY)
;Output: 在(OX,OY)位置输出一个白点
DrawWhiteDotAtOXOY:
pha
phx
lda <OY
asl
tax
lda DrawRowTbl,x
sta <INDL
lda <OX
lsr
lsr
lsr ;OX/8
clc
adc <INDL
sta <INDL
lda DrawRowTbl+1,x
adc #0
sta <INDH
lda <OX
and #7 ;OX mode 8
tax
lda (<IND)
and Bit_WhiteTable,x
sta (<IND)
plx
pla
rts
;Input: A (CurX,CurY)
;
ShowByte_H:
phy
ldy <CurX
sty <OX
ldy <CurY
dey
sty <OY
ldx #8-1
?_0: inc <OY
lsr
bcs ?_1
bbs4 <SF1,?_2 ;"or"模式,白点不显示
jsr DrawWhiteDotAtOXOY
bra ?_2
?_1: jsr DrawDotAtOXOY
?_2: dex
bpl ?_0
inc <CurX
ply
rts
;Input: A (CurX,CurY)
;
ShowByte_V:
phy
ldy <CurX
dey
sty <OX
ldy <CurY
sty <OY
ldx #8-1
?_0: inc <OX
asl
bcs ?_1
bbs4 <SF1,?_2 ;"or"模式,白点不显示
jsr DrawWhiteDotAtOXOY
bra ?_2
?_1: jsr DrawDotAtOXOY
?_2: dex
bpl ?_0
inc <CurY
ply
rts
;Input: A (CurX,CurY)
;
ShowWord_V:
phy
ldy <CurX
dey
sty <OX
ldy <CurY
sty <OY
ldx #8-1
?_0: inc <OX
asl
bcs ?_1
jsr DrawWhiteDotAtOXOY
bra ?_2
?_1: jsr DrawDotAtOXOY
?_2: dex
bpl ?_0
jsr DrawINCINS
lda (<INS)
ldx #8-1
?_01: inc <OX
asl
bcs ?_11
jsr DrawWhiteDotAtOXOY
bra ?_21
?_11: jsr DrawDotAtOXOY
?_21: dex
bpl ?_01
inc <CurY
ply
rts
;Input: (INSL,INSH),(CurX,CurY)
;
ShowAnim:
lda (<INS)
sta <Repeats
jsr DrawINCINS
lda (<INS)
sta <Frames
sta <StoreFrame
jsr DrawINCINS
lda <INSL
sta <ReAnimL
lda <INSH
sta <ReAnimH
lda <CurX
sta <Animx
lda <CurY
sta <Animy
frameloop:
lda (<INS)
sta <FrameFlag
and #00001111b
asl
asl
asl
clc
adc <Animy
sta <CurY
jsr DrawINCINS
lda (<INS)
clc
adc <Animx
sta <CurX
jsr DrawINCINS
lda (<INS)
sta <FrameLen
jsr DrawINCINS
lda <FrameFlag
and #40h
bne reframedata
?_0:
lda (<INS)
jsr ShowByte_H
jsr DrawINCINS
dec <FrameLen
bne ?_0
bra groupend
reframedata:
lda (<INS)
sta <FrameChar
jsr DrawINCINS
?_0: lda <FrameChar
jsr ShowByte_H
dec <FrameLen
bne ?_0
groupend:
lda <FrameFlag
and #80h
beq frameloop
lda (<INS)
jsr DrawINCINS
jsr DelayForAnim
SkipDelay:
dec <Frames
bne frameloop
lda <Repeats
cmp #2
bcc anim_end
dec
sta <Repeats
lda <ReAnimL
sta <INSL
lda <ReAnimH
sta <INSH
lda <StoreFrame
sta <Frames
jsr DelayForAnim
jsr DelayForAnim
bra frameloop ;repeatloop
anim_end:
rts
DrawINCINS:
inc <INSL
bne ?_0
inc <INSH
?_0: rts
DelayForAnim:
ldx #0
?_0: lda #0
?_1: nop
dec
bne ?_1
nop
dex
bne ?_0
rts
;Input: X (CurX,CurY)
;
DspChar8x16:
lda <DRRH
pha
lda <DRR
pha
lda #>FontBank ;; Select english font bank.
sta <DRRh
lda #<FontBank ;; Select english font bank.
sta <DRR
stz <INSH
txa
asl
rol <INSH
asl
rol <INSH
asl
rol <INSH
asl
rol <INSH
adc #<ASC816Font_yh
sta <INSL
lda <INSH
adc #>ASC816Font_yh
sta <INSH
ldy #16-1
?_0: lda (<INS)
jsr ShowByte_V
jsr DrawINCINS
dey
bpl ?_0
pla
sta <DRR
pla
sta <DRRH
rts
;Input: X (CurX,CurY)
;
DspChar8x8:
lda <DRRH
pha
lda <DRR
pha
lda #>FontBank ;; Select english font bank.
sta <DRRh
lda #<FontBank ;; Select english font bank.
sta <DRR
stz <INSH
txa
asl
rol <INSH
asl
rol <INSH
asl
rol <INSH
adc #<Asc88Font_yh
sta <INSL
lda <INSH
adc #>Asc88Font_yh
sta <INSH
ldy #8-1
?_0: lda (<INS)
jsr ShowByte_V
jsr DrawINCINS
dey
bpl ?_0
pla
sta <DRR
pla
sta <DRRH
rts
;Input: X (CurX,CurY)
;
DspPhone8x16:
lda <DRRH
pha
lda <DRR
pha
lda #>FontBank ;; Select english font bank.
sta <DRRh
lda #<FontBank ;; Select english font bank.
sta <DRR
stz <INSH
txa
sec
sbc #51h
asl
rol <INSH
asl
rol <INSH
asl
rol <INSH
asl
rol <INSH
adc #<DJFont8x16_yh
sta <INSL
lda <INSH
adc #>DJFont8x16_yh
sta <INSH
ldy #16-1
?_0: lda (<INS)
jsr ShowByte_V
jsr DrawINCINS
dey
bpl ?_0
pla
sta <DRR
pla
sta <DRRH
rts
;Input: X (CurX,CurY)
;
DspPhone8x8:
lda <DRRH
pha
lda <DRR
pha
lda #>FontBank ;; Select english font bank.
sta <DRRh
lda #<FontBank ;; Select english font bank.
sta <DRR
stz <INSH
txa
sec
sbc #44h
asl
rol <INSH
asl
rol <INSH
asl
rol <INSH
adc #<DJFont_yh
sta <INSL
lda <INSH
adc #>DJFont_yh
sta <INSH
ldy #8-1
?_0: lda (<INS)
jsr ShowByte_V
jsr DrawINCINS
dey
bpl ?_0
pla
sta <DRR
pla
sta <DRRH
rts
;Input: x,y at (CurX,CurY)
;
DspChinese:
lda <DRRH
pha
lda <DRR
pha
tya
sec
sbc #0a1h
tay
txa
sec
sbc #0aeh
sta <INSL
stz <INSH
stz <INDL
stz <INDH
ldx #0
?1Multi_94:
clc
lda <INSL
adc <INDL
sta <INDL
lda <INDH
adc #0
sta <INDH
inx
cpx #94
bne ?1Multi_94
clc
tya
adc <INDL
sta <INDL
lda <INDH
adc #0
sta <INDH
stz <DRR
stz <drrh
asl <INDL
rol <INDH
asl <INDL
rol <INDH
asl <INDL
rol <INDH
asl <INDL
rol <INDH
rol <DRR
rol <DRRh
asl <INDL
rol <INDH
rol <DRR
rol <DRRh
ldy <INDL
lda <INDH
ora #80h
tax
asl <INDH
rol <DRR
rol <DRRh
clc
lda #<CFontBank
adc <DRR
sta <DRR
lda <DRRh
adc #>CFontBank
sta <DRRh
stx <INSH
sty <INSL
ldy #16-1
?_00: lda (<INS)
jsr ShowWord_V
jsr DrawINCINS
dey
bpl ?_00
pla
sta <DRR
pla
sta <DRRH
rts
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -