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

📄 test1.asm

📁 Sitronix电子词典ST2202芯片的Zardoz汇编程序。
💻 ASM
字号:
;//*************************************************************************
                pw      128
                CHIP    W65C02S
                .INCLUDE ST22XX.INC
                .INCLUDE ST2202.DEF
;//*****************Define Data*********************
Stack_Point     .equ    $ff             ;STACK POINT.
Ptr             .equ    $91
PtrL            .equ    $91
PtrH            .equ    $92
Tmp             .equ    $93
Tmp1            .equ    $93
TmpL            .equ    $93
Tmp2            .equ    $94
TmpH            .equ    $94
Tmp3            .equ    $95
Tmp4            .equ    $96
LCD_Ptr         .equ    $97
LCD_PtrL        .equ    $97
LCD_PtrH        .equ    $98
CursorX         .equ    $99
CursorY         .equ    $9a
StackTmp        .equ    $9b
Flag            .equ    $9c
Flag1           .equ    $9d
Buff            .equ    $9e
Buff1           .equ    $9e
Buff2           .equ    $9f

LCD_SEG         .EQU    160
LCD_COM         .EQU    80
LCD_START       .EQU    $0200
;//***********************************************
;PS0     .SECTION
                ORG    $4000
BASETIMER_VT:   JMP     BASETIMER_ISR
PORT_VT:        JMP     PORT_ISR
TIMER1_VT:      JMP     TIMER1_ISR
TIMER0_VT:      JMP     TIMER0_ISR
DAC_VT:         JMP     DAC_ISR
INTX_VT:        JMP     INTX_ISR
NMI_VT:         JMP     NMI_ISR
RESET_VT:       JMP     RESET_ISR
BRK_VT:         JMP     BRK_ISR
LCDFR_VT:       JMP     LCDFR_ISR

IR14            JMP     DAC_ISR      ;14;4;FFE0
URX_VT          JMP     URX_ISR     ;13;4;FFE2
UTX_VT          JMP     UTX_ISR      ;12;4;FFE4
SRX_VT          JMP     SRX_ISR      ;11;4;FFE6
STX_VT          JMP     STX_ISR      ;10;4;FFE8
IR07            JMP     LCDFR_ISR    ;07;5;FFEA
BASETIMER_ISR:
                RTI
TIMER1_ISR:
                RTI
TIMER0_ISR:
                RTI
DAC_ISR:
                RTI
INTX_ISR:
                RTI
LCDFR_ISR:
                RTI
NMI_ISR:
                RTI
BRK_ISR:
                RTI
PORT_ISR:
                RTI
URX_ISR:
                RTI
UTX_ISR:
                RTI
SRX_ISR:
                RTI
STX_ISR:
                RTI
;//*******************Main Program**************************
RESET_ISR:
        sei
        ldx     #Stack_Point
        txs
        jsr     INITIAL_LCD
        stz     LCD_START
        jsr     FILL_SCREEN
?loop
        jsr     TEST_LCD_160X80
        lda     #30
        jsr     DELAY_TIME
        jsr     TEST_LCD_160X801
        lda     #30
        jsr     DELAY_TIME
        bra     ?loop
        STOP

;--------------------------OK-----------INITIAL_LCD
INITIAL_LCD:
                PHA
                LDA     #>LCD_START             ;lcd start address
                STA     <LSSAH
                LDA     #<LCD_START
                STA     <LSSAL
                LDA     #LCD_SEG/16
                STA     <LVPW                   ;lcd virtual page width
                LDA     #LCD_SEG/8              ;lcd x length
                STA     <LXMAX
                LDA     #LCD_COM/2              ;lcd y length
                STA     <LYMAX
                STZ     <LPAN                   ;no panning
                STZ     <LCTR                   ;power on lcd,display on
                LDA     #08H                    ;no reverse display
                STA     <LCKR                    ;CP=OSCK/4,1-bit transmission
                LDA     #04H
                STA     <LFRA                   ;Frame Rate Adjust
                LDA     #FFH
                STA     <PCL                    ;PL=output
                lda     #00
                STa     <LAC                    ;AC occur after every frame
                LDA     #00
                STA     <LPWM                   ;contrast
                PLA
                RTS        
;--------------------------OK-------------------------------FILL SCREEN
FILL_SCREEN:                                    ;fill screen with value
                PHA                             ;at LCD_START
                STZ     <DMR
                LDA     #>LCD_START
                STA     <DMSH
                LDA     #<LCD_START
                STA     <DMSL
                LDA     #>LCD_START+1
                STA     <DMDH
                LDA     #<LCD_START+1
                STA     <DMDL
                LDA     #>LCD_SEG*LCD_COM/8
                STA     <DCNTH
                LDA     #<LCD_SEG*LCD_COM/8-1
                STA     <DCNTL
                PLA
                RTS
