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

📄 dicadd2.asm

📁 辞典 dict3.asm.grammar.asm,newword.asm 学习 learn.asm 名片 userinf.asm 备忘 userinf.asm 提醒 userinf
💻 ASM
字号:
; ***************************************************************************
; *     Project : Electronic Dictionary                                     *
; *        Date : 2003.9                                                    *
; *   File Name : DICADD2.ASM                                               *
; ***************************************************************************

        pw      128
        case    off
        externs on

        include ST2202.def      ; Include ST2100 I/O define.
        include Data.def        ; Data RAM define.
        include Bios.h
        include Graphics.h
        include Keydef.def
        include Graph.def
        include extract.h
        include xyhaddr.h
;;========>>>> public declare <<<===========
	public	AmendLibaddr
	;public	AmendxyhLib
	public	ShowBuDingJieShi
	public	save_BudingTouToBuff
	public	save_BudingWeiToBuff
	public	FenLeiError_21
	public	FenLeiError_42
;;==========常量定义===================
AmendLibaddr	equ	87a000h ;8fd000h

;;==================================================
DS0     .SECTION                ; Data ROM location 

;=====================================================
PS0b     .SECTION                ; Program ROM location 0080h
BANKNO        equ       Dicadd2bank 	
	
		

;;===========下面是英汉的补丁程序===============
	include	mend.asm
;;======================================
;;function:比较此单词是否有补丁
;;input:<indxd MendLibAddrr
;;output
;;======================================
;AmendxyhLib:
;	stz	<AmendFlag
;	lda	#>BugLibAddrr 
;	sta	<INSH
;	lda	#<BugLibAddrr
;	sta	<INSL
;	ldx	#NumOfMend ;补丁个数
;?_Bigloop:	
;	ldy	#00h
;	lda	(INS),y
;	cmp	<indxd
;	bne	?_Next
;	iny
;	lda	(INS),y
;	cmp	<indxd+1
;	bne	?_Next
;	iny
;	lda	(INS),y
;	cmp	<indxd+2
;	bne	?_Next
;	iny
;	lda	(INS),y
;	cmp	<bitcount
;	beq	?_OK
;?_Next:	
;	jsr	inc7_INS
;	dex
;	bne	?_Bigloop
;	rts	;没有找到匹配的地址退出
;?_OK:	
;	iny
;	lda	(INS),y
;	sta	<AmendFlag
;	iny
;	lda	(INS),y
;	sta	<AmendaddrL
;	iny
;	lda	(INS),y
;	sta	<AmendaddrH
;	
;	clc
;	lda	#<AmendLibaddr
;	adc	<AmendaddrL
;	sta	<AmendaddrL
;	lda	#>AmendLibaddr
;	adc	<AmendaddrH
;	sta	<AmendaddrH
;	
;	rts
	

;inc7_INS:
;	clc
;	lda	<INSL
;	adc	#7
;	sta	<INSL
;	lda	<INSH
;	adc	#0
;	sta	<INSH
;	rts

;;========================================
;;function:显示新英汉的补丁解释
;;input:<Amendaddr
;;output:textbuffor
;;========================================
ShowBuDingJieShi:
;	lda	<AmendaddrL
;	pha
;	lda	<AmendaddrH
;	pha
;	lda	textpageNum
;	pha

;	stz	<AttributeH
;	lda	<AttributeL
;	and	#3fh
;	sta	<AttributeL
	
;	lda     #iconDown&0ffh  
;        trb     Icondown>>8
;        lda     #iconUp&0ffh    
;        trb     IconUp>>8               
;        lda     #' '    ;;清除3~6行
;        ldy     #40
;?1:
;        sta     textbuffor,y
;        iny
;        cpy     #120
;        bcc     ?1      
        
;        stz     yinbiaoinfbuff
;        stz     yinbiaoinfbuff+3
;        stz     yinbiaoinfbuff+6
	
;	lda	#AmendLibaddr>>24
;	sta	<DrrH
;	lda	#AmendLibaddr>>16
;	sta	<DrrL
	
;        lda     textpageNum
;        beq     ?_Offup
;        lda     #IconUp&0ffh
;        tsb     IconUp>>8
;        jsr	Cal_startaddr
;?_Offup:
;        Lsetcur 0,2
;?_disLoop:
;	lda	(<AmendaddrL)
;	bne	?_0
;	jmp	?_exit
;?_0:		
;	cmp	#A0h
;	bcc	?_enchar
	
;	lda	<CurX
;	cmp	#19
;	bcc	?_showHanzi
;	lcheckcrlf
;	lda	<CurY
;	cmp	#6
;	bcs	?_Full
;?_showHanzi:
;	lda	(<AmendaddrL)
;	tax
;	jsr	inc1_AmendaddrL
;	lda	(<AmendaddrL)
;	tay
;	Lputchar
;?_checkFull:	
;	lda	<CurY
;	cmp	#6
;	bcs	?_Full
;	jsr	inc1_AmendaddrL
;	bra	?_DisLoop
;?_enchar:
;	cmp	#0dh
;	beq	?_deal0d
;	jsr	Judgeaz
;	beq	?_disenchar
;	lda	<CurX
;	cmp	#18
;	bcs	?_chackEnChar
;?_disenchar:			
;	lda	(<AmendaddrL)
;	tax
;	lputchar
;	bra	?_checkFull
;?_deal0d:
;	lcheckcrlf
;	bra	?_checkFull	
;?_chackEnChar:	
;	cmp	#19
;	beq	?_chackEnChar1
;	ldy	#1
;	lda	(<AmendaddrL),y
;	jsr	judgeaz
;	beq	?_disenchar
;	lda	(<AmendaddrL)
;	tax
;	lputchar
;	ldx	#1ah
;	Lputchar
;	bra	?_checkFull
;?_chackEnChar1:	
;	ldy	#1
;	lda	(<AmendaddrL),y
;	jsr	judgeaz
;	beq	?_disenchar
;	;bra	?_deal0d
;	lcheckcrlf
;	lda	<CurY
;	cmp	#6
;	bcs	?_Full
;	jmp	?_DisLoop	
;	
;?_Full:	
;	ldy	#1
;	lda	(<AmendaddrL),y
;	beq	?_exit
;	lda	#IconDown&0ffh
;	tsb	IconDown>>8
;?_exit:
;	pla
;	sta	textpageNum
;	pla
;	sta	<AmendAddrH
;	pla
;	sta	<AmendaddrL
;	rts

;;================================
;;function:根据页数计算地址
;;input:<Amendaddr
;;output:<Amendaddr
;;================================
Cal_startaddr:
	lda	textpageNum
	pha
	lda	#4 
	sta	tmpcount ;行数
	ldx	#20 ;每行的字符数
	
?_loop:
	lda	(<AmendaddrL)
	cmp	#a0h
	bcc	?_Enchar
	cpx	#2
	bcc	?_addOneline
	jsr	inc1_AmendaddrL
	jsr	inc1_AmendaddrL
	dex
	dex
	bne	?_loop
?_addOneline:
	ldx	#20	
	dec	tmpcount
	bne	?_loop
?_addOnepage:
	lda	#4
	sta	tmpcount
	ldx	#20
	dec	textpageNum
	bne	?_loop
	bra	?_exit
	
?_Enchar:
	cmp	#0dh
	beq	?_deal0d
	jsr	judgeaz
	beq	?_enough	
	cpx	#2
	bcs	?_enough
	ldy	#1
	lda	(<AmendaddrL)
	jsr	Judgeaz
	bne	?_addOneline
?_enough:	
	jsr	inc1_AmendaddrL
	dex
	bne	?_loop
	bra	?_addOneline
?_deal0d:
	jsr	inc1_AmendaddrL
	cpx	#20
	bne	?_addOneline
	bra	?_loop	
	
?_exit:
	pla
	sta	textpageNum
	rts	
	
;;=================================
;;function:保存补丁解释的前一页的东西
;;input:
;;output:
;;=================================
save_BudingTouToBuff:
	lda	<AmendAddrL
	pha
	lda	<AmendAddrH
	pha
	lda	textpageNum
	pha
	
	lda	#AmendLibaddr>>24
	sta	<DrrH
	lda	#AmendLibaddr>>16
	sta	<DrrL
	
	jsr	Cal_startaddr
	
	lda	<AmendaddrL
	sta	<INDL
	lda	<AmendaddrH
	sta	<INDH
	
	ldy	#0ffh
?_loop:	
	iny
	jsr	dec1_IND
	lda	(<IND)
	jsr	Judgeaz
	beq	?_0
	lda	(<IND)
	sta	cdict_result,y
	bra	?_loop
?_0:	
	ldx	#0ffh
?_loop1:	
	inx
	dey
	bmi	?_1
	lda	cdict_result,y
	sta	cdict_result+90,x
	bra	?_loop1	
?_1:	
	ldy	#0ffh
?_loop2:	
	iny
	lda	findbuff,y
	sta	cdict_result+90,x
	beq	?_2
	inx
	bra	?_loop2
?_2:
	ldy	#0ffh
?_loop3:	
	iny
	lda	cdict_result+90,y
	sta	findbuff,y
	bne	?_loop3

	pla
	sta	textpageNum
	pla
	sta	<AmendAddrH
	pla
	sta	<AmendaddrL
	rts

;;=================================
;;function:保存补丁解释的后一页的东西
;;input:
;;output:
;;=================================
save_BudingWeiToBuff:
	lda	<AmendAddrL
	pha
	lda	<AmendAddrH
	pha
	lda	textpageNum
	pha
	
	lda	#AmendLibaddr>>24
	sta	<DrrH
	lda	#AmendLibaddr>>16
	sta	<DrrL

	lda	IconDown>>8
	and	#IconDown&0ffh
	beq	?_exit
	
	inc	textpageNum
	jsr	Cal_startaddr
	
	ldy	#0ffh
?_loop:	
	iny
	lda	findbuff,y
	bne	?_loop
?_loop1:	
	lda	(<AmendaddrL)
	jsr	judgeaz
	beq	?_0
	lda	(<AmendaddrL)
	sta	findbuff,y
	jsr	inc1_amendaddrL
	iny
	bra	?_loop1
?_0:
	lda	#0
	sta	findbuff,y
?_exit:
	pla
	sta	textpageNum
	pla
	sta	<AmendAddrH
	pla
	sta	<AmendaddrL
	rts
	
	
inc1_AmendaddrL:	
	inc	<AmendaddrL
	bne	?_0
	inc	<AmendaddrH
?_0:	
	rts	

dec1_IND:
	sec
	lda	<INDL
	sbc	#1
	sta	<INDL
	lda	<INDH
	sbc	#0
	sta	<INDH
	rts:
	
;;=========================================
;;function:判断寄存器a里的的内容是否在a~z 或 A~Z之内
;;input:a
;;output:a=0 不在范围内 a!=0 在范围内
;;=========================================
judgeaz:
        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     

	
	end
	

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -