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

📄 unzip.asm

📁 辞典 dict3.asm.grammar.asm,newword.asm 学习 learn.asm 名片 userinf.asm 备忘 userinf.asm 提醒 userinf
💻 ASM
📖 第 1 页 / 共 2 页
字号:
        ROL     CNDICT_PAGE_IDX+1
        ASL     CNDICT_PAGE_IDX
        ROL     CNDICT_PAGE_IDX+1
        ASL     CNDICT_PAGE_IDX
        ROL     CNDICT_PAGE_IDX+1

        ASL     A
        CLC
        ADC     CNDICT_PAGE_IDX
        STA     CNDICT_PAGE_IDX
        LDA     CNDICT_PAGE_IDX+1
        ADC     #0
        STA     CNDICT_PAGE_IDX+1

        LDY     #<CNDICT_PAGE_DATA
        STY     <_DATA_PTR_L
        LDY     #>CNDICT_PAGE_DATA
        STY     <_DATA_PTR_H

        CLC
        LDA     <_DATA_PTR_L
        ADC     CNDICT_PAGE_IDX
        STA     <_DATA_PTR_L
        LDA     <_DATA_PTR_H
        ADC     CNDICT_PAGE_IDX+1
        STA     <_DATA_PTR_H

        STX     CNDICT_PAGE_IDX

        RTS

; ***************************************************************************
RECORD_UZ_PTR:
        JSR     CALC_PAGE_PTR

        LDA     <_UNZIP_PTR_B0
        STA     (_DATA_PTR_L)
        LDY     #1
        LDA     <_UNZIP_PTR_B1
        STA     (_DATA_PTR_L),Y

        INY
        LDA     <_DRRL
        STA     (_DATA_PTR_L),Y
        INY
        LDA     <_DRRH
        STA     (_DATA_PTR_L),Y

        INY
        LDA     <_ZIPPED_DATA
        STA     (_DATA_PTR_L),Y
        INY
        LDA     <_UNZIP_LOOP_X
        STA     (_DATA_PTR_L),Y
        INY
        LDA     <_UZ_LAST_WORD
        STA     (_DATA_PTR_L),Y
        INY
        LDA     <_UZ_LAST_WORD+1
        STA     (_DATA_PTR_L),Y
        INY
        LDA     <_DATA_SIZE_0
        STA     (_DATA_PTR_L),Y
        INY
        LDA     <_DATA_SIZE_1
        STA     (_DATA_PTR_L),Y
        RTS

; ***************************************************************************
LOAD_UZ_PTR:
        JSR     CALC_PAGE_PTR

        LDA     (_DATA_PTR_L)
        STA     <_UNZIP_PTR_B0
        LDY     #1
        LDA     (_DATA_PTR_L),Y
        STA     <_UNZIP_PTR_B1

        INY
        LDA     (_DATA_PTR_L),Y
        STA     <_DRRL
        INY
        LDA     (_DATA_PTR_L),Y
        STA     <_DRRH

        INY
        LDA     (_DATA_PTR_L),Y
        STA     <_ZIPPED_DATA
        INY
        LDA     (_DATA_PTR_L),Y
        STA     <_UNZIP_LOOP_X
        INY
        LDA     (_DATA_PTR_L),Y
        STA     <_UZ_LAST_WORD
        INY
        LDA     (_DATA_PTR_L),Y
        STA     <_UZ_LAST_WORD+1
        INY
        LDA     (_DATA_PTR_L),Y
        STA     <_DATA_SIZE_0
        INY
        LDA     (_DATA_PTR_L),Y
        STA     <_DATA_SIZE_1

        RTS

; ***************************************************************************
BACKUP_FPTR:
        LDA     <_UNZIP_FPTR_0
        STA     BK_FPTR_0
        LDA     <_UNZIP_FPTR_1
        STA     BK_FPTR_1
        LDA     <_UNZIP_FPTR_2
        STA     BK_FPTR_2
        LDA     <_UNZIP_FPTR_3
        STA     BK_FPTR_3
        RTS

; ***************************************************************************
RESTORE_FPTR:
        LDA     BK_FPTR_0
        STA     <_UNZIP_FPTR_0
        LDA     BK_FPTR_1
        STA     <_UNZIP_FPTR_1
        LDA     BK_FPTR_2
        STA     <_UNZIP_FPTR_2
        LDA     BK_FPTR_3
        STA     <_UNZIP_FPTR_3
        RTS

; ***************************************************************************

BACKUP_CHWORD_PTR:
        LDA     <_UNZIP_PTR_B0
        STA     BK_WORD_PTR_0
        LDA     <_UNZIP_PTR_B1
        STA     BK_WORD_PTR_1
        LDA     <_UNZIP_PTR_B2
        STA     BK_WORD_PTR_2
        LDA     <_UNZIP_PTR_B3
        STA     BK_WORD_PTR_3
        RTS

