📄 calcmain.asl
字号:
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 + -