⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 draw.asm

📁 辞典 dict3.asm.grammar.asm,newword.asm 学习 learn.asm 名片 userinf.asm 备忘 userinf.asm 提醒 userinf
💻 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 + -