; ***************************************************************************
RESTORE_CHWORD_PTR:
        LDA     BK_WORD_PTR_0
        STA     <_UNZIP_PTR_B0
        LDA     BK_WORD_PTR_1
        STA     <_UNZIP_PTR_B1
        LDA     BK_WORD_PTR_2
        STA     <_UNZIP_PTR_B2
        LDA     BK_WORD_PTR_3
        STA     <_UNZIP_PTR_B3
        RTS

; ***************************************************************************
        INCLUDE CHIDIOM.ASM
        INCLUDE MATH.ASM

; ***************************************************************************
        PUBLIC  INIT_UART
INIT_UART:
        RTS

; ***************************************************************************
; *                                                                         *
; ***************************************************************************
TOTAL_NUMOF_IDIOM       EQU     ((CHIDIOM_ADDR-IDIOM_ADDR)/3)
; ***************************************************************************
FIND_IDIOM_ADDR:
        LDA     CNDICT_BUFFER           ;
        STA     <_UNZIP_CH_H            ;
        LDA     CNDICT_BUFFER+1         ;
        STA     <_UNZIP_CH_L            ;
        JSR     UNZIP_GET_ADDR          ; _UNZIP_PTR_B3

        ASL     <_UNZIP_PTR_B0          ;
        ROL     <_UNZIP_PTR_B1          ;
        ROL     <_UNZIP_PTR_B2          ;
        ASL     <_UNZIP_PTR_B0          ;
        ROL     <_UNZIP_PTR_B1          ;
        ROL     <_UNZIP_PTR_B2          ;
        ASL     <_UNZIP_PTR_B0          ;
        ROL     <_UNZIP_PTR_B1          ;
        ROL     <_UNZIP_PTR_B2          ; <_UNZIP_PTR_B *= 8;

        STZ     TEMP_P0                 ;
        STZ     TEMP_P0+1               ;
        LDA     #<(TOTAL_NUMOF_IDIOM-1) ;
        STA     TEMP_P1                 ;
        LDA     #>(TOTAL_NUMOF_IDIOM-1) ;
        STA     TEMP_P1+1               ;

?TARGETCKINGADDR:
        CLC
        LDA     TEMP_P0
        ADC     TEMP_P1
        STA     TEMP_PP
        LDA     TEMP_P0+1
        ADC     TEMP_P1+1
        STA     TEMP_PP+1

        LSR     TEMP_PP+1
        ROR     TEMP_PP

        LDA     TEMP_PP
        CMP     TEMP_P0
        BNE     ?TARGETCKINGADDR0
        LDA     TEMP_PP+1
        CMP     TEMP_P0+1
        BNE     ?TARGETCKINGADDR0
        JMP     ?TARGETGOTADDR
?TARGETCKINGADDR0:
        LDA     TEMP_PP
        CMP     TEMP_P1
        BNE     ?TARGETCKINGADDR1
        LDA     TEMP_PP+1
        CMP     TEMP_P1+1
        BNE     ?TARGETCKINGADDR1
        JMP     ?TARGETGOTADDR
?TARGETCKINGADDR1:

        LOAD_LONG_FROM_CONST <_UNZIP_FPTR_0,IDIOM_ADDR
        LONG_ADD_WORD <_UNZIP_FPTR_0,TEMP_PP
        LONG_ADD_WORD <_UNZIP_FPTR_0,TEMP_PP
        LONG_ADD_WORD <_UNZIP_FPTR_0,TEMP_PP
        LONG_2_DDR_REG <_UNZIP_FPTR_0

        LDA     <_UNZIP_FPTR_0+2
        STA     <_DRRL
        LDA     <_UNZIP_FPTR_0+3
        STA     <_DRRH

        JSR     GET_FPTR_BYTE
        STA     CNDICT_TEMP
        SEC
        LDA     <_UNZIP_PTR_B0
        SBC     CNDICT_TEMP

        LDA     <_UNZIP_PTR_B1
        PHA
        PHP
        JSR     GET_FPTR_BYTE
        STA     CNDICT_TEMP
        PLP
        PLA
        SBC     CNDICT_TEMP

        LDA     <_UNZIP_PTR_B2
        PHA
        PHP
        JSR     GET_FPTR_BYTE
        STA     CNDICT_TEMP
        PLP
        PLA
        SBC     CNDICT_TEMP

        BCC     ?TARGETSMALLER
?TARGETBIGGER:
        LDA     TEMP_PP
        STA     TEMP_P0
        LDA     TEMP_PP+1
        STA     TEMP_P0+1
        BRA     ?TARGETCOMPARED
?TARGETSMALLER:
        LDA     TEMP_PP
        STA     TEMP_P1
        LDA     TEMP_PP+1
        STA     TEMP_P1+1
?TARGETCOMPARED:

        JMP     ?TARGETCKINGADDR

?TARGETGOTADDR:

?TARGETGOTADDRS0:
        LOAD_LONG_FROM_CONST <_UNZIP_FPTR_0,IDIOM_ADDR
        LONG_ADD_WORD <_UNZIP_FPTR_0,TEMP_P1
        LONG_ADD_WORD <_UNZIP_FPTR_0,TEMP_P1
        LONG_ADD_WORD <_UNZIP_FPTR_0,TEMP_P1

        LDA     <_UNZIP_FPTR_0
        STA     CNIDIOM_ADDR
        LDA     <_UNZIP_FPTR_0+1
        STA     CNIDIOM_ADDR+1
        LDA     <_UNZIP_FPTR_0+2
        STA     CNIDIOM_ADDR+2
        LDA     <_UNZIP_FPTR_0+3
        STA     CNIDIOM_ADDR+3

?FETCHIDIOMADDR:
        LONG_2_DDR_REG <_UNZIP_FPTR_0
        LDA     <_UNZIP_FPTR_0+2
        STA     <_DRRL
        LDA     <_UNZIP_FPTR_0+3
        STA     <_DRRH

?TARGETGOTADDRS1:
        JSR     GET_FPTR_BYTE
        STA     <_UNZIP_PTR_B0
        JSR     GET_FPTR_BYTE
        STA     <_UNZIP_PTR_B1
        JSR     GET_FPTR_BYTE
        STA     <_UNZIP_PTR_B2
        STZ     <_UNZIP_PTR_B3

        STZ     <_BIT_SIZE

        LSR     <_UNZIP_PTR_B2
        ROR     <_UNZIP_PTR_B1
        ROR     <_UNZIP_PTR_B0
        ROR     <_BIT_SIZE

        LSR     <_UNZIP_PTR_B2
        ROR     <_UNZIP_PTR_B1
        ROR     <_UNZIP_PTR_B0
        ROR     <_BIT_SIZE

        LSR     <_UNZIP_PTR_B2
        ROR     <_UNZIP_PTR_B1
        ROR     <_UNZIP_PTR_B0
        ROR     <_BIT_SIZE

        LONG_ADD_CONST <_UNZIP_PTR_B0,(CHIDIOM_ADDR)
        LONG_2_DDR_REG <_UNZIP_PTR_B0

        LDA     <_UNZIP_PTR_B2
        STA     <_DRRL
        LDA     <_UNZIP_PTR_B3
        STA     <_DRRH

        LSR     <_BIT_SIZE              ;
        LSR     <_BIT_SIZE              ;
        LSR     <_BIT_SIZE              ;
        LSR     <_BIT_SIZE              ;
        LSR     <_BIT_SIZE              ;

        JSR     GET_BPTR_BYTE
        STA     <_ZIPPED_DATA           ; _ZIPPED_DATA = *_UNZIP_PTR_B0;

        SEC                             ;
        LDA     #8                      ;
        SBC     <_BIT_SIZE              ;
        STA     <_UNZIP_LOOP_X          ;

        LDX     <_BIT_SIZE              ;
        CPX     #0
        BEQ     ?TARGETGOTADDR1

?TARGETGOTADDR0:                        ;
        ASL     <_ZIPPED_DATA           ;
        DEX                             ;
        BNE     ?TARGETGOTADDR0         ;

?TARGETGOTADDR1:                        ;
        STZ     <_ZIPPED_CODE_L         ;
        STZ     <_ZIPPED_CODE_M         ;
        STZ     <_ZIPPED_CODE_H         ;
        STZ     <_BIT_SIZE              ;
        STZ     <_UNZIP_COUNT           ;

        LDA     #$FF                    ;
        STA     <_DATA_SIZE_0           ;
        STA     <_DATA_SIZE_1           ;

        RTS                             ;

; ***************************************************************************
        JMP     ?FETCHIDIOMADDR
        PUBLIC  FETCHIDIOMADDR
FETCHIDIOMADDR:
        BRA     FETCHIDIOMADDR-3

; ***************************************************************************
GET_FPTR_BYTE:
        LDA     (_UNZIP_FPTR_0)
        TAX
        INC_WORD <_UNZIP_FPTR_0
        LDA     <_UNZIP_FPTR_0
        ORA     <_UNZIP_FPTR_1
        BNE     ?GET_FPTR_BYTEX
        INC_WORD <_DRRL
        LDA     #$80
        STA     <_UNZIP_FPTR_1
?GET_FPTR_BYTEX:
        TXA
        RTS

; ***************************************************************************
GET_BPTR_BYTE:
        LDA     (_UNZIP_PTR_B0)
        TAX
        INC_WORD <_UNZIP_PTR_B0
        LDA     <_UNZIP_PTR_B0
        ORA     <_UNZIP_PTR_B1
        BNE     ?GET_FPTR_BYTEX
        INC_WORD <_DRRL
        LDA     #$80
        STA     <_UNZIP_PTR_B1
?GET_FPTR_BYTEX:
        TXA
        RTS

; ***************************************************************************
        ENDS
; ***************************************************************************

⌨️ 快捷键说明

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