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

📄 calcmain.asm

📁 这是用台湾KingB 8位单片机开发的科学计算器程序
💻 ASM
📖 第 1 页 / 共 3 页
字号:
;--------------					
.EmitKeyD:	
		lda	#0h
		sta0	.TurboCnt				
		lda	#01h
		sta	PP
		lda	.SFlag
		anda	#80h
		brz	.3$
		lda0	.FormulaFlag
		cmpe	#01h
		brnz	.3$
		lda0	.StoFlag
		cmpe	#0h
		brz	.GetMdata
.3$:		
		call	.EI 			;Enable INT
		call	ModeIcom		;Disp Icom
		call	T1chkblank
		lda0	.KeyCodeBuf			
		sta0	.KeyPos	
		cmpe	#.ShiftL			
		brz	.RelaseKey
		cmpe	#.ShiftR	
		brz	.RelaseKey
		lda	#0h
		sta0	.TurboCnt
.CheckKey0:	
		lda	#.RealseTime		;10ms*32=0.5sec
		sta0	.KeyTimeCnt
		lda0	.TurboCnt
		cmpe	#.TimeRels
		brnc	.CheckKey0					
		lda	#0h
		sta0	.TurboCnt			
		br 	.CheckCode	

;--------------												
.RelaseKey:		 
		;lda0	.SFDP
		;cmpe	#02h
		;brnc	.CheckCode	
		lda	#0h
		sta	PP						
		lda0	.TurboCnt
		cmpe	.KeyTimeCnt
		brnc	.3$
		lda	#0ah		;100ms
		sta0	.KeyTimeCnt
		br	.InputKeyHandle	

;-------------------------------------------		
;;The Funtion is for Quad Mode ,Quad Estimate have X1 & X2 & Y
.CalcEstimateXY:		
		lda	#>.SFlag
		sta	PP					 
		lda 	.SFlag			;SFlag 08 is set =
		ora	#08h
		sta 	.SFlag	
		call	.T_trans_X	
		lda	#>DaltaXcnt				
		sta	PP
		lda	DaltaXcnt
		cmpe	#0h					
		brnz	.DispDaltaX2			
		br	.NoEquCalc			
.DispDaltaX2:		 
		lda	#>font		
		sta	PP
		lda	font			;Font=Inputkey
		cmpe	#.DaltaX
		brnz	.DispDaltaY
		lda	#02h
		sta	PP
		lda	#0h
		sta	DP
		lda	i
		cmpe	#.DaltaX
		brz	.LREstimate2
.CkQR:		
		call	.Syntax
		lda0	ErrorFlag
		cmpe	#0h
		brz	.NoEquCalc
		lda	#0h
		sta0	ErrorFlag				
		lda	#>DaltaXcnt
		sta	PP				 	 		
		lda	DaltaXcnt		
		cmpe	#02h
		brz	.CalcQR_EstX1		
		lda	#02h
		sta	DaltaXcnt
		call	QR_EstimateX2				
		br	.OnlyDisp
.LREstimate2:
		lda	#>StateFlag
		sta	PP
		lda	StateFlag
		anda	#07h
		cmpe	#06h		
		brz	.CkQR
		cmpe	#05h
		brz	.InvEstimateX
		cmpe	#04h
		brz	.PwrEstimateX
		cmpe	#03h
		brz	.ExpEstimateX
		cmpe	#02h
		brz	.LogEstimateX
.LinEstimateX:		
		call	.LRX_trans_X
		call	LR_EstimateX
		br	.EstAnsCarry		
.InvEstimateX:
		call	.LRX_trans_X
		call	LR_InvEstimateX
		br	.EstAnsCarry	
.PwrEstimateX:		
		call	.LRX_trans_X
		call	LR_PwrEstimateX
		br	.EstAnsCarry	
.ExpEstimateX:
		call	.LRX_trans_X
		call	LR_ExpEstimateX
		br	.EstAnsCarry		
.LogEstimateX:
		call	.LRX_trans_X
		call	LR_LnEstimateX
.EstAnsCarry:		
		call	.Carry
		br	.OnlyDisp			
;-------------------------------------------		
				
.CalcQR_EstX1:		
		lda	#01h
		sta	DaltaXcnt	
		call	QR_EstimateX1				
		br	.OnlyDisp		
.DispDaltaY:	
		lda	#02h
		sta	PP
		lda	#0h
		sta	DP
		lda	i
		cmpe	#.DaltaY
		brz	.LREstimateY2
.CkQRY:			
 		call	.Syntax
		lda0	ErrorFlag
		cmpe	#0h
		brz	.NoEquCalc
		lda	#0h
		sta0	ErrorFlag
		lda	#>DaltaXcnt
		sta	PP
		lda	#02h				 	 		
		sta	DaltaXcnt	
		call	QR_EstimateY		
		br	.OnlyDisp
.LREstimateY2:
		lda	#>StateFlag
		sta	PP
		lda	StateFlag
		anda	#07h
		cmpe	#06h
		brz	.CkQRY
		cmpe	#05h
		brz	.InvEstimateY
		cmpe	#04h
		brz	.PwrEstimateY
		cmpe	#03h
		brz	.ExpEstimateY
		cmpe	#02h
		brz	.LogEstimateY
.LinEstimateY:		
		call	.LRY_trans_Y
		call	.Y_trans_X
		call	LR_EstimateY
		br	.EstAnsCarry		
.InvEstimateY:
		call	.LRY_trans_Y
		call	.Y_trans_X
		call	LR_InvEstimateY
		br	.EstAnsCarry	
.PwrEstimateY:		
		call	.LRY_trans_Y
		call	.Y_trans_X
		call	LR_PwrEstimateY
		br	.EstAnsCarry	
.ExpEstimateY:
		call	.LRY_trans_Y
		call	.Y_trans_X
		call	LR_ExpEstimateY
		br	.EstAnsCarry		
.LogEstimateY:
		call	.LRY_trans_Y
		call	.Y_trans_X
		call	LR_LnEstimateY
		br	.EstAnsCarry						
;-------------------------------------------		
.MemoryCK:				
		lda	#01h
		sta	PP
		lda	#^(.MemoryCheck)
		sta	TPP
		lda	#@(.MemoryCheck)
		sta	TPH
		lda	#<(.MemoryCheck)
		sta	TPL
.SearchMem:		
		ldv
		sta0	.DataBuf+1	 
		cmpe	#0ffh
		brz	.ResetStoRcl
		lda	#0h
		sta	PP
		lda0	.DataBuf+1
		cmpe	#0a2h		;ANS=A2
		brz	.ResetStoRcl
		cmpe	.KeyPos
		brnz	.SearchMem		
		lda	#>.SFlag
		sta	PP
		lda	.SFlag		;6   5   4   3     
		anda	#78h		;AC RCL STO EQU
		cmpe	#58h		;AC     STO EQU
		brz	.ClrStoRclFlag
		lda	#01h		;STO Check
		sta	PP
					;lda	.SetFlag
		lda 	#20h 		;ora	#20h
		sta	.SetFlag				
		lda	.SFlag		
		anda	#30h				
		cmpe	#10h		;SFlag 10 is Sto Mode
		brz	.CheckSto	;	;.DislayMode	 		
		cmpe	#20h		;SFlag 20 is Rcl Mode
		br	.RCLMemory
.CheckSto:
		lda	#>.SFlag
		sta	PP
		lda	.SFlag	
		anda	#08h
		brz	.NoEquCalc
		lda	#01h
		
		sta	PP
		lda	StateFlag
		anda	#08h
		brz	.ModeDisp
		call	.IsBaseNMode				
		br	.ModeDisp
						
.ResetStoRcl:
		lda0	.KeyPos
		cmpe	#.StoCode		;STO
		brz	.EmitKeyD
		cmpe	#.RclCode		;RCL 
		brz	.EmitKeyD
.ClrStoRclFlag:								
		lda	#01h
		sta	PP
		lda	.SFlag
		anda	#~30h
		sta	.SFlag		
		br	.EmitKeyD

