📄 extract.asm
字号:
beq ?Addtoonebit
iny
iny
iny
iny
bra ?_compthreeByte
?Addtoonebit:
inc <bitcmp
lda <byteLsave
sta <ByteL
jmp ?_0
?cmpnextbyte:
iny
lda (<INS),y
cmp <ByteM
beq ?_cmpnextnextbyte
dex
beq ?Addtoonebit
iny
iny
iny
bra ?_compthreeByte
?_cmpnextnextbyte:
iny
lda (<INS),y
cmp <ByteH
beq ?_FindmaOK
dex
beq ?Addtoonebit
iny
iny
bra ?_compthreeByte
?_FindmaOK:
iny
lda (<INS),y
cmp #lijufenge ;;英文与中文的分隔
beq ?_lijuchEnd
sta (<IND)
jsr inc1_IND
jsr jisuan_threeByte
jmp ?_extractloop
?_lijuchEnd:
lda #0dh
sta (<IND)
jsr inc1_IND
jsr jisuan_threeByte
rts
;;============================================
;;function:解压例句的英文部分
;;input:指向英文开始的地址<indxd &<bitcount
;;output:指向中文的地址<indxd & <bitcount
;;===========================================
extract_lijuen:
?_extractloop:
lda <indxd+2
sta <DrrL
lda <indxd+3
sta <DrrH
lda (<indxd)
sta <byteL
jsr inc1_indxd
lda (<indxd)
sta <byteM
jsr inc1_indxd
lda (<indxd)
sta <byteH
jsr inc1_indxd
lda (<indxd)
sta <byteP
lda <bitcount
beq ?_Noneedturn
?_turn:
asl <ByteP
rol <byteH
rol <byteM
rol <ByteL
dec
bne ?_turn
?_Noneedturn:
lda #EnStrstarNum
sta <bitcmp
lda <ByteL
sta <byteLsave
lda <ByteM
sta <byteMsave
lda <ByteH
sta <byteHsave
?_0:
ldy <bitcmp
?_getmashuloop:
lda lijuen,y
bne ?_getdaimashu ;;找到了此码长的个数
inc <bitcmp
iny
bra ?_getmashuloop
?_getdaimashu:
tax ;;将此数位码的个数-->x
cpy #9
bcs ?_twobyte
lda and_tab,y
and <ByteL
sta <BYteL
tya
asl
tay
lda lijuentab,y
sta <INSL
iny
lda lijuentab,y
sta <INSH
ldy #0
?_cmploop:
lda (<INS),y
cmp <ByteL
beq ?_finddaimaOk
dex
beq ?_addonebit ;;此位数比较完毕,位数加一
iny
iny
bra ?_cmploop
?_addonebit:
inc <bitcmp
lda <byteLsave
sta <ByteL
bra ?_0
?_finddaimaOk:
iny
lda (<INS),y
cmp #lijufenge ;;英文与中文的分隔
bne ?notcitiaoend
jmp ?_lijuenEnd
?notcitiaoend:
cmp #'~'
bne ?_saveit1
ldy #0ffh
?_skipzhongyin:
iny
?_moveloop1:
lda citiaobuff,y
beq ?_moveOK1
cmp #1eh ;次重音(在例句里去掉)
beq ?_skipzhongyin
cmp #60h ;重音(在例句里去掉)
beq ?_skipzhongyin
sta (<IND)
iny
jsr inc1_IND
bra ?_moveloop1
?_saveit1:
sta (<IND)
jsr inc1_IND
?_moveOK1:
jsr jisuan_twoByte
jmp ?_extractloop
?_twobyte: ;;比较两字节
lda <byteMsave
sta <ByteM
cpy #17
bcs ?_ThreeByte
phy
tya
sec
sbc #8
tay
lda and_tab,y
and <ByteM
sta <BYteM
ply
tya
asl
tay
lda lijuentab,y
sta <INSL
iny
lda lijuentab,y
sta <INSH
ldy #0
?_comptwobit:
lda (<INS),y
cmp <ByteL
beq ?_cmpnextbyte
dex
beq ?Addonebit
iny
iny
iny
bra ?_comptwobit
?Addonebit:
inc <bitcmp
lda <byteLsave
sta <ByteL
jmp ?_0
?_cmpnextbyte:
iny
lda (<INS),y
cmp <ByteM
beq ?_FindmaOK
dex
beq ?Addonebit
iny
iny
bra ?_comptwobit
?_ThreeByte: ;;比较三字节
lda <byteHsave
sta <ByteH
phy
tya
sec
sbc #16
tay
lda and_tab,y
and <ByteH
sta <BYteH
ply
tya
asl
tay
lda lijuentab,y
sta <INSL
iny
lda lijuentab,y
sta <INSH
ldy #0
?_compthreeByte:
lda (<INS),y
cmp <ByteL
beq ?cmpnextbyte
dex
beq ?Addtoonebit
iny
iny
iny
iny
bra ?_compthreeByte
?Addtoonebit:
inc <bitcmp
lda <byteLsave
sta <ByteL
jmp ?_0
?cmpnextbyte:
iny
lda (<INS),y
cmp <ByteM
beq ?_cmpnextnextbyte
dex
beq ?Addtoonebit
iny
iny
iny
bra ?_compthreeByte
?_cmpnextnextbyte:
iny
lda (<INS),y
cmp <ByteH
beq ?_FindmaOK
dex
beq ?Addtoonebit
iny
iny
bra ?_compthreeByte
?_FindmaOK:
iny
lda (<INS),y
cmp #lijufenge ;;英文与中文的分隔
beq ?_lijuenEnd
cmp #'~'
bne ?_saveit
ldy #0ffh
?_skipzhongyin1:
iny
?_moveloop:
lda citiaobuff,y
beq ?_moveOK
cmp #1eh ;次重音(在例句里去掉)
beq ?_skipzhongyin1
cmp #60h ;重音(在例句里去掉)
beq ?_skipzhongyin1
sta (<IND)
iny
jsr inc1_IND
bra ?_moveloop
?_saveit:
sta (<IND)
jsr inc1_IND
?_moveOK:
jsr jisuan_threeByte
jmp ?_extractloop
?_lijuenEnd:
lda #0dh
sta (<IND)
jsr inc1_IND
jsr jisuan_threeByte
rts
;;======================================
;;function;解压出汉英的中文词条
;;input;;从解压词条出来的<bitcount&<bitcmp&大库地址
;;output;解压结果存入cdict_result(<IND),<bitcount,<bitcmp
;;======================================
extract_Hychword:
rmb0 <ChenFlag
?_extractloop:
lda <indxd+2
sta <DrrL
lda <indxd+3
sta <DrrH
lda (<indxd)
sta <byteL
jsr inc1_indxd
lda (<indxd)
sta <byteM
jsr inc1_indxd
lda (<indxd)
sta <byteH
jsr inc1_indxd
lda (<indxd)
sta <byteP
bne ?_notlibend
; lda <byteH
; bne ?_notlibend
lda <byteH
bne ?_notlibend
lda <byteM
bne ?_notlibend
lda <byteL
bne ?_notlibend
jsr dec3_indxd
smb0 <ChenFlag
rts
?_notlibend:
lda <bitcount
beq ?_Noneedturn
?_turn:
asl <ByteP
rol <byteH
rol <byteM
rol <ByteL
dec
bne ?_turn
?_Noneedturn:
lda #PhoneticstarNum
sta <bitcmp
lda <ByteL
sta <byteLsave
lda <ByteM
sta <byteMsave
lda <ByteH
sta <byteHsave
?_0:
ldy <bitcmp
?_getmashuloop:
lda hycode,y
bne ?_getdaimashu ;;找到了此码长的个数
inc <bitcmp
iny
bra ?_getmashuloop
?_getdaimashu:
tax ;;将此数位码的个数-->x
cpy #9
bcs ?_twobyte
lda and_tab,y
and <ByteL
sta <BYteL
tya
asl
tay
lda hycodetab,y
sta <INSL
iny
lda hycodetab,y
sta <INSH
ldy #0
?_cmploop:
lda (<INS),y
cmp <ByteL
beq ?_finddaimaOk
dex
beq ?_addonebit ;;此位数比较完毕,位数加一
iny
iny
bra ?_cmploop
?_addonebit:
inc <bitcmp
lda <byteLsave
sta <ByteL
bra ?_0
?_finddaimaOk:
iny
lda (<INS),y
cmp #Hyyingfenge ;;中文和英文的分割符
bne ?notyinbiaoend
jmp ?_yinbiaoEnd
?notyinbiaoend:
sta (<IND)
jsr inc1_IND
jsr jisuan_twoByte
jmp ?_extractloop
?_twobyte: ;;比较两字节
lda <byteMsave
sta <ByteM
cpy #17
bcs ?_ThreeByte
phy
tya
sec
sbc #8
tay
lda and_tab,y
and <ByteM
sta <BYteM
ply
tya
asl
tay
lda hycodetab,y
sta <INSL
iny
lda hycodetab,y
sta <INSH
ldy #0
?_comptwobit:
lda (<INS),y
cmp <ByteL
beq ?_cmpnextbyte
dex
beq ?Addonebit
iny
iny
iny
bra ?_comptwobit
?Addonebit:
inc <bitcmp
lda <byteLsave
sta <ByteL
jmp ?_0
?_cmpnextbyte:
iny
lda (<INS),y
cmp <ByteM
beq ?_FindmaOK
dex
beq ?Addonebit
iny
iny
bra ?_comptwobit
?_ThreeByte: ;;比较三字节
lda <byteHsave
sta <ByteH
phy
tya
sec
sbc #16
tay
lda and_tab,y
and <ByteH
sta <BYteH
ply
tya
asl
tay
lda hycodetab,y
sta <INSL
iny
lda hycodetab,y
sta <INSH
ldy #0
?_compthreeByte:
lda (<INS),y
cmp <ByteL
beq ?cmpnextbyte
dex
beq ?Addtoonebit
iny
iny
iny
iny
bra ?_compthreeByte
?Addtoonebit:
inc <bitcmp
lda <byteLsave
sta <ByteL
jmp ?_0
?cmpnextbyte:
iny
lda (<INS),y
cmp <ByteM
beq ?_cmpnextnextbyte
dex
beq ?Addtoonebit
iny
iny
iny
bra ?_compthreeByte
?_cmpnextnextbyte:
iny
lda (<INS),y
cmp <ByteH
beq ?_FindmaOK
dex
beq ?Addtoonebit
iny
iny
bra ?_compthreeByte
?_FindmaOK:
iny
lda (<INS),y
cmp #Hyyingfenge ;;中文和英文的分割符
beq ?_yinbiaoEnd
sta (<IND)
jsr inc1_IND
jsr jisuan_threeByte
jmp ?_extractloop
?_yinbiaoEnd:
lda #0dh
sta (<IND)
jsr inc1_IND
jsr jisuan_threeByte
rts ;exit
;;======================================
;;function;解压出汉英的英文词条
;;input;;从解压词条出来的<bitcount&<bitcmp&大库地址
;;output;解压结果存入cdict_result(<IND),<bitcount,<bitcmp
;;======================================
;extract_Hyenword:
; bbr0 <Chenflag,?_extractloop
; rts
;?_extractloop:
; lda <indxd+2
; sta <DrrL
; lda <indxd+3
; sta <DrrH
; lda (<indxd)
; sta <byteL
; jsr inc1_indxd
; lda (<indxd)
; sta <byteM
; jsr inc1_indxd
; lda (<indxd)
; sta <byteH
; jsr inc1_indxd
; lda (<indxd)
; sta <byteP
;
; lda <bitcount
; beq ?_Noneedturn
;?_turn:
; asl <ByteP
; rol <byteH
; rol <byteM
; rol <ByteL
; dec
; bne ?_turn
;?_Noneedturn:
; lda #PhoneticstarNum
; sta <bitcmp
; lda <ByteL
; sta <byteLsave
; lda <ByteM
; sta <byteMsave
; lda <ByteH
; sta <byteHsave
;?_0:
; ldy <bitcmp
;?_getmashuloop:
; lda hycitiao,y
; bne ?_getdaimashu ;;找到了此码长的个数
; inc <bitcmp
; iny
; bra ?_getmashuloop
;?_getdaimashu:
; tax ;;将此数位码的个数-->x
; cpy #9
; bcs ?_twobyte
;
; lda and_tab,y
; and <ByteL
; sta <BYteL
;
; tya
; asl
; tay
; lda hycitiaotab,y
; sta <INSL
; iny
; lda hycitiaotab,y
; sta <INSH
;
; ldy #0
;?_cmploop:
; lda (<INS),y
; cmp <ByteL
; beq ?_finddaimaOk
; dex
; beq ?_addonebit ;;此位数比较完毕,位数加一
; iny
; iny
; bra ?_cmploop
;?_addonebit:
; inc <bitcmp
; lda <byteLsave
; sta <ByteL
; bra ?_0
;?_finddaimaOk:
; iny
; lda (<INS),y
; cmp #Hyyingfenge ;;中文和英文的分割符
; bne ?notyinbiaoend
; jmp ?_yinbiaoEnd
;?notyinbiaoend:
; cmp #hyhuiche
; bne ?_nothuiche
; lda #0dh
;?_nothuiche:
; sta (<IND)
; jsr inc1_IND
; jsr jisuan_twoByte
; jmp ?_extractloop
;
;?_twobyte: ;;比较两字节
; lda <byteMsave
; sta <ByteM
; cpy #17
; bcs ?_ThreeByte
; phy
; tya
; sec
; sbc #8
; tay
; lda and_tab,y
; and <ByteM
; sta <BYteM
; ply
; tya
; asl
; tay
; lda hycitiaotab,y
; sta <INSL
; iny
; lda hycitiaotab,y
; sta <INSH
;
; ldy #0
;?_comptwobit:
; lda (<INS),y
; cmp <ByteL
; beq ?_cmpnextbyte
; dex
; beq ?Addonebit
; iny
; iny
; iny
; bra ?_comptwobit
;?Addonebit:
; inc <bitcmp
; lda <byteLsave
; sta <ByteL
; jmp ?_0
;?_cmpnextbyte:
; iny
; lda (<INS),y
; cmp <ByteM
; beq ?_FindmaOK
; dex
; beq ?Addonebit
; iny
; iny
; bra ?_comptwobit
;?_ThreeByte: ;;比较三字节
; lda <byteHsave
; sta <ByteH
; phy
; tya
; sec
; sbc #16
; tay
; lda and_tab,y
; and <ByteH
; sta <BYteH
; ply
; tya
; asl
; tay
; lda hycitiaotab,y
; sta <INSL
; iny
; lda hycitiaotab,y
; sta <INSH
;
; ldy #0
;?_compthreeByte:
; lda (<INS),y
; cmp <ByteL
; beq ?cmpnextbyte
; dex
; beq ?Addtoonebit
; iny
; iny
; iny
; iny
; bra ?_compthreeByte
;?Addtoonebit:
; inc <bitcmp
; lda <byteLsave
; sta <ByteL
; jmp ?_0
;?cmpnextbyte:
; iny
; lda (<INS),y
; cmp <ByteM
; beq ?_cmpnextnextbyte
; dex
; beq ?Addtoonebit
; iny
; iny
; iny
; bra ?_compthreeByte
;?_cmpnextnextbyte:
; iny
; lda (<INS),y
; cmp <ByteH
; beq ?_FindmaOK
; dex
; beq ?Addtoonebit
; iny
; iny
; bra ?_compthreeByte
;?_FindmaOK:
; iny
; lda (<INS),y
; cmp #Hyyingfenge ;;中文和英文的分割符
; beq ?_yinbiaoEnd
; cmp #hyhuiche
; bne ?_nothuiche1
; lda #0dh
;?_nothuiche1:
; sta (<IND)
; jsr inc1_IND
; jsr jisuan_threeByte
; jmp ?_extractloop
;?_yinbiaoEnd:
; lda #0
; sta (<IND)
; jsr inc1_IND
; jsr jisuan_threeByte
; rts ;exit
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -