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


Descargas

Páginas relacionadas

Pseudo-Random Numbers ROM Zone Finder
Utilidad escrita en Sinclair BASIC para la Sinclair ZX Spectrum que busca en la ROM una zona de 256 octetos con el mayor número de octetos diferentes.
Números seudo-aleatorios de ocho bitios en Z80
Varias rutinas para obtener números seudo-aleatorios de ocho bitios en Z80 en una Sinclair ZX Spectrum.