home *** CD-ROM | disk | FTP | other *** search
/ 8bitfiles.net/archives / archives.tar / archives / genie-commodore-file-library / C64-128Toolkit / MATH.ARC / EULER'S (.txt) < prev    next >
Encoding:
Commodore BASIC  |  2019-04-13  |  4.3 KB  |  112 lines

  1. 10 * = $0801
  2. 20 ;EULER'S
  3. 30 ;P
  4. 40 .S
  5. 50 .D FACTR
  6. 60 ;
  7. 70 CURRPRM = $3F
  8. 80 LASTPRM = $41
  9. 90 CURRNUM = $43
  10. 100 EULERS = $5A
  11. 110 DIVISOR = $5F
  12. 120 REMAINDER = $64
  13. 130 QUOTIENT = $69
  14. 140 DIVIDEND = $6E
  15. 150 LENGTH = $8B
  16. 160 SHIFT = $8C
  17. 170 CONV = $8D
  18. 180 TOD = $DC08
  19. 190 SCRCHR = $E716
  20. 200 ;
  21. 210 START .BYTE 11 8 0 0 158:.BYTE "2061":.BYTE 0 0 0
  22. 220 JMP INIT
  23. 230 INTRO .BYTE "[147][198]OR [197]ULER'S [198]ORMULA M=1+2^(2^N),":.BYTE 13
  24. 240 .BYTE "WHEN N=5 THEN M=4294967297, WHICH":.BYTE 13
  25. 250 .BYTE "IS THE PRODUCT OF TWO PRIMES":.BYTE 58 13 17 0
  26. 260 PRIME .BYTE " IS PRIME.  ":.BYTE 0
  27. 270 RORBUF .BYTE 0 0 0 0 0
  28. 280 BCDBUF .BYTE 0 0 0 0 0 0 0 0
  29. 290 RESULT .BYTE 0 0 0 0 0 0 0 0
  30. 300 ;
  31. 310 DIVIDE STX LENGTH:TXA:ASL:ASL:ASL:STA SHIFT
  32. 320 DIVIDE2 LDX #$00:LDY LENGTH:CLC
  33. 330 DIVIDE3 ROL DIVIDEND,X:INX:DEY:BNE DIVIDE3:LDX #$00:LDY LENGTH
  34. 340 DIVIDE4 ROL REMAINDER,X:INX:DEY:BNE DIVIDE4:LDX #$00:LDY LENGTH:SEC
  35. 350 DIVIDE5 LDA REMAINDER,X:SBC DIVISOR,X:INX:DEY:BNE DIVIDE5:BCC DIVIDE7
  36. 360 LDX #$00:LDY LENGTH:SEC
  37. 370 DIVIDE6 LDA REMAINDER,X:SBC DIVISOR,X:STA REMAINDER,X:INX:DEY:BNE DIVIDE6
  38. 380 DIVIDE7 LDX #$00:LDY LENGTH
  39. 390 DIVIDE8 ROL QUOTIENT,X:INX:DEY:BNE DIVIDE8:DEC SHIFT:BNE DIVIDE2
  40. 400 LDA #$00:LDX LENGTH:DEX:BEQ DIVIDE10
  41. 410 DIVIDE9 ORA REMAINDER,X:DEX:BNE DIVIDE9
  42. 420 DIVIDE10 ORA REMAINDER,X:RTS
  43. 430 ;
  44. 440 CLEAR LDX #$13:LDA #$00
  45. 450 CLEAR2 STA DIVISOR,X:DEX:BPL CLEAR2:RTS
  46. 460 ;
  47. 470 DISPLAY STA CONV:STX CONV+1:TYA:ASL:ASL:ASL:STA SHIFT:STY LENGTH
  48. 480 LDX #$14:LDA #$00
  49. 490 DISP2 STA RORBUF,X:DEX:BPL DISP2:LDY LENGTH:DEY
  50. 500 DISP3 LDA (CONV),Y:STA RORBUF,Y:DEY:BPL DISP3:LDA #$01:STA BCDBUF
  51. 510 DISP4 LDX LENGTH:DEX:CLC
  52. 520 DISP5 ROR RORBUF,X:DEX:BPL DISP5:BCC DISP7:LDY #$07:LDX #$00:CLC:SED
  53. 530 DISP6 LDA RESULT,X:ADC BCDBUF,X:STA RESULT,X:INX:DEY:BNE DISP6
  54. 540 DISP7 LDY #$07:LDX #$00:CLC:SED
  55. 550 DISP8 LDA BCDBUF,X:ADC BCDBUF,X:STA BCDBUF,X:INX:DEY:BNE DISP8:CLD
  56. 560 DISP9 LDA RORBUF,Y:BNE DISP4:INY:CPY LENGTH:BNE DISP9:LDX #$08
  57. 570 DISP10 DEX:BEQ DISP11:LDA RESULT,X:BEQ DISP10
  58. 580 DISP11 LDA RESULT,X:PHA:LSR:LSR:LSR:LSR:BEQ DISP12:ORA #$30:JSR SCRCHR
  59. 590 DISP12 PLA:AND #$0F:ORA #$30:JSR SCRCHR:DEX:BMI DISP14
  60. 600 DISP13 LDA RESULT,X:PHA:LSR:LSR:LSR:LSR:ORA #$30:JSR SCRCHR
  61. 610 PLA:AND #$0F:ORA #$30:JSR SCRCHR:DEX:BPL DISP13
  62. 620 DISP14 RTS
  63. 630 ;
  64. 640 TIME LDY #$03
  65. 650 TIM2 LDA TOD,Y:AND #$7F:PHA:LSR:LSR:LSR:LSR:ORA #$30:JSR SCRCHR:PLA
  66. 660 AND #$0F:ORA #$30:JSR SCRCHR:CPY #$02:BCC TIM3:LDA #$3A:.BYTE 44
  67. 670 TIM3 LDA #$2E:JSR SCRCHR:DEY:BNE TIM2:LDA TOD:AND #$0F:ORA #$30:JMP SCRCHR
  68. 680 ;
  69. 690 INIT LDA #<INTRO:LDX #>INTRO:STA CONV:STX CONV+1:LDY #$00
  70. 700 INIT2 LDA (CONV),Y:BEQ INIT3:JSR SCRCHR:INY:BNE INIT2
  71. 710 INIT3 LDA #<PRMTBL:STA CURRPRM:STA LASTPRM:LDA #>PRMTBL:STA CURRPRM+1
  72. 720 STA LASTPRM+1:LDX #$02:STX PRMTBL:DEX:STX CURRNUM:STX EULERS:STX EULERS+4
  73. 730 DEX:STX PRMTBL+1:STX CURRNUM+1:STX EULERS+1:STX EULERS+2:STX EULERS+3
  74. 740 LDA TOD+7:AND #$7F:STA TOD+7:LDY #$04:LDA #$00
  75. 750 INIT4 STA TOD,Y:DEY:BPL INIT4
  76. 760 ;
  77. 770 NEXTNUM CLC:LDA CURRNUM:ADC #$02:STA CURRNUM:BCC NEXTNUM2:INC CURRNUM+1
  78. 780 NEXTNUM2 LDA #<PRMTBL:STA CURRPRM:LDA #>PRMTBL:STA CURRPRM+1:BNE NEXTPRM2
  79. 790 ;
  80. 800 NEXTPRM LDA CURRPRM:CLC:ADC #$02:STA CURRPRM:BCC NEXTPRM2:INC CURRPRM+1
  81. 810 NEXTPRM2 JSR CLEAR:LDY #$01
  82. 820 NEXTPRM3 LDA CURRNUM,Y:STA DIVIDEND,Y:LDA (CURRPRM),Y:STA DIVISOR,Y:DEY
  83. 830 BPL NEXTPRM3:LDX #$02:JSR DIVIDE:BEQ NEXTNUM:LDX #$00:LDY #$02:SEC
  84. 840 NEXTPRM4 LDA DIVISOR,X:SBC QUOTIENT,X:INX:DEY:BNE NEXTPRM4:BCC NEXTPRM
  85. 850 ;
  86. 860 NEWPRM CLC:LDA LASTPRM:ADC #$02:STA LASTPRM:BCC NEWPRM2:INC LASTPRM+1
  87. 870 NEWPRM2 LDY #$01
  88. 880 NEWPRM3 LDA CURRNUM,Y:STA (LASTPRM),Y:DEY:BPL NEWPRM3:LDA #$0D:JSR SCRCHR
  89. 890 LDA #$91:JSR SCRCHR:LDY #$02:LDA LASTPRM:LDX LASTPRM+1:JSR DISPLAY
  90. 900 JSR CLEAR:LDX #$04
  91. 910 ;
  92. 920 EULER LDA EULERS,X:STA DIVIDEND,X:DEX:BPL EULER:LDY #$01
  93. 930 EULER2 LDA (LASTPRM),Y:STA DIVISOR,Y:DEY:BPL EULER2
  94. 940 LDX #$05:JSR DIVIDE:BNE EULER5
  95. 950 LDA #$2A:JSR SCRCHR:LDY LENGTH:LDA #<QUOTIENT:LDX #>QUOTIENT:JSR DISPLAY
  96. 960 LDA #$3D:JSR SCRCHR:LDY LENGTH:LDA #<EULERS:LDX #>EULERS:JSR DISPLAY
  97. 970 LDA #$20:JSR SCRCHR:JSR TIME
  98. 980 LDA #$0D:JSR SCRCHR:LDA #$0D:JSR SCRCHR:LDX #$04
  99. 990 EULER3 LDA QUOTIENT,X:STA EULERS,X:DEX:BPL EULER3
  100. 1000 EULER4 JMP NEXTNUM
  101. 1010 EULER5 LDX #$00:LDY #$05:SEC
  102. 1020 EULER6 LDA DIVISOR,X:SBC QUOTIENT,X:INX:DEY:BNE EULER6:BCC EULER4
  103. 1030 LDA #$0D:JSR SCRCHR:LDA #$91:JSR SCRCHR
  104. 1040 LDY #$05:LDA #<EULERS:LDX #>EULERS:JSR DISPLAY
  105. 1050 LDA #<PRIME:STA CONV:LDA #>PRIME:STA CONV+1:LDY #$00
  106. 1060 EULER7 LDA (CONV),Y:BEQ EULER8:JSR SCRCHR:INY:BNE EULER7
  107. 1070 EULER8 JMP TIME
  108. 1080 ;
  109. 1090 PRMTBL .BYTE 0 0 0
  110. 1100 ;
  111. 1110 .END EULER'S
  112.