📄 dicadd2.asm
字号:
; ***************************************************************************
; * Project : Electronic Dictionary *
; * Date : 2003.9 *
; * File Name : DICADD2.ASM *
; ***************************************************************************
pw 128
case off
externs on
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 extract.h
include xyhaddr.h
;;========>>>> public declare <<<===========
public AmendLibaddr
;public AmendxyhLib
public ShowBuDingJieShi
public save_BudingTouToBuff
public save_BudingWeiToBuff
public FenLeiError_21
public FenLeiError_42
;;==========常量定义===================
AmendLibaddr equ 87a000h ;8fd000h
;;==================================================
DS0 .SECTION ; Data ROM location
;=====================================================
PS0b .SECTION ; Program ROM location 0080h
BANKNO equ Dicadd2bank
;;===========下面是英汉的补丁程序===============
include mend.asm
;;======================================
;;function:比较此单词是否有补丁
;;input:<indxd MendLibAddrr
;;output
;;======================================
;AmendxyhLib:
; stz <AmendFlag
; lda #>BugLibAddrr
; sta <INSH
; lda #<BugLibAddrr
; sta <INSL
; ldx #NumOfMend ;补丁个数
;?_Bigloop:
; ldy #00h
; lda (INS),y
; cmp <indxd
; bne ?_Next
; iny
; lda (INS),y
; cmp <indxd+1
; bne ?_Next
; iny
; lda (INS),y
; cmp <indxd+2
; bne ?_Next
; iny
; lda (INS),y
; cmp <bitcount
; beq ?_OK
;?_Next:
; jsr inc7_INS
; dex
; bne ?_Bigloop
; rts ;没有找到匹配的地址退出
;?_OK:
; iny
; lda (INS),y
; sta <AmendFlag
; iny
; lda (INS),y
; sta <AmendaddrL
; iny
; lda (INS),y
; sta <AmendaddrH
;
; clc
; lda #<AmendLibaddr
; adc <AmendaddrL
; sta <AmendaddrL
; lda #>AmendLibaddr
; adc <AmendaddrH
; sta <AmendaddrH
;
; rts
;inc7_INS:
; clc
; lda <INSL
; adc #7
; sta <INSL
; lda <INSH
; adc #0
; sta <INSH
; rts
;;========================================
;;function:显示新英汉的补丁解释
;;input:<Amendaddr
;;output:textbuffor
;;========================================
ShowBuDingJieShi:
; lda <AmendaddrL
; pha
; lda <AmendaddrH
; pha
; lda textpageNum
; pha
; stz <AttributeH
; lda <AttributeL
; and #3fh
; sta <AttributeL
; lda #iconDown&0ffh
; trb Icondown>>8
; lda #iconUp&0ffh
; trb IconUp>>8
; lda #' ' ;;清除3~6行
; ldy #40
;?1:
; sta textbuffor,y
; iny
; cpy #120
; bcc ?1
; stz yinbiaoinfbuff
; stz yinbiaoinfbuff+3
; stz yinbiaoinfbuff+6
; lda #AmendLibaddr>>24
; sta <DrrH
; lda #AmendLibaddr>>16
; sta <DrrL
; lda textpageNum
; beq ?_Offup
; lda #IconUp&0ffh
; tsb IconUp>>8
; jsr Cal_startaddr
;?_Offup:
; Lsetcur 0,2
;?_disLoop:
; lda (<AmendaddrL)
; bne ?_0
; jmp ?_exit
;?_0:
; cmp #A0h
; bcc ?_enchar
; lda <CurX
; cmp #19
; bcc ?_showHanzi
; lcheckcrlf
; lda <CurY
; cmp #6
; bcs ?_Full
;?_showHanzi:
; lda (<AmendaddrL)
; tax
; jsr inc1_AmendaddrL
; lda (<AmendaddrL)
; tay
; Lputchar
;?_checkFull:
; lda <CurY
; cmp #6
; bcs ?_Full
; jsr inc1_AmendaddrL
; bra ?_DisLoop
;?_enchar:
; cmp #0dh
; beq ?_deal0d
; jsr Judgeaz
; beq ?_disenchar
; lda <CurX
; cmp #18
; bcs ?_chackEnChar
;?_disenchar:
; lda (<AmendaddrL)
; tax
; lputchar
; bra ?_checkFull
;?_deal0d:
; lcheckcrlf
; bra ?_checkFull
;?_chackEnChar:
; cmp #19
; beq ?_chackEnChar1
; ldy #1
; lda (<AmendaddrL),y
; jsr judgeaz
; beq ?_disenchar
; lda (<AmendaddrL)
; tax
; lputchar
; ldx #1ah
; Lputchar
; bra ?_checkFull
;?_chackEnChar1:
; ldy #1
; lda (<AmendaddrL),y
; jsr judgeaz
; beq ?_disenchar
; ;bra ?_deal0d
; lcheckcrlf
; lda <CurY
; cmp #6
; bcs ?_Full
; jmp ?_DisLoop
;
;?_Full:
; ldy #1
; lda (<AmendaddrL),y
; beq ?_exit
; lda #IconDown&0ffh
; tsb IconDown>>8
;?_exit:
; pla
; sta textpageNum
; pla
; sta <AmendAddrH
; pla
; sta <AmendaddrL
; rts
;;================================
;;function:根据页数计算地址
;;input:<Amendaddr
;;output:<Amendaddr
;;================================
Cal_startaddr:
lda textpageNum
pha
lda #4
sta tmpcount ;行数
ldx #20 ;每行的字符数
?_loop:
lda (<AmendaddrL)
cmp #a0h
bcc ?_Enchar
cpx #2
bcc ?_addOneline
jsr inc1_AmendaddrL
jsr inc1_AmendaddrL
dex
dex
bne ?_loop
?_addOneline:
ldx #20
dec tmpcount
bne ?_loop
?_addOnepage:
lda #4
sta tmpcount
ldx #20
dec textpageNum
bne ?_loop
bra ?_exit
?_Enchar:
cmp #0dh
beq ?_deal0d
jsr judgeaz
beq ?_enough
cpx #2
bcs ?_enough
ldy #1
lda (<AmendaddrL)
jsr Judgeaz
bne ?_addOneline
?_enough:
jsr inc1_AmendaddrL
dex
bne ?_loop
bra ?_addOneline
?_deal0d:
jsr inc1_AmendaddrL
cpx #20
bne ?_addOneline
bra ?_loop
?_exit:
pla
sta textpageNum
rts
;;=================================
;;function:保存补丁解释的前一页的东西
;;input:
;;output:
;;=================================
save_BudingTouToBuff:
lda <AmendAddrL
pha
lda <AmendAddrH
pha
lda textpageNum
pha
lda #AmendLibaddr>>24
sta <DrrH
lda #AmendLibaddr>>16
sta <DrrL
jsr Cal_startaddr
lda <AmendaddrL
sta <INDL
lda <AmendaddrH
sta <INDH
ldy #0ffh
?_loop:
iny
jsr dec1_IND
lda (<IND)
jsr Judgeaz
beq ?_0
lda (<IND)
sta cdict_result,y
bra ?_loop
?_0:
ldx #0ffh
?_loop1:
inx
dey
bmi ?_1
lda cdict_result,y
sta cdict_result+90,x
bra ?_loop1
?_1:
ldy #0ffh
?_loop2:
iny
lda findbuff,y
sta cdict_result+90,x
beq ?_2
inx
bra ?_loop2
?_2:
ldy #0ffh
?_loop3:
iny
lda cdict_result+90,y
sta findbuff,y
bne ?_loop3
pla
sta textpageNum
pla
sta <AmendAddrH
pla
sta <AmendaddrL
rts
;;=================================
;;function:保存补丁解释的后一页的东西
;;input:
;;output:
;;=================================
save_BudingWeiToBuff:
lda <AmendAddrL
pha
lda <AmendAddrH
pha
lda textpageNum
pha
lda #AmendLibaddr>>24
sta <DrrH
lda #AmendLibaddr>>16
sta <DrrL
lda IconDown>>8
and #IconDown&0ffh
beq ?_exit
inc textpageNum
jsr Cal_startaddr
ldy #0ffh
?_loop:
iny
lda findbuff,y
bne ?_loop
?_loop1:
lda (<AmendaddrL)
jsr judgeaz
beq ?_0
lda (<AmendaddrL)
sta findbuff,y
jsr inc1_amendaddrL
iny
bra ?_loop1
?_0:
lda #0
sta findbuff,y
?_exit:
pla
sta textpageNum
pla
sta <AmendAddrH
pla
sta <AmendaddrL
rts
inc1_AmendaddrL:
inc <AmendaddrL
bne ?_0
inc <AmendaddrH
?_0:
rts
dec1_IND:
sec
lda <INDL
sbc #1
sta <INDL
lda <INDH
sbc #0
sta <INDH
rts:
;;=========================================
;;function:判断寄存器a里的的内容是否在a~z 或 A~Z之内
;;input:a
;;output:a=0 不在范围内 a!=0 在范围内
;;=========================================
judgeaz:
cmp #'z'+1
bcs ?_0
cmp #'A'
bcc ?_0
cmp #'a'
bcs ?_1
cmp #'Z'+1
bcs ?_0
?_1:
lda #0ffh
rts
?_0:
lda #0
rts
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -