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

📄 caldisp.asm

📁 这是用台湾KingB 8位单片机开发的科学计算器程序
💻 ASM
📖 第 1 页 / 共 3 页
字号:
        	lda   	blankCount
        	sta     dig_num        	
        	call    Display_5X7_blk2 	
		br	T1chkblankend
Display_t1_3:
		lda	t1dispbf
		sta	font       	
        	lda   	blankCount
        	sta     dig_num        	
        	call    Display_5X7_blk3 	
		br	T1chkblankend
Display_t1_4:
		lda	t1dispbf
		sta	font       	
        	lda   	blankCount
        	sta     dig_num        	
        	call    Display_5X7_blk4 	
		br	T1chkblankend
Display_t1_5:
		lda	t1dispbf
		sta	font       	
        	lda   	blankCount
        	sta     dig_num        	
        	call    Display_5X7_blk5 	
		br	T1chkblankend
Display_t1_6:
		lda	t1dispbf
		sta	font       	
        	lda   	blankCount
        	sta     dig_num        	
        	call    Display_5X7_blk6 	
		;br	T1chkblankend		
T1chkblankend:						
		lda	t1count
		inca	
		cmpe	#C_14
		brnc	1$
		lda	#C_ZERO		
1$:		sta	t1count						
T1chkblankend2:
		lda	T1Flag
		anda	#~TIMEGO
		sta	T1Flag	
T1chkblankend1:	
		ret
;------------------------------------------------------------------------
;------------------------------------------------------------------------		
Moveopz2bf::
				
		lda	#C_ZERO
		sta0	.DataBuf
		sta0	.DataBuf+1
				
moveopzloop:		
		PP2Zero()
		lda	#OperandZ
		adda	.DataBuf
		sta	DP
		lda	I
		sta	.DataBuf+1
		PP2One()
		lda0	.DataBuf
		adda	#pzdispbf
		sta	DP
		lda0	.DataBuf+1
		sta	I
		lda0	.DataBuf
		inca
		sta0	.DataBuf
		cmpe	#Length
		brc	Moveopz2bfend				
		br	moveopzloop
		
Moveopz2bfend:		
		ret
		
;------------------------------------------------------------------------
;------------------------------------------------------------------------		
Chkopzbf1:			
		PP2One()
		lda	#C_14
		sta0	.DataBuf+1		
		lda	#pzdispbf+Length-1
		sta	DP
		lda	I
		anda	#MASKHI
		brnz	Chkopzbfend1						
		lda	pointbf
		deca
		sta	pointbf				
		call	Shiftrnibble
		lda0	.DataBuf+1
		deca
		sta0	.DataBuf+1
		cmpe	#C_ZERO
		brz	Chkopzbfend1
		br	Chkopzbf1		
Chkopzbfend1:							
		ret								
;------------------------------------------------------------------------
;------------------------------------------------------------------------		
Chkopzbf2:			
		PP2One()
		lda	#C_14
		sta0	.DataBuf+1		
		lda	#pzdispbf+Length-1
		sta	DP
		lda	I
		anda	#MASKHI
		brnz	Chkopzbfend2						
		lda	pointbf
		deca
		sta	pointbf	
		lda	dispcount
		deca
		sta	dispcount				
		call	Shiftrnibble
		lda0	.DataBuf+1
		deca
		sta0	.DataBuf+1
		cmpe	#C_ZERO
		brz	Chkopzbfend2
		br	Chkopzbf2		
Chkopzbfend2:							
		ret											
;------------------------------------------------------------------------
;------------------------------------------------------------------------		
Shiftrnibble:			
		lda	#Length-1
		sta0	.DataBuf
		
		PP2One()
		lda	#C_ZERO
		sta	cmpDP	
		lda	#pzdispbf
		sta	DP		
1$:
		lda	i		
		sta	cmpFlag	
		rorc
		rorc
		rorc
		rorc
		anda	#MASKHI
		ora	cmpDP
		sta	I
		
		lda	cmpFlag	
		rolc
		rolc
		rolc
		rolc
		anda	#MASKLO
		sta	cmpDP	
		incdp	
		lda0	.DataBuf
		deca
		sta0	.DataBuf
		brc	1$		
		
		
		ret	
		
		
;------------------------------------------------------------------------
;------------------------------------------------------------------------		
		
Shiftlnibble::
		lda	#Length-1
		sta0	.DataBuf

	
		PP2One()
	
		lda	#C_ZERO
		sta	cmpDP
	
		lda0	.DataBuf
		adda	#pzdispbf
		sta	DP
	
1$:
		lda	i
		sta	cmpFlag	
		rolc
		rolc
		rolc
		rolc
		anda	#MASKLO
		ora	cmpDP
		sta	I
		
		lda	cmpFlag	
		rorc
		rorc
		rorc
		rorc
		anda	#MASKHI
		sta	cmpDP
		decdp	
		lda0	.DataBuf
		deca
		sta0	.DataBuf
		brc	1$
			
		ret
;------------------------------------------------------------------------
;------------------------------------------------------------------------
ChkDispAns::      	
			
		call	Clrfullmatrix		
		call	Rightchk
		
		PP2One()
		lda	.SetFlag
		anda	#BLANKCHK
		brz	0$		
		lda	#>.SRFlag
		sta	PP
		lda	.SRFlag
        	anda	#C_ONE
        	brz	0$		
		PP2One()
        	lda	#EQUDISP
        	sta	font
        	lda     #C_TEN
        	sta     dig_num
        	call    Display_5X7_1
        	
0$:        				
		PP2One()
		lda	StateFlag
		anda	#BASENSTATE
		brnz	Set2Move		
		PP2Zero()
		lda	#C_ZERO
		sta	OperandZ+Length
		call	CheckOutData	
Set2Move:			
		PP2One()
		call	Moveopz2bf
		call	AnsZerochk		
getpointbf:
		PP2One()
		lda	cmpDP
		sta	pointbf		
		lda	#C_ZERO
		suba	pointbf
		sta	dispcount
		
		lda0	PointZ
		adda	dispcount
		cmpe	#HALFMAX
		brc	2$		
		cmpe	#MINUS100		;璽100
		brnc	ChkDispAnsend
		lda	#C_ZERO
		sta	dispcount
		call	Clrpzdispbf
		br	ChkDispAnsend		
2$:			
		cmpe	#PLUS99-1		;タ100
		brc	ChkDispAnsend
		lda	#>ErrorFlag
        	sta	PP
        	lda	#<ErrorFlag
        	sta	DP
        	lda	#C_ONE
        	sta	I		
ChkDispAnsend:
		ret
;------------------------------------------------------------------------
;------------------------------------------------------------------------
ShowAnschk::
		PP2One()
		
		lda	.SFlag
		anda	#08h
		brz	1$		
		lda	#0
		sta0	.SFDP
1$:						
       		lda	T1Flag
		anda	#~(ENG1GO|ENG2GO|ENGEND)
		sta	T1Flag
		lda	#STARTENG
		sta	EngFlag			;to clear all eng disp	
		
		call	Clr_signm		
		call	Clr_expm
		call	Clrfullseg		
		call	AnsZerochk
		cmpe	#C_TWO
		brz	DispAnsZero				
NotZeroDispChk:		
		PP2One()
		lda	StateFlag
		anda	#BASENSTATE
		brnz	BasenAnsDisp
        	lda	.SetFlag
        	anda	#FDPCHK
        	cmpe	#DMSCHK
        	brz	Dmsalldispchk
        	cmpe	#FRACHK
        	brz	Fraalldispchk
        	cmpe	#HPOINTCHK
        	brz	Fraspchk1	
Dispmodechk:		
		PP2One()
		lda	DispFlag
		anda	#MASKLO
		cmpe	#NORAM1DISP
		brz	Norm1
		cmpe	#NORAM2DISP
		brz	Norm2
		cmpe	#FIXDISP
		brz	FIX
		cmpe	#SCIDISP
		brz	SCI			
ShowAnschkend:		
		ret
		
		
;------------------------------------------------------------------------
;------------------------------------------------------------------------		
AnsZerochk:		
		
		PP2One()
		lda	#C_ZERO
		sta	cmpPP
		sta	cmpDP	
		lda	#C_14	
		sta0	.DataBuf
zerochkloop:
		PP2One()
		lda0	.DataBuf
		deca	
		sta0	.DataBuf
		lda	#pzdispbf
		adda	cmpPP
		sta	DP
		lda	I
		anda	#MASKLO
		cmpe	#C_ZERO
		brnz	AnsNotZero				
		lda0	.DataBuf
		deca	
		sta0	.DataBuf		
		lda	I
		anda	#MASKHI
		cmpe	#C_ZERO
		brnz	AnsNotZero
		lda	cmpPP
		inca
		sta	cmpPP
		cmpe	#Length
		brc	SetAnsZero
		br	zerochkloop		
AnsNotZero:
		PP2One()
		lda0	.DataBuf
		sta	cmpDP
		lda	#C_ONE
		br	AnsZerochkend
SetAnsZero:
		PP2One()
		lda	#C_TWO	
AnsZerochkend:		
		ret				
;------------------------------------------------------------------------
;------------------------------------------------------------------------
Norm1::
		PP2One()
		lda0	PointZ
		adda	dispcount
		sta	dispcount
		cmpe	#HALFMAX
		brc	1$
		br	2$

1$:		cmpe	#CHKTEN
		brc	Notexp			
		br	Isexp

2$:
		cmpe	#CHKMTWO
		brc	Isexp		
		br	Notexp
;------------------------------------------------------------------------		
		
Norm2::
		PP2One()
		lda0	PointZ
		adda	dispcount
		sta	dispcount
		cmpe	#HALFMAX
		brc	1$
		br	2$
1$:		
		cmpe	#CHKTEN
		brc	Notexp			
		br	Isexp
2$:		
		cmpe	#CHKMTEN
		brc	Isexp		
		br	Notexp
		
;------------------------------------------------------------------------
FIX::
		
		PP2One()
		lda	DispFlag
		anda	#MASKHI
		sta	cmpPP	
				
		lda0	PointZ
		adda	dispcount
		sta	dispcount
		cmpe	#HALFMAX
		brc	1$
		br	2$
1$:		
		cmpe	#CHKTEN
		brc	FixNotexp1			
		br	Isexp
2$:		
		;cmpe	cmpPP
		;brz	FixNotexp2
		;brc	DispAnsZero		
		br	FixNotexp2					
			
;------------------------------------------------------------------------		
SCI::						
		PP2One()
		lda	pointbf
		sta	editDP		
		call	Chkopzbf1		
		PP2One()
		lda0	PointZ
		adda	dispcount
		sta	dispcount
		
		lda	DispFlag
		anda	#MASKHI
		sta	cmpPP
				
		lda	pointbf
		inca
		cmpe	cmpPP
		brz	Isexp1go
		brc	SciOvergo		
ScinotOvergo:
		PP2One()
		lda	pointbf
		inca
		cmpe	cmpPP
		brc	Isexp1go
		lda	pointbf
		inca
		sta	pointbf
		call	Shiftlnibble
		br	ScinotOvergo
		
SciOvergo:		
		PP2One()
		lda	T1count
		anda	#80h
		brz	1$
		call	Xort1count
		call	.I_trans_Z
		br	SciOvergo1
1$:		
		lda	editDP
		inca
		suba	cmpPP	
		sta	cmpFlag
		call	Chkaddopz
		cmpe	#C_TWO
		brnz	SciOvergo1
		call	Xort1count		
		br	SCI
		
		
SciOvergo1:		
		PP2One()
		lda	pointbf
		inca	
		cmpe	cmpPP
		brz	Isexp1go
		lda	pointbf
		deca
		sta	pointbf
		call	Shiftrnibble
		br	SciOvergo1
;------------------------------------------------------------------------	
Xort1count:
		PP2One()
		lda	T1count
		xora	#80h
		sta	T1count		
		ret
;------------------------------------------------------------------------
;------------------------------------------------------------------------		
FixNotexp1:
		PP2One()
		lda0	PointZ
		inca
		sta	dispcount
		lda0	PointZ
		sta	cmpFlag
		lda	pointbf
		inca
		suba	cmpFlag
		adda	cmpPP
		cmpe	#C_TEN
		brc	1$		
		lda	T1count
		anda	#80h
		brz	0$
		call	Xort1count
		call	.I_trans_Z
		br	1$
0$:		
		PP2One()
		lda0	PointZ		
		sta	cmpFlag	
		lda	pointbf
		inca
		suba	cmpFlag
		sta	cmpFlag
			
		lda	pointbf
		inca		
		suba	cmpPP
		suba	cmpFlag		
		sta	cmpFlag
		call	Chkaddopz
		cmpe	#C_TWO
		brnz	1$
		call	Xort1count		
		br	FIX
		
1$:
		PP2One()
		call	Over10shift				
		PP2One()
		lda0	PointZ
		sta	cmpDP
		lda	pointbf
		suba	cmpDP
		sta	cmpDP	
		cmpe	#C_TEN
		brz	Notexprun1
		
				
		PP2One()
		lda	cmpDP
		adda	cmpPP	
		cmpe	#C_TEN
		brc	FixnotFullgo
		
				
Fixfullgo:
		lda	dispcount
		cmpe	cmpPP
		brz	FullFixloop1
		brc	FullFixloop2										
FullFixloop1:
		PP2One()
		lda	pointbf
		cmpe	#C_NINE
		brc	Notexprun1
		lda	dispcount
		deca		
		cmpe	cmpPP
		brc	Notexprun1
		lda	pointbf
		inca
		sta	pointbf
		lda	dispcount
		inca
		sta	dispcount
		call	Shiftlnibble
		br	FullFixloop1
		
FullFixloop2:
		PP2One()
		lda	dispcount
		deca			
		cmpe	cmpPP
		brz	Notexprun1
		lda	pointbf
		deca
		sta	pointbf
		lda	dispcount
		deca
		sta	dispcount
		call	Shiftrnibble
		br	FullFixloop2				
FixnotFullgo:									

		PP2One()		
		lda	pointbf
		cmpe	#C_NINE
		brc	Notexprun1		
		lda	pointbf
		inca
		sta	pointbf								
		lda	dispcount
		inca
		sta	dispcount
		call	Shiftlnibble														
		br	FixnotFullgo				
;------------------------------------------------------------------------		
FixNotexp2:										
		PP2One()
		lda0	PointZ
		inca
		sta	dispcount
		lda	cmpPP
		cmpe	#C_NINE
		brc	FixNotexp2_1
		lda	T1count
		anda	#80h
		brz	0$
		call	Xort1count
		call	.I_trans_Z
		br	FixNotexp2_1
0$:		
		PP2One()
		lda0	PointZ
		deca
		cmpe	pointbf
		brnc	1$
		suba	pointbf
		sta	editDP
		lda	cmpPP
		suba	editDP
		br	2$	
1$:		lda	cmpPP
2$:		sta	editDP		;干纕

⌨️ 快捷键说明

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