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 + -
显示快捷键?