calcmain.asl

来自「这是用台湾KingB 8位单片机开发的科学计算器程序」· ASL 代码 · 共 1,559 行 · 第 1/5 页

ASL
1,559
字号
+                   310 ;		.CalcResoult
+                   311 ;===========================================	
+                   312 ;;;StateFlag 7	6   5	4   3	 2   1   0	
+                   313 ;;;	   Comp SD  D	R   G   (  LRMode )
01B4                314 .CalcResoult:	
+                   315 					
01B4 F5 00          316 		lda0	.KeyPos		 	
01B6 A7 00          317 		cmpe	#0h
01B8 06 04 03       318 		brz	.EmitKeyD		
+                   319 		;call	ChkDispAns		;stop blanking  
01BB F3 00          320 		lda	#>StateFlag		
01BD FC 28          321 		sta	PP
01BF F1 00          322 		lda	StateFlag		;c0 judge CMPE SD MODE
01C1 CB C0          323 		anda	#0c0h	
01C3 06 01 E7       324 		brz	.LrModeCk
01C6                325 .CompSDMod:												
01C6 F5 00          326 		lda0	.KeyPos					
01C8 A7 77          327 		cmpe	#.PercentEqu
01CA 06 02 0A       328 		brz	.GetValue
01CD A7 A3          329 		cmpe	#.Enter
01CF 06 02 0A       330 		brz	.GetValue
01D2 A7 B5          331 		cmpe	#.DT
01D4 06 02 0A       332 		brz	.GetValue
01D7 A7 DF          333 		cmpe	#.CL
01D9 06 02 0A       334 		brz	.GetValue
01DC A7 7B          335 		cmpe	#.CalcEqu
01DE 06 02 0A       336 		brz	.GetValue	
01E1 20 00 00       337 		call	ChkDispAns			
01E4 02 03 C2       338 		br	.SaveInputData
+                   339 ;;.CommaFlag=0 normal calc or .CommaFlag=ff data input (for SD REG Mode)		
01E7                340 .LrModeCk:	
01E7 F5 00          341 		lda0	.CommaFlag		
01E9 A7 00          342 		cmpe	#0h		 
01EB 06 01 C6       343 		brz	.CompSDMod
01EE F5 00          344 		lda0	.KeyPos					
01F0 A7 B5          345 		cmpe	#.DT			;For SD REG Mode
01F2 06 02 0A       346 		brz	.GetValue
01F5 A7 DF          347 		cmpe	#.CL
01F7 06 02 0A       348 		brz	.GetValue
01FA A7 A3          349 		cmpe	#.Enter
01FC 06 03 B4       350 		brz	.EnterErr
01FF A7 77          351 		cmpe	#.PercentEqu
0201 06 03 B4       352 		brz	.EnterErr
0204 20 00 00       353 		call	ChkDispAns		
0207 02 03 C2       354 		br	.SaveInputData 
+                   355 ;;;;;;;;;;judge press Enter or Ac or Percent Enter	
020A                356 .GetValue::			
020A F3 00          357 		lda	#>.SFlag		
020C FC 28          358 		sta	PP		
020E F1 00          359 		lda	.SFlag
0210 CB 40          360 		anda	#40h			;40=AC
0212 07 04 03       361 		brnz	.EmitKeyD
0215 F1 00          362 		lda	.SFlag
0217 CB 48          363 		anda	#48h			;48=AC&EQU
0219 A7 48          364 		cmpe	#48h
021B 06 04 03       365 		brz	.EmitKeyD
021E A7 08          366 		cmpe	#08h
0220 07 02 40       367 		brnz	1$
0223 F3 00          368 		lda	#>StateFlag		
0225 FC 28          369 		sta	PP
0227 F1 00          370 		lda	StateFlag		;c0 judge CMPE SD MODE		
0229 CB 47          371 		anda	#47h		;43h	
022B 07 02 43       372 		brnz	.NoEquCalc		
022E F5 00          373 		lda0	.KeyPos
0230 A7 B5          374 		cmpe	#.MADD
0232 06 02 3A       375 		brz	2$
0235 A7 DF          376 		cmpe	#.MSUB
0237 07 02 40       377 		brnz	1$
+                   378 2$:
023A 20 00 00       379 		call	.I_trans_Z		
023D 02 03 90       380 		br	.NodispFormul
+                   381 1$:			
0240 20 00 00       382 		call	ChkDispAns		 
0243                383 .DoSdRegMode:
0243                384 .NoEquCalc:	
+                   385 		
+                   386 ;;;;set equ flag is 08h		
0243 F3 00          387 		lda	#>.SFlag		 
0245 FC 28          388 		sta	PP							
0247 F1 00          389 		lda 	.SFlag
0249 DB 08          390 		ora	#08h			;08=EQU
024B FD 00          391 		sta 	.SFlag			
024D                392 .DislayMode:	
024D F5 00          393 		lda0	.keyPos
024F A7 00          394 		cmpe	#0h
0251 06 04 03       395 		brz	.EmitKeyD		
+                   396 
+                   397 ;Begin Calculate form Syntax->Posfix->PosValue->ChkDispAns->ShowAnschk						
+                   398 					;.Close INT
0254 20 09 70       399 		call	.AutoaddANS
+                   400 ;;;;;;.DispPari Choice Parity display (dms ,fract, normal)		
0257 20 00 00       401 		call	.DispPari
025A F5 00          402 		lda0	.keyPos
025C A7 C3          403 		cmpe	#0c3h			;c3=ab/c
025E 06 03 2F       404 		brz	.JudgeFract
0261 A7 B7          405 		cmpe	#0b7h			;b7=dms
0263 07 02 71       406 		brnz	.SyntaxFormula
0266 F3 00          407 		lda	#>.SFlag
0268 FC 28          408 		sta	PP
026A F1 00          409 		lda	.SFlag
026C CB 30          410 		anda	#30h			;30=RCL & STO
026E 06 03 72       411 		brz	.Point2DMS		
0271                412 .SyntaxFormula:			
+                   413 ;;FormulaMode
+                   414 ;-------------------------------------------
+                   415 ;;SyntaxFormula		
0271 F5 00          416 		lda0	.FormulaFlag
0273 A7 01          417 		cmpe	#01h
0275 06 02 8D       418 		brz	.GetMdata
0278 20 00 00       419 		call	.FormulaCk		 
027B F5 00          420 		lda0	ErrorFlag
027D A7 00          421 		cmpe	#0h
027F 07 03 58       422 		brnz	.CheckErrorFlag
0282 F3 00          423 		lda	#>.SFlag
0284 FC 28          424 		sta	PP
0286 F1 00          425 		lda	.SFlag
0288 CB 80          426 		anda	#80h			;80 =CALc MODE
028A 06 02 C3       427 		brz	.NormalSyntax
028D                428 .GetMdata:		
028D F5 E0          429 		lda0	.StoFlag
028F A7 01          430 		cmpe	#01h
0291 06 02 97       431 		brz	.ChkInpData		;CHECK DATA IS EMPTY FOR FORMULA
0294 02 02 A5       432 		br	.Showformula
0297                433 .ChkInpData:
0297 F5 D4          434 		lda0	.DataDP
0299 A7 00          435 		cmpe	#0h
029B 07 02 C3       436 		brnz	.NormalSyntax
029E F3 00          437 		lda	#0h			;stoflag 0 =input ok 1= need input
02A0 F9 E0          438 		sta0	.StoFlag	
02A2 02 04 03       439 		br 	.EmitKeyD 
02A5                440 .Showformula:		
02A5 20 00 00       441 		call	.GetMemData		;get Memory variable
02A8 F3 00          442 		lda	#>.SFlag
02AA FC 28          443 		sta	PP
02AC F1 00          444 		lda	.SFlag
02AE CB 80          445 		anda	#80h			;80=Calc mdoe
02B0 06 02 C3       446 		brz	.NormalSyntax	
02B3 F3 01          447 		lda	#01h
02B5 F9 E0          448 		sta0	.StoFlag
02B7 20 00 00       449 		call	ChkDispAns
02BA 20 00 00       450 		call	ShowAnschk
02BD 20 00 00       451 		call	CalDispLib
02C0 02 04 03       452 		br	.EmitKeyD					
02C3                453 .NormalSyntax:	
+                   454 ;;;;Comp SD mode
+                   455 ;-------------------------------------------
02C3 F3 00          456 		lda	#>StateFlag
02C5 FC 28          457 		sta	PP
02C7 F1 00          458 		lda	StateFlag
02C9 CB 08          459 		anda	#08h
02CB 07 02 DE       460 		brnz	.BasePosfix		
02CE 20 00 00       461 		call	.Syntax
02D1 F5 00          462 		lda0	ErrorFlag
02D3 A7 00          463 		cmpe	#0h
02D5 07 03 58       464 		brnz	.CheckErrorFlag		
02D8 20 00 00       465 		call	.Postfix		
02DB 02 02 F2       466 		br	.ChkPSError
+                   467 ;;;;BaseN
+                   468 ;-------------------------------------------		
02DE                469 .BasePosfix:
02DE 20 00 00       470 		call	.Basensyntax
02E1 F5 00          471 		lda0	ErrorFlag
02E3 A7 00          472 		cmpe	#0h
02E5 07 03 58       473 		brnz	.CheckErrorFlag	
02E8 20 00 00       474 		call	.BaseNPosfix
02EB F5 00          475 		lda0	ErrorFlag
02ED A7 00          476 		cmpe	#0h
02EF 07 04 00       477 		brnz	.DispDotMatrix		
+                   478 ;-------------------------------------------		
02F2                479 .ChkPSError:	
+                   480 		 
02F2 F5 00          481 		lda0	ErrorFlag
02F4 A7 00          482 		cmpe	#0h
02F6 07 04 00       483 		brnz	.DispDotMatrix		
02F9 F3 01          484 		lda	#01h		;STO Check
02FB FC 28          485 		sta	PP				
02FD F1 00          486 		lda	.SetFlag	;SetFlag 20 is dispmode
02FF CB DF          487 		anda	#~20h
0301 FD 00          488 		sta	.SetFlag
0303 F1 00          489 		lda	T1Flag		;Set Flash underline off
0305 DB 80          490 		ora	#80h
0307 FD 00          491 		sta	T1Flag
0309 F3 00          492 		lda	#00h
030B FD 00          493 		sta	t1count
030D 20 00 00       494 		call	T1chkblank	;-----Blankcheck		
0310 F1 00          495 		lda	.SetFlag
0312 DB 20          496 		ora	#20h
0314 FD 00          497 		sta	.SetFlag	
+                   498 ;;;;;;;calc posfix data value  ;;;;;;;;;;;;;;;;;;;
+                   499 			  				
0316 20 00 00       500 		call	.PosValue		
0319                501 .ModeDisp:		
0319 F5 00          502 		lda0	ErrorFlag
031B A7 00          503 		cmpe	#0h
031D 07 03 58       504 		brnz	.CheckErrorFlag
0320 F3 00          505 		lda	#>.SetFlag
0322 FC 28          506 		sta	PP
0324 F1 00          507 		lda	.SFlag
0326 CB 80          508 		anda	#80h
0328 07 03 2F       509 		brnz	.JudgeFract
032B F3 00          510 		lda	#0h
032D F9 00          511 		sta0	.ForMulaFlag
032F                512 .JudgeFract:		
032F F1 00          513 		lda	.SetFlag
0331 CB 18          514 		anda	#18h
0333 06 03 43       515 		brz	.CheckCarryZ				
0336 20 00 00       516 		call	.I_trans_X
0339 F3 00          517 		lda	#0h
033B F9 07          518 		sta0	OperandX+7		
033D 20 00 00       519 		call	Fract
0340 20 00 00       520 		call	.TransFract
+                   521 ;;;;No calculate data only display OperandZ result
0343                522 .CheckCarryZ:	
+                   523 ;;;;;;;;;Adjust	data value last bit carry
0343 F3 01          524 		lda	#01h
0345 FC 28          525 		sta	PP
0347 F1 00          526 		lda	.SetFlag
0349 CB 0C          527 		anda	#0ch
034B A7 08          528 		cmpe	#08h
034D 06 03 75       529 		brz	.SetFractToPoint
0350 A7 04          530 		cmpe	#04h
0352 06 03 72       531 		brz	.Point2DMS	 	
0355 02 03 75       532 		br	.SetFractToPoint
0358                533 .CheckErrorFlag:
0358 F5 00          534 		lda0	.FormulaFlag
035A A7 01          535 		cmpe	#01h
035C 07 04 00       536 		brnz	.DispDotMatrix
035F F3 00          537 		lda	#0h
0361 F9 E0          538 		sta0	.StoFlag
0363 F9 00          539 		sta0	.FormulaFlag
0365 F3 00          540 		lda	#>.SFlag
0367 FC 28          541 		sta	PP
0369 F1 00          542 		lda	.SFlag
036B CB 7F          543 		anda	#~80h
036D FD 00          544 		sta	.SFlag	
036F 02 04 00       545 		br	.DispDotMatrix			
0372                546 .Point2DMS:
0372 20 00 00       547 		call	.PointToDMS		 
0375                548 .SetFractToPoint:				
0375 20 00 00       549 		call	.Carry
0378 F3 00          550 		lda	#0h
037A F9 07          551 		sta0	OperandZ+7						
037C                552 .OnlyDisp:													
037C 20 00 00       553 		call	ChkDispAns		
037F F5 00          554 		lda0	ErrorFlag
0381 A7 00          555 		cmpe	#0h
0383 07 03 58       556 		brnz	.CheckErrorFlag	
0386 F5 00          557 		lda0	.FormulaFlag
0388 A7 01          558 		cmpe	#01h
038A 06 03 90       559 		brz	.NodispFormul
038D 20 00 00       560 		call	ShowAnschk
0390                561 .NodispFormul:					
0390 F3 01          562 		lda	#01h		;;;STO MemORY Check
0392 FC 28          563 		sta	PP		
0394 F1 00          564 		lda	.SetFlag
0396 DB 20          565 		ora	#20h
0398 FD 00          566 		sta	.SetFlag		
039A F1 00          567 		lda	.SFlag
039C CB 30          568 		anda	#30h				
039E A7 10          569 		cmpe	#10h
03A0 06 07 98       570 		brz	.STOMemory			
03A3 F5 00          571 		lda0	.KeyPos
03A5 A7 B5          572 		cmpe	#.MADD
03A7 06 06 F2       573 		brz	.M_ADD
03AA A7 DF          574 		cmpe	#.MSUB
03AC 06 07 34       575 		brz	.M_SUB
03AF A7 00          576 		cmpe	#0h		
03B1 02 04 03       577 		br 	.EmitKeyD
03B4                578 .EnterErr:
03B4 F5 00          579 		lda0	.CommaFlag
03B6 A7 00          580 		cmpe	#0h		 
03B8 06 02 43       581 		brz	.DoSdRegMode
03BB F3 02          582 		lda	#02h
03BD F9 00          583 		sta0	ErrorFlag
03BF 02 03 58       584 		br	.CheckErrorFlag		
+                   585  
+                   586 ;;;;;;;;;Save Input data to Ram				
03C2                587 .SaveInputData:		
03C2 F3 00          588 		lda	#>.SetFlag
03C4 FC 28          589 		sta	PP
03C6 F1 00          590 		lda	.SetFlag
03C8 CB 80          591 		anda	#80h
03CA 06 03 DF       592 		brz	.Normalinput
03CD F1 00          593 		lda	.SetFlag
03CF CB 7F          594 		anda	#~80h
03D1 FD 00          595 		sta	.SetFlag
03D3 F5 00          596 		lda0	.KeyPos			
03D5 A7 A4          597 		cmpe	#0a4h			;+
03D7 06 03 7C       598 		brz	.OnlyDisp
03DA A7 A5          599 		cmpe	#0a5h			;-
03DC 06 03 7C       600 		brz	.OnlyDisp
+                   601 ;;;Store data
03DF                602 .Normalinput:	
03DF F5 00          603 		lda0	.SFDP
03E1 A7 00          604 		cmpe	#0h
03E3 07 04 00       605 		brnz	.DispDotMatrix		
+                   606 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAX input data is 79 step					
03E6 F5 D4          607 		lda0	.DataDP
03E8 A7 4F          608 		cmpe	#79			
03EA 04 04 00       609 		brc	.DispDotMatrix			
03ED F5 00          610 		lda0	.KeyPos
03EF FD 00          611 		sta	font		
03F1 20 00 00       612 		call	.StoData
03F4 F5 00          613 		lda0	.keyPos
03F6 A7 BD          614 		cmpe	#.DaltaX		;For LR Mode
03F8 06 04 5F       615 		brz	.CalcEstimateXY
03FB A7 BE          616 		cmpe	#.DaltaY		;For LR Mode
03FD 06 04 5F       617 		brz	.CalcEstimateXY
+                   618 ;;;;;;Display DotMatrix Font			 
0400                619 .DispDotMatrix: 		
0400 20 00 00       620 		call	CalDispLib		;,DispDotMatrix
+                   621 ;--------------					

⌨️ 快捷键说明

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