📄 uzsub.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 + -