📄 dicadd.asm
字号:
asl
asl
asl
sta <OY
tya
asl
asl
asl
sta <OX
ply
rts
;;======================================
;;function:模式5的textbuffor 偏移X计算<OX OY
;;input:X
;;output:<OX <OY
;;======================================
XToOXOYmode5:
phy
txa
ldx #0ffh
?_loop:
tay
inx
sec
sbc #20
bpl ?_loop
txa
dec
dec
asl
asl
asl
asl
sta <OY
tya
asl
asl
asl
sta <OX
ply
rts
;;======================================
;;function:模式15 16 17的textbuffor 偏移X计算<OX OY
;;input:X
;;output:<OX <OY
;;======================================
XToOXOYmode15:
phy
txa
sec
sbc #120
ldx #2
?_loop:
tay
inx
sec
sbc #20
bpl ?_loop
txa
asl
asl
asl
asl
sta <OY
tya
asl
asl
asl
sta <OX
ply
rts
;;======================================
;;function:模式4的textbuffor 偏移y计算<OX OY
;;input:X
;;output:<INS
;;======================================
YToCharmode4:
phx
tya
ldy #0ffh
?_loop:
tax
iny
sec
sbc #20
bpl ?_loop
tya
dec
asl
asl
asl
asl
sta <CharH
txa
asl
asl
asl
sta <CharL
plx
rts
;;======================================
;;function:模式1的textbuffor 偏移y计算<OX OY
;;input:X
;;output:<INS
;;======================================
YToCharmode1:
phx
tya
ldy #0ffh
?_loop:
tax
iny
sec
sbc #20
bpl ?_loop
tya
asl
asl
asl
asl
sta <CharH
txa
asl
asl
asl
sta <CharL
plx
rts
;;======================================
;;function:模式5 9 10的textbuffor 偏移y计算<OX OY
;;input:X
;;output:<INS
;;======================================
YToCharmode5:
phx
tya
ldy #0ffh
?_loop:
tax
iny
sec
sbc #20
bpl ?_loop
tya
dec
dec
asl
asl
asl
asl
sta <CharH
txa
asl
asl
asl
sta <CharL
plx
rts
;;======================================
;;function:模式15 16 17的textbuffor 偏移y计算<OX OY
;;input:X
;;output:<INS
;;======================================
YToCharmode15:
phx
tya
sec
sbc #120
ldy #2
?_loop:
tax
iny
sec
sbc #20
bpl ?_loop
tya
asl
asl
asl
asl
sta <CharH
txa
asl
asl
asl
sta <CharL
plx
rts
;;=========================================
;;function:判断寄存器a里的的内容是否在a~z 或 A~Z之内
;;input:a
;;output:a=0 不在范围内 a!=0 在范围内
;;=========================================
judgepurityaz:
cmp #60h ;重音符
beq ?_1
cmp #20h;外来字符也是英文
bcc ?_1
cmp #0a0h
bcs ?_0
cmp #9ah
bcs ?_1
cmp #8eh
bcs ?_0
cmp #8bh
bcs ?_1
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
;;=========================================
;;function:判断寄存器a里的的内容是否在a~z 或 A~Z之内
;;input:a
;;output:a=0 不在范围内 a!=0 在范围内
;;=========================================
judgeaz:
cmp #20h
bcc ?_1
cmp #80h
bcc ?_2
cmp #0a0h
bcc ?_1
bra ?_0
?_2:
cmp #31h
bcc ?_3
cmp #39h
bcc ?_1
?_3:
cmp #xianshiguai
beq ?_1
cmp #'-'
beq ?_1
cmp #'''
beq ?_1
cmp #1eh ;次重音符
beq ?_1
cmp #'`' ;重音符
beq ?_1
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
;;=========================================
;;function:判断寄存器a里的的内容是否在a~z 或 A~Z之内
;;---->用于反查选中时跨两页的单词
;;input:a
;;output:a=0 不在范围内 a!=0 在范围内
;;=========================================
judgeaz_forfanCha:
cmp #20h
bcc ?_1
cmp #80h
; bcc ?_2
; cmp #0a0h
; bcc ?_1
; bra ?_0
bcs ?_0
?_2:
cmp #31h
bcc ?_3
cmp #39h
bcc ?_1
?_3:
cmp #xianshiguai
beq ?_1
cmp #'-'
beq ?_1
cmp #'''
beq ?_1
cmp #1eh ;次重音符
beq ?_1
cmp #'`' ;重音符
beq ?_1
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
PrepareFanCha1:
bbs0 <BlackFlag,?_haveinvertword
jmp NNmainU
?_haveinvertword:
lda <Screenmode
dec
beq ?_mode1
lda <Screenmode
CMP #14
beq ?_mode1
bbs4 <Newflag,?_mode5
bbs5 <Newflag,?_mode15
jsr Get_invertwordmode4
jmp StartFind
?_mode5:
jsr Get_invertwordmode5
jmp StartFind
?_mode15:
jsr Get_invertwordmode15
jmp StartFind
?_mode1:
jsr Get_invertwordmode1
jmp StartFind
StartFind:
lda findbuff
cmp #hanZiQu
bcc ?_enchar
jmp ?_FindDicchen
?_enchar:
LClearUp_findbuff
lda #FanChaNewenchStatusNum
sta <NstatusFlag
lda #ChenFanchaEnChStatusNum
sta <ChenStatusFlag
lda #6
sta _Chdictmainstate
lda <Blackflag;不清除等号的标志
and #04h
sta <Blackflag
bbs0 <LevelFlag,?_DuoJiEnchMode
smb0 <LevelFlag ;置多级反查标志
bbs7 <LevelFlag,?_DuoJiEnchMode
Lstore_jieshiInf
?_DuoJiEnchMode:
LDaXieToXiaoXie
jsr findmatchEnword
Lstore_Nowlineaddr ;保存当前的信息&地址
jsr FindMostMatch;为等号的查找
lda #>cdict_result
sta <INDH
lda #<cdict_result
sta <INDL
LgetchainLen
Lextract_word
Lstore_citiao
LsetAttribute_flag
Lextract_yinbiao
LShowcitiaoyinbiao
Lshowinter
lda <AttributeH
and #88h
sta <AttributeH
lda <AttributeL
and #03fh
sta <AttributeL
LLight_AttributeIcon
LLight_DownUppageIcon
jsr CALL_LUpdateScreen
LShow_jieshiyinbiao
jmp NNmainU
?_FindDicchen:
lda #FanchaChenstatusNum
sta <NstatusFlag
lda #ChenFanchaChEnStatusNum
sta <ChenStatusFlag
stz <blackflag
bbs0 <LevelFlag,?_DuoJiChenMode
smb0 <LevelFlag ;置多级反查标志
bbs7 <LevelFlag,?_DuoJiChenMode
Lstore_jieshiInf
?_DuoJiChenMode:
ldy #0ffh
?_loop:
iny
cpy #8 ;检查汉英输入缓冲最大值
bcs ?_MaxLen
lda findbuff,y
sta Cheninputbuff+1,y
bne ?_loop
?_MaxLen:
lda #0
sta Cheninputbuff+1,y
ldy #0ffh ;处理里面的空格
?_dealKongLoop:
iny
lda Cheninputbuff+1,y
beq ?_DealOK
cmp #' '
bne ?_dealKongLoop
?_dealKongLoop1:
iny
lda Cheninputbuff+1,y
sta Cheninputbuff,y
bne ?_dealKongLoop1
?_DealOK:
Lfind_machedchinawordaddr
Ldicchenmode
;;=======================================
;;function:检查是否是带等号的查找如果是完全匹配下面15个
;;-->单词找不到将最匹配的单词地址给出
;;input:<Blackflag,Nowlineaddr,DengHaoBuff
;;output:Nowlinebuff
;;=======================================
FindMostMatch:
bbs2 <Blackflag,?_DengHaoChaoXun
rts
?_DengHaoChaoXun:
lda <indxd
pha
lda <indxd+1
pha
lda <indxd+2
pha
lda <indxd+3
pha
lda <bitcount
pha
lda #18 ;逐个往下完全匹配的个数
pha
?_Bigloop:
lda #>cdict_result
sta <INDH
lda #<cdict_result
sta <INDL
LgetchainLen
Lextract_word
lda #0
sta (<IND)
ldy #0ffh
?_loop:
iny
cpy #26
bcs ?_MatchOK
lda DengHaoBuff,y
beq ?_end
cmp cdict_result,y
beq ?_loop
?_nextword:
Lrestore_Nowlineaddr
ldx #1
LGetnextXlineaddr
Lstore_Nowlineaddr ;保存当前的信息&地址
pla
dec
beq ?_Nofind
pha
bra ?_Bigloop
?_end:
lda cdict_result,y
bne ?_nextword
?_MatchOK:
pla
pla
pla
pla
pla
pla
Lrestore_Nowlineaddr
?_Exit:
rts
?_NoFind:
pla
sta <bitcount
pla
sta <indxd+3
pla
sta <indxd+2
pla
sta <indxd+1
pla
sta <indxd
Lstore_Nowlineaddr
bra ?_exit
FanchaChenKeyTab:
db EscKey
db EnterKey
db UPKey
db DownKey
db RightKey
db LeftKey
db UpPagekey
db DownPagekey
db Nullkey
FanchaChenFunTab:
dw FanChaNewenchEscKey-1
dw FanchaChenenterkey-1
dw FanchaChenUKey-1
dw FanchaChenDKey-1
dw FanchaChenRkey-1
dw FanchaChenLkey-1
dw FanchaChenUPkey-1
dw FanchaChenDPkey-1
FanchaChenstatus1:
ldy #0ffh
FanchaChen_1:
iny
lda FanchaChenKeytab,y
bmi ?_ErrorDownKey
cmp <KeyNo
bne FanchaChen_1
tya
asl
tay
lda FanchaChenFuntab+1,y
pha
lda FanchaChenFuntab,y
pha
rts
?_ErrorDownKey:
jmp NNmainU
FanchaChenenterkey:
lda #DuoJiChenIntoEnchStatusNum
sta <NstatusFlag
LChenjieshiEnterkey
FanchaChenUKey:
LChenjieshiUkey
FanchaChenDKey:
LChenjieshiDkey
FanchaChenRkey:
LChenjieshiRkey
FanchaChenLkey:
LChenjieshiLkey
FanchaChenUPKey:
LChenjieshiUPkey
FanchaChenDpKey:
LChenjieshiDPkey
;;=======================================
;;function:英汉反查时的查找程序
;;input:要查找的单词放在Findbuff
;;output:和此单词相匹配的单词地址
;;=======================================
findmatchEnword:
lda #>cdict_result
sta <INDH
lda #<cdict_result
sta <INDL
Lfind_first16addr
Lfind_16qianqujian
LFind_FanChamatchword_addr
rts
DuoJiChenIntoEnchKeyTab:
db EscKey
db EnterKey
db UPKey
db DownKey
db RightKey
db LeftKey
db UpPagekey
db DownPagekey
db LiKey
;db LiZhengKey
;db CiGenKey
db spacekey
db talk_key
db Nullkey
DuoJiChenIntoEnchFunTab:
dw FanChaNewenchEscKey-1
dw FanChaNewenchEnterKey-1
dw Attribute5000jieshiUKey-1
dw Attribute5000jieshiDKey-1
dw FanchaselectRkey-1
dw FanchaselectLkey-1
dw DuoJiChenIntoEnchUPkey-1
dw DuoJiChenIntoEnchDPkey-1
;dw Attribute5000Selectliju-1 04-7-19 15:31
dw FanChaNewenchAllLiJu-1
;dw DuoJiChenIntoEnchCigen-1
dw enchTalkWord-1
dw enchTalkWord-1
enchTalkWord:
jsr ljsr
dw NewenchBank
dw TalkWord-1
DuoJiChenIntoEnchStatus1:
ldy #0ffh
DuoJiChenIntoEnch_1:
iny
lda DuoJiChenIntoEnchKeytab,y
bmi ?_ErrorDownKey
cmp <KeyNo
bne DuoJiChenIntoEnch_1
tya
asl
tay
lda DuoJiChenIntoEnchFuntab+1,y
pha
lda DuoJiChenIntoEnchFuntab,y
pha
rts
?_ErrorDownKey:
jmp NNmainU
DuoJiChenIntoEnchUPkey:
LViewEnChUPkey
DuoJiChenIntoEnchDPkey:
LViewEnChDPkey
DuoJiChenIntoEnchCigen:
bbs3 <AttributeH,?_havecigen
jmp NNmainU
?_havecigen:
lda #FanChaNewenchStatusNum
sta <NstatusFlag
LCal_CigenAddr
Lstore_Nowlineaddr ;保存当前的信息&地址
lda #>cdict_result
sta <INDH
lda #<cdict_result
sta <INDL
LgetchainLen
Lextract_word
Lstore_citiao
LsetAttribute_flag
Lextract_yinbiao
LShowcitiaoyinbiao
Lshowinter
lda <AttributeH
and #88h
sta <AttributeH
lda <AttributeL
and #03fh
sta <AttributeL
LLight_AttributeIcon
LLight_DownUppageIcon
jmp update5000jieshiyinbiao
FanChaNewenchKeyTab:
db EscKey
db EnterKey
db UPKey
db DownKey
db RightKey
db LeftKey
db UpPagekey
db DownPagekey
db LiKey
;db LiZhengKey
;db CiGenKey
db spacekey
db talk_key
db Nullkey
FanChaNewenchFunTab:
dw FanChaNewenchEscKey-1
dw FanChaNewenchEnterKey-1
dw Attribute5000jieshiUKey-1
dw Attribute5000jieshiDKey-1
dw FanchaselectRkey-1
dw FanchaselectLkey-1
dw FanChaNewenchUPkey-1
dw FanChaNewenchDPkey-1
;dw Attribute5000Selectliju-1
dw FanChaNewenchAllLiJu-1
;dw DuoJiChenIntoEnchCigen-1
dw enchTalkWord-1
dw enchTalkWord-1
FanChaNewenchStatus1:
ldy #0ffh
FanChaNewench_1:
iny
lda FanChaNewenchKeytab,y
bmi ?_ErrorDownKey
cmp <KeyNo
bne FanChaNewench_1
tya
asl
tay
lda FanChaNewenchFuntab+1,y
pha
lda FanChaNewenchFuntab,y
pha
rts
?_ErrorDownKey:
jmp NNmainU
FanChaNewenchEscKey:
rmb0 <levelFlag
ldy #0ffh
?_loop:
iny
lda Ninputbuff,y
sta Findbuff,y
bne ?_loop
LDaXieToXiaoXie
lda jieshifirstbuff+3
sta nowlinebuff
lda jieshifirstbuff+4
sta nowlinebuff+1
lda jieshifirstbuff+5
sta nowlinebuff+2
lda jieshifirstbuff+6
sta nowlinebuff+3
lda jieshifirstbuff+7
sta nowlinebuff+4
jmp ViewGouCiEscKey
FanChaNewenchEnterKey:
LJieshiEnterkey
FanChaNewenchUPkey:
lda IconUppage>>8
and #IconUppage&0ffh
bne ?_1
jmp NNmainU
?_1:
Lrestore_nowlineaddr ;恢复当前行地址
LRelocateaddr ;从新定位所在的16分区间
LGetUpperwordaddr ;找到上一单词的地址
Lstore_Nowlineaddr ;保存当前的信息&地址
lda #>cdict_result
sta <INDH
lda #<cdict_result
sta <INDL
LgetchainLen
Lextract_word
Lstore_citiao
LsetAttribute_flag
Lextract_yinbiao
LShowcitiaoyinbiao
Lshowinter
lda <AttributeH
and #88h
sta <AttributeH
lda <AttributeL
and #03fh
sta <AttributeL
LLight_AttributeIcon
LLight_DownUppageIcon
jmp update5000jieshiyinbiao
FanChaNewenchDPkey:
lda IconDownPage>>8
and #IconDownpage&0ffh
bne ?_haveotherword
jmp NNmainU
?_haveotherword:
Lrestore_nowlineaddr ;恢复当前行地址
ldx #1
LGetnextXlineaddr
Lstore_Nowlineaddr ;保存当前的信息&地址
lda #>cdict_result
sta <INDH
lda #<cdict_result
sta <INDL
LgetchainLen
Lextract_word
Lstore_citiao
LsetAttribute_flag
Lextract_yinbiao
LShowcitiaoyinbiao
Lshowinter
lda <AttributeH
and #88h
sta <AttributeH
lda <AttributeL
and #03fh
sta <AttributeL
LLight_AttributeIcon
LLight_DownUppageIcon
jmp update5000jieshiyinbiao
FanChaNewenchAllLiJu:
bbs7 <AttributeH,?_haveliju
jmp NNmainU
?_haveliju:
lda #FanChaNewenchAllLiJustatusNum
sta <Nstatusflag
stz lijuAllNum
Lextract_displaythisliju
jmp NNmain
;;====================================
;;function:得到模式4时反显的一个单词或中文字
;;input:<Blackflag,GuaiSTOX,<OX,<OY,CharL,Charh
;;output:findbuff
;;====================================
Get_invertwordmode4:
ldy DuoXuanstartY
bbs1 <Blackflag,?_duoxuanmode
bbr7 <Blackflag,?_InOneLine
lda GuaiWanSTOX
sta <OX
sec
lda <OY
sbc #16
sta <OY
?_InOneLine:
jsr OXOYTOYmode4
?_duoxuanmode:
phy ;开始的偏移
jsr CharTOYmode4
sty tmpcount ;结束的偏移
ply
phy
jsr Save_ToBuff
ply
cpy #40
bne ?_checkscreenend
lda textbuffor,y ;如果是汉字退出
cmp #HanZiqu
bcs ?_exit
lda textpageNum
beq ?_exit
;;=============补丁=======
bbr1 <AmendFlag,?_noBuding
Lsave_BudingTouToBuff
bra ?_exit
?_noBuding:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -