📄 base.asl
字号:
+ 287 ;Output:OperandZ (Bin)
01E4 288 Base_Oct2Bin::
01E4 20 01 F8 289 call Base_Oct2Dec
01E7 20 00 00 290 call .Z_trans_X
01EA 20 00 00 291 call Base_Dec2Bin
01ED 24 292 ret
+ 293
+ 294 ;Input:OperandX (Oct)
+ 295 ;Output:OperandZ (Hex)
01EE 296 Base_Oct2Hex::
01EE 20 01 F8 297 call Base_Oct2Dec
01F1 20 00 00 298 call .Z_trans_X
01F4 20 00 FA 299 call Base_Dec2Hex
01F7 24 300 ret
+ 301
+ 302
+ 303 ;Input:OperandX (Oct)
+ 304 ;Output:OperandZ (decimal)
01F8 305 Base_Oct2Dec::
01F8 F3 00 306 lda #0
01FA FC 28 307 sta PP
01FC 20 02 C2 308 call CheckOctLimit
01FF F5 00 309 lda0 ErrorFlag
0201 A7 01 310 cmpe #1
0203 04 02 41 311 brc 3$
0206 F3 0A 312 lda #OCT_DIGITS
0208 F9 00 313 sta0 BufferZ
020A F3 06 314 lda #@Oct2DecTab
020C FD 01 315 sta BufferZ+1
020E F3 79 316 lda #<Oct2DecTab
0210 FD 02 317 sta BufferZ+2
0212 20 03 AD 318 call HBO2DecBase
0215 F5 02 319 lda0 Buffer+2
0217 CB F0 320 anda #0xf0
0219 7F 321 rorc
021A 7F 322 rorc
021B 7F 323 rorc
021C 7F 324 rorc
021D CB 0F 325 anda #0x0f
021F A7 04 326 cmpe #4
0221 05 02 41 327 brnc 3$
0224 20 00 00 328 call .Z_trans_X
0227 20 00 00 329 call .ClrY
022A F3 10 330 lda #10h
022C F9 02 331 sta0 OperandY+2
022E F3 73 332 lda #73h
0230 F9 03 333 sta0 OperandY+3
0232 F3 74 334 lda #74h
0234 F9 04 335 sta0 OperandY+4
0236 F3 18 336 lda #18h
0238 F9 05 337 sta0 OperandY+5
023A F3 24 338 lda #24h
023C F9 06 339 sta0 OperandY+6
023E 20 00 00 340 call Subtration
+ 341
+ 342 3$:
0241 24 343 ret
+ 344
+ 345
+ 346 ;;Input:OperandX (decimal)
+ 347 ;Output:ErrorFlag
0242 348 CheckDecLimit::
0242 20 00 00 349 call .X_trans_R
0245 F5 00 350 lda0 SignX
0247 DB 00 351 ora #0
0249 06 02 87 352 brz 0$
024C F3 00 353 lda #0
024E F9 00 354 sta0 SignX
0250 20 00 00 355 call .ClrY
0253 F3 21 356 lda #21h
0255 F9 02 357 sta0 OperandY+2
0257 F3 47 358 lda #47h
0259 F9 03 359 sta0 OperandY+3
025B F3 48 360 lda #48h
025D F9 04 361 sta0 OperandY+4
025F F3 36 362 lda #36h
0261 F9 05 363 sta0 OperandY+5
0263 F3 49 364 lda #49h
0265 F9 06 365 sta0 OperandY+6
+ 366
0267 20 00 00 367 call LineUp
026A F3 00 368 lda #OperandX
026C FD 00 369 sta Addr1
026E F3 00 370 lda #OperandY
0270 FD 00 371 sta Addr2
0272 F3 07 372 lda #07h
0274 FD 00 373 sta DpCount
0276 20 00 00 374 call CompareData
0279 F1 00 375 lda Temp1
027B A7 02 376 cmpe #2
027D 06 02 BE 377 brz 1$
0280 F3 01 378 lda #1
0282 F9 00 379 sta0 ErrorFlag
0284 02 02 C1 380 br 2$
+ 381 0$:
0287 20 00 00 382 call .ClrY
028A F3 21 383 lda #21h
028C F9 02 384 sta0 OperandY+2
028E F3 47 385 lda #47h
0290 F9 03 386 sta0 OperandY+3
0292 F3 48 387 lda #48h
0294 F9 04 388 sta0 OperandY+4
0296 F3 36 389 lda #36h
0298 F9 05 390 sta0 OperandY+5
029A F3 48 391 lda #48h
029C F9 06 392 sta0 OperandY+6
+ 393
029E 20 00 00 394 call LineUp
02A1 F3 00 395 lda #OperandX
02A3 FD 00 396 sta Addr1
02A5 F3 00 397 lda #OperandY
02A7 FD 00 398 sta Addr2
02A9 F3 07 399 lda #07h
02AB FD 00 400 sta DpCount
02AD 20 00 00 401 call CompareData
02B0 F1 00 402 lda Temp1
02B2 A7 02 403 cmpe #2
02B4 06 02 BE 404 brz 1$
02B7 F3 01 405 lda #1
02B9 FD 00 406 sta ErrorFlag
02BB 02 02 C1 407 br 2$
+ 408 1$:
02BE 20 00 00 409 call .R_trans_X
+ 410 2$:
02C1 24 411 ret
+ 412
+ 413 ;;Input:OperandX (Oct)
+ 414 ;Output:ErrorFlag
02C2 415 CheckOctLimit::
02C2 F5 00 416 lda0 PointX
02C4 A7 0B 417 cmpe #(OCT_DIGITS+1)
02C6 05 02 CD 418 brnc 0$
02C9 F3 01 419 lda #1
02CB F9 00 420 sta0 ErrorFlag
+ 421 0$:
02CD 24 422 ret
+ 423
+ 424 ;;Input:OperandX (Hex)
+ 425 ;Output:ErrorFlag
02CE 426 CheckHexLimit::
02CE F5 00 427 lda0 PointX
02D0 A7 09 428 cmpe #(HEX_DIGITS+1)
02D2 05 02 D9 429 brnc 0$
02D5 F3 01 430 lda #1
02D7 F9 00 431 sta0 ErrorFlag
+ 432 0$:
02D9 24 433 ret
+ 434
+ 435 ;;Input:OperandX (Binary)
+ 436 ;Output:ErrorFlag
02DA 437 CheckBinLimit::
02DA F5 00 438 lda0 PointX
+ 439 ;cmpe #(BIN_DIGITS+1)
02DC A7 0B 440 cmpe #(BIN_DIGITS+1)
02DE 05 02 E5 441 brnc 0$
02E1 F3 01 442 lda #1
02E3 F9 00 443 sta0 ErrorFlag
+ 444 0$:
02E5 24 445 ret
+ 446
+ 447 ;InputOperandX,OperandY (decimal)
+ 448 ;Input:MathOp=1 (decimal)
+ 449 ;Output:OperandZ (decimal)
02E6 450 LogicAnd::
02E6 F3 01 451 lda #1
02E8 F9 00 452 sta0 MathOp
02EA 20 05 77 453 call LogicMathOp
02ED 24 454 ret
+ 455
+ 456
+ 457 ;InputOperandX,OperandY (decimal)
+ 458 ;Input:MathOp=2 (decimal)
+ 459 ;Output:OperandZ (decimal)
02EE 460 LogicOr::
02EE F3 02 461 lda #2
02F0 F9 00 462 sta0 MathOp
02F2 20 05 77 463 call LogicMathOp
02F5 24 464 ret
+ 465
+ 466 ;InputOperandX,OperandY (decimal)
+ 467 ;Input:MathOp=3 (decimal)
+ 468 ;Output:OperandZ (decimal)
02F6 469 LogicXor::
02F6 F3 03 470 lda #3
02F8 F9 00 471 sta0 MathOp
02FA 20 05 77 472 call LogicMathOp
02FD 24 473 ret
+ 474
+ 475 ;InputOperandX,OperandY (decimal)
+ 476 ;Input:MathOp=4 (decimal)
+ 477 ;Output:OperandZ (decimal)
02FE 478 LogicXnor::
02FE F3 04 479 lda #4
0300 F9 00 480 sta0 MathOp
0302 20 05 77 481 call LogicMathOp
0305 24 482 ret
+ 483
+ 484 ;InputOperandX (decimal)
+ 485 ;Output:OperandZ (decimal)
0306 486 LogicNeg::
0306 20 00 00 487 call .X_trans_Buf
0309 20 02 42 488 call CheckDecLimit
030C F5 00 489 lda0 ErrorFlag
030E A7 01 490 cmpe #1
0310 04 03 1F 491 brc 2$
0313 20 00 00 492 call .Buf_trans_X
0316 F5 00 493 lda0 SignX
0318 EB 01 494 xora #01
031A F9 00 495 sta0 SignX
031C 20 00 00 496 call .X_trans_Z
+ 497 2$:
031F 24 498 ret
+ 499
+ 500 ;InputOperandX (decimal)
+ 501 ;Output:OperandZ (decimal)
0320 502 LogicNot::
0320 20 00 FA 503 call Base_Dec2Hex
0323 F5 00 504 lda0 ErrorFlag
0325 A7 01 505 cmpe #1
0327 04 03 41 506 brc 1$
032A F3 00 507 lda #0
032C F9 00 508 sta0 OpCntNo
032E F3 06 509 lda #OperandZ+6
0330 FC 21 510 sta DP
+ 511 0$:
0332 F2 512 lda I
0333 EB FF 513 xora #0xff
0335 FE 514 sta I
0336 38 515 decdp
0337 F5 00 516 lda0 OpCntNo
0339 1F 517 inca
033A F9 00 518 sta0 OpCntNo
033C A7 04 519 cmpe #4
033E 07 03 32 520 brnz 0$
+ 521 1$:
0341 20 00 00 522 call .Z_trans_X
0344 20 01 48 523 call Base_Hex2Dec
0347 24 524 ret
+ 525 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+ 526 ;
+ 527 ; Private functions
+ 528 ;
+ 529 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+ 530 ;Input:OperandX
+ 531 ;Output:OperandZ
0348 532 Dec2Bin:
0348 F3 02 533 lda #02h
034A F9 00 534 sta0 Param+0
034C F3 0B 535 lda #11
034E F9 01 536 sta0 Param+1
0350 20 04 42 537 call Dec2HBOBase
0353 24 538 ret
+ 539
0354 540 Dec2Hex:
0354 F3 16 541 lda #16h
0356 F9 00 542 sta0 Param+0
0358 F3 09 543 lda #9
035A F9 01 544 sta0 Param+1
035C 20 04 42 545 call Dec2HBOBase
035F 24 546 ret
+ 547
0360 548 Dec2Oct:
0360 F3 08 549 lda #08h
0362 F9 00 550 sta0 Param+0
0364 F3 0B 551 lda #11
0366 F9 01 552 sta0 Param+1
0368 20 04 42 553 call Dec2HBOBase
036B 24 554 ret
+ 555
036C 556 FillInLowByte:
036C F3 00 557 lda #Buffer
036E 89 00 558 adda BufLen
0370 FC 21 559 sta DP
0372 F3 00 560 lda #>.M_bcdbuf
0374 FC 28 561 sta PP
0376 F5 06 562 lda0 OperandX+6
0378 FD 00 563 sta .M_bcdbuf
037A 20 00 00 564 call .bcdtohex
037D F1 00 565 lda .M_bcdbuf
037F F9 00 566 sta0 Temp1
0381 F3 00 567 lda #0
0383 FC 28 568 sta PP
0385 F1 00 569 lda Temp1
0387 FE 570 sta I
0388 24 571 ret
0389 572 FillInHighByte:
0389 F3 00 573 lda #Buffer
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -