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

📄 calcmain.asl

📁 这是用台湾KingB 8位单片机开发的科学计算器程序
💻 ASL
📖 第 1 页 / 共 5 页
字号:
01C9                309 .GetValue::			
01C9 F3 00          310 		lda	#>.SFlag		
01CB FC 28          311 		sta	PP		
01CD F1 00          312 		lda	.SFlag
01CF CB 40          313 		anda	#40h			;40=AC
01D1 07 03 C2       314 		brnz	.EmitKeyD
01D4 F1 00          315 		lda	.SFlag
01D6 CB 48          316 		anda	#48h			;48=AC&EQU
01D8 A7 48          317 		cmpe	#48h
01DA 06 03 C2       318 		brz	.EmitKeyD
01DD A7 08          319 		cmpe	#08h
01DF 07 01 FF       320 		brnz	1$
01E2 F3 00          321 		lda	#>StateFlag		
01E4 FC 28          322 		sta	PP
01E6 F1 00          323 		lda	StateFlag		;c0 judge CMPE SD MODE		
01E8 CB 47          324 		anda	#47h		;43h	
01EA 07 02 02       325 		brnz	.NoEquCalc		
01ED F5 00          326 		lda0	.KeyPos
01EF A7 B5          327 		cmpe	#.MADD
01F1 06 01 F9       328 		brz	2$
01F4 A7 DF          329 		cmpe	#.MSUB
01F6 07 01 FF       330 		brnz	1$
+                   331 2$:
01F9 20 00 00       332 		call	.I_trans_Z		
01FC 02 03 4F       333 		br	.NodispFormul
+                   334 1$:			
01FF 20 00 00       335 		call	ChkDispAns		 
0202                336 .DoSdRegMode:
0202                337 .NoEquCalc:	
+                   338 		
+                   339 ;;;;set equ flag is 08h		
0202 F3 00          340 		lda	#>.SFlag		 
0204 FC 28          341 		sta	PP							
0206 F1 00          342 		lda 	.SFlag
0208 DB 08          343 		ora	#08h			;08=EQU
020A FD 00          344 		sta 	.SFlag			
020C                345 .DislayMode:	
020C F5 00          346 		lda0	.keyPos
020E A7 00          347 		cmpe	#0h
0210 06 03 C2       348 		brz	.EmitKeyD		
+                   349 
+                   350 ;Begin Calculate form Syntax->Posfix->PosValue->ChkDispAns->ShowAnschk						
+                   351 					;.Close INT
0213 20 09 2F       352 		call	.AutoaddANS
+                   353 ;;;;;;.DispPari Choice Parity display (dms ,fract, normal)		
0216 20 00 00       354 		call	.DispPari
0219 F5 00          355 		lda0	.keyPos
021B A7 C3          356 		cmpe	#0c3h			;c3=ab/c
021D 06 02 EE       357 		brz	.JudgeFract
0220 A7 B7          358 		cmpe	#0b7h			;b7=dms
0222 07 02 30       359 		brnz	.SyntaxFormula
0225 F3 00          360 		lda	#>.SFlag
0227 FC 28          361 		sta	PP
0229 F1 00          362 		lda	.SFlag
022B CB 30          363 		anda	#30h			;30=RCL & STO
022D 06 03 31       364 		brz	.Point2DMS		
0230                365 .SyntaxFormula:			
+                   366 ;;FormulaMode
+                   367 ;-------------------------------------------
+                   368 ;;SyntaxFormula		
0230 F5 00          369 		lda0	.FormulaFlag
0232 A7 01          370 		cmpe	#01h
0234 06 02 4C       371 		brz	.GetMdata
0237 20 00 00       372 		call	.FormulaCk		 
023A F5 00          373 		lda0	ErrorFlag
023C A7 00          374 		cmpe	#0h
023E 07 03 17       375 		brnz	.CheckErrorFlag
0241 F3 00          376 		lda	#>.SFlag
0243 FC 28          377 		sta	PP
0245 F1 00          378 		lda	.SFlag
0247 CB 80          379 		anda	#80h			;80 =CALc MODE
0249 06 02 82       380 		brz	.NormalSyntax
024C                381 .GetMdata:		
024C F5 E0          382 		lda0	.StoFlag
024E A7 01          383 		cmpe	#01h
0250 06 02 56       384 		brz	.ChkInpData		;CHECK DATA IS EMPTY FOR FORMULA
0253 02 02 64       385 		br	.Showformula
0256                386 .ChkInpData:
0256 F5 D4          387 		lda0	.DataDP
0258 A7 00          388 		cmpe	#0h
025A 07 02 82       389 		brnz	.NormalSyntax
025D F3 00          390 		lda	#0h			;stoflag 0 =input ok 1= need input
025F F9 E0          391 		sta0	.StoFlag	
0261 02 03 C2       392 		br 	.EmitKeyD 
0264                393 .Showformula:		
0264 20 00 00       394 		call	.GetMemData		;get Memory variable
0267 F3 00          395 		lda	#>.SFlag
0269 FC 28          396 		sta	PP
026B F1 00          397 		lda	.SFlag
026D CB 80          398 		anda	#80h			;80=Calc mdoe
026F 06 02 82       399 		brz	.NormalSyntax	
0272 F3 01          400 		lda	#01h
0274 F9 E0          401 		sta0	.StoFlag
0276 20 00 00       402 		call	ChkDispAns
0279 20 00 00       403 		call	ShowAnschk
027C 20 00 00       404 		call	CalDispLib
027F 02 03 C2       405 		br	.EmitKeyD					
0282                406 .NormalSyntax:	
+                   407 ;;;;Comp SD mode
+                   408 ;-------------------------------------------
0282 F3 00          409 		lda	#>StateFlag
0284 FC 28          410 		sta	PP
0286 F1 00          411 		lda	StateFlag
0288 CB 08          412 		anda	#08h
028A 07 02 9D       413 		brnz	.BasePosfix		
028D 20 00 00       414 		call	.Syntax
0290 F5 00          415 		lda0	ErrorFlag
0292 A7 00          416 		cmpe	#0h
0294 07 03 17       417 		brnz	.CheckErrorFlag		
0297 20 00 00       418 		call	.Postfix		
029A 02 02 B1       419 		br	.ChkPSError
+                   420 ;;;;BaseN
+                   421 ;-------------------------------------------		
029D                422 .BasePosfix:
029D 20 00 00       423 		call	.Basensyntax
02A0 F5 00          424 		lda0	ErrorFlag
02A2 A7 00          425 		cmpe	#0h
02A4 07 03 17       426 		brnz	.CheckErrorFlag	
02A7 20 00 00       427 		call	.BaseNPosfix
02AA F5 00          428 		lda0	ErrorFlag
02AC A7 00          429 		cmpe	#0h
02AE 07 03 BF       430 		brnz	.DispDotMatrix		
+                   431 ;-------------------------------------------		
02B1                432 .ChkPSError:	
+                   433 		 
02B1 F5 00          434 		lda0	ErrorFlag
02B3 A7 00          435 		cmpe	#0h
02B5 07 03 BF       436 		brnz	.DispDotMatrix		
02B8 F3 01          437 		lda	#01h		;STO Check
02BA FC 28          438 		sta	PP				
02BC F1 00          439 		lda	.SetFlag	;SetFlag 20 is dispmode
02BE CB DF          440 		anda	#~20h
02C0 FD 00          441 		sta	.SetFlag
02C2 F1 00          442 		lda	T1Flag		;Set Flash underline off
02C4 DB 80          443 		ora	#80h
02C6 FD 00          444 		sta	T1Flag
02C8 F3 00          445 		lda	#00h
02CA FD 00          446 		sta	t1count
02CC 20 00 00       447 		call	T1chkblank	;-----Blankcheck		
02CF F1 00          448 		lda	.SetFlag
02D1 DB 20          449 		ora	#20h
02D3 FD 00          450 		sta	.SetFlag	
+                   451 ;;;;;;;calc posfix data value  ;;;;;;;;;;;;;;;;;;;
+                   452 			  				
02D5 20 00 00       453 		call	.PosValue		
02D8                454 .ModeDisp:		
02D8 F5 00          455 		lda0	ErrorFlag
02DA A7 00          456 		cmpe	#0h
02DC 07 03 17       457 		brnz	.CheckErrorFlag
02DF F3 00          458 		lda	#>.SetFlag
02E1 FC 28          459 		sta	PP
02E3 F1 00          460 		lda	.SFlag
02E5 CB 80          461 		anda	#80h
02E7 07 02 EE       462 		brnz	.JudgeFract
02EA F3 00          463 		lda	#0h
02EC F9 00          464 		sta0	.ForMulaFlag
02EE                465 .JudgeFract:		
02EE F1 00          466 		lda	.SetFlag
02F0 CB 18          467 		anda	#18h
02F2 06 03 02       468 		brz	.CheckCarryZ				
02F5 20 00 00       469 		call	.I_trans_X
02F8 F3 00          470 		lda	#0h
02FA F9 07          471 		sta0	OperandX+7		
02FC 20 00 00       472 		call	Fract
02FF 20 00 00       473 		call	.TransFract
+                   474 ;;;;No calculate data only display OperandZ result
0302                475 .CheckCarryZ:	
+                   476 ;;;;;;;;;Adjust	data value last bit carry
0302 F3 01          477 		lda	#01h
0304 FC 28          478 		sta	PP
0306 F1 00          479 		lda	.SetFlag
0308 CB 0C          480 		anda	#0ch
030A A7 08          481 		cmpe	#08h
030C 06 03 34       482 		brz	.SetFractToPoint
030F A7 04          483 		cmpe	#04h
0311 06 03 31       484 		brz	.Point2DMS	 	
0314 02 03 34       485 		br	.SetFractToPoint
0317                486 .CheckErrorFlag:
0317 F5 00          487 		lda0	.FormulaFlag
0319 A7 01          488 		cmpe	#01h
031B 07 03 BF       489 		brnz	.DispDotMatrix
031E F3 00          490 		lda	#0h
0320 F9 E0          491 		sta0	.StoFlag
0322 F9 00          492 		sta0	.FormulaFlag
0324 F3 00          493 		lda	#>.SFlag
0326 FC 28          494 		sta	PP
0328 F1 00          495 		lda	.SFlag
032A CB 7F          496 		anda	#~80h
032C FD 00          497 		sta	.SFlag	
032E 02 03 BF       498 		br	.DispDotMatrix			
0331                499 .Point2DMS:
0331 20 00 00       500 		call	.PointToDMS		 
0334                501 .SetFractToPoint:				
0334 20 00 00       502 		call	.Carry
0337 F3 00          503 		lda	#0h
0339 F9 07          504 		sta0	OperandZ+7						
033B                505 .OnlyDisp:													
033B 20 00 00       506 		call	ChkDispAns		
033E F5 00          507 		lda0	ErrorFlag
0340 A7 00          508 		cmpe	#0h
0342 07 03 17       509 		brnz	.CheckErrorFlag	
0345 F5 00          510 		lda0	.FormulaFlag
0347 A7 01          511 		cmpe	#01h
0349 06 03 4F       512 		brz	.NodispFormul
034C 20 00 00       513 		call	ShowAnschk
034F                514 .NodispFormul:					
034F F3 01          515 		lda	#01h		;;;STO MemORY Check
0351 FC 28          516 		sta	PP		
0353 F1 00          517 		lda	.SetFlag
0355 DB 20          518 		ora	#20h
0357 FD 00          519 		sta	.SetFlag		
0359 F1 00          520 		lda	.SFlag
035B CB 30          521 		anda	#30h				
035D A7 10          522 		cmpe	#10h
035F 06 07 57       523 		brz	.STOMemory			
0362 F5 00          524 		lda0	.KeyPos
0364 A7 B5          525 		cmpe	#.MADD
0366 06 06 B1       526 		brz	.M_ADD
0369 A7 DF          527 		cmpe	#.MSUB
036B 06 06 F3       528 		brz	.M_SUB
036E A7 00          529 		cmpe	#0h		
0370 02 03 C2       530 		br 	.EmitKeyD
0373                531 .EnterErr:
0373 F5 00          532 		lda0	.CommaFlag
0375 A7 00          533 		cmpe	#0h		 
0377 06 02 02       534 		brz	.DoSdRegMode
037A F3 02          535 		lda	#02h
037C F9 00          536 		sta0	ErrorFlag
037E 02 03 17       537 		br	.CheckErrorFlag		
+                   538  
+                   539 ;;;;;;;;;Save Input data to Ram				
0381                540 .SaveInputData:		
0381 F3 00          541 		lda	#>.SetFlag
0383 FC 28          542 		sta	PP
0385 F1 00          543 		lda	.SetFlag
0387 CB 80          544 		anda	#80h
0389 06 03 9E       545 		brz	.Normalinput
038C F1 00          546 		lda	.SetFlag
038E CB 7F          547 		anda	#~80h
0390 FD 00          548 		sta	.SetFlag
0392 F5 00          549 		lda0	.KeyPos			
0394 A7 A4          550 		cmpe	#0a4h			;+
0396 06 03 3B       551 		brz	.OnlyDisp
0399 A7 A5          552 		cmpe	#0a5h			;-
039B 06 03 3B       553 		brz	.OnlyDisp
+                   554 ;;;Store data
039E                555 .Normalinput:	
039E F5 00          556 		lda0	.SFDP
03A0 A7 00          557 		cmpe	#0h
03A2 07 03 BF       558 		brnz	.DispDotMatrix		
+                   559 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAX input data is 79 step					
03A5 F5 D4          560 		lda0	.DataDP
03A7 A7 4F          561 		cmpe	#79			
03A9 04 03 BF       562 		brc	.DispDotMatrix			
03AC F5 00          563 		lda0	.KeyPos
03AE FD 00          564 		sta	font		
03B0 20 00 00       565 		call	.StoData
03B3 F5 00          566 		lda0	.keyPos
03B5 A7 BD          567 		cmpe	#.DaltaX		;For LR Mode
03B7 06 04 1E       568 		brz	.CalcEstimateXY
03BA A7 BE          569 		cmpe	#.DaltaY		;For LR Mode
03BC 06 04 1E       570 		brz	.CalcEstimateXY
+                   571 ;;;;;;Display DotMatrix Font			 
03BF                572 .DispDotMatrix: 		
03BF 20 00 00       573 		call	CalDispLib		;,DispDotMatrix
+                   574 ;--------------					
03C2                575 .EmitKeyD:	
03C2 F3 00          576 		lda	#0h
03C4 F9 E3          577 		sta0	.TurboCnt				
03C6 F3 01          578 		lda	#01h
03C8 FC 28          579 		sta	PP
03CA F1 00          580 		lda	.SFlag
03CC CB 80          581 		anda	#80h
03CE 06 03 DF       582 		brz	.3$
03D1 F5 00          583 		lda0	.FormulaFlag
03D3 A7 01          584 		cmpe	#01h
03D5 07 03 DF       585 		brnz	.3$
03D8 F5 E0          586 		lda0	.StoFlag
03DA A7 00          587 		cmpe	#0h
03DC 06 02 4C       588 		brz	.GetMdata
03DF                589 .3$:		
03DF 20 0B 80       590 		call	.EI 			;Enable INT
03E2 20 00 00       591 		call	ModeIcom		;Disp Icom
03E5 20 00 00       592 		call	T1chkblank
03E8 F5 E1          593 		lda0	.KeyCodeBuf			
03EA F9 00          594 		sta0	.KeyPos	
03EC A7 14          595 		cmpe	#.ShiftL			
03EE 06 04 0C       596 		brz	.RelaseKey
03F1 A7 15          597 		cmpe	#.ShiftR	
03F3 06 04 0C       598 		brz	.RelaseKey
03F6 F3 00          599 		lda	#0h
03F8 F9 E3          600 		sta0	.TurboCnt
03FA                601 .CheckKey0:	
03FA F3 32          602 		lda	#.RealseTime		;10ms*32=0.5sec
03FC F9 E2          603 		sta0	.KeyTimeCnt
03FE F5 E3          604 		lda0	.TurboCnt
0400 A7 08          605 		cmpe	#.TimeRels
0402 05 03 FA       606 		brnc	.CheckKey0					
0405 F3 00          607 		lda	#0h
0407 F9 E3          608 		sta0	.TurboCnt			
0409 02 00 6A       609 		br 	.CheckCode	
+                   610 
+                   611 ;--------------												
040C                612 .RelaseKey:		 
+                   613 		;lda0	.SFDP
+                   614 		;cmpe	#02h
+                   615 		;brnc	.CheckCode	
040C F3 00          616 		lda	#0h
040E FC 28          617 		sta	PP						
0410 F5 E3          618 		lda0	.TurboCnt
0412 A5 E2          619 		cmpe	.KeyTimeCnt

⌨️ 快捷键说明

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