This is a CoCo 3 version of the ASCII Mandelbrot Benchmark posted here:
https://github.com/scruss/bench64
This just adds the math patch, 6309 control, and CoCo timing code.
Runs in 12.43 minutes. Takes over 23 minutes on a C64 according to the comment on that site.
0 TIMER=0:POKE 65497,0:WIDTH80
REM GET BASIC TOPRAM POINTER, SUBTRACT SIZE OF USER CODE
1 AD=PEEK(116)*256+PEEK(117)-24
REM RESERVE MEMORY FOR USR CODE
2 CLEAR 100,AD
REM VARIABLES ERASED BY CLEAR, SO REDO AD, POKE USR CODE INTO RAM
3 AD=PEEK(116)*256+PEEK(117):FOR I=0 TO 23:READ B$:A=VAL("&H"+B$):POKE AD+I,A:NEXT
REM DEFINE USR ROUTINES
4 DEFUSR0=AD:DEFUSR1=AD+12
REM ENABLE 6309 NATIVE MODE
5 A=USR0(0)
REM INSTALL HARDWARE MULTIPLY PATCH
6 GOSUB 10000
100 REM A BASIC, ASCII MANDELBROT
110 REM
120 REM This implementation copyright (c) 2019, Gordon Henderson
130 REM
140 REM Permission to use/abuse anywhere for any purpose granted, but
150 REM it comes with no warranty whatsoever. Good luck!
160 REM
170 C$ = ".,'~=+:;[/<&?oxOX# " : REM 'Pallet' Lightest to darkest...
180 SO = 1 : REM Set to 0 if your MID$() indexes from 0.
190 MI = LEN(C$)
200 MX = 4
210 LS = -2.0
220 TP = 1.25
230 XS = 2.5
240 YS = -2.5
250 W = 64
260 H = 48
270 SX = XS / W
280 SY = YS / H
290 Q = TIME
300 FOR Y = 0 TO H
310 CY = Y * SY + TP
320 FOR X = 0 TO W
330 CX = X * SX + LS
340 ZX = 0
350 ZY = 0
360 CC = SO
370 X2 = ZX * ZX
380 Y2 = ZY * ZY
390 IF CC > MI THEN GOTO 460
400 IF (X2 + Y2) > MX THEN GOTO 460
410 T = X2 - Y2 + CX
420 ZY = 2 * ZX * ZY + CY
430 ZX = T
440 CC = CC + 1
450 GOTO 370
460 PRINT MID$(C$, CC - SO, 1);
470 NEXT
480 PRINT
490 NEXT
500 PRINT
510 PRINT "TIMER=";TIMER/60
REM DISABLE 6309 NATIVE MODE
530 A=USR1(0)
540 END
REM USR functions to enable/disable 6309 native mode
9000 DATA CC,FF,FF,10,4F,5D,26,03,11,3D,01,39,CC,FF,FF,10,4F,5D,26,03,11,3D,00,39
REM COCO3 HARDWARE MULTIPLY PATCH.
REM JUST ADD A GOSUB 10000 AT THE TOP OF YOUR CODE TO ADD IT
REM ADDRESS WE ARE STORING THE MULTIPLY PATCH IN RAM
10000 AD=VAL("&HFA0C")
REM POKE THE MULTIPLY PATCH INTO RAM.
10001 FORI=0 TO 64:READ B$:A=VAL("&H"+B$):POKE AD+I,A:NEXT
REM MAKE BASIC JUMP TO OUR MULTIPY INSTEAD OF USING IT'S CODE. $BB00 JMP $FA0C
10002 POKE VAL("&HBB02"),VAL("&H7E"):POKE VAL("&HBB03"),VAL("&HFA"):POKE VAL("&HBB04"),VAL("&H0C")
10003 RETURN
10005 DATA 32,79,E7,60,96,60,3D,ED,63,E6,60,96,5E,3D,ED,61,E6,60,96,5D
10006 DATA 3D,ED,65,E6,60,96,5F,3D,E3,62,ED,62,EC,65,E9,61,89,00,ED,60
10007 DATA EC,63,D3,15,97,16,D7,63,EC,61,D9,14,99,13,DD,14,A6,60,89,00
10008 DATA 97,13,32,67,39
My on again off again blog about whatever computer related hobby projects I happen to be working on at the moment.
Saturday, November 5, 2022
BASIC ASCII Mandelbrot Benchmark
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment