Pseudo-Random Numbers ROM Zone Finder Pro
Descripción del contenido de la página
Utilidad escrita en ZX BASIC para la Sinclair ZX Spectrum que busca en la ROM una zona de 256 octetos con el mayor número de octetos diferentes.
Etiquetas:
Este programa es una versión de Pseudo-Random Numbers ROM Zone Finder escrita en ZX BASIC. Es mi primer programa en dicho lenguaje.
Lo escribí por el gusto de empezar a familiarizarme con el compilador ZX BASIC, algo que quería hacer desde hacía tiempo.
Pantallazos
No hay ninguna diferencia entre el aspecto de este programa y el de su versión original en Sinclair BASIC, salvo el «Pro» final del nombre.
Pantalla de presentación:
Varios momentos de la búsqueda del mejor rango:
El resultado:
Código fuente
' Pseudo-Random Number ROM Zone Finder Pro
' Copyright (C) 2010 Marcos Cruz
' http://programandala.net
' License:
' http://programandala.net/license
' Written in ZX Basic (http://zxbasic.net)
' for the Sinclair ZX Spectrum.
' Compile command:
' zxb.py -tBaZ prnrzfp.bas
' 2010-04-09 First version, ported from Sinclair Basic.
' -----------------------
' Constants:
dim first as uinteger = 0 ' first ROM block address to be examined
dim last as uinteger = 16384-255: ' last ROM block address to be examined
dim maxY as ubyte = 192 ' max y graph coord in the ZX Spectrum (under ZX Basic)
dim titlePaper as ubyte = 6 ' yellow
dim blankLine as string
let blankLine = " " ' screen wide blank string
' -----------------------
' Variables:
dim y as integer
dim i as ubyte
dim n as ubyte
dim b as uinteger
dim workLine as ubyte
dim count as ubyte
dim maxCount as ubyte
dim bestZone as uinteger
dim a as uinteger
' -----------------------
' Screen
paper 7
ink 0
bright 0
flash 0
inverse 0
over 0
cls
border titlePaper
print inverse 1;"Pseudo-Random Numbers"
print inverse 1;"ROM Zone Finder Pro"
print "(C) 2010 Marcos Cruz"
print "http://programandala.net"
for i=0 TO 4
print at i,0; over 1; ink 8; paper titlePaper;blankLine;
next i
let workLine=5
print at workLine,0;
' -----------------------
' About
print "This program searches for a 256-"
print "byte zone in the ZX Spectrum ROM"
print "with the highest number of"
print "different values, in order"
print "to be used as a lookup table in"
print "a pseudo-random number generator"
print "routine in Z80 assembler."
print
print "It was written mainly for fun."
print
print "It's distributed under the terms"
print "of the Programandala License:"
print "http://programandala.net/license"
print
print "Press any key to start."
pause 0
' -----------------------
' Explore
let count=0
let maxCount=0
let bestZone=0
clearExploringScreen()
for a=first TO last
print at workLine,15;a;"-";a+255
for b=0 TO 255
let n=peek (a+b)
if not(point(n,y)) then
plot n,y
let count=count+1
end if
next b
if count>maxCount then
let maxCount=count
let bestZone=a
printBestRange()
end if
let count=0
let y=y-1
if y<0 then
clearExploringScreen()
printBestRange()
end if
next a
' -----------------------
' Result
clearWorkingSpace()
print "Finished."
print "Best range found: ";bestZone;"-";bestZone+255
print "Different values: ";maxCount
stop
' -----------------------
' Subroutines
sub clearExploringScreen
' Clear the exploring screen
clearWorkingSpace()
print "Current range:"
let y=maxY-8*(workLine+2)-2
end sub
sub printBestRange
' Print the best range so far
print at workLine+1,0;"Best so far: ";bestZone;"-";bestZone+255;" (";maxCount;")"
end sub
sub clearWorkingSpace
' Clear the working space
for i=23 TO workLine step -1
print at i,0;blankLine;
next i
print at workLine,0;
end sub