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

📄 dicadd.asm

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