Rocksolid Light

Welcome to Rocksolid Light

mail  files  register  newsreader  groups  login

Message-ID:  

"sic transit discus mundi" (From the System Administrator's Guide, by Lars Wirzenius)


computers / comp.sys.apple2 / Re: Sieve of Eratosthenes benchmark

SubjectAuthor
* Sieve of Eratosthenes benchmarkjbr...@blueshiftinc.com
`- Sieve of Eratosthenes benchmarkqkumba

1
Re: Sieve of Eratosthenes benchmark

<5d164dee-481f-4e76-b375-0cc613c94a03n@googlegroups.com>

  copy mid

https://news.novabbs.org/computers/article-flat.php?id=6233&group=comp.sys.apple2#6233

  copy link   Newsgroups: comp.sys.apple2
X-Received: by 2002:ac8:6650:0:b0:421:ace3:c98 with SMTP id j16-20020ac86650000000b00421ace30c98mr186835qtp.11.1700939400846;
Sat, 25 Nov 2023 11:10:00 -0800 (PST)
X-Received: by 2002:a17:90a:9dc5:b0:285:8364:3134 with SMTP id
x5-20020a17090a9dc500b0028583643134mr1356711pjv.5.1700939400516; Sat, 25 Nov
2023 11:10:00 -0800 (PST)
Path: i2pn2.org!rocksolid2!news.neodome.net!weretis.net!feeder8.news.weretis.net!feeder1.feed.usenet.farm!feed.usenet.farm!peer01.ams4!peer.am4.highwinds-media.com!peer02.iad!feed-me.highwinds-media.com!news.highwinds-media.com!news-out.google.com!nntp.google.com!postnews.google.com!google-groups.googlegroups.com!not-for-mail
Newsgroups: comp.sys.apple2
Date: Sat, 25 Nov 2023 11:09:59 -0800 (PST)
In-Reply-To: <a336d84c-fc7f-4816-8202-4cc53c275907@googlegroups.com>
Injection-Info: google-groups.googlegroups.com; posting-host=174.27.161.72; posting-account=tPtYigoAAABt11LZ6pFddOZA25zCDWme
NNTP-Posting-Host: 174.27.161.72
References: <4d24a021-19de-4c28-9ec8-2ecf20adcf21@googlegroups.com>
<5263449f-ffb7-4d07-9b02-2b154affdc2d@googlegroups.com> <fd1d269a-9ddf-4140-96af-c8c1267757bf@googlegroups.com>
<87e324ee-24d1-4159-9b24-b79b9433af65@googlegroups.com> <52110181-1bab-4eb9-b65c-771b0111239e@googlegroups.com>
<802c291e-3a8f-46e1-a04f-6c5b4cd11245@googlegroups.com> <2e7e5e4d-ce14-44ed-abd2-73dcbdafe6de@googlegroups.com>
<f4c83ba1-1fca-44cf-a43e-1978a4273d7b@googlegroups.com> <efbb3b79-c334-4e51-9f7e-39460e642eb4@googlegroups.com>
<d9458ca4-869f-4c67-a52f-bc83cf9e8045@googlegroups.com> <56a1815b-0ffc-4a44-8f12-e10088ddf035@googlegroups.com>
<da2817bd-5cee-42cf-8206-65bd5dc83daa@googlegroups.com> <8dceeb1b-a02a-40f5-9c1c-0ccb65cea404@googlegroups.com>
<a336d84c-fc7f-4816-8202-4cc53c275907@googlegroups.com>
User-Agent: G2/1.0
MIME-Version: 1.0
Message-ID: <5d164dee-481f-4e76-b375-0cc613c94a03n@googlegroups.com>
Subject: Re: Sieve of Eratosthenes benchmark
From: jbrooks@blueshiftinc.com (jbr...@blueshiftinc.com)
Injection-Date: Sat, 25 Nov 2023 19:10:00 +0000
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
X-Received-Bytes: 15706
 by: jbr...@blueshiftinc. - Sat, 25 Nov 2023 19:09 UTC

Here are two new versions which also display the prime numbers.

This one prints primes less than 2048. All primes will fit on one 80x24 screen:
Sieve65.2K
8100:A2 9B BD 79 81 95 39 CA D0 F8 A0 00 A2 0E A9 76
8110:20 6F 00 A9 B2 20 77 81 A9 A0 20 77 81 A0 00 A9
8120:03 84 02 C8 F8 18 D0 30 AA A5 02 69 00 85 02 8A
8130:C8 D0 25 EE 5A 81 10 20 D8 60 D8 A6 02 F0 04 8A
8140:20 65 81 A5 01 20 65 81 A9 A0 20 77 81 A5 01 F8
8150:18 69 02 B0 D3 C8 F0 DB BE 00 7C 10 F4 85 01 30
8160:D9 E8 30 10 60 85 00 4A 4A 4A 4A 20 72 81 A5 00
8170:29 0F F0 ED 09 B0 AA 4C ED FD C2 2C A6 4A 4C A6
8180:88 6C 22 CA 64 A4 CA 68 86 85 71 85 75 85 79 85
8190:7D 85 81 85 85 85 89 86 70 E8 86 74 E8 86 78 E8
81A0:86 7C E8 86 80 E8 86 84 E8 86 88 A2 0E B5 3A 99
81B0:00 7C 0A 99 01 7C 0A 99 02 7C 0A 99 03 7C 0A 99
81C0:04 7C 0A 99 05 7C 0A 99 06 7C 98 18 69 07 A8 CA
81D0:10 DB 0A 90 D6 4A A8 A5 70 49 80 AA 30 B9 A5 71
81E0:69 01 10 A5 A0 0B A2 7C A9 3C 85 CD E6 AF 2C 04
81F0:7C 10 15 86 C7 84 C0 86 BE 18 85 BD 8C 00 FF 69
8200:00 90 F7 E8 10 F1 A2 00 C8 98 C8 0A 69 00 90 DA
8210:E8 10 D7 60

This version prints primes less than $F000 (61,440), with one prime per line.
Sieve65.66K
8100:A2 9B BD 85 81 95 39 CA D0 F8 A0 00 A2 0E A9 76
8110:20 6F 00 A9 B2 20 83 81 A9 8D 20 83 81 A0 00 A9
8120:03 84 02 84 03 C8 F8 18 D0 3A AA A5 02 69 00 85
8130:02 90 03 E6 03 18 8A C8 D0 2A EE 66 81 10 25 D8
8140:60 D8 A6 03 F0 04 8A 20 80 81 A5 02 20 71 81 A5
8150:01 20 71 81 A9 8D 20 83 81 A5 01 F8 18 69 02 B0
8160:C9 C8 F0 D6 BE 00 08 10 F4 85 01 30 D4 E8 30 10
8170:60 85 00 4A 4A 4A 4A 20 7E 81 A5 00 29 0F F0 ED
8180:09 B0 AA 4C ED FD C2 2C A6 4A 4C A6 88 6C 22 CA
8190:64 A4 CA 68 86 85 71 85 75 85 79 85 7D 85 81 85
81A0:85 85 89 86 70 E8 86 74 E8 86 78 E8 86 7C E8 86
81B0:80 E8 86 84 E8 86 88 A2 0E B5 3A 99 00 08 0A 99
81C0:01 08 0A 99 02 08 0A 99 03 08 0A 99 04 08 0A 99
81D0:05 08 0A 99 06 08 98 18 69 07 A8 CA 10 DB 0A 90
81E0:D6 4A A8 A5 70 49 80 AA 30 B9 A5 71 69 01 10 A5
81F0:A0 0B A2 08 A9 3C 85 CD E6 AF 2C 04 08 10 15 86
8200:C7 84 C0 86 BE 18 85 BD 8C 00 FF 69 00 90 F7 E8
8210:10 F1 A2 00 C8 98 C8 0A 69 00 90 DA E8 10 D7 60

Below is the Merlin-16 source listing.

Enjoy,
-JB

*-------------------------------
* Sieve of Eratosthenes for Apple II
* Merlin-16 v3.5.1 assembler
* 11/25/2023 by John Brooks
*-------------------------------
* Primes less than 2048 in 276 code bytes
* 17,165 cycle prime calc (8110:4C to time)
* 75,812 cycle prime w/print (8177:60 to time)
*-------------------------------
* Primes less than 66,140 in 288 code bytes
* 913,120 cycle prime calc (8110:4C to time)
* 2,118,067 cycle prime w/print (8183:60 to time)
*-------------------------------
lst on ; Merlin assembler: generate assembly listing

org $8100 ; Code execution starts at $8100

Sieve2048 equ 1 ; 0 = 66K primes, 1 = 2K primes

ZpCodeOrg equ $3a ; zero page address where Prime calc code runs

*.................
do Sieve2048
PrimeRange equ 2048 ; check integers less than 2048 for primes
OddRange equ PrimeRange/2 ; check 1024 odd integers
Flags equ $8000-OddRange ; 1024 byte-per-odd flags array ends at $8000

BcdTmp equ $00 ; holds BCD low digit while printing high digit
NumAsBcd equ $01 ; 4-digit BCD of odd-integers during print

SpaceChar equ " " ; display a space between primes
*.................
else
PrimeRange equ $f000 ; check integers less than 66,140 for primes
OddRange equ PrimeRange/2 ; check $7800 odd integers
Flags equ $8000-OddRange ; byte-per-odd flags array at $800-$8000

BcdTmp equ $00 ; holds BCD low digit while printing high digit
NumAsBcd equ $01 ; 5-digit BCD of odd-integers during print

SpaceChar equ $8D ; display one prime per line
fin
*.................

mx %11 ; Merlin: 8-bit mem/acc, 8-bit xy regs
Sieve
ldx #SieveEnd-SieveZP+1 ; Num bytes to copy to ZP. +1 for X=0 exit
CopyToZp
lda RelocToZP-1,x
sta ZpCodeOrg-1,x
dex
bne CopyToZp

ldy #0 ; y: Flags index == 0
ldx #15-1 ; x: wheel constants index
lda #%01110110 ; initial primes = .,3,5,7,.,11,13,.
jsr SetFlag1 ; find all primes
*-------------------------------
DispPrimes
lda #"2" ; display the single even prime: 2
jsr Cout
lda #SpaceChar
jsr Cout

ldy #$00
lda #$03 ; first BCD number checked is == $0003
*.................
do Sieve2048
sty NumAsBcd+1
*.................
else
sty NumAsBcd+1
sty NumAsBcd+2
fin
*.................
iny ; y: start checking number 3, Flags index (3/2 == 1)
sed ; enable 6502 BCD mode
clc ; c=0 assumed in loop
bne DispChk ; always

DispNextBcdH
tax ; save BcdL
lda NumAsBcd+1 ; BcdH++
adc #0
sta NumAsBcd+1
*.................
do Sieve2048
txa ; restore BcdL
*.................
else
bcc DispBcd5Ok
inc NumAsBcd+2
clc
DispBcd5Ok
txa ; restore BcdL
fin
*.................
iny ; check PtrL++
bne DispChk

DispNextPtrH
inc DispChk+2 ; check PtrH++
bpl DispChk
DispExit
cld ; disable BCD mode
rts

DispBcd
cld ; disable BCD mode during Cout print
*.................
do Sieve2048
ldx NumAsBcd+1 ; set X<$80 to skip printing leading zero digits beq DispSkip00
txa ; non-zero in top two BCD digits, print them
*.................
else
ldx NumAsBcd+2 ; set X<$80 to skip printing leading zero digits
beq DispNoBcd5
txa
jsr DispDigit
DispNoBcd5
lda NumAsBcd+1
fin
*.................
jsr DispByte
DispSkip00
lda NumAsBcd ; print low two BCD digits
jsr DispByte
lda #SpaceChar ; print space
jsr Cout

lda NumAsBcd ; acc: BcdL
sed ; 6502 BCD mode enabled
clc ; loop assumes c=0

DispNext
adc #2 ; check BcdL += 2
bcs DispNextBcdH
iny ; check PtrL++
beq DispNextPtrH

DispChk ldx Flags,y ; self-mod PtrH
bpl DispNext ; branch if not prime
sta NumAsBcd ; save acc:BCD for printing
bmi DispBcd ; always

*-------------------------------
DispZero
inx ; x: > 128 if a non-zero digit has printed
bmi DispDigit
rts ; skip leading zeroes
*-------------------------------
DispByte
sta BcdTmp ; save BCD low digit
lsr ; shift BCD high to low
lsr
lsr
lsr
jsr ChkZero
lda BcdTmp ; get low digit
and #$0f
ChkZero
beq DispZero
DispDigit
ora #"0" ; make ascii 0-9
tax ; disable zero skipping for the rest of the number

Cout jmp $fded ; Apple II ROM character output routine
*-------------------------------

RelocToZP
org ZpCodeOrg
SieveZP

* wheel of primes for odd integers less than 2*3*5*7 (210 integers)
* stored as 15 * 7 bits (105 bits for the odd integers < 2*3*5*7)
Wheel210
db %11000010 ; 197,199,...,...,...,...,209,0
db %00101100 ; ...,...,187,...,191,193,...,0
db %10100110 ; 169,...,173,...,...,179,181,0
db %01001010 ; ...,157,...,...,163,...,167,0
db %01001100 ; ...,143,...,...,149,151,...,0
db %10100110 ; 127,...,131,...,...,137,139,0
db %10001000 ; 113,...,...,...,121,...,...,0
db %01101100 ; ...,101,103,...,107,109,...,0
db %00100010 ; ...,..., 89,...,...,..., 97,0
db %11001010 ; 71, 73,...,..., 79,..., 83,0
db %01100100 ; ..., 59, 61,...,..., 67,...,0
db %10100100 ; 43,..., 47,...,..., 53,...,0
db %11001010 ; 29, 31,...,..., 37,..., 41,0
db %01101000 ; ..., 17, 19,..., 23,...,...,0
db %10000110 ; 1,...,...,...,..., 11, 13,0


Click here to read the complete article
Re: Sieve of Eratosthenes benchmark

<db6d292b-6644-403a-89cc-7746a9f5c1d1n@googlegroups.com>

  copy mid

https://news.novabbs.org/computers/article-flat.php?id=6234&group=comp.sys.apple2#6234

  copy link   Newsgroups: comp.sys.apple2
X-Received: by 2002:a05:622a:3ca:b0:41c:2d56:bbf5 with SMTP id k10-20020a05622a03ca00b0041c2d56bbf5mr272854qtx.11.1700949879441;
Sat, 25 Nov 2023 14:04:39 -0800 (PST)
X-Received: by 2002:a05:6a00:806:b0:6cb:a3f0:b3a9 with SMTP id
m6-20020a056a00080600b006cba3f0b3a9mr1964374pfk.3.1700949879097; Sat, 25 Nov
2023 14:04:39 -0800 (PST)
Path: i2pn2.org!i2pn.org!usenet.blueworldhosting.com!diablo1.usenet.blueworldhosting.com!peer01.iad!feed-me.highwinds-media.com!news.highwinds-media.com!news-out.google.com!nntp.google.com!postnews.google.com!google-groups.googlegroups.com!not-for-mail
Newsgroups: comp.sys.apple2
Date: Sat, 25 Nov 2023 14:04:38 -0800 (PST)
In-Reply-To: <5d164dee-481f-4e76-b375-0cc613c94a03n@googlegroups.com>
Injection-Info: google-groups.googlegroups.com; posting-host=47.154.19.235; posting-account=bGpciwoAAACg2KT8pQMph7tnt3o_9vtu
NNTP-Posting-Host: 47.154.19.235
References: <4d24a021-19de-4c28-9ec8-2ecf20adcf21@googlegroups.com>
<5263449f-ffb7-4d07-9b02-2b154affdc2d@googlegroups.com> <fd1d269a-9ddf-4140-96af-c8c1267757bf@googlegroups.com>
<87e324ee-24d1-4159-9b24-b79b9433af65@googlegroups.com> <52110181-1bab-4eb9-b65c-771b0111239e@googlegroups.com>
<802c291e-3a8f-46e1-a04f-6c5b4cd11245@googlegroups.com> <2e7e5e4d-ce14-44ed-abd2-73dcbdafe6de@googlegroups.com>
<f4c83ba1-1fca-44cf-a43e-1978a4273d7b@googlegroups.com> <efbb3b79-c334-4e51-9f7e-39460e642eb4@googlegroups.com>
<d9458ca4-869f-4c67-a52f-bc83cf9e8045@googlegroups.com> <56a1815b-0ffc-4a44-8f12-e10088ddf035@googlegroups.com>
<da2817bd-5cee-42cf-8206-65bd5dc83daa@googlegroups.com> <8dceeb1b-a02a-40f5-9c1c-0ccb65cea404@googlegroups.com>
<a336d84c-fc7f-4816-8202-4cc53c275907@googlegroups.com> <5d164dee-481f-4e76-b375-0cc613c94a03n@googlegroups.com>
User-Agent: G2/1.0
MIME-Version: 1.0
Message-ID: <db6d292b-6644-403a-89cc-7746a9f5c1d1n@googlegroups.com>
Subject: Re: Sieve of Eratosthenes benchmark
From: peter.ferrie@gmail.com (qkumba)
Injection-Date: Sat, 25 Nov 2023 22:04:39 +0000
Content-Type: text/plain; charset="UTF-8"
X-Received-Bytes: 2263
 by: qkumba - Sat, 25 Nov 2023 22:04 UTC

ldx #SieveEnd-SieveZP+1 ; Num bytes to copy to ZP. +1 for X=0 exit
CopyToZp
lda RelocToZP-1,x
sta ZpCodeOrg-1,x
dex
bne CopyToZp

ldy #0 ; y: Flags index == 0

->

ldy #SieveEnd-SieveZP+1 ; Num bytes to copy to ZP. +1 for X=0 exit
CopyToZp
ldx RelocToZP-1,y
stx ZpCodeOrg-1,y
dey
bne CopyToZp

; ldy #0 ; y: Flags index == 0

1
server_pubkey.txt

rocksolid light 0.9.81
clearnet tor