You are on page 1of 7

Convirtiendo listados del ZX80 y ZX81 al ZX Spectrum

zx-80 integer basic


|
zx-81 fp basic
|
________zx spectrum basic________
|
|
________|________________
|
|
|
|
|
|____etc,etc
|
|
|
|
|
|
|
|
ts 2068
|
|
|
|
|
basic
|
|
ys megabasic
|
|
|
|
|
ql superbasic
|
|
|
|
|
|
tk 90 basic |
|
|
|
betabasic
|____128K basic
|
|
sam coupe basic
|
|___sea change
|
|
|___open se basic

Cuando el se desarroll el basic del ZX Spectrum, se decidi que sera una versin mejor
ada
del basic del ZX-81, convirtiendo a este ltimo en un subconjunto del Spectrum bas
ic. Debido
a ello, los listados de programas del ZX-81 se pueden teclear en el ZX Spectrum
con muy pocos
cambios, adems de poderlos mejorar de modo considerable aprovechando las ventajas
graficas
y de sonido propias del Spectrum.
A continuacin, mi coleccin de notas sobre las palabras reservadas del ZX-81 que de
ben ser
modificadas o ignoradas para que el listado Basic se pueda ejecutar en un Spectr
um:
NEWLINE / RUBOUT
equivalen a las teclas ENTER y DELETE en el ZX80 y 81. En el TS-1000 y TS-1500 f
ueron renombradas
justamente como "enter" y "delete" que es como figuran en el ZX Spectrum.
** (to power)
es el signo de elevacin a potencia, debe ser reemplazado por ^.
Ejemplo: 2**4 (zx-80 y 81) <-> 2^4 (spectrum)
"" (quote image)
no confundir con el signo de cadena vaca o nula. Es un signo especial del ZX-81 q
ue permite
imprimir una " dentro de una cadena de texto. Inexistente en el Spectrum, se deb
e tipear dos
veces el signo ".

Ejemplo del manual del Spectrum: PRINT " No has acabado ""el Quijote"" todavia?
"
RAND
en el ZX-81 equivale a RANDOMIZE en el Spectrum (en el ZX-80 es RAND en la tecla
y RANDOMISE
en la pantalla).
CONT
breve por CONTINUE (en el ZX-80 es CONT en el teclado pero aparece completo en p
antalla).
GOTO / GOSUB
sin espacios en el ZX-81, (solo se ven as en el teclado del ZX-80 pero imprime GO
TO y GO SUB
igual que su sucesor el Spectrum).
FAST / SLOW
No existen en el Spectrum, ya que ste funciona a la velocidad del ZX-81 en modo rp
ido (FAST)
con la visualizacin fija en modo lento (SLOW), deben ser simplemente ignoradas.
Aunque el ZX-81 carece de sonido, SLOW y FAST pueden ser usadas para generar cur
iosos efectos
de sonido.
SCROLL
esta orden desplaza la pantalla una lnea hacia arriba y dejando una lnea vaca al fo
ndo.
El Spectrum, en vez de tener esta instruccin, hace la pregunta SCROLL? cada vez q
ue se llena
la pantalla, pero, si se desea convertirla cada vez que se la encuentre en un li
stado, debe
hacerse lo sigte:
RANDOMlZE USR 3582 (no se aconseja si el programa requiere de nmeros aleatorios)
LET scroll = USR 3582 (es ms claro de usar)
PLOT / UNPLOT
Inexistentes en el ZX-80.
El ZX-81 puede trabajar con pxeles (picture elements), siendo la pantalla de 22 l
ineas por
32 columnas, lo cual nos da 704 posiciones de caracteres y cada una de estas con
tiene a su
vez 4 pixeles, dndonos la resolucin de pantalla de 64x44.
PLOT x,y dibuja un punto en las coordenadas de x (0-63), y (0-43).
UNPLOT x,y deshace el trazado por PLOT.
Tanto PLOT como UNPLOT afectan la posicin de PRINT.
Ejemplo (del manual del ZX-81):
10 PLOT 21,21
20 PRINT "HEAVY QUOTES"
30 PLOT 46,21
El Spectrum trabaja con una resolucin mayor de 256x192 y el PLOT ya no afecta a P
RINT.
En lugar de UNPLOT existe PLOT OVER 1;x,y. En ningun caso hay equivalencia real.
Una solucin ofrecida por algunas revistas(**) era:
PRINT AT 2l-Y/2,31-X/2;x$
donde x$=CHR$ 136 o del 129 al 146 (para PLOT) y x$=" " o CHR$ 128 (para UNPLOT)
.

