⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dicadd.asm

📁 辞典 dict3.asm.grammar.asm,newword.asm 学习 learn.asm 名片 userinf.asm 备忘 userinf.asm 提醒 userinf
💻 ASM
📖 第 1 页 / 共 5 页
字号:
	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 + -