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

📄 uzsub.asm

📁 辞典 dict3.asm.grammar.asm,newword.asm 学习 learn.asm 名片 userinf.asm 备忘 userinf.asm 提醒 userinf
💻 ASM
字号:
; ***************************************************************************
; *     Project : Electronic Dictionary                                     *
; *        Date : 2003.9                                                    *
; *   File Name : UZSUB.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 CNC.ADR
        INCLUDE ST2202.MAC

        INCLUDE CNDICT.INC

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

        PUBLIC  RESTORE_FIRST_PAGE
        PUBLIC  CN_FIRST_PAGE
        PUBLIC  CN_NEW_PAGE
        PUBLIC  CN_NEW_PAGE0
        PUBLIC  CN_NEXT_PAGE

        PUBLIC  IDIOM_LOCATE_ADDR
        PUBLIC  IDIOM_NEXT_PAGE
        PUBLIC  UNZIP_4WORD_ONLY

        PUBLIC  CLR_TEXTBUFFER

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

PS0d	.Section

BankNo  EQU     CH_Idiom_Bank

; ***************************************************************************
; * CLRTEXTBUFFER                                                           *
; ***************************************************************************
CLR_TEXTBUFFER:
        LDX     #0
        LDA     #' '
?CLR_TEXTBUFFER0:
        STA     TEXTBUFFOR,X
        INX
        CPX     #100
        BCC     ?CLR_TEXTBUFFER0
        RTS

; ***************************************************************************
; *                                                                         *
; ***************************************************************************
RESTORE_FIRST_PAGE:
        STZ     <_BIT_SIZE
        STZ     <_UNZIP_COUNT           ;
        JMP     CN_FIRST_PAGEB          ;

; ***************************************************************************
; *                                                                         *
; ***************************************************************************
CN_NEXT_PAGE:
        STZ     CNDICT_TYPE             ; CNDICT_TYPE = 0;
        STZ     CNDICT_PAGE_END         ;
        JMP     CN_FIRST_PAGEA          ;

; ***************************************************************************
; * CHDICT SHOW FIRST PAGE                                                  *
; ***************************************************************************
CN_FIRST_PAGE:
        STZ     CNDICT_TYPE             ; CNDICT_TYPE = 0;
        STZ     CNDICT_PAGE_END         ;
        LDA     textbuffor+edit_start
        STA     CNDICT_BUFFER           ;
        LDA     textbuffor+edit_start+1 ;
        STA     CNDICT_BUFFER+1         ;
        LDA     textbuffor+edit_start   ;
        STA     <_UNZIP_CH_H            ;
        LDA     textbuffor+edit_start+1 ;
        STA     <_UNZIP_CH_L            ;
        JSR     UNZIP_GET_ADDR          ;

        Lda     <_Unzip_Ptr_B0
        sec
        sbc     #<Last_Hz_Index0
        Lda     <_Unzip_Ptr_B1
        sbc     #>Last_Hz_Index0
        Lda     <_Unzip_Ptr_B2
        sbc     #<(Last_Hz_Index0/10000H)		;07ebe3h
        Lda     <_Unzip_Ptr_B3
        sbc     #<(Last_Hz_Index0/1000000H)
        bcc     CN_FIRST_PAGEA

	JMP	Ch_Dic_Load

CN_FIRST_PAGEA:                         ;
        JSR     UNZIP_LEMMA_HEAD        ;
CN_FIRST_PAGEB:
        STZ     <_UZ_LAST_WORD          ;
        STZ     <_UZ_LAST_WORD+1        ; _UZ_LAST_WORD = 0;
        STZ     CNDICT_PAGE_IDX         ; CNDICT_PAGE_IDX = 0;

        LDA     (_UNZIP_PTR_B0)         ;
        STA     <_ZIPPED_DATA           ; _ZIPPED_DATA = *_UNZIP_PTR_B0;
        LDX     #8                      ; X = 8;
        STX     <_UNZIP_LOOP_X          ;
        JSR     RECORD_UZ_PTR           ; FIRST PAGE, BACKUP HERE.

        JSR     UNZIP_A_CHWORD          ; FIRST WORD

        JSR     CLR_TEXTBUFFER          ; CLR_TEXTBUFFER();

        LDA     <_UNZIP_CH_L            ;
        STA     TEXTBUFFOR+0            ;
        ldA     <_UNZIP_CH_H            ;
        STA     TEXTBUFFOR+1            ;
        LDA     #2                      ;
        STA     <_CHDictByteCnt         ;

?CN_NEW_PAGE0:                          ;
        JSR     UNZIP_N_CHWORD          ;
        ASL                             ;
        TAX                             ;
        JMP     (?CN_AFTER_UZ_PROC_TBL,X) ;
?CN_AFTER_UZ_PROC_TBL:                  ;
        DW      ?CN_UNZIP_END           ;
        DW      ?CN_UNZIP_BYTE          ;
        DW      ?CN_UNZIP_WORD          ;

?CN_NEW_PAGE1:                          ;
        LDA     <_CHDictByteCnt         ;
        CMP     #100                    ;
        BCC     ?CN_NEW_PAGE0           ;
?CN_NEW_PAGEX:                          ;
        LDA     <DRRL                   ;
        STA     BACKUP_DRR              ;
        LDA     <DRRH                   ;
        STA     BACKUP_DRR+1            ;
        RTS                             ;

?CN_UNZIP_END:                          ;
        LDA     #1                      ;
        STA     CNDICT_PAGE_END         ;
        BRA     ?CN_NEW_PAGEX           ;

?CN_UNZIP_BYTE:                         ;
        LDX     <_CHDictByteCnt         ;
        LDA     <_UNZIP_CH_L            ;
        CMP     #$0A                    ;
        BEQ     ?CN_UNZIP_BYTE0A        ;
        STA     TEXTBUFFOR,X            ;
        INC     <_CHDictByteCnt         ;
        JMP     ?CN_NEW_PAGE1           ;
?CN_UNZIP_BYTE0A:                       ;
        CLC
        LDA     <_DATA_SIZE_0
        ADC     <_DATA_SIZE_1
        CMP     #1
        BEQ     ?CN_UNZIP_BYTE0AA

        LDA     CNDICT_TYPE             ;
        BEQ     ?CN_UNZIP_BYTE0AS       ;
?CN_UNZIP_BYTE0AA:                      ;
        LDA     #1                      ;
        STA     CNDICT_PAGE_END         ;
        JMP     ?CN_NEW_PAGEX           ;
?CN_UNZIP_BYTE0AS:                      ;
        LDA     #20                     ;
        STA     <_UNZIP_CH_H            ;
        LDY     #0                      ;
?CN_UNZIP_BYTE0A0:                      ;
        CPX     <_UNZIP_CH_H            ;
        BCC     ?CN_UNZIP_BYTE0A1       ;
        BEQ     ?CN_UNZIP_BYTE0A1       ;
        CLC                             ;
        ADC     #20                     ;
        STA     <_UNZIP_CH_H            ;
        INY                             ;
        CPY     #6                      ;
        BCC     ?CN_UNZIP_BYTE0A0       ;
?CN_UNZIP_BYTE0A1:                      ;
        LDA     <_UNZIP_CH_H            ;
        CPA     #100                    ;
        BCC     ?CN_UNZIP_BYTE0A2       ;
        STZ     <_UZ_LAST_WORD          ;
        STZ     <_UZ_LAST_WORD+1        ;
        JMP     ?CN_NEW_PAGEX           ;
?CN_UNZIP_BYTE0A2:                      ;
        STA     <_CHDictByteCnt         ;
        JMP     ?CN_NEW_PAGE1           ;

?CN_UNZIP_WORD:
        LDX     <_CHDictByteCnt
        CPX     #19
        BEQ     ?CN_UNZIP_WORD0
        CPX     #39
        BEQ     ?CN_UNZIP_WORD0
        CPX     #59
        BEQ     ?CN_UNZIP_WORD0
        CPX     #79
        BEQ     ?CN_UNZIP_WORD0
        CPX     #99
        BNE     ?CN_UNZIP_WORDX
        LDA     <_UNZIP_CH_L
        STA     <_UZ_LAST_WORD
        LDA     <_UNZIP_CH_H
        STA     <_UZ_LAST_WORD+1
        jmp     ?CN_NEW_PAGEX
?CN_UNZIP_WORD0:
        INC     <_CHDictByteCnt
        LDX     <_CHDictByteCnt
?CN_UNZIP_WORDX:
        LDA     <_UNZIP_CH_L
        STA     TEXTBUFFOR,X
        LDA     <_UNZIP_CH_H
        STA     TEXTBUFFOR+1,X
        INC     <_CHDictByteCnt
        INC     <_CHDictByteCnt
        JMP     ?CN_NEW_PAGE1

; ***************************************************************************
; * CHDICT SHOW NEW PAGE                                                    *
; ***************************************************************************
        JMP     ?CN_NEW_PAGE0
CN_NEW_PAGE:

CN_NEW_PAGE0:
        JSR     CLR_TEXTBUFFER          ;
        STZ     <_CHDictByteCnt         ;
        STZ     <_BIT_SIZE
        STZ     <_UNZIP_COUNT           ;

        LDA     <_UZ_LAST_WORD          ;
        ORA     <_UZ_LAST_WORD+1        ;
        BEQ     ?CN_NEW_PAGE            ;

        LDA     <_UZ_LAST_WORD          ;
        STA     TEXTBUFFOR              ;
        LDA     <_UZ_LAST_WORD+1        ;
        STA     TEXTBUFFOR+1            ;

        LDA     #2                      ;
        STA     <_CHDictByteCnt         ;

?CN_NEW_PAGE:
        BRA     CN_NEW_PAGE-3          ;

; ***************************************************************************
; *                                                                         *
; ***************************************************************************
IDIOM_LOCATE_ADDR:
        STZ     CNDICT_PAGE_END         ; CNDICT_PAGE_END=0;
        LDA     #1                      ;
        STA     CNDICT_TYPE             ; CNDICT_TYPE=1;

        JSR     FIND_IDIOM_ADDR         ;
        STZ     CNIDIOM_TEMP            ;

?IDIOM_MATCH_INPUTS:                    ;?IDIOM_MATCH_INPUTS:
        STZ     <_BIT_SIZE              ; <_BIT_SIZE=0;
        STZ     <_UNZIP_COUNT           ; <_UNZIP_COUNT=0;
        JSR     UNZIP_A_IDIOM           ; UNZIP_A_IDIOM

        LDX     #0                      ;
?IDIOM_MATCH_INPUT0:                    ;
        LDA     CNDICT_BUFFER,X         ;
        BEQ     ?IDIOM_MATCH_INPUT1     ;
        CMP     <_UNZIP_CH_L            ;
        BNE     ?IDIOM_MATCH_INPUT1     ;
        LDA     CNDICT_BUFFER+1,X       ;
        CMP     <_UNZIP_CH_H            ;
        BNE     ?IDIOM_MATCH_INPUT1     ;
        PHX                             ;
        JSR     UNZIP_N_CHWORD          ;
        PLX                             ;
        INX                             ;
        INX                             ;
        BRA     ?IDIOM_MATCH_INPUT0     ;
?IDIOM_MATCH_INPUT1:                    ;
        LDA     CNIDIOM_TEMP            ;
        BNE     ?IDIOM_MATCH_INPUT10    ;
        CPX     #0                      ;
        BEQ     ?IDIOM_MATCH_INPUT2     ;
?IDIOM_MATCH_INPUT10:                   ;
        CPX     CNIDIOM_SIZE            ;
        BCS     ?IDIOM_MATCH_INPUT2     ;
        CPX     CNIDIOM_TEMP            ;
        BCC     ?IDIOM_MATCH_INPUT3     ;
        STX     CNIDIOM_TEMP            ;

        LONG_ADD_CONST CNIDIOM_ADDR,3   ;

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

        JSR     FETCHIDIOMADDR          ;
        JMP     ?IDIOM_MATCH_INPUTS     ;

?IDIOM_MATCH_INPUT3:                    ;
        LONG_SUB_CONST CNIDIOM_ADDR,3   ;
?IDIOM_MATCH_INPUT2:                    ;
        LDA     CNIDIOM_ADDR
        STA     <_UNZIP_FPTR_0
        LDA     CNIDIOM_ADDR+1
        STA     <_UNZIP_FPTR_0+1
        LDA     CNIDIOM_ADDR+2
        STA     <_UNZIP_FPTR_0+2
        LDA     CNIDIOM_ADDR+3
        STA     <_UNZIP_FPTR_0+3

        RTS

; ***************************************************************************
IDIOM_NEXT_PAGE:
        JSR     CLR_TEXTBUFFER          ; CLR_TEXTBUFFER();
        JSR     BACKUP_FPTR             ;
        JSR     FETCHIDIOMADDR          ;

        LDA     #1                      ;
        STA     CNDICT_TYPE             ; CNDICT_TYPE = 1;
        STZ     CNDICT_PAGE_END         ;
        STZ     CNDICT_PAGE_IDX         ; CNDICT_PAGE_IDX = 0;

        STZ     <_UZ_LAST_WORD          ;
        STZ     <_UZ_LAST_WORD+1        ; _UZ_LAST_WORD = 0;

        STZ     <_BIT_SIZE              ;
        STZ     <_UNZIP_COUNT           ;

        JSR     RECORD_UZ_PTR           ; FIRST PAGE, BACKUP HERE.
        JSR     UNZIP_A_IDIOM           ;

        LDA     <_UNZIP_CH_L            ;
        STA     TEXTBUFFOR+0            ;
        ldA     <_UNZIP_CH_H            ;
        STA     TEXTBUFFOR+1            ;
        LDA     #2                      ;
        STA     <_CHDictByteCnt         ;

        JMP     CN_NEW_PAGE-3           ;

; ***************************************************************************
UNZIP_4WORD_ONLY:                       ;
        JSR     BACKUP_FPTR             ;
        JSR     FETCHIDIOMADDR          ;

        STZ     <_BIT_SIZE              ;
        STZ     <_UNZIP_COUNT           ;
        JSR     UNZIP_A_IDIOM           ;

        LDA     <_UNZIP_CH_L            ;
        STA     IDIOM_BUFFER+0          ;
        ldA     <_UNZIP_CH_H            ;
        STA     IDIOM_BUFFER+1          ;
        LDA     #2                      ;
        STA     <_CHDictByteCnt         ;

?UNZIP_4W_O0:                           ;
        JSR     UNZIP_N_CHWORD          ;
        ASL                             ;
        TAX                             ;
        JMP     (?CN_AFTER_UZ_PROC_TBL,X) ;
?CN_AFTER_UZ_PROC_TBL:                  ;
        DW      ?UNZIP_4W_O_END         ;
        DW      ?UNZIP_4W_O_BYTE        ;
        DW      ?UNZIP_4W_O_WORD        ;

?UNZIP_4W_O_BYTE:                       ;
        LDX     <_CHDictByteCnt         ;
        LDA     <_UNZIP_CH_L            ;
        STA     IDIOM_BUFFER,X          ;
        CMP     #$09                    ;
        BEQ     ?UNZIP_4W_O_END         ;
        CMP     #$20                    ;
        BEQ     ?UNZIP_4W_O_END         ;
        INC     <_CHDictByteCnt         ;
        JMP     ?UNZIP_4W_O0            ;

?UNZIP_4W_O_WORD:                       ;
        LDX     <_CHDictByteCnt         ;
        LDA     <_UNZIP_CH_L            ;
        STA     IDIOM_BUFFER,X          ;
        LDA     <_UNZIP_CH_H            ;
        STA     IDIOM_BUFFER+1,X        ;
        INC     <_CHDictByteCnt         ;
        INC     <_CHDictByteCnt         ;
        JMP     ?UNZIP_4W_O0            ;

?UNZIP_4W_O_END:                        ;
        STZ     IDIOM_BUFFER,X          ;
        JSR     RESTORE_FPTR            ;

        RTS

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

⌨️ 快捷键说明

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