En la prctica es mucho mejor otra alternativa que use PLOT y DRAW, as que...
Para ello basta con definir la subrutina sigte:
8900 REM zx81 plot
8902 PLOT x*4,y*4: DRAW 3,0: DRAW 0,3: DRAW -3,0: DRAW 0,-3: DRAW 3,3: DRAW -3,0
: DRAW 3,-3
8904 RETURN
Ejemplo de su uso:
10 PLOT 0,0: PLOT 63,43 (en zx-81) - reemplazar por:
10 let x=0: let y=0: gosub 8900: let x=63: let y=43: gosub 8900
para replicar unplot basta con aadir OVER 1 de este modo:
8910 REM zx81 unplot
8912 OVER 1: gosub 8900: OVER 0
8914 RETURN
Ejemplo: 10 let x=0: let y=0: gosub 8910
En caso de tener BetaBasic 1.8, se reemplaza todo por un procedimiento:
8900 DEFPROC plot81
8902 PLOT x*4,y*4: DRAW 3,0: DRAW 0,3: DRAW -3,0: DRAW 0,-3: DRAW 3,3: DRAW -3,0
: DRAW 3,-3
8904 ENDPROC
con eso la lnea 10 se convierte en:
10 let x=0: let y=0: proc plot81: let x=63: let y=43: proc plot81
Si se tiene BetaBasic 3.xx o el 4:
9600 DEFPROC zx,n
9601 if n=81 then keywords 0: else keywords 3
9602 ENDPROC
9603 DEFPROC zplot,x,y
9604 PLOT x*4,(y+.7)*4;CHR$ 130
9605 ENDPROC
9606 DEFPROC unplot,x,y
9607 PLOT OVER 1;x*4,(y+.7)*4;CHR$ 130
9608 ENDPROC
Para probar esta librera, hacer:
10 zx 81: zplot 0,0: zplot 63,43: pause 0
Con BetaBasic 3.xx y 4 podemos modificar las subrutinas originales para que se l
ean as:
8900 DEFPROC zplot,x,y,o: DEFAULT o=0
8902 PLOT OVER o;x*4,y*4: DRAW 3,0: DRAW 0,3: DRAW -3,0: DRAW 0,-3:
DRAW 3,3: DRAW -3,0: DRAW 3,-3
8904 ENDPROC
8906 DEFPROC unplot,x,y
8908 zplot x,y,1
8904 ENDPROC
Debido a que el PLOT del Spectrum no afecta a la posicin de PRINT, si se desea re
plicar el
efecto del zx81, habra que aadir al listado:
IF x<>63 and y<>0 THEN PRINT AT 2l-Y/2,31-X/2; OVER 1;"(2 espacios)";
El IF es porque en el zx81, PLOT 63,0 seguido de PRINT genera un error si no se
hace
previamente SCROLL, mientras que en el Spectrum se desplazara automticamente una ln
ea.
POKE 16418,0
permite imprimir en las dos ltimas lneas de la pantalla del zx-81, modificando la
variable
del sistema DF SZ. De este modo en vez del lmite de 22 lineas, se llega a 24, per
mitindole

a uno hacer PRINT AT 23,0. Es mejor usar INKEY$ en vez de INPUT para leer datos
del teclado,
ya que de lo contrario se debe pokear de vuelta a su valor original 2, o la maqu
ina se cuelga.
Si se la encuentra en un listado, debe ser omitida, ya que en el Spectrum su equ
ivalente es
23659, pero cualquier intento de pokearlo causa un crash del sistema.
En el caso de listados conteniendo cdigo mquina es ms dificil, ya que habra que busc
ar
si las llamadas a la ROM del ZX-81 tienen o no, su equivalente en la ROM del Spe
ctrum.
Por ejemplo la sigte linea en ensamblador (*):
16514 6
ld b, N
16515 n
16516 205
call 0a2c
llamada a CLS en el zx-81
16517 44
es 68 y
16518 10
14 en el Spectrum
Para usarla hacer POKE 16514,24-n y ejecutarla con RAND USR 16514. En el Spectru
m se la debe
relocalizar a cualquier parte de la RAM o primera lnera 1 REM.
(*) publicada en COMPUTE jun.83 ed.37 vol.5 n.6 p.234
POKE Y*33+X+1+PEEK(16396)+PEEK(16397)*256,n (**)
donde: Y = linea, X = columna,
n= cdigos 0-63 y 128-192
El zx80 y 81 pueden imprimir pokeando directamente en la pantalla de modo simila
r a como
lo hace el VIC-20. Ya que no se puede replicar este pokeo en Spectrum, debe ser
reemplazada
por PRINT AT y,x;n$.
Para leer la pantalla en el zx80 y 81, se teclea:
PEEK(PEEK 16396+256*PEEK 16397+1+x+33*y)
otro modo de leer la pantalla en el zx81 es:
PEEK(PEEK 16398+PEEK 16399*256) - devuelve el codigo de la ultima posici
on AT
en el Spectrum se debe reemplazar con SCREEN$ (y,x).
POKE 16388,x-256*INT(x/256): POKE 16389,INT(x/256) (**)
Crea un rea de seguridad RAMTOP en el zx81 a partir de "x" y equivale al Spectrum
CLEAR x.
POKE 16510,0 (**)
Crea lnea 0 en el zx81 y su equivalente es 23756 en un Spectrum sin IF1/Microdriv
e.
Variable Frames zx81 (**):
POKE 16436,255
LET t=(65535-PEEK 16436+256*PEEK 16437)/50
en el Spectrum teclear:
POKE 23672,0:POKE 23673,0
LET t=(PEEK 23672+256*PEEK 232673)/50
en ambos, la primera lnea inicializa el reloj y t = tiempo en segundos luego del
inicio.
El contador solo es por 10 min.
(**) Nota: estos POKEs fueron publicados en la revista ZX ao II 15 feb.1985 y
K64 n.14 mayo 1986, pero ambas revistas lo hicieron con errores de tipeo.