;---------------------OK------------------Draw8x8Font
Draw8x8Font
        PUSH_ALL
        
        asl     a                       ;a*8 to index table
        asl     a
        asl     a
        sta     <PtrL

        lda     #<CourierFont8x8        ;a=low address of CourierFont8x8
        clc                             ;PtrL=character index low address
        adc     <PtrL
        sta     <PtrL

        lda     #>CourierFont8x8
        stz     <PtrH
        adc     <PtrH
        sta     <PtrH                   ;PtrH=character index high address

        lda     #>LCD_START
        sta     <TmpH
        lda     #<LCD_START
        clc
        adc     <CursorX                  ;X direction LCD character start
        sta     <TmpL                     ;low address
        bcc     ?3
        inc     <TmpH
?3
        lda     <CursorY                  ;Y direction LCD character start
        asl     a                         ;low address
        tay
.iftrue LCD_SEG=320
        lda     Mul320Tab,y
.endif
.iftrue LCD_SEG=160
        lda     Mul160Tab,y
.endif
.iftrue LCD_SEG=112
        lda     Mul112Tab,y
.endif

        clc
        adc     <TmpL
        sta     <TmpL
        bcc     ?4
        inc     <TmpH
?4
.iftrue LCD_SEG=320
        lda     Mul320Tab+1,y
.endif
.iftrue LCD_SEG=160
        lda     Mul160Tab+1,y
.endif
.iftrue LCD_SEG=112
        lda     Mul112Tab+1,y
.endif
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
        clc
        adc     <TmpH
        sta     <TmpH
        ldy     #0h                         ;Display character
?1
        lda     (Ptr),y
        sta     (Tmp)

        lda     #LCD_SEG/8
        clc
        adc     <TmpL
        sta     <TmpL
        bcc     ?2
        inc     <TmpH
?2
        iny
        cpy     #8
        bne     ?1

        lda     <CursorX                     ;x,y position point to
        inc     a                            ;low-byte character
        sta     <CursorX
        cmp     #LCD_SEG/8
        bne     ?5
        stz     <CursorX
        lda     <CursorY
        inc     a
        sta     <CursorY
        cmp     #LCD_COM/8
        bne     ?5
        stz     <CursorY
?5

        PULL_ALL
        rts

;--------------------------------SHOW LCD(Sitronix Mark).
TEST_LCD_160X80:
                JSR     INITIAL_LCD
                
                STZ     <DMR
                lda     #>GL_Bar
                sta     <DMSH
                lda     #<GL_Bar
                sta     <DMSL
                LDA     #>LCD_START
                STA     <DMDH
                LDA     #<LCD_START
                STA     <DMDL
                LDA     #>LCD_SEG*LCD_COM/8
                STA     <DCNTH
                LDA     #<LCD_SEG*LCD_COM/8-1
                STA     <DCNTL
                rts
                       


TEST_LCD_160X801:
;;              JSR     INITIAL_LCD
                
                STZ     <DMR
                lda     #>GL_Bar1
                sta     <DMSH
                lda     #<GL_Bar1
                sta     <DMSL
                LDA     #>LCD_START
                STA     <DMDH
                LDA     #<LCD_START
                STA     <DMDL
                LDA     #>LCD_SEG*LCD_COM/8
                STA     <DCNTH
                LDA     #<LCD_SEG*LCD_COM/8-1
                STA     <DCNTL
                rts
                       
QQQ:
CourierFont8x8:
;;              .include D:\zardos\adpcm\8x8_01.hex
;;              .include D:\zardos\adpcm\8x8_11.hex
;;              .include D:\zardos\adpcm\8x8_21.hex
;;              .include D:\zardos\adpcm\8x8_31.hex
;;              .include D:\zardos\adpcm\8x8_41.hex
;;              .include D:\zardos\adpcm\8x8_51.hex
;;              .include D:\zardos\adpcm\8x8_61.hex
;;              .include D:\zardos\adpcm\8x8_71.hex
;;              .include D:\zardos\adpcm\8x8_81.hex
;;              .include D:\zardos\adpcm\8x8_91.hex
;;              .include D:\zardos\adpcm\8x8_A1.hex
;;              .include D:\zardos\adpcm\8x8_B1.hex
;;              .include D:\zardos\adpcm\8x8_C1.hex
;;              .include D:\zardos\adpcm\8x8_D1.hex
;;              .include D:\zardos\adpcm\8x8_E1.hex
;;              .include D:\zardos\adpcm\8x8_F1.hex

;;********************Delay time*********************************************
DELAY_TIME:                             ;delay time=0.05s X a
?aa
        jsr     DELAY
        dec     a
        bne     ?aa
        rts
;;--------------------------------------------------------------------------
DELAY:                                  ;delay time=0.05s(clock=4M)
        phx                             ;3 cycles
        phy                             ;3 cycles
        ldx     #20                      ;2 cycles
        ldy     #194                    ;2 cycles
?aa
        dex                             ;2 cycles
        bne     ?aa                     ;if jumping,need 2 cycles,else 1 cycle
        dey                             ;2 cycles
        bne     ?aa                     ;if jumping,need 2 cycles,else 1 cycle
        ply                             ;4 cycles
        plx                             ;4 cycles
        rts                             ;6 cycles
;jsr: 6 cycles
;when x,y=1,time=6+3+3+2+2+2+1+2+1+4+4+6=36 cycles
;when x increase one,time adds 4 cycles(2+2)
;when y increse one,time adds  1027 cycles(4+255*4+3)
;when x,y=0,max delay time=262941(36+255*4+1027*255)
;clock=4M,delay time=0.06573525(262941*1/4000000)
;when x=20,y=194 delay time=0.05s(clock=4M)

;----------------------------------------------------
;; (0 ... 29) x 112
Mul112Tab
 dw  0
 dw  112
 dw  224
 dw  336
 dw  448
 dw  560
 dw  672
 dw  784
 dw  896
 dw  1008
 dw  1120
 dw  1232
 dw  1344
 dw  1456
 dw  1568
 dw  1680
 dw  1792
 dw  1904
 dw  2016
 dw  2128
 dw  2240
 dw  2352
 dw  2464
 dw  2576
 dw  2688
 dw  2800
 dw  2912
 dw  3024
 dw  3136
 dw  3248
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; (0 ... 29) x 160
Mul160Tab
 dw 0
 dw 160
 dw 320
 dw 480
 dw 640
 dw 800
 dw 960
 dw 1120
 dw 1280
 dw 1440
 dw 1600
 dw 1760
 dw 1920
 dw 2080
 dw 2240
 dw 2400
 dw 2560
 dw 2720
 dw 2880
 dw 3040
 dw 3200
 dw 3360
 dw 3520
 dw 3680
 dw 3840
 dw 4000
 dw 4160
 dw 4320
 dw 4480
 dw 4640
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; (0 ... 29) x 320
Mul320Tab
 dw 0
 dw 320
 dw 640
 dw 960
 dw 1280
 dw 1600
 dw 1920
 dw 2240
 dw 2560
 dw 2880
 dw 3200
 dw 3520
 dw 3840
 dw 4160
 dw 4480
 dw 4800
 dw 5120
 dw 5440
 dw 5760
 dw 6080
 dw 6400
 dw 6720
 dw 7040
 dw 7360
 dw 7680
 dw 8000
 dw 8320
 dw 8640
 dw 8960
 dw 9280

GL_Bar:         .include T3D.B0
GL_Bar1         .include .\01d.B0
;;-------------------------------------- VECTOR BEGIN.

;IV0     .SECTION
                ORG    $7FE0
                .WORD   IR14            ;14;4;FFE0
                .WORD   URX_VT          ;13;4;FFE2
                .WORD   UTX_VT          ;12;4;FFE4
                .WORD   SRX_VT          ;11;4;FFE6
                .WORD   STX_VT          ;10;4;FFE8
                .WORD   IR07            ;07;5;FFEA
                .WORD   LCDFR_VT        ;06;6;FFEC LCD Frame interupt
                .WORD   BASETIMER_VT    ;BASE TIMER OVERFLOW.
                .WORD   PORT_VT         ;PORTA[7-0] VECTOR.
                .WORD   TIMER1_VT       ;TIMER 1 OVERFLOW.
                .WORD   TIMER0_VT       ;TIMER 0 OVERFLOW.
                .WORD   DAC_VT          ;RELOAD DAC DATA.
                .WORD   INTX_VT         ;PORTA[0]/INTX VECTOR.
                .WORD   NMI_VT          ;NMI VECTOR. (RESERVED)
                .WORD   RESET_VT        ;RESET VECTOR. (SAME 6502)
                .WORD   BRK_VT          ;BREAK VECTOR. (SAME 6502)
                
                .END

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -