📄 eeunzip.asm
字号:
; ***************************************************************************
; * 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 + -