Pasamos a ver ahora el ZX-80, su basic, el Sinclair Basic original que lo empez t
odo,
fue diseado en base al Basic mnimo estandar 1978 de ANSI. El Basic del zx80 es un
caso
especial, ya que usa BASIC de enteros (de modo muy similar al APPLE I), en vez d
e con
coma flotante para fines aritmeticos. Otra caracterstica es que solamente sus com
andos
y sentencias se obtienen directamente pulsando una sola tecla, pero las funcione
s conforman
una librera a la que se accede tipeando letra a letra. Por ejemplo PRINT se obtie
ne
tecleando solo la "O", mientras que RND(5) se teclea letra por letra ms los parnte
sis.
A continuacin apuntes extraidos del artculo CONVERSION publicado en SINCLAIR USER
#1:
LET X= RND(10)
en el ZX-81 y Spectrum se debe reemplazar por: LET X= INT(RND*10)+ 1
TL$ (truncate left)
la nica funcin de cadena del zx80, devuelve el texto menos su primer caracter. En
el
zx81 y Spectrum usar: c$ (2 TO). Ejemplo:
10 LET A$="HELLO"
20 Print A$
30 LET A$=TL$(A$)
40 IF A$ > "" THEN GO T0 20
SO PRINT "GOODBYE"
Se debe reescribir:
10 LET A$="HELLO"
20 PRINT A$
30 LET A$=A$(2 TO)
40 IF A$ > "" THEN GOT0 20
50 PRINT "GOODBYE"
POKE 16414, n
genera una pausa de espera 'n', pero en el zx81 y Spectrum es: PAUSE 255-n
Direcciones equivalentes PEEK/POKE en una linea 1 REMxxxx...
zxz80
zx81
Spectrum (sin IF1/MDR)
16426 - 16457 <-> 16513 - 16544 <-> 23758 - ...
variables del sistema:
zx80
zx81
18384 16384 ERR NR
16385 16385 FLAGS
16386 16391 PPC
16387 16392
16388 sin equivalente
16389 sin equivalente
16390 16394 E PPC
16391 16395
16392 16400 VARS
16393 16401
16394 16404 E LINE

Spectrum
23610
23611
23621
23622
23625
23626
23627
23628
23641

16395
16396
16397
16398
16399
16400
16401
16402
16403
16404
16405
16406
16407
16408
16409
16410
16411
16412
16413
16414
16415
16416
16417
16418
16419
16420
16421
16422
16423
16424
16425
16426
16427

16405
23642
16396 D FILE sin equivalente
16397
sin equivalente
sin equivalente
16412 STKEND 23653
16413
23654
16418 DF SZ 23659
16419 S TOP 23660
16420
23661
16408 X PTR 23647
16409
23648
16427 OLDPPC 23662
16428
23663
16429 FLAGX 23665
16432 T ADDR 23668
16433
23669
16434 SEED
23670
16435
23671
16436 FRAMES 23672
16437
23673
sin equivalente
sin equivalente
sin equivalente
sin equivalente
sin equivalente
sin equivalente
16406 CH ADD 23645
16407
23646
16409
16410
16413
16414
16393 VERSN sin equivalente
16398 DF CC 23684
16399
23685
16402 DEST
23629
16403
23630
16410 STKBOT 23651
16411
23652
16414 BREG
23655
16415 MEM
23656
16416
23657
16417 no usada
16421 LAST K 23560
16422
23561
16423 (bota el estado del teclado del zx81)
16424 MARGIN sin equivalente
16425 NXTLIN 23637
16426
23638
16430 STRLEN 23666
16431
23667
16438 COORDS 23677
16439
23678
16440 PR CC 23680
16441 S POSN 23688 (col.PRINT)
16442
23689 (lin.PRINT)
16443 CDFLAG sin equivalente
16444 PRBUFF (S33 = 32 car. + newline)
23296 - 23552

16477
16507
16508

MEMBOT (area del calculador N30)


23698 (N30)
no usada
no usada

(c)2014
zx_if1@hotmail.com

You might also like