home *** CD-ROM | disk | FTP | other *** search
- 10 * = $0801
- 20 ;EULER'S
- 30 ;P
- 40 .S
- 50 .D FACTR
- 60 ;
- 70 CURRPRM = $3F
- 80 LASTPRM = $41
- 90 CURRNUM = $43
- 100 EULERS = $5A
- 110 DIVISOR = $5F
- 120 REMAINDER = $64
- 130 QUOTIENT = $69
- 140 DIVIDEND = $6E
- 150 LENGTH = $8B
- 160 SHIFT = $8C
- 170 CONV = $8D
- 180 TOD = $DC08
- 190 SCRCHR = $E716
- 200 ;
- 210 START .BYTE 11 8 0 0 158:.BYTE "2061":.BYTE 0 0 0
- 220 JMP INIT
- 230 INTRO .BYTE "[147][198]OR [197]ULER'S [198]ORMULA M=1+2^(2^N),":.BYTE 13
- 240 .BYTE "WHEN N=5 THEN M=4294967297, WHICH":.BYTE 13
- 250 .BYTE "IS THE PRODUCT OF TWO PRIMES":.BYTE 58 13 17 0
- 260 PRIME .BYTE " IS PRIME. ":.BYTE 0
- 270 RORBUF .BYTE 0 0 0 0 0
- 280 BCDBUF .BYTE 0 0 0 0 0 0 0 0
- 290 RESULT .BYTE 0 0 0 0 0 0 0 0
- 300 ;
- 310 DIVIDE STX LENGTH:TXA:ASL:ASL:ASL:STA SHIFT
- 320 DIVIDE2 LDX #$00:LDY LENGTH:CLC
- 330 DIVIDE3 ROL DIVIDEND,X:INX:DEY:BNE DIVIDE3:LDX #$00:LDY LENGTH
- 340 DIVIDE4 ROL REMAINDER,X:INX:DEY:BNE DIVIDE4:LDX #$00:LDY LENGTH:SEC
- 350 DIVIDE5 LDA REMAINDER,X:SBC DIVISOR,X:INX:DEY:BNE DIVIDE5:BCC DIVIDE7
- 360 LDX #$00:LDY LENGTH:SEC
- 370 DIVIDE6 LDA REMAINDER,X:SBC DIVISOR,X:STA REMAINDER,X:INX:DEY:BNE DIVIDE6
- 380 DIVIDE7 LDX #$00:LDY LENGTH
- 390 DIVIDE8 ROL QUOTIENT,X:INX:DEY:BNE DIVIDE8:DEC SHIFT:BNE DIVIDE2
- 400 LDA #$00:LDX LENGTH:DEX:BEQ DIVIDE10
- 410 DIVIDE9 ORA REMAINDER,X:DEX:BNE DIVIDE9
- 420 DIVIDE10 ORA REMAINDER,X:RTS
- 430 ;
- 440 CLEAR LDX #$13:LDA #$00
- 450 CLEAR2 STA DIVISOR,X:DEX:BPL CLEAR2:RTS
- 460 ;
- 470 DISPLAY STA CONV:STX CONV+1:TYA:ASL:ASL:ASL:STA SHIFT:STY LENGTH
- 480 LDX #$14:LDA #$00
- 490 DISP2 STA RORBUF,X:DEX:BPL DISP2:LDY LENGTH:DEY
- 500 DISP3 LDA (CONV),Y:STA RORBUF,Y:DEY:BPL DISP3:LDA #$01:STA BCDBUF
- 510 DISP4 LDX LENGTH:DEX:CLC
- 520 DISP5 ROR RORBUF,X:DEX:BPL DISP5:BCC DISP7:LDY #$07:LDX #$00:CLC:SED
- 530 DISP6 LDA RESULT,X:ADC BCDBUF,X:STA RESULT,X:INX:DEY:BNE DISP6
- 540 DISP7 LDY #$07:LDX #$00:CLC:SED
- 550 DISP8 LDA BCDBUF,X:ADC BCDBUF,X:STA BCDBUF,X:INX:DEY:BNE DISP8:CLD
- 560 DISP9 LDA RORBUF,Y:BNE DISP4:INY:CPY LENGTH:BNE DISP9:LDX #$08
- 570 DISP10 DEX:BEQ DISP11:LDA RESULT,X:BEQ DISP10
- 580 DISP11 LDA RESULT,X:PHA:LSR:LSR:LSR:LSR:BEQ DISP12:ORA #$30:JSR SCRCHR
- 590 DISP12 PLA:AND #$0F:ORA #$30:JSR SCRCHR:DEX:BMI DISP14
- 600 DISP13 LDA RESULT,X:PHA:LSR:LSR:LSR:LSR:ORA #$30:JSR SCRCHR
- 610 PLA:AND #$0F:ORA #$30:JSR SCRCHR:DEX:BPL DISP13
- 620 DISP14 RTS
- 630 ;
- 640 TIME LDY #$03
- 650 TIM2 LDA TOD,Y:AND #$7F:PHA:LSR:LSR:LSR:LSR:ORA #$30:JSR SCRCHR:PLA
- 660 AND #$0F:ORA #$30:JSR SCRCHR:CPY #$02:BCC TIM3:LDA #$3A:.BYTE 44
- 670 TIM3 LDA #$2E:JSR SCRCHR:DEY:BNE TIM2:LDA TOD:AND #$0F:ORA #$30:JMP SCRCHR
- 680 ;
- 690 INIT LDA #<INTRO:LDX #>INTRO:STA CONV:STX CONV+1:LDY #$00
- 700 INIT2 LDA (CONV),Y:BEQ INIT3:JSR SCRCHR:INY:BNE INIT2
- 710 INIT3 LDA #<PRMTBL:STA CURRPRM:STA LASTPRM:LDA #>PRMTBL:STA CURRPRM+1
- 720 STA LASTPRM+1:LDX #$02:STX PRMTBL:DEX:STX CURRNUM:STX EULERS:STX EULERS+4
- 730 DEX:STX PRMTBL+1:STX CURRNUM+1:STX EULERS+1:STX EULERS+2:STX EULERS+3
- 740 LDA TOD+7:AND #$7F:STA TOD+7:LDY #$04:LDA #$00
- 750 INIT4 STA TOD,Y:DEY:BPL INIT4
- 760 ;
- 770 NEXTNUM CLC:LDA CURRNUM:ADC #$02:STA CURRNUM:BCC NEXTNUM2:INC CURRNUM+1
- 780 NEXTNUM2 LDA #<PRMTBL:STA CURRPRM:LDA #>PRMTBL:STA CURRPRM+1:BNE NEXTPRM2
- 790 ;
- 800 NEXTPRM LDA CURRPRM:CLC:ADC #$02:STA CURRPRM:BCC NEXTPRM2:INC CURRPRM+1
- 810 NEXTPRM2 JSR CLEAR:LDY #$01
- 820 NEXTPRM3 LDA CURRNUM,Y:STA DIVIDEND,Y:LDA (CURRPRM),Y:STA DIVISOR,Y:DEY
- 830 BPL NEXTPRM3:LDX #$02:JSR DIVIDE:BEQ NEXTNUM:LDX #$00:LDY #$02:SEC
- 840 NEXTPRM4 LDA DIVISOR,X:SBC QUOTIENT,X:INX:DEY:BNE NEXTPRM4:BCC NEXTPRM
- 850 ;
- 860 NEWPRM CLC:LDA LASTPRM:ADC #$02:STA LASTPRM:BCC NEWPRM2:INC LASTPRM+1
- 870 NEWPRM2 LDY #$01
- 880 NEWPRM3 LDA CURRNUM,Y:STA (LASTPRM),Y:DEY:BPL NEWPRM3:LDA #$0D:JSR SCRCHR
- 890 LDA #$91:JSR SCRCHR:LDY #$02:LDA LASTPRM:LDX LASTPRM+1:JSR DISPLAY
- 900 JSR CLEAR:LDX #$04
- 910 ;
- 920 EULER LDA EULERS,X:STA DIVIDEND,X:DEX:BPL EULER:LDY #$01
- 930 EULER2 LDA (LASTPRM),Y:STA DIVISOR,Y:DEY:BPL EULER2
- 940 LDX #$05:JSR DIVIDE:BNE EULER5
- 950 LDA #$2A:JSR SCRCHR:LDY LENGTH:LDA #<QUOTIENT:LDX #>QUOTIENT:JSR DISPLAY
- 960 LDA #$3D:JSR SCRCHR:LDY LENGTH:LDA #<EULERS:LDX #>EULERS:JSR DISPLAY
- 970 LDA #$20:JSR SCRCHR:JSR TIME
- 980 LDA #$0D:JSR SCRCHR:LDA #$0D:JSR SCRCHR:LDX #$04
- 990 EULER3 LDA QUOTIENT,X:STA EULERS,X:DEX:BPL EULER3
- 1000 EULER4 JMP NEXTNUM
- 1010 EULER5 LDX #$00:LDY #$05:SEC
- 1020 EULER6 LDA DIVISOR,X:SBC QUOTIENT,X:INX:DEY:BNE EULER6:BCC EULER4
- 1030 LDA #$0D:JSR SCRCHR:LDA #$91:JSR SCRCHR
- 1040 LDY #$05:LDA #<EULERS:LDX #>EULERS:JSR DISPLAY
- 1050 LDA #<PRIME:STA CONV:LDA #>PRIME:STA CONV+1:LDY #$00
- 1060 EULER7 LDA (CONV),Y:BEQ EULER8:JSR SCRCHR:INY:BNE EULER7
- 1070 EULER8 JMP TIME
- 1080 ;
- 1090 PRMTBL .BYTE 0 0 0
- 1100 ;
- 1110 .END EULER'S
-