📄 base.asl
字号:
038B 89 00 574 adda BufLen
038D FC 21 575 sta DP
038F F3 00 576 lda #>.M_bcdbuf
0391 FC 28 577 sta PP
0393 F5 06 578 lda0 OperandX+6
0395 FD 00 579 sta .M_bcdbuf
0397 20 00 00 580 call .bcdtohex
039A F1 00 581 lda .M_bcdbuf
039C 7E 582 rolc
039D 7E 583 rolc
039E 7E 584 rolc
039F 7E 585 rolc
03A0 CB F0 586 anda #0xf0
03A2 F9 00 587 sta0 Temp1
03A4 F3 00 588 lda #0
03A6 FC 28 589 sta PP
03A8 F5 00 590 lda0 Temp1
03AA DA 591 ora I
03AB FE 592 sta I
03AC 24 593 ret
+ 594
+ 595 ;Input:OperandX
+ 596 ;Output:OperandX
+ 597
+ 598 ;Input:BufferZ:Base digits
+ 599 ;Input:(BufferZ+1,BufferZ+2)=(base table address High byte,base table address low byte)
03AD 600 HBO2DecBase:
03AD F3 00 601 lda #OperandX
03AF F9 00 602 sta0 Addr1
03B1 F3 00 603 lda #Buffer
03B3 F9 00 604 sta0 Addr2
03B5 20 00 00 605 call CopyData ; clear buffer to zero
03B8 F5 00 606 lda0 PointX
03BA F9 00 607 sta0 PointB
03BC F5 00 608 lda0 SignX
03BE F9 00 609 sta0 SignB
03C0 20 00 00 610 call .ClrY
03C3 20 00 00 611 call .Y_trans_Buf
03C6 F3 06 612 lda #6
03C8 F9 00 613 sta0 BufLen
03CA F3 00 614 lda #0
03CC FD 00 615 sta OpCntNo
+ 616 0$:
03CE F3 00 617 lda #Buffer
03D0 89 00 618 adda BufLen
03D2 FC 21 619 sta DP
03D4 F5 00 620 lda0 OpCntNo
03D6 7F 621 rorc
03D7 04 03 E2 622 brc 1$
03DA F2 623 lda I
03DB CB 0F 624 anda #0x0f
03DD F9 00 625 sta0 Temp1
03DF 02 03 F2 626 br 2$
+ 627 1$:
03E2 F2 628 lda I
03E3 CB F0 629 anda #0xf0
03E5 7F 630 rorc
03E6 7F 631 rorc
03E7 7F 632 rorc
03E8 7F 633 rorc
03E9 CB 0F 634 anda #0x0f
03EB F9 00 635 sta0 Temp1
03ED F5 00 636 lda0 BufLen
03EF 3F 637 deca
03F0 F9 00 638 sta0 BufLen
+ 639 2$:
03F2 F5 00 640 lda0 OpCntNo
03F4 F9 00 641 sta0 .M_Data_Offset
03F6 1F 642 inca
03F7 F9 00 643 sta0 OpCntNo
+ 644
03F9 F3 00 645 lda #>.M_hexbuf
03FB FC 28 646 sta PP
03FD F3 00 647 lda #0
03FF FD 00 648 sta .M_hexbuf
0401 F5 00 649 lda0 Temp1
0403 FD 01 650 sta .M_hexbuf+1
0405 20 00 00 651 call .Hex2Bcd
0408 F1 01 652 lda .M_bcdbuf+1
040A F9 00 653 sta0 Temp1 ;BCD value
040C F3 00 654 lda #0
040E FC 28 655 sta PP
0410 F1 01 656 lda BufferZ+1
0412 FD 00 657 sta Addr1
0414 F1 02 658 lda BufferZ+2
0416 FD 00 659 sta Addr2
0418 20 05 32 660 call InpDataToOpY
041B 20 00 00 661 call .ClrX
041E F5 00 662 lda0 Temp1
0420 F9 06 663 sta0 OperandX+6
0422 20 00 00 664 call Multiplation
0425 20 00 00 665 call .Buf_trans_X
0428 20 00 00 666 call .Z_trans_Y
042B 20 00 00 667 call Addition
042E 20 00 00 668 call .Z_trans_Buf
0431 F5 00 669 lda0 OpCntNo
0433 A5 00 670 cmpe BufferZ
0435 07 03 CE 671 brnz 0$
0438 20 00 00 672 call .Buf_trans_Z
043B F5 00 673 lda0 SignB
043D E9 00 674 xora SignZ
043F F9 00 675 sta0 SignZ
0441 24 676 ret
+ 677
+ 678 ;Input:OperandX,Param+0(base=2,8,16),Param+1(Digits of output)
+ 679 ;Output:OperandZ
0442 680 Dec2HBOBase:
0442 20 00 00 681 call .ClrY
0445 F3 00 682 lda #OperandY
0447 F9 00 683 sta0 Addr1
0449 F3 00 684 lda #Buffer
044B F9 00 685 sta0 Addr2
044D 20 00 00 686 call CopyData ; clear buffer to zero
0450 F3 00 687 lda #0
0452 F9 00 688 sta0 PointB
0454 F5 00 689 lda0 SignX
0456 F9 00 690 sta0 SignB
0458 F5 00 691 lda0 Param+0
045A F9 06 692 sta0 OperandY+6
045C F3 06 693 lda #6
045E F9 00 694 sta0 BufLen
0460 F3 00 695 lda #0
0462 FD 00 696 sta OpCntNo
0464 697 ModLoop:
0464 20 00 00 698 call Mod
0467 20 04 ED 699 call MoveData
046A F5 00 700 lda0 OpCntNo
046C 7F 701 rorc
046D 04 04 76 702 brc 1$
0470 20 03 6C 703 call FillInLowByte
0473 02 04 7E 704 br 2$
+ 705 1$:
0476 20 03 89 706 call FillInHighByte
0479 F1 00 707 lda BufLen
047B 3F 708 deca
047C FD 00 709 sta BufLen
+ 710 ;;
+ 711 2$:
047E F5 00 712 lda0 OpCntNo
0480 1F 713 inca
0481 F9 00 714 sta0 OpCntNo
0483 20 00 00 715 call .ClrY
0486 F5 00 716 lda0 Param+0 ;base=2,8,16
0488 F9 06 717 sta0 OperandY+6
048A 20 00 00 718 call .Z_trans_X
048D 20 00 00 719 call LineUp
0490 F3 00 720 lda #OperandX
0492 FD 00 721 sta Addr1
0494 F3 00 722 lda #OperandY
0496 FD 00 723 sta Addr2
0498 F3 07 724 lda #07h
049A FD 00 725 sta DpCount
049C 20 00 00 726 call CompareData
049F F1 00 727 lda Temp1
04A1 A7 02 728 cmpe #2
04A3 06 04 B3 729 brz 0$
04A6 20 00 00 730 call .ClrY
04A9 F5 00 731 lda0 Param+0 ;base=2,8,16
04AB F9 06 732 sta0 OperandY+6
04AD 20 00 00 733 call .Z_trans_X
04B0 02 04 64 734 br ModLoop
+ 735 0$:
04B3 20 00 00 736 call .Z_trans_X
04B6 20 04 ED 737 call MoveData
04B9 F5 00 738 lda0 OpCntNo
04BB 7F 739 rorc
04BC 04 04 C5 740 brc 3$
04BF 20 03 6C 741 call FillInLowByte
04C2 02 04 C8 742 br 4$
+ 743 3$:
04C5 20 03 89 744 call FillInHighByte
+ 745 4$:
04C8 F5 00 746 lda0 OpCntNo
04CA 1F 747 inca
04CB F9 00 748 sta0 OpCntNo
+ 749
+ 750 ; lda0 OpCntNo
04CD A5 01 751 cmpe Param+1 ;base=2,8(10+1),16(8+1)
04CF 05 04 D9 752 brnc 5$
04D2 F3 01 753 lda #1
04D4 F9 00 754 sta0 ErrorFlag
04D6 02 04 EC 755 br EndDec2HBO
+ 756 5$:
04D9 F3 00 757 lda #Buffer
04DB F9 00 758 sta0 Addr1
04DD F3 00 759 lda #OperandZ
04DF F9 00 760 sta0 Addr2
04E1 20 00 00 761 call CopyData
04E4 F5 00 762 lda0 SignB
04E6 F9 00 763 sta0 SignZ
04E8 F5 00 764 lda0 OpCntNo
04EA F9 00 765 sta0 PointZ
04EC 766 EndDec2HBO:
04EC 24 767 ret
+ 768
04ED 769 MoveData::
04ED F3 00 770 lda #OperandX
04EF FD 00 771 sta Addr1
04F1 20 00 00 772 call CheckData
04F4 F1 00 773 lda DpCount
04F6 8B 00 774 adda #0
04F8 06 05 31 775 brz 0$
+ 776 2$:
04FB F5 00 777 lda0 PointX
04FD A7 00 778 cmpe #0
04FF 06 05 31 779 brz 0$
0502 A7 88 780 cmpe #88h
0504 04 05 14 781 brc 1$
0507 3F 782 deca
0508 F9 00 783 sta0 PointX
050A F3 00 784 lda #OperandX
050C F9 00 785 sta0 Addr1
050E 20 00 00 786 call ShiftToR
0511 02 04 FB 787 br 2$
+ 788 1$:
0514 F5 00 789 lda0 PointX
0516 A7 00 790 cmpe #0
0518 06 05 31 791 brz 0$
051B F1 00 792 lda OperandX
051D CB F0 793 anda #0f0h
051F 07 05 31 794 brnz 0$
0522 F5 00 795 lda0 PointX
0524 1F 796 inca
0525 F9 00 797 sta0 PointX
0527 F3 00 798 lda #OperandX
0529 F9 00 799 sta0 Addr1
052B 20 00 00 800 call ShiftToL
052E 02 05 14 801 br 1$
+ 802 0$:
0531 24 803 ret
+ 804
+ 805
+ 806 ;Input:Table address (Addr1=High,Addr2=Low)
+ 807 ;Input:Data Offset
0532 808 InpDataToOpY::
+ 809 ;lda OP1
+ 810 ;anda #~10h
+ 811 ;sta OP1
0532 20 00 00 812 call .ClrY
0535 F3 00 813 lda #0h
0537 FC 54 814 sta TPP
0539 F1 00 815 lda Addr1
053B FD 01 816 sta TableC+1
053D F1 00 817 lda .M_Data_Offset
053F 89 00 818 adda .M_Data_Offset
0541 FD 00 819 sta Addr3
0543 89 00 820 adda Addr3
0545 89 00 821 adda Addr3
0547 89 00 822 adda Addr3
0549 89 00 823 adda Addr3
054B 89 00 824 adda Addr2
054D FD 00 825 sta TableC
054F F1 01 826 lda TableC+1
0551 9B 00 827 addc #0
0553 FD 01 828 sta TableC+1
+ 829
0555 F3 00 830 lda #0h
0557 FC 54 831 sta TPP
0559 F1 01 832 lda TableC+1
055B FC 02 833 sta TPH
055D F1 00 834 lda TableC
055F FC 01 835 sta TPL
0561 F8 836 ldv
0562 FD 00 837 sta SignY
0564 F8 838 ldv
0565 FD 00 839 sta PointY
0567 F3 00 840 lda #OperandY
0569 FC 21 841 sta DP
056B 842 InpY0:
056B F8 843 ldv
056C A7 FF 844 cmpe #0ffh
056E 06 05 76 845 brz End_InpY0
0571 FE 846 sta i
0572 18 847 incdp
0573 02 05 6B 848 br InpY0
+ 849
0576 850 End_InpY0:
+ 851 ;lda OP1
+ 852 ;ora #10h
+ 853 ;sta OP1
0576 24 854 ret
+ 855
+ 856 ;
+ 857 ;InputOperandX,OperandY
+ 858 ;Input:MathOp (and:1,or:2,xor:3,xnor:4)
+ 859 ;Output:OperandZ
0577 860 LogicMathOp:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -