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

📄 eeunzip.asm

📁 辞典 dict3.asm.grammar.asm,newword.asm 学习 learn.asm 名片 userinf.asm 备忘 userinf.asm 提醒 userinf
💻 ASM
📖 第 1 页 / 共 2 页
字号:
; ***************************************************************************
; *     Project : Electronic Dictionary                                     *
; *        Date : 2003.9                                                    *
; *   File Name : EEUNZIP.ASM                                               *
; ***************************************************************************

        CASE    OFF
        PW      128             ; .LST's page width = 128 character.
        EXTERNS ON              ; Make all labels public.

	include ST2202.def	; Include ST2100 I/O define.
	include Data.def	; Data RAM define.
	include Bios.h
	include Graphics.h
	include Keydef.def
	include Graph.def
        INCLUDE ST2202.MAC
        INCLUDE ST2202.REG

        INCLUDE EEDICT.INC
        INCLUDE XYHADDR.H

; ***************************************************************************
        PUBLIC  EE_LOCATE_ADDR
        PUBLIC  UNZIP_A_EN_ALPHABET
        PUBLIC  EE_FIRST_PAGE
        PUBLIC  EE_NEXT_PAGE

        PUBLIC  EE_INIT_R_ADDR

        PUBLIC  EE_NEXT_WORD
        PUBLIC  EE_PGUP_WORD

; ***************************************************************************
EE_IDX_SIZE     EQU     ((EELib-EEIndex)/3)

; ***************************************************************************
        CODE

PS0d	.Section

        INCLUDE EN_EN.ASM

; ***************************************************************************
BankNo	EQU	CH_Dic_Bank
; ***************************************************************************
UNZIPEE_b_TO_B:
        DB      0,0,0,02,02,02,02,02,02,03,03,03,03,03,03,03,03,04,04
;               0 1 2.03,04,05,06,07,08,09,10,11,12,13,14,15,16,17,18

; ***************************************************************************
GET_F_PTRA_BYTE:
        LDA     (_EE_FAR_PTRA_0)
        TAX
        INC_WORD <_EE_FAR_PTRA_0
        LDA     <_EE_FAR_PTRA_0
        ORA     <_EE_FAR_PTRA_1
        BNE     ?GET_F_PTRA_BYTEX
        INC_WORD <_EE_FAR_PTRA_2
        INC_WORD <_DRRL
        LDA     #$80
        STA     <_EE_FAR_PTRA_1
?GET_F_PTRA_BYTEX:
        TXA
        RTS

; ***************************************************************************
GET_F_PTRB_BYTE:
        LDA     (_EE_FAR_PTRB_0)
        TAX
        INC_WORD <_EE_FAR_PTRB_0
        LDA     <_EE_FAR_PTRB_0
        ORA     <_EE_FAR_PTRB_1
        BNE     ?GET_F_PTRB_BYTEX
        INC_WORD <_EE_FAR_PTRB_2
        INC_WORD <_DRRL
        LDA     #$80
        STA     <_EE_FAR_PTRB_1
?GET_F_PTRB_BYTEX:
        TXA
        RTS

; ***************************************************************************
EE_CHECK_CHAR:
        CMP     #'a'
        BCC     ?EE_CHECK_CHAR2
        CMP     #'z'+1
        BCC     ?EE_CHECK_CHAR_Y
?EE_CHECK_CHAR2:
        CMP     #'A'
        BCC     ?EE_CHECK_CHAR_N
        CMP     #'Z'+1
        BCC     ?EE_CHECK_CHAR_Y
?EE_CHECK_CHAR_N:
        LDY     #0
        RTS
?EE_CHECK_CHAR_Y:
        LDY     #1
        RTS

; ***************************************************************************
EE_UPPER_CASE:
        CMP     #'a'
        BCC     ?EE_UPPER_CASEX
        CMP     #('z'+1)
        BCS     ?EE_UPPER_CASEX
        SEC
        SBC     #' '
?EE_UPPER_CASEX:
        RTS

; ***************************************************************************
BACKUP_PTRB:
        LDA     <_EE_FAR_PTRB_0
        STA     BK_FAR_PTRB_0
        LDA     <_EE_FAR_PTRB_1
        STA     BK_FAR_PTRB_1
        LDA     <_EE_FAR_PTRB_2
        STA     BK_FAR_PTRB_2
        LDA     <_EE_FAR_PTRB_3
        STA     BK_FAR_PTRB_3
        RTS

BACKUP_LINKSIZE:
        LDA     <_EE_LINK_SIZE_0
        STA     BK_LINK_SIZE_0
        LDA     <_EE_LINK_SIZE_1
        STA     BK_LINK_SIZE_1
        RTS

; ***************************************************************************
RESTORE_PTRB:
        LDA     BK_FAR_PTRB_0
        STA     <_EE_FAR_PTRB_0
        LDA     BK_FAR_PTRB_1
        STA     <_EE_FAR_PTRB_1
        LDA     BK_FAR_PTRB_2
        STA     <_EE_FAR_PTRB_2
        LDA     BK_FAR_PTRB_3
        STA     <_EE_FAR_PTRB_3
        RTS

RESTORE_LINKSIZE:
        LDA     BK_LINK_SIZE_0
        STA     <_EE_LINK_SIZE_0
        LDA     BK_LINK_SIZE_1
        STA     <_EE_LINK_SIZE_1
        RTS

; ***************************************************************************
EE_INIT_N_ADDR:
        JSR     RESTORE_PTRB
        JSR     RESTORE_LINKSIZE
        LONG_ADD_WORD <_EE_FAR_PTRB_0,<_EE_LINK_SIZE_0
        LONG_ADD_CONST <_EE_FAR_PTRB_0,2
        JMP     EE_INIT__ADDR

; ***************************************************************************
EE_INIT_R_ADDR:
        JSR     RESTORE_PTRB
        JMP     EE_INIT__ADDR

; ***************************************************************************
EE_INIT_0_ADDR:
        LONG_2_DDR_REG <_EE_FAR_PTRA_0
        LDA     <_EE_FAR_PTRA_2
        STA     <_DRRL
        LDA     <_EE_FAR_PTRA_3
        STA     <_DRRH
        JSR     GET_F_PTRA_BYTE
        STA     <_EE_FAR_PTRB_0
        JSR     GET_F_PTRA_BYTE
        STA     <_EE_FAR_PTRB_1
        JSR     GET_F_PTRA_BYTE
        STA     <_EE_FAR_PTRB_2
        STZ     <_EE_FAR_PTRB_3
        LONG_ADD_CONST <_EE_FAR_PTRB_0,EELib
        RTS


; ***************************************************************************
EE_INIT_F_ADDR:
        LONG_2_DDR_REG <_EE_FAR_PTRA_0
        LDA     <_EE_FAR_PTRA_2
        STA     <_DRRL
        LDA     <_EE_FAR_PTRA_3
        STA     <_DRRH

        JSR     GET_F_PTRA_BYTE
        STA     <_EE_FAR_PTRB_0
        JSR     GET_F_PTRA_BYTE
        STA     <_EE_FAR_PTRB_1
        JSR     GET_F_PTRA_BYTE
        STA     <_EE_FAR_PTRB_2
        STZ     <_EE_FAR_PTRB_3

        LONG_ADD_CONST <_EE_FAR_PTRB_0,EELib
EE_INIT__ADDR:
        JSR     BACKUP_PTRB
        LONG_2_DDR_REG <_EE_FAR_PTRB_0
        LDA     <_EE_FAR_PTRB_2
        STA     <_DRRL
        LDA     <_EE_FAR_PTRB_3
        STA     <_DRRH
        JSR     GET_F_PTRB_BYTE
        STA     <_EE_LINK_SIZE_0
        JSR     GET_F_PTRB_BYTE
        STA     <_EE_LINK_SIZE_1
        JSR     BACKUP_LINKSIZE
        STZ     <_EE_BIT_SIZE
        STZ     <_EE_ZIPPED_DATA
        STZ     <_EE_ZIPPED_CODE_L
        STZ     <_EE_ZIPPED_CODE_M
        STZ     <_EE_ZIPPED_CODE_H
        RTS

; ***************************************************************************
SAVE_PTRB0:
        LDX     #0
?SAVE_PTRB0:
        LDA     _EE_FAR_PTRB_0,X
        STA     EE_SAVE_PTRB,X
        INX
        CPX     #4
        BCC     ?SAVE_PTRB0
        RTS

; ***************************************************************************
LOAD_PTRB0:
        LDX     #0
?LOAD_PTRB0:
        LDA     EE_SAVE_PTRB,X
        STA     _EE_FAR_PTRB_0,X
        INX
        CPX     #4
        BCC     ?LOAD_PTRB0
        RTS

; ***************************************************************************
SAVE_PTRB:
        LDX     #0
?SAVE_PTRB0:
        LDA     BK_FAR_PTRB_0,X
        STA     EE_SAVE_PTRB,X
        INX
        CPX     #4
        BCC     ?SAVE_PTRB0
        RTS

; ***************************************************************************
LOAD_PTRB:
        LDX     #0
?LOAD_PTRB0:
        LDA     EE_SAVE_PTRB,X
        STA     BK_FAR_PTRB_0,X
        INX
        CPX     #4
        BCC     ?LOAD_PTRB0
        RTS

; ***************************************************************************
SAVE_PTRA:
        LDA     <_EE_FAR_PTRA_0
        STA     EE_SAVE_PTRA
        LDA     <_EE_FAR_PTRA_1
        STA     EE_SAVE_PTRA+1
        LDA     <_EE_FAR_PTRA_2
        STA     EE_SAVE_PTRA+2
        LDA     <_EE_FAR_PTRA_3
        STA     EE_SAVE_PTRA+3
        RTS

; ***************************************************************************
LOAD_PTRA:
        LDA     EE_SAVE_PTRA
        STA     <_EE_FAR_PTRA_0
        LDA     EE_SAVE_PTRA+1
        STA     <_EE_FAR_PTRA_1
        LDA     EE_SAVE_PTRA+2
        STA     <_EE_FAR_PTRA_2
        LDA     EE_SAVE_PTRA+3
        STA     <_EE_FAR_PTRA_3
        RTS

; ***************************************************************************
EE_TEST_STR:
        DB      "all",0
        DB      "bowl",0
        DB      "b",0
        DB      "botulism",0
; ***************************************************************************
EE_LOCATE_ADDR:
        STZ     EE_P0                   ;
        STZ     EE_P0+1                 ; EE_P0 = 0;
        LDA     #<EE_IDX_SIZE           ;
        STA     EE_P1                   ;
        LDA     #>EE_IDX_SIZE           ;
        STA     EE_P1+1                 ; EE_P1 = EE_IDX_SIZE;

?EE_LOCATE_ADDR:                        ;?EE_LOCATE_ADDR:
        CLC                             ;
        LDA     EE_P0                   ;
        ADC     EE_P1                   ;
        STA     EE_PP                   ;
        LDA     EE_P0+1                 ;
        ADC     EE_P1+1                 ;
        STA     EE_PP+1                 ;
        LSR     EE_PP+1                 ;
        ROR     EE_PP                   ; EE_PP = (EE_P0+EE_P1)/2;

        LDA     EE_PP                   ;
        CMP     EE_P0                   ;
        BNE     ?TARGETCKINGADDR0       ;
        LDA     EE_PP+1                 ;
        CMP     EE_P0+1                 ;
        BNE     ?TARGETCKINGADDR0       ; if (EE_PP==EE_P0)
        JMP     ?TARGETGOTADDR          ;    goto ?TARGETGOTADDR;
?TARGETCKINGADDR0:                      ;
        LDA     EE_PP                   ;
        CMP     EE_P1                   ;
        BNE     ?TARGETCKINGADDR1       ;
        LDA     EE_PP+1                 ;
        CMP     EE_P1+1                 ;
        BNE     ?TARGETCKINGADDR1       ; if (EE_PP==EE_P1)
        JMP     ?TARGETGOTADDR          ;    goto ?TARGETGOTADDR;
?TARGETCKINGADDR1:                      ;

        LOAD_LONG_FROM_CONST <_EE_FAR_PTRA_0,EEIndex
        LONG_ADD_WORD <_EE_FAR_PTRA_0,EE_PP
        LONG_ADD_WORD <_EE_FAR_PTRA_0,EE_PP
        LONG_ADD_WORD <_EE_FAR_PTRA_0,EE_PP
        JSR     EE_INIT_F_ADDR
        JSR     UNZIP_EN_LEMMA

        ;JSR     DUMP_LEMMA_BUF ; DEBUGGING

        JSR     EE_LEMMA_STRCMP
        BEQ     ?TARGETGOTADDRE
        BCS     ?TARGETCKINGADDR2
        LDA     EE_PP
        STA     EE_P0
        LDA     EE_PP+1
        STA     EE_P0+1
        BRA     ?TARGETCKINGADDR3
?TARGETCKINGADDR2:
        LDA     EE_PP
        STA     EE_P1
        LDA     EE_PP+1
        STA     EE_P1+1
?TARGETCKINGADDR3:
        JMP     ?EE_LOCATE_ADDR

; ***************************************************************************
?TARGETGOTADDRE:
        LDA     EE_PP
        STA     EE_P0
        LDA     EE_PP+1
        STA     EE_P0+1
?TARGETGOTADDR:
        LOAD_LONG_FROM_CONST <_EE_FAR_PTRA_0,EEIndex
        LONG_ADD_WORD <_EE_FAR_PTRA_0,EE_P0
        LONG_ADD_WORD <_EE_FAR_PTRA_0,EE_P0
        LONG_ADD_WORD <_EE_FAR_PTRA_0,EE_P0
        JSR     SAVE_PTRA
        JSR     EE_INIT_F_ADDR

        LDY     #64
?TARGETGOTADDR0:
        PHY
        JSR     UNZIP_EN_LEMMA

        ;JSR     DUMP_LEMMA_BUF         ; DEBUGGING

        JSR     EE_LEMMA_STRCMP
        PLY
        BEQ     ?TARGETGOTADDRX
        BCS     ?TARGETGOTADDRX
        DEY
        BEQ     ?TARGETGOTADDRX
        JSR     EE_INIT_N_ADDR

        ;PUTSIO  #0
        ;PUTSIO  #0
        ;PUTSIO  #0
        ;PUTSIO  #0
        ;PUTSIO  <_EE_FAR_PTRB_3
        ;PUTSIO  <_EE_FAR_PTRB_2
        ;PUTSIO  <_EE_FAR_PTRB_1
        ;PUTSIO  <_EE_FAR_PTRB_0

        LDA     <_EE_FAR_PTRB_3
        CMP     #(END_WORD_ADDR_A>>24)
        BNE     ?TARGETGOTADDRY
        LDA     <_EE_FAR_PTRB_2
        CMP     #(END_WORD_ADDR_A>>16)
        BNE     ?TARGETGOTADDRY
        LDA     <_EE_FAR_PTRB_1
        CMP     #(END_WORD_ADDR_A>>8)
        BNE     ?TARGETGOTADDRY
        LDA     <_EE_FAR_PTRB_0
        CMP     #END_WORD_ADDR_A
        BEQ     ?TARGETGOTADDRX

?TARGETGOTADDRY:
        BRA     ?TARGETGOTADDR0

?TARGETGOTADDRX:
        JSR     EE_INIT_R_ADDR
        RTS

; ***************************************************************************
UNZIP_A_EN_ALPHABET:

?UNZIP_EN_ALPHABET_0:
        JSR     GET_F_PTRB_BYTE         ;
        STA     <_EE_ZIPPED_DATA        ; _ZIPPED_DATA = *_UNZIP_PTR_B0;
        LDX     #8                      ; X = 8;
        STX     <_EE_UNZIP_LOOP         ;

?UNZIP_EN_ALPHABET_000:                 ;
        ASL     <_EE_ZIPPED_DATA        ;
        ROL     <_EE_ZIPPED_CODE_L      ;
        ROL     <_EE_ZIPPED_CODE_M      ;
        ROL     <_EE_ZIPPED_CODE_H      ; CODE_H <- CODE_M <- CODE_L <- D <- 0

        INC     <_EE_BIT_SIZE           ; _BIT_SIZE++;
        LDY     <_EE_BIT_SIZE           ; Y = _BIT_SIZE;

        LDA     en_en,Y                 ; A = en_en[Y];
        BNE     ?UNZIP_EN_ALPHABET_001  ; if (!A) continue;

⌨️ 快捷键说明

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