📄 dicadd.asm
字号:
;;=============补丁=======
jsr save_TouToBuff
bra ?_exit
?_checkscreenend:
lda tmpcount
cmp #120
bcc ?_exit
lda textbuffor+119
cmp #xianshiguai
bne ?_exit
;;=============补丁=======
bbr1 <AmendFlag,?_noBudingWei
Lsave_BudingWeiToBuff
bra ?_exit
?_noBudingWei:
;;=============补丁=======
jsr save_WeiToBuff
?_exit:
rts
;;====================================
;;function:得到模式1时反显的一个单词或中文字
;;input:<Blackflag,GuaiSTOX,<OX,<OY,CharL,Charh
;;output:findbuff
;;====================================
Get_invertwordmode1:
ldy DuoXuanstartY
bbs1 <Blackflag,?_duoxuanmode
bbr7 <Blackflag,?_InOneLine
lda GuaiWanSTOX
sta <OX
sec
lda <OY
sbc #16
sta <OY
?_InOneLine:
jsr OXOYTOYmode1
?_duoxuanmode:
phy ;开始的偏移
jsr CharTOYmode1
sty tmpcount ;结束的偏移
ply
phy
jsr Save_ToBuff
ply
cpy #40
bne ?_checkscreenend
lda textbuffor,y ;如果是汉字退出
cmp #HanZiqu
bcs ?_exit
lda textpageNum
beq ?_exit
jsr save_TouToBuff
bra ?_exit
?_checkscreenend:
lda tmpcount
cmp #120
bcc ?_exit
lda textbuffor+119
cmp #xianshiguai
bne ?_exit
jsr save_WeiToBuff
?_exit:
rts
;;=====================================
;;function:将开始未从头显示的单词取完整保存
;;input:<indxd <Bitcount
;;output:findbuff
;;=====================================
save_TouToBuff:
Lrestore_pageXaddr
lda <indxd
sta <indxs
lda <indxd+1
sta <indxs+1
lda <indxd+2
sta <indxs+2
;lda <indxd+3 ;不用比较最高位因为仅仅两页
lda <Bitcount
sta <indxs+3
dec textpagenum
Lrestore_pageXaddr
inc textpagenum
ldy #0ffh
?_loop:
iny
phy
Lextract_jieshi_oneByte
ply
lda <CharL
cmp #Licode ;遇到例句地址加3
bne ?_Save
dey
jsr inc1_indxd
jsr inc1_indxd
jsr inc1_indxd
bra ?_NoSave
?_Save:
sta cdict_result,y
?_NoSave:
lda <indxd
cmp <indxs
bne ?_loop
lda <indxd+1
cmp <indxs+1
bne ?_loop
lda <indxd+2
cmp <indxs+2
bne ?_loop
;lda <indxd+3;和<bitcount比较因为两个字符可能在一个字节
lda <bitcount
cmp <indxs+3
bne ?_loop
?_movedata:
iny
lda #0
sta cdict_result,y
?_loop1:
dey
lda cdict_result,y
cmp #0ah
beq ?_OK
jsr judgeaz_forfanCha
bne ?_loop1
?_OK:
ldx #0ffh
?_loop2:
inx
iny
lda cdict_result,y
sta cdict_result+90,x
bne ?_loop2
dex
ldy #0ffh
?_loop3:
inx
iny
lda findbuff,y
sta cdict_result+90,x
bne ?_loop3
ldy #0ffh
?_loop4:
iny
cpy #39
bcs ?_exit
lda cdict_result+90,y
sta findbuff,y
bne ?_loop4
?_exit:
lda #0
sta findbuff,y
rts
;;=====================================
;;function:将一页未显示完的单词取完整保存
;;input:<indxd <Bitcount
;;output:findbuff
;;=====================================
save_WeiToBuff:
ldy #0ffh
?_loop:
iny
lda findbuff,y
bne ?_loop
?_loop1:
phy
Lextract_jieshi_oneByte
lda <CharL
cmp #0ah ;遇到回车结束
beq ?_exit
cmp #Licode ;遇到例句结束
jsr JudgeAz
beq ?_exit
ply
lda <CharL
sta Findbuff,y
iny
lda #0
sta Findbuff,y
cpy #39 ;判断最大长度
bcc ?_loop1
phy
;bra ?_loop1
?_exit:
ply
rts
;;====================================
;;function:得到模式5时反显的一个单词或中文字
;;input:<Blackflag,GuaiSTOX,<OX,<OY,CharL,Charh
;;output:findbuff
;;====================================
Get_invertwordmode5:
ldy DuoXuanstartY
bbs1 <Blackflag,?_duoxuanmode
bbr7 <Blackflag,?_InOneLine
lda GuaiWanSTOX
sta <OX
sec
lda <OY
sbc #16
sta <OY
?_InOneLine:
jsr OXOYTOYmode5
?_duoxuanmode:
phy ;开始的偏移
jsr CharTOYmode5
sty tmpcount ;结束的偏移
ply
phy
jsr Save_ToBuff
ply
cpy #80
bne ?_checkscreenend
lda textbuffor,y ;如果是汉字退出
cmp #HanZiqu
bcs ?_exit
lda textpageNum
beq ?_exit
jsr save_TouToBuff
bra ?_exit
?_checkscreenend:
lda tmpcount
cmp #140
bcc ?_exit
lda textbuffor+139
cmp #xianshiguai
bne ?_exit
jsr save_WeiToBuff
?_exit:
rts
;;====================================
;;function:得到模式15时反显的一个单词或中文字
;;input:<Blackflag,GuaiSTOX,<OX,<OY,CharL,Charh
;;output:findbuff
;;====================================
Get_invertwordmode15:
ldy DuoXuanstartY
bbs1 <Blackflag,?_duoxuanmode
bbr7 <Blackflag,?_InOneLine
lda GuaiWanSTOX
sta <OX
sec
lda <OY
sbc #16
sta <OY
?_InOneLine:
jsr OXOYTOYmode15
?_duoxuanmode:
phy ;开始的偏移
jsr CharTOYmode15
sty tmpcount ;结束的偏移
ply
phy
jsr Save_ToBuff
ply
cpy #120
bne ?_checkscreenend
lda textbuffor,y ;如果是汉字退出
cmp #HanZiqu
bcs ?_exit
lda textpageNum
beq ?_exit
jsr save_TouToBuff
bra ?_exit
?_checkscreenend:
lda tmpcount
cmp #160
bcc ?_exit
lda textbuffor+159
cmp #xianshiguai
bne ?_exit
jsr save_WeiToBuff
?_exit:
rts
;;====================================
;;function:有Y开始tmpcount结束的textbuffor的内容存入findbuff
;;input:Y ,tmpcount, findbuff
;;output:findbuff
;;====================================
Save_ToBuff:
jsr Set_DengHaoFlag
ldx #0ffh ;清除反查的缓冲
lda #0
?_clearbuffLoop:
inx
sta findbuff,x
cpx #39
bcc ?_clearbuffLoop
ldx #0
?_loop:
lda textbuffor,y
cmp #xianshiguai
beq ?_SkipIt ;跳过断句的符号
cmp #' ' ;处理双空-->单空
bne ?_NotKong
lda textbuffor+1,y
cmp #' '
beq ?_SkipIt
lda #' '
?_NotKong:
sta findbuff,x
inx
cpx #39
bcs ?_MaxLen
?_SkipIt:
iny
cpy tmpcount
bcc ?_loop
inx
?_MaxLen:
lda #0
sta findbuff,x
rts
;;====================================
;;function:设置等号反查的标志(如果有'= *也算)
;;input:Y textbuffor
;;output:<BlackFlag的smb2 rmb2
;;====================================
Set_DengHaoFlag:
rmb2 <Blackflag
tya
tax
dex
lda textbuffor,x
cmp #'='
beq ?_0
cmp #' '
bne ?_exit
dex
lda textbuffor,x
cmp #'='
bne ?_exit
?_0:
smb2 <Blackflag
?_exit:
rts
ViewFenLei1:
bbs2 <AttributeH,?_HaveFenLei
jmp NNmainU
?_HaveFenLei:
Lstore_jieshiInf
lda #viewFenLeistatusNum
sta <NstatusFlag
lda #10 ;Y.L
sta <chenstatusflag
lda Attributebuff ;还原总体属性的开始地址
sta <indxd
lda Attributebuff+1
sta <indxd+1
lda Attributebuff+2
sta <indxd+2
lda Attributebuff+3
sta <indxd+3
lda Attributebuff+4
sta <bitcount
lda <AttributeH
pha
lda <AttributeL
pha
Lsetjibie_flag ;级别
LsetVoice_flag ; J.A.
Linc1_bitcount ;跳过5000属性的控制位
Lset_tongyiflag ;同义
Lset_FanYiFlag ;反义
Lset_BianXiFlag ;辨析
Lset_bianhuaflag ;构词
pla
sta <AttributeL
pla
sta <AttributeH
jsr Get_FenLeiStaddr;得到分类的首地址
jsr store_5000AttributeSTaddr ;保存此属性的开始地址
lda #<cdict_result
sta <INSL
sta <textaddrL
lda #>cdict_result
sta <INSH
sta <textaddrH
lda <indxs+3
sta <DrrH
lda <indxs+2
sta <DrrL
?_loop:
lda (<indxs)
sta (<INS)
cmp #0dh
beq ?_OK
jsr inc1_indxs
jsr inc1_INS
bra ?_loop
?_OK:
jsr showFenLeiTou
jsr ShowFenLei
jmp NNmain
viewFenLeiKeytab:
db Esckey
db Upkey
db DownKey
db LeftKey
db RightKey
db Enterkey
db Nullkey
viewFenLeiFuntab:
dw viewFenLeiEsckey-1
dw viewFenLeiUKey-1
dw viewFenLeiDKey-1
dw fanchaselectLkey-1
dw fanchaselectRkey-1
dw PrepareFanCha1-1
viewFenLeistatus1:
Lkeytone
ldy #0ffh
viewFenLei_1:
iny
lda viewFenLeiKeytab,y
bmi ?_ErrorKey
cmp <KeyNo
bne viewFenLei_1
tya
asl
tay
lda viewFenLeiFuntab+1,y
pha
lda viewFenLeiFuntab,y
pha
rts
?_ErrorKey:
jmp NNmainU
viewFenLeiEsckey:
Lreturntojieshimode
viewFenLeiUKey:
lda IconUp>>8
and #IconUp&0ffh
bne ?_0
jmp NNmainU
?_0:
dec FenLeiNum
jsr ShowFenLei
jmp NNmain
viewFenLeiDKey:
lda IconDown>>8
and #IconDown&0ffh
bne ?_0
jmp NNmainU
?_0:
inc FenLeiNum
jsr ShowFenLei
jmp NNmain
;;=====================================
;;function:显示分类的内容根据首地址及个数找到资料的地址存入Cdict_result
;;inpit:
;;output:
;;====================================
ShowFenLei:
stz <Blackflag
lda #IconUp&0ffh
trb IconUp>>8
lda #IconDown&0ffh
trb IconDown>>8
lda #IconShift&0ffh
trb IconShift>>8
lda #' '
ldy #20
?_clearloop:
sta textbuffor,y
iny
cpy #100
bcc ?_clearloop
lsetcur 0,1
lda FenLeiNum
beq ?_firstPage
lda #IconUp&0ffh
tsb IconUp>>8
?_firstPage:
lda #<cdict_result
sta <textaddrL
lda #>cdict_result
sta <textaddrH
jsr restore_5000AttributeSTaddr
lda <indxs+3
sta <DrrH
lda <indxs+2
sta <drrL
?_FindfirstLoop: ;找到内容的开始地址
jsr inc1_indxs
lda (<indxs)
bne ?_FindfirstLoop
jsr inc1_indxs
stz <INSL
lda FenLeiNum
asl
tax
beq ?_moveLoop
?_CalLoop:
jsr inc1_indxs
lda (<indxs)
cmp #0dh
bne ?_CalLoop
dex
bne ?_CalLoop
jsr inc1_indxs
?_moveLoop:
lda (<indxs)
sta (<textaddr)
beq ?_DisPlay
cmp #0dh
beq ?_addone
?_addrinc:
jsr inc1_indxs
jsr inc1_textaddr
bra ?_moveLoop
?_addone:
inc <INSL
lda <INSL
cmp #2
bcc ?_addrinc
jsr inc1_indxs
jsr inc1_textaddr
lda (<indxs)
sta (<textaddr)
?_DisPlay:
lda #<cdict_result
sta <textaddrL
lda #>cdict_result
sta <textaddrH
stz <INSL ;作为0d的计数器
?_startdis: ;开始显示
lda (<textaddr)
bne ?_compnext
jmp ?_exit1
?_compnext:
cmp #HanziQu ;#80h
bcs ?_hanzi
tax
jsr judgeLijuaz
bne ?_isword
cpx #0dh
bne ?_xianshi
inc <INSL
lda <INSL
cmp #2
bcc ?_ThisNoend
jmp ?_exit
?_ThisNoend:
lcheckcrlf
bra ?_check
?_xianshi:
Lputchar
?_check:
lda <CurY
cmp #5
bcc ?_noend
jmp ?_exit
?_noend:
jsr inc1_textaddr
bra ?_startdis
?_isword:
ldy #0ffh
?_caloop:
iny
lda (<textaddr),y
jsr judgeLijuaz
bne ?_caloop
sty tmpcount
sec
lda #20
sbc <CurX
cmp tmpcount
bcs ?_enoughspace
lcheckcrlf
lda <CurY
cmp #5
bcs ?_exit
?_enoughspace:
ldy #0ffh
?_onewordloop:
iny
cpy tmpcount
bcs ?_thiswordOK
lda (<textaddr),y
tax
phy
Lputchar
ply
bra ?_onewordloop
?_thiswordOK:
clc
lda <textaddrL
adc tmpcount
sta <textaddrL
lda <textaddrH
adc #0
sta <textaddrH
jmp ?_startdis
?_hanzi:
lda <CurX
cmp #19
bcc ?_dishanzi
lcheckcrlf
lda <CurX
cmp #5
bcc ?_dishanzi
?_dishanzi:
lda (<textaddr)
tax
jsr inc1_textaddr
lda (<textaddr)
tay
Lputchar
lda <CurY
cmp #5
bcs ?_exit
jsr inc1_textaddr
jmp ?_startdis
?_exit:
jsr inc1_textaddr
lda (<textaddr)
beq ?_exit1
lda #IconDown&0ffh
tsb IconDown>>8
?_exit1:
rts
;;====================================
;;function:<textaddrL++
;;input:
;;output:
;;===================================
inc1_textaddr:
inc <textaddrL
bne ?_0
inc <textaddrH
?_0:
rts
;;=========================================
;;function:判断寄存器a里的的内容是否在a~z 或 A~Z之内(用于显示例句)
;;input:a
;;output:a=0 不在范围内 a!=0 在范围内
;;=========================================
judgeLijuaz:
cmp #'-'
beq ?_1
cmp #'''
beq ?_1
cmp #'('
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 #3
rts
?_0:
lda #0
rts
;;===================================
;;function:显示分类的头
;;input:cdict_result
;;output:
;;==================================
showFenLeiTou:
stz FenLeiNum
lsetscreen 1
ldx #'['
lputchar
ldy #0ffh
?_loop:
iny
lda cdict_result,y
cmp #0dh
beq ?_OK
tax
cmp #HanZiQU
bcc ?_enchar
iny
lda cdict_result,y
?_enchar:
phy
tay
lputchar
ply
bra ?_loop
?_Ok:
ldx #']'
lputchar
rts
ViewBianXi1:
bbs0 <AttributeH,?_HaveBianXi
jmp NNmainU
?_HaveBianXi:
Lstore_jieshiInf
lda #viewBianXistatusNum
sta <NstatusFlag
lda #9 ;Y.L
sta <chenstatusflag
lda Attributebuff ;还原总体属性的开始地址
sta <indxd
lda Attributebuff+1
sta <indxd+1
lda Attributebuff+2
sta <indxd+2
lda Attributebuff+3
sta <indxd+3
lda Attributebuff+4
sta <bitcount
lda <AttributeH
pha
lda <AttributeL
pha
Lsetjibie_flag ;级别
LsetVoice_flag ; J.A.
Linc1_bitcount ;跳过5000属性的控制位
Lset_tongyiflag ;同义
Lset_FanYiFlag ;反义
pla
sta <AttributeL
pla
sta <AttributeH
jsr Get_BianXiStaddr;得到辨析的首地址
lda #<cdict_result
sta <INSL
sta <textaddrL
lda #>cdict_result
sta <INSH
sta <textaddrH
lda <indxs+3
sta <DrrH
lda <indxs+2
sta <DrrL
?_loop:
lda (<indxs)
sta (<INS)
beq ?_OK
jsr inc1_indxs
jsr inc1_INS
bra ?_loop
?_OK:
stz lijupageNum
LShowLiju
jmp NNmain
ViewGouCi1:
bbs1 <AttributeH,?_HaveGouCi
jmp NNmainU
?_HaveGouCi:
Lstore_jieshiInf
lda #ViewGouCistatusNum
sta <NstatusFlag
lda Attributebuff ;还原总体属性的开始地址
sta <indxd
lda Attributebuff+1
sta <indxd+1
lda Attributebuff+2
sta <indxd+2
lda Attributebuff+3
sta <indxd+3
lda Attributebuff+4
sta <bitcount
lda <AttributeH
pha
lda <AttributeL
pha
Lsetjibie_flag ;级别
LsetVoice_flag ; J.A.
Linc1_bitcount ;跳过5000属性的控制位
Lset_tongyiflag ;同义
Lset_FanYiFlag ;反义
Lset_BianXiFlag ;辨析
pla
sta <AttributeL
pla
sta <AttributeH
jsr Get_GouCiStaddr;得到辨析的首地址
jsr ShowGouciTou
jsr store_5000AttributeSTaddr ;保存此属性的开始地址
jsr showGouCi
jsr JudgeGouciScreen
inc
asl
asl
asl
asl
sta <OY
GouCiinvert:
jsr JudgeGouciDownUpIcon
jsr CALL_LUpdateScreen
stz <OX
LBlockinvert 159,16
jmp NNmainU
;;========================================
;;function:显示构词的头
;;input:指
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -