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

📄 calcedit.asm

📁 这是用台湾KingB 8位单片机开发的科学计算器程序
💻 ASM
字号:

 MACRO Clear_Mem(%1,%2,%3)        
 	lda	#%3
 	sta	PP       
                
        lda     #%1       ;0807
        sta     DP
1$:
        lda     #00h
        sta     i
        incdp             ;Clear page 0 (02h to 0cfh)
	lda	DP
        cmpe    #%2
        brnz    1$
             
        ENDM

        
MACRO PP2One()    
    	lda	#01h
    	sta	PP
        ENDM

        
MACRO PP2Zero()    
    	lda	#00h
    	sta	PP
        ENDM        
		.area   caledit_use(data,abs)
;------------------------------------------------------------------------
;------------------------------------------------------------------------
		.org	0x115	;0x11a;0x1f0

Insetflag::	.ds	1
chkFlag::	.ds	1
chkDP::		.ds	1
editFlag::	.ds	1
editDP::	.ds	1
;------------------------------------------------------------------------
;------------------------------------------------------------------------
		.area	forcaledit(code)
		
Delmode::	
		PP2One()		
		lda	.SetFlag
		anda	#BLANKCHK
		brnz	Delmodeend
		lda	.SFlag
		anda	#ACCHK
		brnz	Delmodeend
		
		
		PP2One()
		lda0	.DataDP
		cmpe	#C_ZERO
		brnz	Candel
		br	Delmodeend		
Candel:		
		lda0	.SFDP
		cmpe	#C_ZERO
		brnz	Del1go
		br	Del2go

Del1go:
				
		call	ClrPP3		
		call	Movepage
				
		PP2One()
		lda0	.SFDP
		sta	cmpDP
		sta	editDP
		lda	#C_TWO
		sta	cmpPP
		call	Decplace
		PP2One()				
		lda	cmpDP
		sta	chkDP	
		sta0	.SFDP
		
		call	clrp2back
		
		PP2One()			
		lda0	.DataDP
		sta	cmpDP
						
		lda	#C_THREE	;PP2 IS CLR BACK,SO CHK PP3
		sta	cmpPP		
		call	Decplace
		lda0	.SFDP
		cmpe	cmpDP	
		brnz	keepchkadd
		lda0	.SFDP
		sta0	.DataDP		
		lda	#C_ZERO
		sta0	.SFDP
		br	Delmodeend1				
keepchkadd:
		
		PP2One()
		lda	editDP
		sta	cmpDP										
movewordloop:												
		call	movebehind		
		PP2One()
		lda0	.DataDP
		cmpe	cmpDP		
		brnz	movewordloop
		PP2One()			
		lda	chkDP
		sta0	.DataDP					
		PP2One()			
		lda0	.SFDP
		sta	cmpDP		
		lda	#C_TWO
		sta	cmpPP
		call	Addplace					
		lda	cmpDP		
		sta0	.SFDP			
		br	Delmodeend1		
		
		
		
		
Del2go:
		
Del2go2:		
		PP2One()
		lda0	.DataDP
		sta	cmpDP
		lda	#C_TWO
		sta	cmpPP
		call	Decplace
		
		lda0	.DataDP
		deca
		sta	DP
		lda	#C_TWO
		sta	PP		
		lda	#C_ZERO
		sta	I
						
		PP2One()		
		lda	cmpDP
		sta0	.DataDP				
		br	Delmodeend1
			
		
		
Delmodeend1:
		call	ClrPP3
		br	Rightchk					
Delmodeend:
		PP2One()
		ret		
;------------------------------------------------------------------------
;------------------------------------------------------------------------
Movepage:
		PP2One()
		lda	#C_ZERO
		sta	cmpDP
moveloop:		
		PP2One()
		lda	#C_TWO
		sta	cmpPP
		lda	cmpDP
		sta	DP
		lda	cmpPP
		sta	PP
		lda	I
		sta0	.DataBuf
		
		PP2One()
		lda	#C_THREE
		sta	cmpPP
		lda	cmpDP
		sta	DP
		lda	cmpPP
		sta	PP
		lda0	.DataBuf
		sta	I
				
		PP2One()
		lda0	.DataDP
		cmpe	cmpDP
		brz	Movepageend
		lda	cmpDP
		inca
		sta	cmpDP				
		br	moveloop
				
Movepageend:
		ret
		
		
		
;------------------------------------------------------------------------
;------------------------------------------------------------------------
movebehind:
		PP2One()	
		lda	#C_THREE
		sta	cmpPP
		call	Addplace	
		PP2One()		
		lda	font
		sta0	.DataBuf
		lda	chkDP
		sta	DP
		inca
		sta	chkDP
		lda	#C_TWO
		sta	PP
		lda0	.DataBuf
		sta	I		
				
movebehindend:
		ret	
		
;------------------------------------------------------------------------
;------------------------------------------------------------------------		
Replace::	

		call	ClrPP3
						
		call	Movepage
		PP2One()							
		lda0	.SFDP
		sta	editDP	
						
		lda0	.SFDP
		sta	cmpDP
		lda	#C_TWO
		sta	cmpPP		
		call	Decplace	
		lda	cmpDP
		sta0	.SFDP		
		call	clrp2back
		
Replaceset:					
		lda0	.SFDP
		sta	DP
		inca
		sta0	.SFDP
		lda	#C_TWO
		sta	PP
		lda0	.KeyPos
		cmpe	#TENCODE
		brnz	0$
		lda	#C_ZERO
0$:		sta	I
				
		PP2One()	
		lda0	.DataDP
		cmpe	editDP
		brnz	1$		
			
		lda0	.SFDP
		sta0	.DataDP
		lda	#C_ZERO
		sta0	.SFDP
		br	rpmodeend1
				
1$:					
		PP2One()	
		lda0	.SFDP
		sta	chkDP
		lda	editDP
		sta	cmpDP
wordrploop:								
		call	movebehind		
		PP2One()	
		lda0	.DataDP
		cmpe	cmpDP		
		brnz	wordrploop	
		
					
		PP2One()				
		lda0	.SFDP
		sta	cmpDP
		lda	#C_TWO
		sta	cmpPP		
		call	Addplace		
		lda	cmpDP
		sta0	.SFDP					
		PP2One()
		lda	chkDP
		sta0	.DataDP					
		br	rpmodeend1
				
rpmodeend1:		
		call	ClrPP3
		br	Rightchk
rpmodeend:				
				
		ret
;------------------------------------------------------------------------
;------------------------------------------------------------------------
Insetmode::
		lda0	.KeyPos
		cmpe	#DELKEY
		brz	Insdelgo
		cmpe	#C_ZERO
		brz	Insetmodeend
		cmpe	#INSKEY
		brz	Insetmodeend
		cmpe	#INSKEY
		brz	Insetmodeend
		cmpe 	#LOGICKEY
		brz	Insetmodeend
		br	Inswordgo
		
Insdelgo:
		PP2One()	
		lda0	.SFDP
		sta	cmpDP
		lda	#C_TWO
		sta	cmpPP
		call	Decplace		
		lda	cmpDP
		cmpe	#C_ZERO
		brnz	Delfront
		br	Delback
		
				
Delfront:		
		
		call	ClrPP3	
		call	Movepage
				
		PP2One()					
		lda0	.SFDP
		sta	cmpDP									
		lda	#C_TWO
		sta	cmpPP				
		call	Decplace
		PP2One()					
		lda	cmpDP
		sta	editDP
		call	Decplace
		PP2One()			
		lda	cmpDP
		sta	chkDP
		sta0	.SFDP
								
		call	clrp2back
		PP2One()	
		lda	editDP
		sta	cmpDP				
frontloop:				
		call	movebehind		
		PP2One()	
		lda0	.DataDP
		cmpe	cmpDP		
		brnz	frontloop
		PP2One()						
		lda	chkDP
		sta0	.DataDP	
		
		PP2One()					
		lda0	.SFDP
		sta	cmpDP									
		lda	#C_TWO
		sta	cmpPP				
		call	Addplace			
		lda	cmpDP
		sta0	.SFDP			
		br	Insetmodeend1
		



Delback:												
		
		call	ClrPP3		
		call	Movepage		
		call	ClrPP2
		PP2One()
				
		lda0	.DataDP
		sta	cmpDP
		lda	#C_TWO
		sta	cmpPP
		call	Decplace
		lda	cmpDP
		cmpe	#C_ZERO
		brnz	keepDelback
		PP2One()		
		lda	cmpDP
		sta0	.DataDP
		call	.DispInitial	
		br	Insetmodeend		
keepDelback:		
		lda	#C_ZERO
		sta	chkDP
		
		call	clrp2back		
		lda	#C_ZERO
		sta	cmpDP
		lda	#C_TWO
		sta	cmpPP
		call	Addplace					
backloop:		
		call	movebehind		
		PP2One()	
		lda0	.DataDP
		cmpe	cmpDP		
		brnz	backloop
		PP2One()
		lda	chkDP
		sta0	.DataDP
		br	Insetmodeend1
		
		
		
		
		
Inswordgo:	
		PP2One()
		lda0	.DataDP
       		cmpe	#STEPCHK
       		brc	Insetmodeend
       		
		call	ClrPP3
		call	Movepage
				
		PP2One()
		lda0	.SFDP
		sta	cmpDP
		lda	#C_TWO
		sta	cmpPP
		call	Decplace
		lda	cmpDP
		cmpe	#C_ZERO
		brnz	nothead
		lda	#C_ZERO
		sta0	.SFDP
Inswordclrp2:			
		
		
		
		call	ClrPP2	
		
nothead:		
		PP2One()			
		lda	cmpDP
		sta	editDP
		sta0	.SFDP						
		call	clrp2back		
setbyte:
		lda0	.SFDP
		sta	DP
		inca
		sta0	.SFDP
		lda	#C_TWO
		sta	PP
		lda0	.KeyPos
		cmpe	#TENCODE
		brnz	0$
		lda	#C_ZERO
0$:		sta	I


		PP2One()				
		lda0	.SFDP		
		sta	chkDP		
		lda	editDP
		sta	cmpDP		
		
wordloop:				
		call	movebehind		
		PP2One()	
		lda0	.DataDP
		cmpe	cmpDP		
		brnz	wordloop

		PP2One()				
		lda0	.SFDP
		sta	cmpDP
		lda	#C_TWO
		sta	cmpPP
		call	Addplace
		lda	cmpDP
		sta0	.SFDP	
				
		PP2One()
		lda	chkDP
		sta0	.DataDP						
		br	Insetmodeend1
				
Insetmodeend1:		
		call	ClrPP3		
		br	Rightchk
Insetmodeend:		
		ret
;------------------------------------------------------------------------
;------------------------------------------------------------------------
clrp2back:
		PP2One()
		lda0	.SFDP
		sta	cmpDP
		
		lda	cmpDP
		sta	DP
		lda	#C_TWO
		sta	PP
		lda	#C_ZERO
		sta	I
				
nextclr:		
		PP2One()
		lda0	.DataDP	
		cmpe	cmpDP
		brz	clrp2backend
		lda	cmpDP
		inca
		sta	cmpDP
		sta	DP
		lda	#C_TWO
		sta	PP
		lda	#C_ZERO
		sta	I		
		br	nextclr			
clrp2backend:		
		ret
		
		
		
		
;------------------------------------------------------------------------
;------------------------------------------------------------------------
ClrPP2::		
		lda	#04fh
		sta0	Temp4
		lda	#00h
		sta	DP
		lda	#02h
		sta	PP
		br	Clear_MemAll
;------------------------------------------------------------------------
;------------------------------------------------------------------------		
ClrPP3::		
		lda	#04fh
		sta0	Temp4
		lda	#00h
		sta	DP
		lda	#03h
		sta	PP				
;------------------------------------------------------------------------
;------------------------------------------------------------------------
Clear_MemAll::		
1$:
       		lda     #C_ZERO
        	sta     i
        	incdp             ;Clear any page at 00h-ffh
		lda0	Temp4
        	cmpe    DP
        	brnz    1$
        	ret        	
;------------------------------------------------------------------------
;------------------------------------------------------------------------


		
		.include "caldisp.inc"	

⌨️ 快捷键说明

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