;===========================================				
.SetRND:	
		call	.CheckRndInp	
		br	.EmitKeyD
.CheckRndInp:		
		lda	#>.SFlag		 
		sta	PP							
		lda 	.SFlag
		anda	#08h
		brz	2$
		lda	.SetFlag
		anda	#1ch
		brnz	1$
		lda	DispFlag
		anda	#0c0h
		brz	1$
		call	.OPZ2RND		
1$:		
		call	.Z_trans_I		;I=Ans
		lda	#01h
		sta	PP
		lda	.SetFlag
		ora	#01h
		sta	.SetFlag
2$:				
		ret
;-------------------------------------------		
.DORnd:
		lda0	.KeyPos
		cmpe	#0aah
		brz	1$
		cmpe	#0bbh
		brz	1$
		cmpe	#0ceh
		brz	1$
		cmpe	#60H		
		brnz	.EditModeInp
		lda	#0h
		sta0	.KeyPos
		call	.CheckRndInp
		br	.EditModeInp
1$:
		call	.CheckRnd
		br	.CalcResoult		
;------------------------------------------
.SetDRG:		
		lda0	.KeyPos
		cmpe	#01h
		brz	.SetD
		cmpe	#02h
		brz	.SetR
		cmpe	#03h
		brz	.SetG		
		br	.EmitKeyD
.SetD:
		lda	#0aah
		sta0	.KeyPos
		br	.ClrScreen
.SetR:
		lda	#0bbh
		sta0	.KeyPos
		br	.ClrScreen
.SetG:
		lda	#0ceh
		sta0	.KeyPos		 
.ClrScreen:		
		lda	#02h
		sta	PP
		lda	#0h
		sta	DP
		lda	i
		cmpe	#0a2h
		brnz	.DispScreen
		call	.ClrP2Data		
.DispScreen:	
		lda	#>.SRFlag
		sta	PP
		lda	#0h
		sta	.SRFlag			
		call	Clrfullmatrix
		call	Clrfullseg
		call	Rightchk							
		call	ChkDispAns
		call	ShowAnschk
		lda	#01h
		sta	PP
		lda	.SetFlag
		anda	#~02h
		sta	.SetFlag	
		lda	.SFlag
		anda	#08h
		brz	.CalcResoult
		br	.DORnd						 
;------------------------------------------
.DRG:
		lda	#>BasenFlag
		sta	PP
        	lda	BasenFlag
		anda	#0fh
		brnz	.EmitKeyD    	        	        	         	      	
        	lda0	.ModeFlag
		anda	#0f0h
		brnz	.EmitKeyD
		call	DRGdisp
		lda	#01h
		sta	PP
		lda	.SetFlag
		ora	#02h
		sta     .SetFlag
		br	.EmitKeyD
;------------------------------------------
;;;;;;;;;;;;;;;Calc M+ M-		
.M_ADD:
		lda	#>StateFlag
		sta	PP
		lda	StateFlag
		anda	#88h		;comp & basen
		cmpe	#08h
		brz	.BasenMadd
		cmpe	#80h
		brnz	.EmitKeyD
		call	.M_TO_X
		call	.Z_trans_Y
		lda	#0h
		sta	PP
		call    Addition
		;call	.CkOPZEmpty
		call	.Z_trans_X
		call	.X_TO_M		
		br 	.EmitKeyD
.BasenMadd:
		call	.M_TO_X
		call	.Buf_trans_Y
		lda	#0h
		sta0	SignY
		lda	#0h
		sta	PP
		call    Addition
		;call	.CkOPZEmpty
		call	.Z_trans_X
		call	.X_TO_M	
		;call	.Z_trans_Buf	
		br 	.EmitKeyD		
.M_SUB:		
		lda	#>StateFlag
		sta	PP
		lda	StateFlag
		anda	#88h		;comp & basen
		cmpe	#08h
		brz	.BasenMsub
		cmpe	#80h
		brnz	.EmitKeyD
		;call	.CkOPZEmpty
		call	.M_TO_X
		call	.Z_trans_Y
		lda	#0h
		sta	PP
		call	Subtration		
		call	.Z_trans_X
		call	.X_TO_M			
		br 	.EmitKeyD
.BasenMsub:
		call	.M_TO_X
		call	.Buf_trans_Y
		lda	#0h
		sta0	SignY
		lda	#0h
		sta	PP
		call    Subtration
		;call	.CkOPZEmpty
		call	.Z_trans_X
		call	.X_TO_M
		call	.Z_trans_Buf		
		br 	.EmitKeyD
.CkOPZEmpty:		
		lda	#<OperandZ
		sta0	Addr1
		call	CheckData
		lda0	DpCount
		cmpe	#0h
		brnz	.Store_M
		lda	#>.SFlag
		sta	PP
		lda	.SFlag
		anda	#~08h
		sta	.SFlag
		lda	.SetFlag
		anda	#~20h
		sta	.SetFlag
.Store_M:	
		ret						
;------------------------------------------
.STOMemory:
		lda	#01h
		sta	PP
		lda	BasenFlag
		anda	#0f0h
		brz	1$
		call	.I_trans_Z
1$:		
		call	.STOReg					 			
		br	.DispDotMatrix
.RCLMemory:
		lda	#>.SFlag
		sta	PP
		lda	.SFlag
		anda	#40h
		brz	1$
		lda	#0h
		sta0	.DataDP		
1$:		
		call	.RCLReg	
		lda	#>.SFlag
		sta	PP
		lda	.SFlag
		anda	#~40h
		sta	.SFlag	
		lda	#01h
		sta	PP
		lda	BasenFlag
		anda	#0f0h
		brnz	.DispDotMatrix
		call	.Z_trans_I 
		call	.Carry
				
		br	.DispDotMatrix
;;;;;;;;Anyway press left or right key set EditMode 		
.CkLR:		
		lda	#0h
		sta0	.FormulaFlag
		call	Chkkeylr
		cmpe	#01h
		brz	.DispDotMatrix 
		cmpe	#02h
		brz	.EmitKeyD
		br	.DispDotMatrix 					
;------------------------------------------								
.CKIns:		
		lda	#01h
		sta	PP		
		lda	Insetflag
		cmpe	#01h
		brz	.DispDotMatrix
		br 	.CalcResoult
.INSck:				
		lda	#>Insetflag 		
		sta	PP
		lda0	.SFDP
		cmpe	#0h
		brz	.Ckeck1$
		lda	Insetflag
		cmpe	#0
		brz	.Ckeck0$
		cmpe	#1
		brz	.Ckeck1$
		br	.DispDotMatrix		
.Ckeck0$:
		lda	#1
		sta	Insetflag		
		br	.EmitKeyD		
.Ckeck1$:
		lda	#0
		sta	Insetflag		
		br	.EmitKeyD
;;;;Mode select Comp SD REG Deg	Rad Gra	Fix Sci	Norm		
.Modeadd:
		lda	#>StateFlag
		sta	PP
		lda	StateFlag		
		lda	#0h
		sta	DaltaXcnt		
		call	Modeselect
		br	.DispDotMatrix				
.Logic:			
		call	LogicSelect
		br	.DispDotMatrix	
;;;;;;;;;;;Judge Key auto add Ans		
.CheckRnd::	
		lda	#>.SFlag
		sta	PP	
		lda	.SFlag		 
		anda	#30h
		brnz	.MemoryCK
		lda0	.KeyPos
		cmpe	#0a4h			;+
		brz	.DOAns
		cmpe	#0a5h			;-
		brz	.DOAns
		cmpe	#0a6h			;*
		brz	.DOAns
		cmpe	#0a7h			;/
		brz	.DOAns	
		cmpe	#0d3h			;x^y
		brz	.DOAns
		cmpe	#0d7h			;xSqu
		brz	.DOAns
		cmpe	#0c8h			;x-1
		brz	.DOAns
		cmpe	#0d4h			;x!
		brz	.DOAns
		cmpe	#0c5h			;x^2
		brz	.DOAns
		cmpe	#0d2h			;x^3
		brz	.DOAns		
		cmpe	#0aah			;degree

⌨️ 快捷键说明

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