Spectrum_PLUS_Manual_de_Usuario-MICRO_WORLD

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 96

i Spectrum

Manual
del usuario

/MICRO
Pag. 1
PROLOGO

M u c h a s p e r s o n a s t i e n e n d e l o s o r d e n a d o r e s la idea de que son


unas máquinas misteriosas, casi mágicas, cuyo complicadísimo
funcionamiento solo puede ser comprendido por mentes
p r i v i l e g i a d a s ; e n c u a n t o a la p r o g r a m a c i ó n d e l o s m i s m o s , p u e d e n
llegar a c o n s i d e r a r l a m á s c o m o b r u j e r í a q u e como un ejercicio
intelectual .

P o r o t r o lado, h a y b a s t a n t e g e n t e q u e o p i n a q u e l o s ordenadores
personales no son realmente útiles y que son m á s unos juguetes
caros que otra cosa.

Por supuesto, tanto unos como otros están equivocados» el


funcionamiento de un ordenador e s algo fácilmente comprensible,
y a q u e , al f i n d e al c a b o , es un funcionamiento LOGICO. En
un o r d e n a d o r s e r e a l i z a n , s i m p l e m e n t e , u n a s e r i e d e operaciones
e n un o r d e n d e t e r m i n a d o , c o n la v e n t a j a d e q u e e s t o se efectúa
m u c h í s i m o m a s r á p i d o . El p r o g r a m a d o r n o h a c e m a s q u e i n d i c a r l e a
la c o m p u t a d o r a l a s o p e r a c i o n e s q u e h a d e r e a l i z a r y en q u e o r d e n
deben realizarse. Por supuesto, poder hacer esto implica un
p e r i o d o d e a p r e n d i z a j e ; al o r d e n a d o r hay que hablarle en su
lengua y aprenderla n o e s m a s que u n a cuestión de paciencia e
interés.

E s t e manual h a s i d o c o n f e c c i o n a d o pensando e n aquellos que se


i n i c i a n e n el m u n d o d e la i n f o r m á t i c a p e r s o n a l ; si V d . e s u n o d e
ellos, esperamos que s u lectura le a y u d e a entender mejor el
o r d e n a d o r q u e h a a d q u i r i d o . El l i b r o le p u e d e parecer un poco
"ladrillo", pero hemos preferido confeccionar una auténtica
a y u d a p a r a el u s u a r i o a n t e s q u e u n b o n j t o f o l l e t o a t o d o c o l o r .

S i por el c o n t r a r i o , y a e s t a i n i c i a d o e n la p r o g r a m a c i ó n , puede
utilizarlo como libro de consulta y !!quien sabe!! quiza
e n c u e n t r e en s u s p a g i n a s a l g ú n d a t o q u e d e s c o n o c í a .

Al f i n a l del l i b r o s e encuentra una lista con el juego de


c a r a c t e r e s q u e u t i l i z a el S p e c t r u m , q u e le s e r a m u y útil cuando
realice s u s propios programas. Asimismo, pruebe a ejecutar los
p r o g r a m a s e j e m p l o i n c l u i d o s en l o s d i f e r e n t e s c a p i t u l e s , y lo
que e s mas importante, atrévase a modificarlos. N o tenga miedo
d e e x p e r i m e n t a r c o n s u S p e c t r u m ; n o lo e s t r o p e a r á . Cuantos más
p r o g r a m a s p r o p i o s r e a l i c e , m á s a v a n z a r á e n el c o n o c i m i e n t o d e l a
p r o g r a m a c i ó n.
Pag. 2

L a b i b l i o t e c a d e p r o g r a m a s c o m e r c i a l e s p a r a el Z X S p e c t r u m e s l a
m a s e x t e n s a del mercado: existen mas de 10.000 títulos que
abarcan desde los j u e g o s d e t o d o tipo a c o m p l e t o s programas de
gestión, cálculo, cientííicos, educativos, etc. Como ejemplo,
diremos que este libro ha s i d o escrito utilizando un Spectrum
c o n un p r o g r a m a d e p r o c e s o d e t e x t o s .

A m e d i d a q u e v a y a a d q u i r i e n d o c o n o c i m i e n t o s, p o d r a c o m p r o b a r q u e
las posibilidades d e su Spectrum están mas allá del simple
j u e g o ; e s p e r a m o s q u e s u n u e v o o r d e n a d o r le d e l a s s a t i s f a c c i o n e s
q u e e s p e r a y r e c u e r d e q u e s o l o e x i s t e u n l i m i t e p a r a lo q u e Vd .
puede realizar: su imaginación.
Pag. 3

INTRODUCCION

COMO CONECTAR S U S P E C T R U M

Efectúe las siguientes operaciones:

- Conecte 1a • f u e n t e d e alimentación (que se suministra con e1


equipo) a 1 Spectrum .

- Conecte e 1 c ab le de r• e d de la -fuente de alimentación a la red


d e . 2 2 0 v o 11 i o s .

- Conecte el Spectrum al televisor mediante el cable adjunto, un


extremo al ordenador y el otro a la conexión de antena del
t e 1e v i s o r .

- Encienda el televisor y sintonícelo aproximadamente en el


canal 36 de UHF hasta que aparezca claramente en pantalla el
mensaje "1982 Sinclair Research Ltd.".

- Baje el volumen del televisor al mí’nimo.

- Si el televisor no reproduce bién los colores, retoque la


sintonía del mismo.

- Para conectar el cassette , conecte el enchufe EAR del Spec t r um


con la salida de auriculares o altavoz externo del cassette, y
la toma MIC del Spectrum a la entrada de micrófono de la
grabadora, utilizando los cables que vienen incluidos con el
equ i po .

No todos los cassettes sirven para -funcionar con el ordenador ;


lea el capítulo correspondiente del libro para saber cuales son
los idóneos.
Pa.aa.-4

C A P I T U L O .1

EL TECLADO DEL SPECTRUM*

El t e c l a d o del S p e c t r u m * p o s e e 1 7 t e c l a s m a s q u e el del S p e c t r u m
normal, y a que muchas de l a s -Funciones que necesitan de la
pulsación d e d o s teclas simultáneamente poseen tecla propia en e
S p e c t r u m * . Asi p u é s s e d i s p o n e d e 5 7 t e c l a s (aparte la barra
e s p a d a d o r a ) q u e p e r m i t e n el m a n e j o d e m á s d e 2 0 0 l e t r a s , s i g n o s
y comandos. Esto puede hacer pensar que su manejo es muy
complicado, pero no e s así.

Cada tecla tiene cinco Funciones distintas; dentro d e la misma


hay escrita u n a palabra c l a v e BASIC y debajo de esa palabra
puede escontrarse o bien o t r a palabra o un símbolo. En la parte
m a s i n f e r i o r d e la t e c l a s e e n c u e n t r a l a l e t r a c o r r e s p o n d i e n t e a
la m i s m a .

E n c i m a d e l a t e c l a ( f u e r a d e la p a r t e s o b r e s a l i e n t e d e l a m i s m a )
se hallan escritas d o s palabras clave ( o u n a palabra clave y un
símbolo), A todas estas funciones se puede acceder, bién
pulsando las t e c l a s d e a y u d a C A P S S H I F T y S Y M B O L S H I F T (que se
h a l l a n d u p l i c a d a s a a m b o s l a d o s del t e c l a d o ) o b i é n c a m b i a n d o el
" m o d o " d e o p e r a c i ó n e n q u e s e e n c u e n t r a la m á q u i n a . E s t o s modos
s ó n:

El m o d o “ K " ¡ E s t e m o d o s e a c t i v a a u t o m á t i c a m e n t e al p r i n c i p i o d e
u n a linea d e programa y n o s e desactiva hasta que
n o se haya introducido una palabra clave. También
se conecta después d e una sentencia THEN o de un
s i g n o ": ■. E n e s t e m o d o , al pulsar una tecla se
o b t i e n e la p a l a b r a c l a v e BASIC e s c r i t a en b l a n c o e n
la parte superior de la tecla (dentro del
saliente). Inmediatamente después d e la impresión
del comando c o r r e s p o n d ie nt e se activa
a u t o m á t i c a m e n t e el m o d o " L " .

El m o d o " L " : Al p u l s a r u n a t e c l a , s e o b t i e n e l a l e t r a m i n ú s c u l a
c o r r e s p o n d i e n t e. S i p u l s a m o s C A P S SHIFT al mismo
tiempo, o b t e n d r e m o s la m i s m a letra, p e r o m a y ú s c u l a .
P o r o t r o lado, si p r e s i o n a m o s S Y M B O L SHIFT y la
tecla simultáneamente, obtendremos el símbolo o
p a l a b r a e s c r i t o e n l a p a r t e c e n t r a l d e la t e c l a .
El m o d o * C “ ¡ S e a c t i v a p u l s a n d o l a t e c l a C A P S L O C K s i t u a d a e n l a
p a r t e i n f e r i o r i z q u i e r d a del t e c l a d o . E n e s t e m o d o ,
todas las letras que s e impriman serán mayúsculas.
Los signos y palabras clave escritas en el centro
d e las t e c l a s s e obtienen d e la m i s m a m a n e r a q u e e n
el m o d o " L " .

El m o d o " G " ! S e o b t i e n e p u l s a n d o la t e c l a G R A P H q u e s e e n c u e n t r a
e n la p a r t e superior izquierda del teclado. Al
activar este modo, podran obtenerse los símbolos
gráficos impresos en las teclas numéricas y
aquellos caracteres gráficos que hayamos creado
nosotros mismos, situados en las t e c l a s d e la A a
la U.

El m o d o - E " : S e a c t i v a p u l s a n d o la t e c l a E X T E N D M O D E situada a
la izquierda del teclado. De esta manera tendrá
a c c e s o a las p a l a b r a s y s i g n o s s i t u a d o s f u e r a del
saliente de las teclas. Para obtener la palabra
escrita encima, simplemente pulse la tecla
c o r r e s p o n d i e n t e. S i d e s e a i m p r i m i r la p a l a b r a d e l a
parte inferior, debe pulsar SYMBOL S H I F T al mismo
t i e m p o . U n a v e z q u e la palabra o signo ha sido
i m p r e s o , s e v u e l v e a u t o m á t i c a m e n t e al m o d o " L “ .

P a r a p u l s a r d o s t e c l a s al m i s m o t i e m p o , lo m e j o r e s u t i l i z a r el
s i g u i e n t e m é t o d o : S e p u l s a la tecla SHIFT que corresponda y
MANTENIENDOLA PULSADA se aprieta la tecla deseada. Esto le
evitará muchos fallos al teclear. Tenga en cuenta que si
mantiene pulsada una tecla durante más d e d o s segundos, empezará
la a u t o r r e p e t i c i ó n del c a r á c t e r c o r r e s p o n d i e n t e.

INTRODUCCION Y EDICION DE LINEAS

T o d o lo q u e v a y a t e c l e a n d o a p a r e c e r á e n la p a r t e i n f e r i o r d e la
pantalla. P o r d e l a n t e d e lo q u e v á e s c r i b i e n d o e s t á situado un
cursor e n f o r m a d e c u a d r a d o c e n t e l l e a n t e que le indica el modo
e n q u e s e e n c u e n t r a la m a q u i n a . S i p u l s a D E L E T E ( s i t u a d a en la
prte superior izquierda del teclado) el cursor retrocederá,
borrando la ultima letra o comando que se encuentre
i n m e d i a t a m e n t e d e t r á s del m i s m o . U s a n d o las teclas de cursor
( m a r c a d a s con f l e c h a s en la p a r t e inferior del teclado) podra
d e s p l a z a r el c u r s o r a lo l a r g o d e la l i n e a s i n b o r r a r n a d a . P a r a
borrar la linea c o m p l e t a p u l s e EDIT (está situada debajo de
G R A P H ).
Pag.6

Si lo q u e e s t a t e c l e a n d o e s u n a linea de programa (lleva un


n ú m e r o al p r i n c i p i o ) , al p u l s a r E N T E R l a l i n e a p a s a r á a la p a r t e
s u p e r i o r d e la p a n t a l l a . Al m i s m o t i e m p o , entre el numero de
l i n e a y la p r i m e r a s e n t e n c i a a p a r e c e r á el signo . A este
s i g n o s e le d e n o m i n a " c u r s o r d e p r o g r a m a " y la linea que lo
lleva s e denomina "linea en curso". A m e d i d a q u e vaya tecleando
e i n t r o d u c i e n d o l i n e a s , e s t a s p a s a r á n a la p a r t e s u p e r i o r d e la
p a n t a l l a , s i t u á n d o s e e n el o r d e n d e t e r m i n a d o p o r s u s n ú m e r o s de
1 i n e a.

El c u r s o r d e p r o g r a m a e s t a r á s i t u a d o n o r m a l m e n t e en la última
linea introducida. P u e d e colocar e s t e cursor en la linea que
q u i e r a u t i l i z a n d o l a s t e c l a s d e c u r s o r P u l s a n d o E D I T la l i n e a e n
c u r s o a p a r e c e r á en l a p a r t e i n f e r i o r d e la p a n t a l l a y p o d r á ser
m o d i f i c a d a d e la m a n e r a a n t e r i o r m e n t e m e n c i o n a d a .

Aparte d e las teclas mencionadas hasta ahora, existe tecla


independiente para los s i g n o s > " , .

PRESENTACION VISUAL

L a p a n t a l l a del t e l e v i s o r t i e n e 2 4 l i n e a s y 3 2 c o l u m n a s ; l a s 2 2
primeras lineas muestran los listados d e los programas o los
e f e c t o s d e la e j e c u c i ó n d e l o s jnismos.

C u a n d o la i m p r e s i ó n s u p e r a l a s 22 lineas, todo el texto se


desplaza u n a linea hacia arriba; antes de que desaparezca la
p r i m e r a l i n e a p o r la p a r t e s u p e r i o r , a p a r e c e en la p a r t e b a j a el
m e n s a j e " s c r o l l ? " . S i s e p u l s a n , S P A C E o S T O P el texto no se
desplaza hacia arriba y aparece un mensaje d e error "D BREAK
CONT repeats". Cualquier otra tecla hace que continue el
desplazamiento vertical.

Las dos ultimas lineas s e utilizan para introducción de lineas


de programa y comandos directos, asi como para mostrar los
mensajes d e error. Ocasionalmente s e puede escribir en ellas.
Pag. 7

CAPITULO 2

EL BASIC

El a u t é n t i c o c e r e b r o del o r d e n a d o r e s el m i c r o p r o c e s a d o r o CPU
(abreviatura d e Central Processing Unit - Unidad Central de
Proceso). L a CPU se encarga de recibir y procesar los datos y d e
ejecutar las o p e r a c i o n e s c o r respond ie n t e s en función de los
m i s m o s.

L o s d a t o s llegan a la C P U en f o r m a de impulsos eléctricos de


-frecuencia y d u r a c i ó n v a r i a b l e . El m ic r o p r o c e s a d o r interpreta
e s o s i m p u l s o s c o m o d a t o s . P o r e j e m p l o , si en un momento dado
r e c i b e u n impulso, lo interpreta c o m o un 1, y si no recibe
impulso lo interpreta como un O. Estas agrupaciones de ceros y
u n o s s o n i n t e r p r e t a d a s c o m o n ú m e r o s p o r el m i c r o p r o c e s a d o r , que
d e esta manera recibe los d a t o s en -forma numérica. Esto
i m p l i c a q u e t o d a la i n f o r m a c i ó n d e b e s e r c o d i f i c a d a e n -forma de
números, y e s o s números en -forma de agrupaciones de unos y
c e r o s . A e s t e s i s t e m a d e n u m e r a c i ó n s e le d e n o m i n a B I N A R I O .

S e l l a m a " l e n g u a j e m á q u i n a " a l a m a n e r a q u e t i e n e el procesador


d e interpretar los impulsos que le llegan. Por supuesto que
c o d i f i c a r t o d a s l a s i n s t r u c c i o n e s d e n u e s t r o s p r o g r a m a s e n -forma
de números binarios sería tediosa y difícil, por no decir
imposible.

E s p o r e l l o q u e s e i n v e n t a r o n l o s l e n g u a j e s d e p r o g r a m a c i ó n. En
realidad éstos són programas en lenguaje máquina, que se
e n c a r g a n d e la c o d i f i c a c i ó n d e l a s i n s t r u c c i o n e s que le damos
p a r a q u e sean compr e n sib 1e s por la máquina. Los lenguajes de
programación llevan incorporado u n c o n j u n t o d e instrucciones de
-fácil c o m p r e n s i ó n , que són las que utilizamos al realizar
nuestros programas. A estos lenguajes s e les llama "de alto
n i v e l " p o r e s t a r m a s c e r c a d e l a c o m p r e n s i ó n del u s u a r i o q u e de
la d e la m á q u i n a .

El l e n g u a j e d e p r o g r a m a c i ó n del S p e c t r u m e s el B A S I C . E s t e e s u n
lenguaje ampliamente difundido en la mayoría de ordenadores
personales debido a su fácil comprensión y gran versatilidad.
Lamentablemente, cada ordenador incorpora su propia versión de
BASIC; esto hace que programas escritos en BASIC en un
ordenador, no puedan ejecutarse e n otro distinto.
Pag, e

El BASIC está directamente derivado del inglés, e s decir, muchos


comandos d e BASIC tienen el mismo significado que la palabra
inglesa correspondiente.

EL -BASIC DEL SPECTSUM

El BASIC que s e emplea en el Spectrum e s muy sencillo d e


entender y utilizar. P a r a introducir los c o m a n d o s no hace f a l t a
deletrear los, sino que basta u n a pulsación de la tecla
cor respond i ente. A estos comandos s e les denomina ’’TOKENS*.
Algunas de e s t a s instrucciones s e encuentran en t o d a s las
versiones de BASIC (PRINT, INPUT, RUN...) y o t r a s són exclusivas
(INK, INVERSE, OVER...). Tanto u n o s c o m o o t r o s serán descritos
con detalle en este libro.

ESTRUCTURA .DE LA PROGRAMACION

El Spectrum permite la introducción tanto d e lineas de programa


como de comandos directos. Por ejemplo, teclee lo siguiente:

PRINT ■pepito”

y pulse la tecla ENTER. L a palabra "pepito" aparecerá en la


parte superior d e la pantalla y en la parte inferior de la misma
s e imprimirá el mensaje "O OK, 0:1” indicativo d e que s e ha
ejecutado la instrucción correctamente, si hubiera tecleado

PRINT ppepito"

no s e hubiera ejecutado la instrucción; en su lugar habría


aparecido un s i g n o *?* parpadeante, indicativo de que s e ha
producido un error. Introduzca ahora

1 0 PRINT "pepito"-’ •

(recuerde que ha de pulsar ENTER). La linea no s e ejecutará,


sino que aparecerá en la parte superior de la pantalla, c o n el
signo ">" (cursor de programa) entre el numero de linea y la
palabra PRINT. El ordenador ha almacenado la linea en su memoria
para ejecutarla m a s adelante. Si desea que s e ejecute ahora,
tec 1 ee

RUN
Pag, 9

Ahora introduzca

5 PRINT "hola"

a pesar d e que e s t a linea h a s i d o introducida después que la


a n t e r i o r , a p a r e c e r á e n la p a n t a l l a A N T E S . L a c a u s a de ello es
que s u numero d e linea e s inferior. Recuerde q u e las lineas se
l i s t a r á n e n l a p a n t a l l a e n el o r d e n i n d i c a d o por su numero de
1 inea.

Habra comprobado que siempre escribimos entre comillas las


palabras que deseamos imprimir. Esto n o s o l o debemos hacerlo c o n
palabras sueltas, s i n o con cualquier grupo d e ellas que deseemos
imprimir. A e s t e conjunto d e letras q u e v á entre c o m i l l a s s e le
denomina -cadena d e caracteres" o, simplemente "cadena".

Podemos prescindir de las comillas cuando lo que queremos


imprimir sean números. Ejemplo:

15 PRINT 24

Al e j e c u t a r e s t e p r o g r a m a ( p u l s e R U N ) , o b t e n d r e m o s :

hola
p e p i to'
24

y e n la p a r t e i n f e r i o r d e la p a n t a l l a el m e n s a j e “O OK, 15:1".
Observe q u e e s t e m e n s a j e e s d i f e r e n t e del que aparecía cuando
ejecutábamos un comando directo. Los números que aparecen detras
d e ” 0 K , " c o r r e s p o n d e n al n ú m e r o d e l i n e a y d e s e n t e n c i a e n d o n d e
s e h a d e t e n i d o el p r o g r a m a , r e s p e c t i v a m e n t e .

El n u m e r o 2 4 q u e h e m o s e s c r i t o e n la l i n e a 1 5 e s e v a l u a d o p o r el
ordenador como un valor numérico; si lo hubiésemos colocado
entre comillas habría sido tratado como una cadena de
caracteres. Esto es muy importante, y a que el ordenador solo
puede realizar operaciones matemáticas con valores numéricos y
no con cadenas.

V e a m o s u n e j e m p l o . T e c l e e el s i g u i e n t e c o m a n d o d i r e c t o :

PRINT 5 + 5
Pag, IQ

el resultado sera 10. Este numero se imprimirá en la parte


superior de la pantalla. Ahora introduzcamos:

PRINT "5"+"5"

como ve, el valor cambia completamente. Aunque las cadenas


pueden sumarse, lo hacen de una manera muy especial. Ejecute:

M
PRINT Spec " + "t rum"

para ilustrar este principio.

Vamos ahora a cambiar la linea 15. Podríamos volver a


introducirla completamente, pero existe un método mejor. Como
podemos ver, el cursor de programa esta situado en dicha linea
(si no lo estuviera, lo situaríamos por medio de las teclas de
cursor). Pulsando EDIT la linea se duplicará en la parte
inferior de la pantalla. Situemos el cursor al final de la linea
(teclas de cursor) y tecleemos

: PRINT "fin del programa"

al pulsar ENTER, veremos como la linea modificada está situada


en el lugar correcto en el programa. Al ejecutarlo, veremos que
el mensaje es ahora ”0 0K, 15:2" indicativo de que el programa
se ha detenido en la linea 15, sentencia 2.

Para borrar una linea de programa, basta teclear su numero


(seguido de ENTER) y la linea desaparecer a. Si escribimos una
linea con un numero igual al de una linea ya existente, dicha
linea sera sustituida por la nueva. Al borrar alguna linea, el
cursor de programa " desaparecer á" . Pulse la tecla de cursor que
tiene su flecha hacia arriba y el cursor aparecerá en la linea
anterior a la que ha sido borrada.

Hasta ahora, el listado .» d e l prog rama ha a p a r e e: i d o


automáticamente al pulsar ENTER después de la ejecución del
mismo. Existe un comando cuya única función es producir
listados, que es LIST. Teclee:

LIST 10

En la pantalla aparecerán las lin eas 10 y 15, con el cursor de


programa situado en la primera de ellas. Aunque la linea 5 no
aparezca en pantalla, continúa es tando en el programa.
P a g . 11

L a u t i l i d a d del c o m a n d o L I S T e s evidente cuando se trata de


programas largas, e n los q u e s e quiere colocar el cursor de
programa en u n a linea determinada, para proceder a su edición.
E n el c a s o d e q u e el l i s t a d o d e un programa no quepa en la
p a n t a l l a , a p a r e c e r á el c o n o c i d o m e n s a j e " s c r o l l ? " .

Una practica muy saludable cuando de escriben programas es


introducir comentarios aclaratorios en su listado. Esto s e hace
u t i l i z a n d o el c o m a n d o R E M . C u a n d o el ordenador encuentra una
linea con una sentencia REM, ignora dicha linea y ejecuta la
siguiente. Es por ello que después d e u n a sentencia REM no se
debe introducir ninguna instrucción, ya que el ordenador la
ig n o r a r á .

Una manera de borrar un programa es desconectar el ordenador.


Pero lo normal es que se utilice el comando NEW. Esta
i n s t r u c c i ó n b o r r a el p r o g r a m a B A S I C y l a s v a r i a b l e s q u e hayamos
podido definir. Tecléelo ahora.

I n t r o d u z c a el s i g u i e n t e p r o g r a m a :

1 0 REM impresión continua


20 PRINT "conozca su Spectrum"
30 GO TO 20

El c o m a n d o G O T O c o n t e n i d o e n l a l i n e a 3 0 s i r v e p a r a i n d i c a r al
ordenador que d e b e s a l t a r a la l i n e a especificada y continuar
al 1 i la e j e c u c i ó n del p r o g r a m a .

Pulse RUN para que corra el programa! la -frase "conozca su


Spectrum" se imprimirá 22 veces y luego aparecerá un mensaje
" s c r o l l ? " . P u l s e c u a l q u i e r t e c l a ( m e n o s N o S P A C E ) y la f r a s e s e
imprimirá o t r a s 2 2 v e c e s ( n o lo notará, y a q u e a u n q u e l a s f r a s e s
s e d e s p l a z a n h a c i a la p a r t e s u p e r i o r d e la p a n t a l l a , son todas
iguales) y v o l v e r á a preguntar " s c r o l l ? " . Si e n t o n c e s p u l s a N o
SPACE se imprimirá un mensaje " D BREAK - CONT repeats 20:1".
T a m b i é n p u e d e d e t e n e r el p r o g r a m a p u l s a n d o B R E A K ( C A P S S H I F T +
S P A C E ) a n t e s d e q u e a p a r e z c a el m e n s a j e " s c r o l l ? * . E n ese caso
el m e n s a j e q u e a p a r e c e r á s e r a " L B R E A K i n t o p r o g r a m , 2 0 : 1 " .

I n s t r o d u z c a a h o r a la s i g u i e n t e l i n e a

25 PRINT "fácilmente
Pag. 12

y e j e c u t e el p r o g r a m a . Cuando este se pare con el mensaje


“ s c r o l l ? " p u l s e N o S P A C E p a r a o b t e n e r el mensaje "D BREAK
CONT repeats". Observe que las d o s u l t i m a s lineas mostradas en
pantal 1a s e 1e e n

conozca su Spectrum
i ac i Imente

p u l s e a h o r a el c o m a n d o C O N T I N U E ( e s t a s i t u a d o e n l a t e c l a C y s e
encuentra abreviado como CONT). El programa continuará
e j e c u t á n d o s e , y a q u e el e f e c t o d e e s t a s e n t e n c i a e s p r e c i s a m e n t e
e s e . Al p u l s a r C O N T I N U E s e r e p i t e la instrucción en donde se
d e t u v o el p r o g r a m a y e s t e continúa ejecutándose a partir de
el l a .

H a y un c a s o e x c e p c i o n a l : s i se detiene el programa pulsando


BREAK, al pulsar CONTINUE continuará la ejecución en la
sentencia que s i g a a aquella donde se detuvo el programa. Esto
e s e s p e c i a l m e n t e útil e n el c a s o d e que el programa contenga
e r r o r e s ; si el p r o g r a m a s e d e t i e n e a c a u s a d e un error, podrá
s u b s a n a r s e e s t e y s e g u i r c o n la e j e c u c i ó n por m e d i o de C O N T I N U E .

Otro comando muy útil es STOP. Esta instrucción detiene


p e r m a n e n t e m e n t e el p r o g r a m a , apareciendo un mensaje " 9 STOP
s t a t e m e n t " . P u l s a n d o C O N T I N U E , el p r o g r a m a s e g u i r á ejecutándose
a p a r t i r d e la l i n e a s i g u i e n t e a a q u e l l a q u e c o n t i e n e el STOP.
Para comprobar esto, escriba

1 0 P R I N T " e s t a e s la p r i m e r a p a r t e "
20 STOP
3 0 P R I N T " e s t a e s la s e g u n d a p a r t e "

y e j e c ú t e l o . C u a n d o a p a r e z c a el m e n s a j e , p u l s e C O N T I N U E .

En el proximo capitulo hablaremos sobre mas usos de la


sentencia STOP. -»

Los programas BASIC que hemos visto hasta ahora s e ejecutan sin
interrupción. Sin embargo, es posible deneter la ejecución
momentáneamente por m e d i o del c o m a n d o P A U S E . E s t a sentencia se
usa junto con un número que expresa el tiempo de pausa en
cincuentavos d e segundo. Así, PAUSE 50 detiene la ejecución
d u r a n t e u n s e g u n d o . P a r a d e t e n e r el p r o g r a m a h a s t a que s e pulse
una tecla use PAUSE O.
Pag. 13

Ya hemos visto, pues, las sentencias PRINT, RUN, LIST, NEW, G O


TO, CONTINUE, REM, PAUSE, S T O P y BREAK. L a s 6 primeras pueden
usarse tanto c o m o comandos directos c o m o dentro de un programa,
mientras que REM, PAUSE y S T O P s o l o pueden usarse dentro de un
programa y BREAK solo como comando directo.
Pag. 14

CAPITULO 3

l-AS V A R I A B L E S

E n el capitulo anterior v e fa m o s c o m o imprimir en pantalla


palabras o números. Hasta ahora solo hemos manejado valores
constantes, e s decir, definidos a priori y no m o d i f i c a b 1 e s.
Ahora vamos a tratar otro tipo de valores que pueden ser
modificados a lo largo d e la e j e c u c i ó n del programa; son las
var i a b 1 e s.

P a r a e n t e n d e r el c o n c e p t o d e v a r i a b l e , s u p o n g a m o s q u e t e n e m o s u n
gran mueble lleno d e cajones; éstos pueden tener una etiqueta
exterior que los identifique, d e m a n e r a que seamos capaces de
localizarlos rápidamente.

Ahora, m e t a m o s a l g o e n un c a j ó n ; por e j e m p l o , diez g a r b a n z o s , y


e t i q u e t e m o s el c a j ó n c o n l a l e t r a "a". Introduzcamos en otro
cajón tres garbanzos e i d e n t if i q u e m o s 1 o como "b". De esta
manera, c u a n d o v a y a m o s a u n o u otro cajón, encont raremos el
número d e garbanzos que hayamos introducido previamente.

E n t o n c e s , si e n el c a j ó n " a " i n t r o d u c i m o s t r e s g a r b a n z o s m a s , y a
no tendremos 1 0 g a r b a n z o s e n e s e c a j ó n , s i n o 13. Podemos decir
q u e el c o n t e n i d o d e e s e c a j ó n h a V A R I A D O . L o m i s m o p o d e m o s h a c e r
c o n ej c o n t e n i d o d e l o s o t r o s c a j o n e s .

P u e s b i e n , e n el o r d e n a d o r t a m b i é n p o d e m o s "etiquetar" ciertas
partes de la memoria e introducir valores que pueden ser
cambiados a voluntad. La máquina almacena estos valores e
i n t r o d u c e l a s m o d i f i c a c i o n e s q u e n o s o t r o s le indiquemos. Estas
z o n a s d e la m e m o r i a q u e d e f i n i m o s s e l l a m a n v a r i a b l e s .

Existen d o s t i p o s d e variables: numéricas y al f a n u m é r i c a s . A


éstas ultimas también se les llama "de cadena" ya que no
almacenan un número s i n o u n a c a d e n a d e caracteres.

DEFINICION DE VARIABLES

P a r a definir u n a variable, t a n t o numérica como de cadena, se


e m p l e a el c o m a n d o L E T . E j e m p l o :

LET a=25
15

si a h o r a e s c r i b i m o s

PRINT a

a p a r e c e r ! i m p r e s o el numero 25. Pruebe ahora

LET a-a+1

y luego

PRINT a

C o m o p u e d e v e r , el v a l o r d e l a v a r i a b l e " a " h a c a m b i a d o a 2 6 .

Es necesario definir u n a variable (etiquetarla) para que pueda


ser utilizada. Si teclea

PRINT b

aparecerá un m e n s a j e d e error * 2 Variable not found, 0 : 1 " ( n o s e


encuentra la v a r i a b l e ) .

L a v a r i a b l e " a ” e s n u m é r i c a * le h e m o s d a d o u n n o m b r e d e u n a s o l a
letra, p e r o n o e s n e c e s a r i o q u e s e a a s í s i e m p r e . De hecho, el
nombre puede constar d e hasta 1 2 8 letras o d í g i t o s (también se
a d m i t e n e s p a c i o s ) , s i e m p r e q u ¿ el primer carácter no sea un
dígito. Ejemplos:

coco
e s t e l i b r o le a b u r r i r á
al
Al

En los d o s ú l t i m o s casos, los d o s nombres se refieren a la m i s m a


var i a b 1 e.

Ahora veamos ejemplos d e nombres n o permitidos:

1200 (empieza con un dígito)


o c h o - c u a t r o ( " - " n o e s u n a l e t r a ni u n d í g i t o )

Al c o n t r a r i o d e l a s n u m é r i c a s , las variables de cadena solo


pueden tener u n nombre c o m p u e s t o por u n a s o l a letra y el signo
. L a cadena a introducir debe estar entre comillas.
P a g , i*

LET a$="PEPE"

Sólo se puede operar matemáticamente con las variables


numéricas. L a s alf a n u m é r i c a s p u e d e n s u m a r s e , p e r o el resultado
de esa suma no es matemático, como ya se vio en el capitulo
a n t e r i o r.

Una cadena puede contener cualquier carácter, pero puede existir


u n a p e g a e n el c a s o d e q u e s e q u i e r a n incluir comillas en la
misma. Pruebe:

P R I N T " H o y h e v i s t o " T R O N " y m e h a g u s t a d o 1*

A p a r e c e r á el s i g n o d e i n t e r r o g a c i ó n p a r p a d e a n t e , indicativo de
que se h a cometido un error. Esto e s porque el ordenador cree
q u e la c a d e n a h a t e r m i n a d o d e s p u é s d e l a p a l a b r a "visto" y no
sabe interpretar lo que viene después. Para evitar esto,
escriba:

PRINT "Hoy h e visto -"TRON““ y me h a gustado"

No s e preocupe; las c o m i l l a s s o l o se imprimirán u n a vez. E s t o e s


válido tanto para una cadena como para una variable
al f a n u m é r i c a.

Hasta ahora s o l o hemos v i s t o como se definen variables desde


dentro d e un programa; pero si queremos definirlas durante la
e j e c u c i ó n del m i s m o ( p o r e j e m p l o , p a r a i n t r o d u c i r d a t o s c o n los
q u e h a d e o p e r a r el p r o g r a m a ) n e c e s i t a m o s u n n u e v o comando:. la
instrucción INPUT.

U n a s e n t e n c i a INPUT t i e n e la s i g u i e n t e f o r m a :

INPUT nombre

p a r a d e f i n i r u n a v a r i a b l e al f a n u m é r i c a , o

INPUT letra*

p a r a u n a v a r i a b l e d e c a d e n a . C u a n d o el o r d e n a d o r encuentra una
s e n t e n c i a I N P U T d e t i e n e el programa y un cursor parpadeante
a p a r e c e . T e c l e e e n t o n c e s el v a l o r ( o c a d e n a ) q u e d e s e e y pulse
ENTER. L a variable quedara d e f i n i d a y el p r o g r a m a c o n t i n u a r a su
ej e c u c ion .
PA4.- 1 7

E n el c a s o d e q u e la v a r i a b l e a definir sea a 1f a n u m é r ic a , el
cursor aparecerá entre comillas.

V e a m o s a h o r a u n e j e m p l o q u e n o s i l u s t r e lo q u e h e m o s v i s t o h a s t a
ahora. Borre el ordenador (mediante NEW) e introduzca el
siguiente programa:

10 REM programa sumador


20 L E T suma==0
30 LET a«="dime un numero"
40 PRINT a$
50 INPUT numero
60 LET suma=suma ♦ numero
70 PRINT suma
80 GO TO 40

E j e c u t e el p r o g r a m a c o n R U N ( o c o n GO TO 10) y vea lo que


sucede.

Como p u e d e ver, no e s necesario volver a la linea 3 0 por medio


d e G O T O , y a q u e la v a r i a b l e a $ p e r m a n e c e r á d e f i n i d a hasta que
a p a g u e m o s el o r d e n a d o r . ' Q u e p a s a r í a s i c a m b i a m o s la linea 80
por G O T O 2 0 ? .

P a r a d e t e n e r el p r o g r a m a , c u a n d o a p a r e z c a el c u r s o r t e c l e e S T O P
e n v e z d e u n n ú m e r o . El p r o g r a m a s e d e t e n d r á c o n el mensaje "H
S T O P in I N P U T , 5 0 : 1 " .

U n a a d v e r t e n c i a : l a s v a r i a b l e s s e b o r r a r á n s i e m p l e a el comando
RUN y t e n d r á q u e volver a definirlas. S i d e s e a evitar ésto, use
G O T O e n v e z d e RUN p a r a e j e c u t a r los p r o g r a m a s .
Paa.- I e

CAPITULO 4

LQ$ BUCLES FQR-NEXT

Supongamos que queremos que el ordenador realice una tarea


repetidas veces. Por ejemplo, que imprima u n a cadena o nos pida
un d a t o v a r i a s veces. Una -Forma es hacerlo "a mano”:

10 LET a=0
20 INPUT b
30 LET a~a+b
40 GO TO 20

Esto e s v á l i d o c u a n d o la cantidad d e números a introducir es


ilimitada. Pero la cosa cambia cuando queremos que la
instrucción s e e j e c u t e s o l o un c i e r t o n ú m e r o d e veces. L a mejor
manera d e hacer ésto e s por medio del conjunto de comandos
F O R - N E X T . D e e s t a -Forma, s i q u i s i é r a m o s s u m a r c i n c o n ú m e r o s , el
programa s e escribiría:

1 0 L E T a=0
20 F O R n«l T 0 5
30 INPUT b
4 40 LET a=a+b
4 50 NEXT n
60 PRINT a

El n ú m e r o d e v e c e s q u e s e r e p i t e la acción se define en la
l l a m a d a " v a r i a b l e d e c o n t r o l " del b u c l e ( e n e s t e c a s o "n"). El
nombre d e esta variable d e b e estar constituido obligatoriamente
por u n a s o l a letra ( m a y ú s c u l a o minúscula). No debe existir
n i n g u n a o t r a v a r i a b l e c o n el m i s m o n o m b r e , a u n q u e sí se puede
emplear dicho nombre p a r a t o d a s las variables de control de
t o d o s l o s b u c l e s del p r o g r a m a , s i e m p r e y cuando no haya dos
b u c l e s " i m b r i c a d o s " ( d e p e n d i e n d o el u n o del o t r o ) .

El o r d e n a d o r i n c r e m e n t a el v a l o r d e la v a r i a b l e de control en
u n a unidad c a d a vez q u e s e e j e c u t a n l a s i n s t r u c c i o n e s incluidas
e n el b u c l e . C u a n d o l a s m i s m a s s e han ejecutado el numero de
veces prescrito, el programa continúa su ejecución en la
s e n t e n c i a q u e s i g u e al c o m a n d o N E X T .

L a variable de control puede utilizarse en las sentencias


i n c l u i d a s e n el b u c l e .
Eag, 1?

Por ejemplo, este programa imprime en pantalla la tabla de


multiplicar del número que se le introduzca:

10 FOR n - 1 T 0 1 0
20 INPUT a
30 PRINT n,a*n
40 NEXT n

Como h e m o s d i c h o a n t e s , la variable de control incrementa su


valor en una unidad cada vez que el bucle da una "vuelta". Pero
esto no tiene que ser siempre así. El comando STEP permite
especificar la cantidad en que debe cambiar el valor de dicha
v a r i a b 1e .

Pruebe este programa:

10 FOR n=l T0 20 STEP 2


20 PRINT n
30 NEXT n

Siempre es necesario emplear STEP cuando el incremento del bucle


sea negativo.

10 FOR n»20 TO 1 STEP - 1


20 PRINT n
30 NEXT n

Los bucles FOR-NEXT no se pueden mezclar arb i t r ar i amente , sino


que deben estar uno completamente dentro del otro. Por ejemplo:

10 FOR i « l T0 10
20 FOR j « l TO 5
30 PRINT i*j ; " "|
40 NEXT j
50 NEXT i

esta es la disposición correcta. La errónea sería:

10 FOR i - 1 T0 10
20 FOR j = l TO 5
30 PRINT i*j | " " ;
40 NEXT i
50 NEXT j
Pag. 20

Las sentencias d e un bucle FOR-NEXT no tienen por que estar en


lineas diferentes.

1 0 F O R i= l T 0 10: P R I N T 2 * 1 : NEXT i

En e s t e c a s o s o l o s e e j e c u t a r á n l a s s e n t e n c i a s s i t u a d a s e n t r e el
F O R y el N E X T .

El e r r o r "1 N E X T w h i t h o u t F O R " aparece si se ha saltado al


i n t e r i o r d e u n b u c l e d e s d e el p r o g r a m a ( p o r medio de GO TO).
Evítelo siempre.
Pag. 21

CAPITULO 5

MATRICES

En el c a p í t u l o 3 v e í a m o s como definir y utilizar variables.


Siempre que deseemos almacenar o variar un dato previamente
guardado, deberemos definir (o actualizar) las variables
cor respond lentes.

S i n e m b a r g o , el m é t o d o d e asignación de variables que hemos


v i s t o p u e d e s e r f r a n c a m e n t e a n t i p r á c t i c o y e n la m a y o r í a d e las
v e c e s , m u y p e s a d o . E s t e s e r í a el caso de que tuviéramos que
introducir gran cantidad d e datos; t e n d r í a m o s que designar un
n o m b r e p a r a c a d a u n o , l o c u a l , a p a r t e d e t e d i o s o , i m p e d i r ía que
pudiéramos procesar dichos datos rápida y -fácilmente. El
p r o b l e m a s e a g u d i z a e n el c a s o d e variables alfanuméricas, ya
que, c o m o h e m o s v i s t o , s o l o p o d e m o s de-finir u n m á x i m o d e 2 6 (el
n ú m e r o d e l e t r a s del a l f a b e t o ) .

Asi p u é s , d e b e m o s u t i l i z a r o t r o m é t o d o d e a s i g n a c i ó n d e datos;
en lugar d e g u a r d a r l o s e n v a r i a b l e s , l o h a r e m o s e n M A T R I C E S .

Las matrices ( o tablas) están constituidas por un conjunto de


variables, las cuales tienen el mismo nombre, pero se
d i f e r e n c i a n e n t r e s í p o r u n n ú m e r o (el s u b í n d i c e ) .

Para dimensionar una matriz se emplea el comando DIM, de la


s i g u i e n t e -forma:

DIM n o m b r e ( d i m e n s i o n e s )

Esta sentencia r e s e r v a p a r t e d e la m e m o r i a del ordenador p a r a el


almacenamiento de las variables de la matriz. Su uso es
precept ivo.

Veamos un ejemplo: supongamos que queremos almacenar 1 0 0 n ú m e r o s


en el o r d e n a d o r . L o p r i m e r o q u e d e b e m o s h a c e r e s d i m e n s i o n a r la
matriz que los contendrá. Hagamos:

1 0 DIM a ( 1 0 0 )

si e j e c u t a m o s el p r o g r a m a y l u e g o h a c e m o s

PRINT a (1)
Pag. 2 2

obtendremos el valor cero. Esto e s porque al dimensionar una


matriz. numérica, todas s u s variables toman dicho valor.

Si lo que queremos almacenar son cadenas en vez de números,


tendremos que definir u n a matriz alf anumérica. Siguiendo con el
ejemplo anterior, para almacenar 100 nombres, hartarnos

2 0 DIM a « ( 100, 10)

c o m o s e ve, e s t a vez e s necesario definir d o s dimensiones para


la matriz. El segundo número expresa la longitud máxima de la
cadena que s e vaya a introducir, en e s t e c a s o 1 0 caracteres. Si
la misma e s mas larga que la dimension establecida, s e r a
recortada en su extremo final, y si e s demasiado corta, s e
añadirán espacios al final de la misma.

De ésto s e deriva que la matriz s i e m p r e ocupará el mismo espacio


en memoria, s e a cual s e a la longitud de la cadena que
i nt reduzcamos.

Una vez hemos dimensionado las matrices, hemos de dar los


correspond ientes valores a las variables que las componen. U n a
manera d e hacerlo e s por medio d e LET o INPUT, pero esto podría
resultar demasiado largo y tedioso. L a m a n e r a m a s rápida y
eficiente de hacerlo en utilizando los c o m a n d o s READ, DATA y
RESTORE.

Una sentencia READ consta d e un comando READ y u n a s e r i e d e


nombres d e variables, que deben estar s e p a r a d o s por c o m a s . A
estas variables s e les asignan los valores contenidos en una
sentencia DATA ( q u e puede estar situada antes o después que la
sentencia READ). L o s valores contenidos en la sentencia DATA
también deben estar separados por c o m a s y, si las variables son
al f anumér i cas, deben estar entre comillas.

Cada vez que s e lee un dato, el ordenador p r e p a r a el siguiente


dato de la lista para su lectura, colocando un "puntero" que
señala hacia el dato a leer. Así pues, este puntero avanza
automáticamente a través d e la lista d e datos hasta llegar al
final de la misma.

Veamos un ejemplo explicativo. El programa que viene a


continuación almacena 5 nombres y s u s cor respond i en t e s números
de teléfono
Pag. 23

10 DIM a* (5,10): DIM a (5)


20 F O R n=l T O 5
30 R E A D b $ : L E T a *( n ) = b $
40 NEXT n
50 F O R n=l T O 5
60 R E A D b : L E T a( n ) = b
70 NEXT n
100 DATA "Fernando","Pepe", “Juan*, "Paco", "Alberto"
110 DATA 2345454,2456789, 3422134,5656789,2537824
120 DATA 4560214,3454567,2314536,2345434,4567890

Si s e i n t e n t a n leer m a s d a t o s q u e l o s c o n t e n i d o s e n la s e n t e n c i a
D A T A , s e p r o d u c i r á u n e r r o r . A u n q u e e n l a l i n e a 1 2 0 -Figura otra
sentencia DATA, solo serán leídos los números existentes en la
linea 110, y a q u e e s t a e s la p r i m e r a s e n t e n c i a DATA encontrada
p o r R E A D y el p u n t e r o s o l o h a a v a n z a d o h a s t a el ú l t i m o dato de
d i c h a 1 i n e a.

V a m o s a a m p l i a r el p r o g r a m a i n t r o d u c i e n d o l a s s i g u i e n t e s l i n e a s :

2 1 0 F O R n=l T 0 5
220 PRINT a$(n),a(n)
230 NEXT n

E j e c u t e m o s el p r o g r a m a ( R U N ) J aparecerán en la pantalla los


n o m b r e s y s u s c o r r e s p o n d i e n t e s n ú m e r o s . L a c o m a d e la l i n e a 220
a c t ú a c o m o " s e p a r a d o r " ; i n d i c a al o r d e n a d o r c o m o debe imprimir
los d a t o s e n l a p a n t a l l a . V e r e m o s e s t o c o n m a s detalles en un
próximo capitulo.

Se preguntará porque hemos escrito una segunda sentencia DATA.


S i n b o r r a r n a d a del p r o g r a m a , e s c r i b a

4 5 RESTORE 120

A h o r a c o r r a el p r o g r a m a » d e s c u b r i r á q u e los números han sido


sustituidos por los c o n t e n i d o s e n la linea 120. Esta es la
f u n c i ó n del c o m a n d o R E S T O R E : i n d i c a r al c o m a n d o R E A D a p a r t i r d e
q u e s e n t e n c i a D A T A d e b e e m p e z a r a leer; e s d e c i r , posiciona el
p u n t e r o e n un l u g a r d e t e r m i n a d o d e la l i s t a d e d a t o s .

Las matrices también pueden rellenarse mediante INPUTs (en el


caso de programas de bases d e datos), e incluso pueden grabarse
y c a r g a r s e d e s d e la c i n t a d e c a s s e t t e ( o el m i c r o d r i v e ) .
Pag. 24

CAPITULO 6

USOS ESPECIALES DE PRINT E INPUT


COMANDOS COMPLEMENTARIOS Y SEPARADORES

Vamos a ver e n e s t e c a p í t u l o las d i v e r s a s -Formas en las que


podemos complementar el comando PRINT para de esta manera
definir formatos de impresión, tanto en pantalla como en
impresora.

L o p r i m e r o q u e t e n e m o s q u e s a b e r e s q u e el S p e c t r u m d e f i n e e n l a
pantalla 2 4 lineas y 3 2 columnas. Como ya dijimos, las dos
últimas lineas no s o n n o r m a l m e n t e accesibles, y a q u e s o n las q u e
e m p l e a el o r d e n a d o r p a r a l a e j e c u c i ó n d e l a s s e n t e n c i a s I N P U T y
para mostrar los mensajes d e error. Las posiciones d e impresión
s e definen, p o r medio de dos números; el primero de ellos
c o r r e s p o n d e a la l i n e a y el s e g u n d o a la columna. Asi, 20,14
corresponde a la linea 20, c o l u m n a 14.

H a s t a a h o r a h e m o s u t i l i z a d o P R I N T s i n e s p e c i f i c a r el l u g a r d e l a
p a n t a l l a d o n d e q u e r í a m o s q u e a c t u a r a . Al e n c e n d e r el ordenador,
o al haberse ejecutado una sentencia CLS, la posición de
impresión e s la 0 , 0 . C a d a v e z q u e s e e j e c u t a u n a s e n t e n c i a P R I N T
( a menos que e m p l e e m o s c o m p l e m e n t o s en la m i s m a ) la posición de
i m p r e s i ó n s e d e s p l a z a al p r i n c i p i o d e la siguiente linea. De
e s t a m a n e r a p o d e m o s e m p l e a r el c o m a n d o P R I N T s i n n i n g ú n t i p o de
a r g u m e n t o e n el c a s o d e que queramos imprimir una linea en
blanco. P o r e j e m p l o :

10 F O R n=l T 0 5
20 PRINT
30 NEXT n
40 PRINT "cinco lineas en blanco"

E x i s t e u n c o m a n d o c o m p 1 e m e n t a r io q u e n o s p e r m i t e i m p r i m i r e n la
p a r t e d e la p a n t a l l a q u e d e s e e m o s : A T . S e u t i l i z a a s í :

P R I N T AT 1 1 , 3 5 - F i l a 11, c o l u m n a 3 "

E1 primer c a r á c t e r d e l a c a d e n a s e i m p r i m i r á e n la posición de
impresión e s p e c i f i c a d a y l o s d e m a s a c o n t i n u a c i ó n . El punto y
coma que s e e m p l e a e s un s e p a r a d o r "; efectivamente, algunos
signos d e puntuación permiten definir formatos de impresión.
E s t o f u n c i o n a d e la s i g u i e n t e f o r m a :
Pag. 25

- *J" s i g n i f i c a " i m p r i m i r i n m e d i a t a m e n t e d e s p u é s "

- significa "desplazar posición de impresión 16 columnas"

- significa "desplazar posición d e impresión u n a linea"

P a r a c o m p r o b a r e s t o , t e c l e e el s i g u i e n t e p r o g r a m a :

10 F O R n=l T 0 5
20 PRINT n,n*n
30 PRINT
40 NEXT n

C a m b i e el s e p a r a d o r d e l a l i n e a 2 0 y c o r r a el p r o g r a m a .

Si s e c o l o c a u n s i g n o al f i n a l d e u n a sentencia PRINT, la
posición d e impresión no s e desplazara a la siguiente linea.
P r u e b e:

1 0 F O R n=l T 0 1 0
2 0 P R I N T n;
30 NEXT n

r e t i r e el p u n t o y c o m a y v u e l v a a c o r r e r el p r o g r a m a p a r a ver l a
d i f e r e n c i a.

L a utilización d e un separador repetidas veces multiplica su


e f e c t o . B o r r e el o r d e n a d o r y t e c l e e :

P R I N T ’’’’’"cinco lineas en blanco"

También pueden combinarse varios separadores distintos

PRINT *c i n e o , d i e c i s e i s "

El c o m a n d o T A B s i r v e p a r a d e t e r m i n a r la c o l u m n a d e i m p r e s i ó n .

1 0 F O R n=l T 0 1 0
2 0 P R I N T T A B lOJn
30 NEXT n

C o m o s e v e , e s b a s t a n t e m a s s e n c i l l o d e u t i l i z a r q u e AT, aunque
no e s tan preciso. S u principal v e n t a j a e s a la h o r a d e u t i l i z a r
la i m p r e s o r a , y a q u e e s t a n o r e c o n o c e A T p e r o si T A B . T a m b i é n e s
útil p a r a la i m p r e s i ó n d e t a b l a s .
Pag. 26

O b s e r v e q u e t a n t o AT c o m o T A B d e b e n u s a r s e c o n " J ".

El c o m a n d o A T y el s e p a r a d o r pueden utilizarse también con


las s e n t e n c i a s I N P U T , a u n q u e c o n a l g u n a s l i m i t a c i o n e s e n s u u s o .
Por ejemplo:

INPUT AT l,Ojn

i m p r i m e el c u r s o r d e I N P U T e n l a s e g u n d a d e l a s d o s l i n e a s d e la
p a r t e i n p e r i o r d e la p a n t a l l a .

El s e p a r a d o r t a m b i é n s e u t i l i z a e n el caso de que se quiera


introducir un t e x t o j u n t o c o n la s e n t e n c i a I N P U T .

I N P U T " f e c h a ? "; a S

OTROS USOS DE L A SENTENCIA INPUT

No s o l o s e pueden introducir t e x t o s en las sentencias INPUT,


sino también variables, aunque estas últimas deben ir entre
par é n t e s i s

10 LET a=25
2 0 I N P U T ( " M i n u m e r o e s " J a ) ; " . El t u y o ? " ; b

C o m o v i m o s e n el c a p i t u l o 3 , c u a n d o e n u n a sentencia INPUT se
define una variable al f a n u m é r i c a , el cursor aparece entre
c o m i l l a s . E s t o p o s i b i l i t a b o r r a r l a s p a r a i n t e r r u m p i r el p r o g r a m a
en ese punto por medio d e STOP. P a r a evitarlo podemos utilizar
el c o m a n d o L I N E d e l a s i g u i e n t e f o r m a :

INPUT LINE aS

el c u r s o r a p a r e c e r á s i n c o m i l l a s , a u n q u e la sentencia actuarí
c o m o si e s t u v i e r a n . Al n o e s t a r las comillas, no podrán ser
b o r r a d a s y , p o r lo t a n t o , d e t e n i d o el p r o g r a m a .

En el c a s o d e q u e r e r i n c l u i r t e x t o s e n l a s e n t e n c i a I N P U T L I N E.
el c o m a n d o L I N E i r á d e s p u e s del t e x t o .

INPUT "Nombre? "JLINE a$


Pag. 2 7

CAPITULO 7

FRAGMENTACION DE CADENAS

En todos los ordenadores existe la posibilidad de fragmentar las


cadenas, es decir, de dividirlas y tratar cada trozo por-
separado. Por lo tanto, el Spectrum también puede hacerlo,
aunque el método que utiliza difiere del que se emplea
cor r i en temen te.

Antes de nada, debemos aclarar que en los "trozos" o -fragmentos


de la cadena los caracteres que los compongan deben estar-
situados en el mismo orden qup en la cadena de la que procedan.
Por lo tanto, en la cadena "Spectrum" un -fragmento podría ser
"Spec" pero no "cum" ni "mur".

Para fragmentar cadenas se emplea el comando TO de la siguiente


■forma:

PRINT "cadena" (numero TO numero)

por supuesto no e s necesario emplear siempre PRINT; puede usarse


cualquier otro comando que trabaje con cadenas.

Si se omite el primer númerp, el ordenador le da el valor 1» si


el que no se pone es el del -final, su valor será el de la
longitud de la cadena. Ejemplos:

"Spectrum" ( TO 4)="Spec"

"Spectrum" ( 3 TO )="ectrum"

"Spectrum" ( TO )="Spectrum"

Para tener una subcadena de un solo carácter, no s e emplea TO,


sino el número de orden de dicho carácter.

"Spectrum"(3)="e*

En caso de que uno de los números sea igual o menor que O o


mayor que la longitud de la cadena s e produce un error "3
Subscript Wrong" (subíndice erróneo).

También podemos utilizar el método de fragmentación para cambiar


partes de una cadena. Teclee:
Pag. 28

LET a$=“Prueba“

ahora

LET a$(3 TO 6)«“ieto“: PRINT aS

U n a o b s e r v a c i ó n : la c a d e n a p e r m a n e c e r á c o n l a m i s m a l o n g i t u d s e a
c u a l s e a l a l o n g i t u d d e la s u b c a d e n a . P r u e b e :

L E T a S( 3 T O 6 ) = " o b a n d o “ : P R I N T a S

en e s t e c a s o l a s u b c a d e n a h a s i d o c o r t a d a p o r la derecha para
ajustarse a la longitud d e la c a d e n a aS. En el caso de que
hubiese s i d o más corta se habrían puesto espacios para
c o m p 1 e t a r la.

L E T a S( 3 T O 6 ) = " o t o "

en e s t e c a s o a * s e r í a igual a “ P r o t o A e s t a o p e r a c i ó n , q u e el
ordenador realiza d e f o r m a automática, s e le llama “asignación
p r o c u s t e a n a ” ( p o r el c e l e b r e p o s a d e r o P r o c u s t e s que, para que
encajaran correc tamente e n las camas, e s t i r a b a a s u s c l i e n t e s e n
un p o t r o d e t o r m e n t o o l e s c o r t a b a l o s p i é s ) .

En capítulos posteriores veremos diversas f u n c i o n e s que tratan


con cadenas.
Pag, 29

CAPITULO 8

TOMA D E D E C I S I O N E S

Una de las características mas útiles de los ordenadores es su


capacidad para decidir en función de que se cumplan o no unas
condiciones. Las sentencias encargadas de esta función se llaman
"sentencias condicionales". En el Spectrum (y en la mayoría de
los ordenadores) las sentencias condicionales están compuestas
por los comandos IF y THEN, que asumen la siguiente -forma:

IF condición THEN sentencias

Si se cumple la condición se ejecutan las sentencias situadas


despues de THEN. Inmediatamente después de introducir THEN el
cursor, que estaba en "L", cambia a "K", lo que permite la
introducción de "tokens" (palabras clave). En el caso de que la
condición no se cumpla dichas sentencias se ignoran y el
programa continúa su ejecución en la siguiente linea. Esto
último es muy importante; no deben colocarse detras de THEN mas
que las sentencias que deban ejecutarse al cumplirse la
cond ic i ón .

Un ejemplo:

10 INPUT a
20 IF a=l THEN PRINT "ha pulsado ""1"- *: STOP
30 PRINT "No ha pulsado " "1" " "

La sentencia STOP de la 1 inea 20 solo se ejecutara si la


condición es verdadera. El signo "=" es una "relación" y es el
que expresa la condición. Una relación puede comparar dos
números o dos cadenas y pueden asociarse varias de ellas por
medio de “operadores lógicos" (que estudiaremos en un próximo
cap ' tu 1o ) .

Las relaciones utilizables són:

> sigini-fica "mayor que"

< significa "menor que"

<= significa "menor o igual que"

>= significa "mayor o igual que


Pag. 30

= s i g n i f i c a "igual a*

<> s i g n i f i c a " d i s t i n t o d e "

Todos e s t o s s í m b o l o s han d e ser tecleados "de una vez", es


decir, c o n u n a s o l a pulsación d e t e c l a ( c a d a u n o t i e n e s u tecla
c o r r e s p o n d i e n t e ).

Por supuesto que las sentencias IF-THEN no son siempre tan


sencillas; veremos o t r a s m á s complicadas en los capítulos que
s i g u e n.
Pag. 31

CAPITULO 9

SUBRUTINAS

Cuando se escribe un programa puede darse el caso de que una


instrucción (o conjunto de ellas) deba ejecutarse varias veces a
lo largo del mismo.

Imaginemos que estamos imprimiendo textos y cuando se llene una


pantalla queremos que el programa se pare y avise al usuario que
pulse una tecla para ver otra pagina. Esto podria hacerse de la
siguiente forma!

10 PRINT "una pagina de texto"


20 PRINT AT 2 1 , 1 ; " p u l s e u n a t e c l a para con t i nuai
30 PAUSE 0
40 CLS
50 PRINT "Otra pag i na "
60 PRINT AT 2 4 , 1 ; " p u l s e una tecla para con t i nuai
70 PAUSE 0
80 CLS
90 PRINT "una pagina mas M

Como p u e d e v e r s e , este sistema, aunque correcto, sería bastante


tedioso, aparte del gasto extra de memoria que se produciría.
Sería mucho mas practico "almacenar" el conjunto de
instrucciones que nos interese y llamarlo cada vez que nos haga
falta. A cada uno de dichos conjuntos se les denomina
"subrutinas" y s e l e s l l a m a p o r m e d i o d e l c o m a n d o GOSUB seguido
de un número de linea (aquel donde comienza la subrutina). Al
final de la misma se coloca el comando RETURN, que indica al
ordenador donde acaba la subrutina.

Asi pués, cuando la máquina encuentra una sentencia GOSUB


continúa la ejecución en el número de linea especificado hasta
toparse con RETURN. En este momento, la ejecución continúa en la
sentencia q u e s i g u e a l c o m a n d o GOSUB correspondiente. De esta
manera, el programa anterior se escribiría:
Pag. 32

10 PRINT "pagina 1"


20 GOSUB 1000
30 PRINT "pagina 2”
40 GOSUB 1000
50 PRINT -pagina 3 "
60 GOSUB 1000

999 STOP
1 0 0 0 P R I N T A T 2 1, 1; " p u l s e u n a t e c l a p a r a c o n t i n u a r "
1 0 1 0 PAUSE 0
1020 CLS
1 0 3 0 R E T U R N1

E l S T O P d e l a 1 i n e a 9 9 9 e s n e c e s a r i o , y a q u e ,, d e n o e x i s t i r , el
programa c o n t i n u a r 'a ejecutándose en la subrutina y se
produciría un error " 7 RETURN without GOSUB".

Las subrutinas pueden llamar a su vez a otras o incluso a ellas


m i s m a s.
Pag. 33

CAPITULO 10

EXPRESIONES MATEMATICAS

El S p e c t r u m p u e d e r e a l i z a r f á c i l m e n t e t o d o t i p o de operaciones
a r i t m é t i c a s ( t a l c o m o lo h a r í a u n a c a l c u l a d o r a ) y p a r a ello se
utilizan los s i g n o s +, * (para multiplicar) y / (para
dividir). Tenga en cuenta, a la hora de escribir números
decimales, que ha d e emplear el punto, y no la coma, para
s e p a r a r la p a r t e d e c i m a l d e la e n t e r a .

El v a l o r r e s u l t a n t e d e u n a e x p r e s i ó n m a t e m á t i c a p u e d e i m p r i m i r s e
directamente o bien utilizarse para asignar un valor a una
v a r i a b l e . El s i g u i e n t e p r o g r a m a c a l c u l a el porcentaje que se
desee de cualquier número:

10 INPUT “numero "Ja


20 INPUT “porcentaje ";b
30 LET c=a*b/100
40 P R I N T "El " J b J " p o r c i e n t o d e " J a ? " e s "
50 PRINT : PRINT c

E n la l i n e a 3 0 s e e n c u e n t r a la e x p r e s i ó n m a t e m á t i c a q u e realiza
el c á l c u l o . E n e s t e c a s o , l a s operaciones se realizan en el
m i s m o o r d e n en q u e s e han e s c r i t o ; p e r o no s i e m p r e e s así. Por
ejemplo, pruebe:

PRINT 10+20*30

el r e s u l t a d o n o h a s i d o el q u e e s p e r a b a ; la razón es que la
multiplicación s e h a e f e c t u a d o a n t e s q u e la s u m a . E s t o e s d e b i d o
a q u e el S p e c t r u m r e a l i z a a n t e s l a s o p e r a c i o n e s d e m u l t i p l i c a r y
dividir y luego las sumas y restas. Se dice que la
m u l t i p l i c a c i ó n y la d i v i s i ó n t i e n e n u n a prioridad mas elevada
q u e la s u m a y l a r e s t a .

Esto puede variarse mediante el empleo de paréntesis; las


operaciones entre paréntesis s e realizan siempre las primeras y
luego las o t r a s ( a t e n d i e n d o a su p r i o r i d a d ) .

PRINT (10+20)*30

L a s expresiones pueden incluso utilizarse con las sentencias


I N P U T , d e tal m a n e r a q u e si el ordenador esta esperando un
n ú m e r o Vd . p u e d e d a r l e la e x p r e s i ó n c o r r e s p o n d i e n t e e n s u l u g a r .
Pag. 34

NOTACION CIENTIFICA

Con este término se denomina a una forma de imprimir números que


consiste en escribir un número (decimal o no) y multiplicarlo
por 10 elevado a una cantidad. Esto se escribiría:
3
23 x 10

por ejemplo. En el Spectrum puede también hacerse esto, pero de


una forma diferente; así, este mismo numero se escribirla:

PRINT 23e3

Esto es par t i cu 1ármente útil cuando se trata de operar con


cantidades muy grandes. Con este sistema no pueden emplearse
expresiones, sino solo valores numéricos

PRINT (3+4) e (5*6)

ser í a er roneo .

Hay que tener en cuenta que el Spectrum almacena números con


una precisión de 9 1/2 dígitos. Esto significa que las
operaciones que se realicen con números de dicha longitud o
superiores contendrán errores (aunque posiblemente
despreciables) en sus resultados.

19 La memoria 60

20 Medios d e a 1m a c e n a m i e n t o e x t e r n o 64

21 El fichero de pantalla 69

22 Uso de la impresora 72

23 Los "ports" de entrada-sal i da 74

24 Las variables del sistema 76

25 Introducción a la programación en C/M 83

Apend ice El juego de caracteres 86


Pag-. 3 5

C A P I T U L O 11

FUNCIONES PROPIAS DEL SPECTRUM

P o d e m o s de-finir u n a f u n c i ó n c o m o u n t r a t a m i e n t o e s p e c i a l q u e se
hace con un d a t o ( o c o n j u n t o d e datos) y que d a como resultado
o t r o dato. E s t o p u e d e afectar a la clase del dato, su valor
numérico, etc.

Al d a t o q u e s e t r a t a e n l a f u n c i ó n s e l e d e n o m i n a " a r g u m e n t o " y
al q u e r e s u l t a d e a p l i c a r l a f u n c i ó n s e le d e n o m i n a " r e s u l t a d o " .
La sintaxis adecuada para utilizar las funciones es la de
escribir las mismas colocando el argumento a continuación.
Cuando la s e n t e n c i a q u e c o n t e n g a esa función se ejecute, se
o b t e n d r á el r e s u l t a d o c o r r e s p o n d i e n t e.

L a primera función que vamos a estudiar e s LEN; s u argumento es


una cadena y su resultado un número que expresa la longitud en
caracteres d e dicha cadena. Por ejemplo:

L E N "or denador "= 9

El p r o g r a m a q u e v e r e m o s a h o r a m u e s t r a u n u s o útil d e la función
LEN.

10 I N P U T " M e t e u n t e x t o "; a $
20 F O R n=l T 0 L E N a *
30 P R I N T a S( n ) ; : P A U S E 7
40 NEXT n
50 GO TO 1 0

C u a n d o s e h a y a i n t r o d u c i d o el t e x t o , e s t e no se imprimirá de
g o l p e s i n o q u e l o h a r á l e t r a a l e t r a , c o m o si s e t r a t a r a de un
teletipo o m á q u i n a d e escribir. P u e d e a l t e r a r s e la velocidad de
i m p r e s i ó n c a m b i a n d o el v a l o r d e la s e n t e n c i a P A U S E .

O t r a función útil e s S T R S ; su árgumento es un número y su


resultado e s u n a cadena c u y o s caracteres serán los del numero
introduc ido

STR$ 456="456"

En c a s o d e n ú m e r o s d e c i m a l e s , l a c a d e n a resultante de aplicar
S T R $ s o l o c o n t e n d r á la p a r t e e n t e r a del número.
Pag. 36

STR$ 23.78=" 23"

Una utilidad de esta función sería la escritura de números


justificados por la derecha (TAB solo justifica por la
izquierda)

10 LET cont=0
20 INPUT "Un numero "Ja
30 PRINT AT cont,20-LEN STR$ aja
40 LET cont =cont ♦1
50 GO TO 2 0

Los números se justificarán atendiendo a la columna 20J puede


cambiar esto si lo desea (linea 30).

La función VAL es justo la inversa de STRSJ su argumento es una


cadena y su resultado el valor numérico de la misma (la cadena
debe contener únicamente caracteres numéricos a menos que el
resultado de VAL pueda ser el nombre de una v a r i a b 1e o una
expresión). Por ejemplo

VAL "34" =34


VAL "8*3" =24

La función VAL$ es parecida, aunque menos ú t i 1 J su argumento es


una cadena y su resultado es también una cadena. Su cometido
puede ser el de retirar las comillas que puedan sobrar en una
cadena

VALS" " " "spectrum" " " "=" spec t rum "

La función SGN d e t e r m i n a el signo de un número. El resultado es


1 si el número es positivo, 0 si el número tiene ese valor y -1
si se trata de un número negativo.

ABS e s u n a f u n c i ó n cuyo argumento es un número y su resultado es


el valor absoluto de dicho número.

Veamos un programa que aplica estas dos últimas funciones:

10 INPUT " introduzca el saldo " Ja


20 I F SGN a=l THEN PRINT "Tiene " Ja J " pesetas "
30 I F SGN a=0 THEN PRINT "Esta en la r u i n a "
40 I F SGN a=-l THEN PRINT "Debe " J ABS aj " pesetas"
Pag. 37

La función INT tiene como argumento un número decimal y su


resultado es la parte entera de dicho número.

INT 32.5=32

esta función siempre redondéa por defecto.

Hasta ahora solo hemos empleado funciones delimitadas por el


BASIC del Spectrum. Sin embargo, hay un grupo de comandos que
nos permite crear y utilizar nuestras -prop i as funciones; son DEF
FN y FN.

DEF FN nos permite crear la función. Se utiliza de la siguiente


forma:

DEF FN a(x,y)=x*y/2 (por e j ernp 1 o )

donde “ a” es el nombre de la función y "x" r -y- 1o s argumentos .

Para ut ilizar esta función se emplea FN

PRINT FN a(x,y)

Tamb i en puede definirse la función sin necesi dad de espec i f i car


los argumentos

DEF FN a()=x*y/2 PRINT FN a()

Hemos colocado solo dos argumentos en el ejemplo anterior, pero


se pueden colocar hasta 26 (lógico; los argumentos solo se
pueden designar con una letra).

El resultado y los argumentos de una función definida también


pueden ser cadenas. En ese caso, el formato cambia ligeramente:

DEF FN a$(z$)=z$ (2 TO)

Una aplicación: dijimos que la función INT siempre redondea por


defecto, pero esto puede subsanarse con el empleo de la
siguiente función definida:

DEF FN a(x)=INT (x+.5)

asi redondeara al entero mas proximo.


Pag. 38

La función INKEYS e s muy peculiar; no posee argumento y su


r e s u l t a d o e s u n a c a d e n a c u y o ú n i c o c a r á c t e r e s el d e la última
tecla pulsada.

10 PRINT INKEYS;
20 PAUSE O
30 GO TO 10

Este programa imprimirá los caracteres cor respond ient e s a las


teclas que vaya pulsando.
Pag. 39

CAPITULO 12

FUNCIONES MATEMATICAS

En e s t e c a p í t u l o vamos a tratar d e las diversas funciones que


p e r m i t e n al S p e c t r u m la realización de complicados cálculos
m a t e m á t i e o s.

L a m a s i m p o r t a n t e y v e r s á t i l e s ”* ", q u e n o s p e r m i t e hallar la
potencia d e un número. C o m o s e ve, no se emplea la notación
normal p a r a las potencias, p e r o n o p a r e c e q u e e s t o tenga mucha
importancia, d a d a la facilidad de uso de esta función. Por
ej e m p lo:

3*3

s i g n i f i c a " 3 al c u b o " .

"*" e s la operación c o n la prioridad m a s elevada. E s decir, en


una expresión matemática, las operaciones con potencias se
efectuarán a n t e s que cualquiera d e las otras.

También puede emplearse esta función para hallar raicee de


índice c u a l q u i e r a . D e f i n a u n a f u n c i ó n a s í :

DEF F N r(x, y )= x *( 1 / y )

s i e n d o x el n ú m e r o e y el í n d i c e d e la r a i z .

El S p e c t r u m d i s p o n e d e u n a f u n c i ó n específica para hallar la


raiz cuadrada d e un número: SQR

SQR 9=3

r e c u e r d e q u e el a r g u m e n t o de SQR nunca debe ser un número


negativo. E s t o m i s m o s e a p l i c a a "*" j el primer número nunca
podrá ser negativo.

L a f u n c i ó n L N c a l c u l a el l o g a r i t m o n e p e r i a n o ( o n a t u r a l ) de un
n ú m e r o . R e c o r d e m o s q u e u n l o g a r i t m o e s el e x p o n e n t e al que hay
que elevar un número determinado (llamado "base") para obtener
el n ú m e r o q u e n o s i n t e r e s a . A s í :

Log (base 10) de 100=2


Pag. 4 0

Los logaritmos en base 10 s e denominan logaritmos vulgares y son


los mas cor r i en temen te utilizados. Los logaritmos naturales
emplean como base el numero "e *.

Así pués, el Spectrum solo calcula directamente los logaritmos


neperianos. Si queremos que nos calcule los vulgares, podemos
definir la siguiente función:

DEF FN l(x)=LN x/LN 10

La función EXP calcula el an t i 1 ogar i tmo neperiano de un número


dado; es decir, eleva "e" a ese número

EXP 10=e A 10

para hallar el anti lógaritmo natural, usaremos

10A numero *

Las funciones t r i gonométr i cas (SIN, COS y TAN) calculan el seno,


coseno y tangente del ángulo que introduzcamos; también existen
funciones que son inversas de las anteriores (ASN, ACS y ATN),
es decir, calculan el arcoseno, arcocoseno y ar cotangente.

Aclaración: el valor de los ángulos debe ser introducido en


radianes; si queremos introducirlo en grados, usemos el
siguiente programa de conversión:

10 INPUT "Angulo? "Ja


2 0 LET ang=a/ 180*PI: REM ang es el ángulo en radianes

Asimismo, las funciones inversas nos darán el resultado en


radianes. Para pasarlo a grados, teclear: '

10 REM rad es el ángulo en radianes


2 0 LET ang=rad /PI *18 0: REM ang es el resultado

PI es palabra clave en el Spectrum; se obtiene pasando a modo


extendido y pulsando luego "M".
Pag. 41

CAPITULO 13

NUMEROS ALEATORIOS

En m u c h o s p r o g r a m a s ( s o b r e t o d o d e j u e g o s ) e s m u y útil disponer
d e un g e n e r a d o r d e n ú m e r o s a l e a t o r i o s . El Spectrum posee para
este cometido la f u n c i ó n RND, la cual genera un número
d i f e r e n t e , c o m p r e n d i d o e n t r e O y 1, cada vez que se activa.
Pruébelo de esta manera:

1 0 F O R n=l T O 2 0
20 PRINT RND
30 NEXT n

Como puede verse RND, a pesar de ser una función, no posee


a r g u m e n t o.

Si ha e j e c u t a d o el p r o g r a m a a n t e r i o r , h a b r a p o d i d o c o m p r o b a r q u e
el n u m e r o q u e s e g e n e r a , o e s O o u n n ú m e r o d e c i m a l m e n o r q u e 1 .
Esto no e s que s e a m u y útil, y a q u e lo q u e n o s i n t e r e s a r a m a s a
m e n u d o e s la c r e a c i ó n d e n ú m e r o s e n t e r o s . P a r a e l l o , si q u e r e m o s
generar números aleatorios comprendidos entre m y n, (ambos
inclusive) haremos:

1 0 F O R a=l T 0 2 0
2 0 P R I N T I N T ( R N D *( n - m + 1 ) ) +m
30 NEXT a

En realidad, los números generados no son ver daderamen te


aleatorios, s i n o que forman parte de una sucesión de 65536
números. Sin embargo, esta sucesión se ha estructurado sin
ninguna norma especifica y eso, unido a su longitud, simula
c i e r t a a 1 eat o r i ed ad . P o d e m o s d e c i r por ello que RND es una
f u n c i ó n " p s e u d o a l e a t o r i a” .

El c o m a n d o R A N D O M I Z E n o s p e r m i t e h a c e r q u e R N D c o m i e n c e a c o n t a r
d e s d e el lugar d e la s u c e s i ó n q u e n o s i n t e r e s e . C o m p r u é b e l o :

10 RANDOMIZE 1
20 F O R n=l T O 1 5
30 PRINT INT (RND*10)
40 N E X T n: P A U S E 1 0 0
50 CLS: GO TO 10
Pag. 4 2

Verá corno la sucesión d e números e s siempre la misma.

Si s e utiliza RANDOMIZE ( o RANDOMIZE O ) el valor asignado p a r a


la sucesión s e basará en el tiempo que el ordenador lleve
funcionando. Compruébelo, c o n el siguiente programa:

1 0 RANDOMIZE
2 0 PRINT PEEK 2 3 6 7 0 + 256*PEEK 23671
30 GO TO 10

L o s números q u e aparezcan, aunque crecientes, s e diferencian


poco el u n o del otro. S i n embargo, c u a n d o el ordenador le
pregunte ’'scroll?" tarde m a s o m e n o s e n pulsar la tecla p a r a
continuar viendo la sucesión? c u a n t o m a s tiempo tarde, m a s
diferencia habra entre el último número escrito y el que
aparezca inmediatamente después d e pulsar la tecla.
Pag. 4 3

CAPITULO 14

OPERADORES LOGICOS

En el capítulo 8 vimos como el ordenador podía tomar decisiones


mediante el conjunto de i nst rucc i ones IF - THEN. Estas
decisiones se tomaban en función de que unas condiciones fueran
verdaderas o falsas, y para establecerlas utilizábamos los
signos <, >, < = , >=, = o <>. A estos símbolos se les denomina
relaciones. Las relaciones no tienen por qué emplearse por
separado; pueden combinarse varias de ellas por medio de los
operadores AND, OR y NOT (todos ellos palabras clave en el
Spectrum ).

Supongamos que queremos relacionar dos condiciones por medio de


operadores lógicos. Estos s e utilizan de la siguiente manera:

condiciónl AND condición2 La relación es


verdadera si ambas
condiciones lo són.

condiciónl OR condición2 La relación es


verdadera si una de
las condiciones lo
e s.

NOT condición Si la condición e s


■falsa, la relación
es verdadera y
viceversa.

La prioridad en la ejecución de estos operadores e s mas baja que


la de las relaciones y las operaciones.

Ejemp 1os:

10 PRINT "Meta 3 números distintos


2 0 INPUT a; " " ;b; " " ;c
3 0 IF a=b OR b=c OR a=c THEN PRINT "no vale": GO TO 2 0

Debemos tener en cuenta que las condiciones tienen un valor


numérico; si son verdaderas tendrán valor 1 y si son -falsas,
valor 0. Puede constatarlo tecleando:
Pag. 44

PRINT 4 =4,404

se imprimirán los números 1 y O, en este orden.

Las oper aciones con AND, OR y N O T también tienen ví a l o r numérico


As r:

a AND b vale a si b es verdadera y 0 en caso con t r ar i o .

a OR b val e 1 si b es verdadera y a en caso contrario.

NOT a val e 0 si a es verdadera y 1 en caso contrar io.

Recuerde que 1 equix /ale a /erdadero" y 0 a "falso"

Veamos una aplicación que nos aclarará lo anterior. Supongamos


□e queremos que un programa salte a una linea determinada según
una opción que escojamos. Podemos hacerlo:

10 PRINT "Escoje opcion"


20 PRINT TAB 10? " 1 - Salto a 1 i nea 100"
30 PRINT : PRINT TAB 10? "2 - Salto a 1 inea 300"
40 PRINT : PRINT TAB 10? "3 - Salto a 1 i nea 800"
50 PAUSE 0: LET aS=INKEYS : < CLS
6 0 I F a $ = " 1 " T H E N GOTO 1 0 0
7 0 I F a $ = " 2 " T H E N GOTO 3 0 0
8 0 I F a S = " 3 " T H E N GOTO 8 0 0
100 PRINT "Linea 100" : STOP
300 PRINT "Linea 300" : STOP
800 PRINT "LINEA 800" : STOP

Sin embargo , e1 programa pod ría escr i b i rse mucho mas


sencillamente de 1a siguiente manera.

10 PRINT " Esco j e opcion"


20 PRINT TAB 10?" 1 - Salta- a 1 i nea 100"
30 PRINT : PRINT TAB 10? "2 - Salto a linea 300"
40 PRINT : PRINT TAB 10? "3 - Salto a linea 800"
50 GOTO ( 1 0 0 AND I N K E Y S = " 1 " ) + ( 3 0 0 AND INKEYS="2" ) + (800
+ INKEYS=" 3")
100 PRINT "Linea 100" : STOP
300 PRINT "Linea 300" : STOP
800 PRINT "LINEA 800" : STOP
Pag 45

Este programa ocupará mucha menos memoria que el anterior y


t e n d r á la v e n t a j a d e q u e s o l o f u n c i o n a r á si s e p u l s a u n a d e las
t r e s t e c l a s e s p e c i f i c a d a s , ahor r a n d o n o s a s í la l i n e a d e control
necesaria. Acostúmbrese a emplear e s t a t é c n i c a en lugar de las
s e n t e n c i a s IF - T H E N .

Por supuesto, podemos utilizar ésto t a n t o c o n c a d e n a s como con


números ( y con variables d e los d o s tipos).
Pag. 46

CAPITULO 15

EL JUEGO DE CARACTERES

C o m o y a s a b e m o s , el S p e c t r u m (y todos los ordenadores) solo


pueden manejar valores numéricos. Eso significa que tendremos
que codificar todas las instrucciones y los caracteres que
empleemos para escribirlas.

Se denominan c a r a c t e r e s a t o d a s las letras, números, s í m b o l o s y


( e n el S p e c t r u m ) p a l a b r a s c l a v e d e BASIC que utilicemos para
e s c r i b i r n u e s t r o s p r o g r a m a s o l o s q u e u t i l i c e el o r d e n a d o r para
entregarnos datos por pantalla o impresora. Hay 256 caracteres,
n u m e r a d o s del O al 2 5 5 y al conjunto de todos ellos se le
denomina "juego de caracteres".

Existen d o s funciones que s e utilizan para manejar directamente


el j u e g o d e c a r a c t e r e s . S o n C O D E y C H R $ .

El a r g u m e n t o d e C O D E e s u n a c a d e n a d e un solo carácter y su
r e s u l t a d o el c ó d i g o c o r r e s p o n d i e n t e a e s e c a r á c t e r .

El a r g u m e n t o d e C H R $ e s u n n ú m e r o d e O a 2 5 5 y proporciona una
cadena cuyo único carácter es el c o r respond ie n t e al número
introducido.

Al -final d e e s t e l i b r o se encuentra la lista del juego de


caracteres, colocados por o r d e n creciente de sus códigos. Si
q u e r e m o s i m p r i m i r el j u e g o e n p a n t a l l a , e m p 1 eernos e 1 s ig u ie n t e
p r o g r a m a:

10 FOR n=32 T0 255


2 0 P R I N T " ( * ; n; M ) " ; C H R $ n
30 NEXT n

L o s primeros 3 1 códigos no cor responden a ningún carácter que s e


p u e d a impr i m i r , p o r e s o l o s e x c l u i m o s. D e 1 a n t e d e c a d a carácter
s e i m p r i m e e n t r e p a r é n t e s i s el código c o r r e s p o n d i e n t e. No le
c a b r á n t o d o s j u n t o s e n la p a n t a l l a , a s í q u e v a y a p u l s a n d o t e c l a s
c a d a v e z q u e s e l l e n e la m i s m a .

Los caracteres cuyos códigos están comprendidos entre 32 y 126


e s t á n t o m a d o s d e un j u e g o d e c a r a c t e r e s s t a n d a r d muy usado en
los EEUU.
Pag. 4 7

Este código se denomina ASCII (American Standard Codes for


Information Interchange). Los caracteres incluidos en el juego
del Spectrum tienen el mismo código que el que tienen en el
ASCII. Hay una excepción: el signo £ .

El carácter 127 es el simbolo de Copyright. Desde el 128 hasta


el 143 se encuentran los símbolos gráficos pr eprogr amados en el
Spectrum y que se encuentran en las teclas numéricas de la 1 a
la 8. Desde el 144 al 164 encontramos los 21 símbolos gráficos
que podemos programar según queramos, aunque aquí aparecen en
forma de letras mayúsculas; ésto se debe a que el ordenador, al
ser conectado, configura estos gráficos como tales letras. Mas
adelante, y en este mismo capítulo, estudiaremos la manera de
programar estos caracteres.

Del numero 165 en adelante se encuentran los "tokens" o palabras


clave del Spectrum. Tanto éstas como los símbolos gráficos no
forman parte del codigo ASCII sino que son propios del Spectrum.

Como habíamos dicho, los primeros 3 2 caracteres (del O al 31) no


han sido incluidos en la relación, ya que no producen nada que
pueda imprimirse. S e les denomina "caracteres de control".

Uno de estos caracteres puede ser de gran utilidad; se trata de


CHR$ 8. Este carácter hace retroceder la posición de impresión
una posición de carácter hacia la izquierda. Pruebe:

PRINT "perro"5CHR$ 8; "a"

Para terminar, ejecute el siguiente programa

10 PRINT CODE INKEYS


20 PAUSE 0
3 0 GO TO 10

El primer número que aparecerá sera un cero; efectivamente, este


es el código correspondiente ’ a "ninguna tecla" Ahora
entreténgase pulsando las teclas de cursor, los modos, EDIT,
DELETE y ENTER. Verá como a todas corresponde un número. Esta es
la manera en que el Spectrum comprende todas estas operaciones.

Aprovechamos para indicarle que cuando utilice las condiciones


<, >, >= o <= estas atenderán, no al auténtico orden alfabético
sino al orden en que se encuentren las letras en el ASCII.
Pag. 4 8

Veamos ahora unas cuantas cadenas en el orden en que serían


colocadas por el Spectrum:

CHR« 8 ♦ "hola"
" zapato"
-120"
“Suceso"
"aquí "

Vamos ahora a ver como s e definen los caracteres gráficos


(también llamados "GDU") que nos interesen. Para entender ésto,
vamos a ver primero la manera en que el Spectrum compone los
caracteres.

Cada "posición de carácter" está compuesta por una retícula de 8


x 8 cuadraditos, como si fuera una hoja de papel cuadriculado. A
cada uno de estos cuadraditos se le denomina "pixel" y al estar
oscurecidos o no configuran el carácter que nos interesa.

Cada linea de 8 cuadraditos se almacena en una posición


determinada de memoria, por orden de arriba a abajo. Dado que
cada linea representa un byte, podemos pensar en ella como un
numero binario de ocho dígitos. Los ceros de dicho número
cor responder án a las cuadraditos claros y los unos a los
oscuros. Para i lustrar ésto, ejecute el siguiente programa:

10 PLOT 95,80: DRAW 0,64: DRAW 64,0: DRAW 0,-


-64,0
15 PRINT AT 4,125" "
2 0 PRINT AT 6,12;” M M
3 0 PRINT AT 7,12; - ■
4 0 PRINT AT 8 ,12; " 8
5 0 PRINT AT 9,12;" •
6 0 PRINT AT 10,12; " B • "
7 0 PRINT AT 4,8560 ; AT 5,8JO;AT 6,8J12O;AT 7,8J68;AT
8,8;68;AT 9,8;68;AT 10,8;68;AT ll,8;o
8 0 FOR n=l TO 6 4 STEP 8
9 0 PLOT 95,n+79: DRAW 64,0
100 PLOT n+94,80: DRAW 0,64
110 NEXT n

No haga caso a los comandos que no conozca; limítese a


i nt roduc i r 1o.
Pag, 4 9

Los cuadrados negros han de introducirse activando el modo


gráfico y pulsando CAPS SHIFT y 8 simultáneamente para imprimir
cada cuadrado. Recuerde volver al modo "L” cuando haya
terminado.
H
Al ejecutar el programa le aparecerá el carácter ñ " definido
sobre la correspond i ent e rejilla de 8 x 8. Los números que
aparecen a la izquierda son los valores cor r espond i en tes a cada
número que tendremos que introducir en la memoria.

Para hallar estos valores hemos hecho lo siguiente:

1.- Escribir los números binarios correspondientes, basándonos


en el carácter que queramos definir. En este caso:

0011 1100
00000000
011 1 1000
01000100
01000100
01000100
01000100
00000000

Si sustituimos los unos por cuadrados negros y los ceros por


espacios, observaremos como coincide la configuración resultante
con la del carácter.

2.- Pasar los números binarios a números decimales. Hay una


función en el Spectrum que pasa directamente los números
binarios a decimales: BIN. Hagamos:

10 INPUT A
2 0 PRINT BIN A
3 0 GO TO 10

Introduzcamos los números binarios resultantes del apartado 1 y


tendremos sus valores decimales. Como s e ve, coinciden con los
que aparecen impresos en pantalla en el programa.

Lo siguiente que debemos hacer e s introducir estos números en la


memoria del ordenador. Supongamos que vamos a definir este
carácter en el gráfico "A" es decir, que al pulsar la ”A“ en
modo gráfico nos aparecerá el carácter. La dirección del primer
byte es USR "a", la siguiente USR "a M +l, la siguiente USR "a"+2
y asi sucesivamente hasta llegar a USR "a"+7.
Pag. 50

USR e s u n a f u n c i ó n cuyo argumento es un carácter de la "a" a la


"u” y su resultado es la dirección del primer byte del
correspondiente gráfico definido por el usuario. Hay otro uso
para USR, que veremos en un próximo capitulo.

Para 1o s en la memoria usaremos el s i gu i ente


progr ama

10 FOR n = 0 T 0 7
20 READ a: POKE USR
30 NEXT n
40 DATA 60,0,120,68,68,68,68,0

POKE e s u n c o m a n d o q u e i n t r o d u c e directamente un número en la


memoria del ordenador. Ese número debe estar comprendido entre 0
y 255. Su inverso es la función PEEK, que permite leer una
posición de memoria determinada. Hablaremos mas sobre ésto en el
capítulo dedicado a la memoria.
Pag, 51

CAPITULO 1 6

L O S C O L O R E S D E L SPECTRUM

El Spectrum e s capaz d e producir imágenes e n color. S e p u e d e


escoger e n t r e 8 colores: Negro, Azul oscuro, Rojo, Magenta.,
Verde, Azul Claro, Amarillo y Blanco. C o m o s e ve, hemos descrito
los colores dependiendo d e s u brillo, del m a s o s c u r o al mas
claro; asimismo, p a r a designar e s t o s c o l o r e s s e emplea u n número
del 0 al 7 . Pruebe:

1 0 F O R n=0 T 0 7
2 0 P R I N T PAPER nJ"
3 0 NEXT n

tendremos 8 f r a n j a s d e color diferente. C o m o s e v e O corresponde


a negro ( m a s oscuro) y 7 al blanco (el m a s c l a r o ) .

T o d o s e s t o s c o l o r e s pueden emplearse simultáneamente en la


pantalla; la ú n i c a limitación q u e existe e s que s o l o pueden
definirse d o s colores por c a d a posición d e carácter : u n o para 1
parte oscura ( I N K ) y o t r o p a r a la parte c l a r a (PAPER). P a r a
comprender mejor ésto, revise en el capitulo 1 5 la p a r t e
dedicada a definición d e caracteres.

Existen o t r o s d o s comandos d e color, BRIGHT y FLASH, que pueden


utilizarse conjuntamente c o n INK y P A P E R . El primero indica
"brillo especial" y s e a c t i v a con BRIGHT 1. El segundo indica
"parpadeo" y s e activa c o n FLASH 1. E s t o s d o s c o m a n d o s s e
desactivan con BRIGHT O y F L A S H O , respectivamente.

C o m o en el c a s o d e PAPER e INK, s o l o puede definirse u n valor-


d e BRIGHT y F L A S H p a r a c a d a posición d e carácter. L a combinación
d e un valor d e PAPER, o t r o d e INK, o t r o d e BRIGHT y o t r o d e
FLASH s e denomina "atributo" d e e s a posición d e carácter.

Hay otro comando que c o n t r o l a el color del contorno d e la


pantalla ( d o n d e no puede escribirse) y el q u e tiene el f o n d o de
las d o s lineas inferiores ( l a s empleadas p a r a informes). Se
llama BORDER y s e utiliza d e la siguiente f o r m a (ejemplo):

1 0 FOR n = 0 T 0 7
2 0 BORDER n: P A U S E 2 0
3 0 NEXT n
Pag. 5 2

Al conectar el ordenador, todas las posiciones tienen valor de


INK, BRIGHT y FLASH igual a 0 y PAPER y BORDER igual a 7 (es
decir, todo se imprime en negro sobre fondo blanco y sin
parpadeo).

Pueden emplearse estos comandos para cambiar los atributos d e


toda la pantalla; ésto funcionara directamente con todos menos
con PAPER. Pruebe:

10 BORDER 2í PAPER 2 ¡ INK 7


2 0 PRINT "Fondo rojo, letras en blanco"
3 0 PAUSE 0: PRINT "Ahora toda la pantalla"

Al ejecutar el programa, el primer mensaje aparecerá con los


colores que ha definido, pero el resto de la pantalla seguirá de
color blanco. Pulse una tecla y entonces toda la pantalla tendrá
los atributos definidos en la linea 10.

Si desea que los colores de la pantalla completa cambien desde


el primer momento, utilice la siguiente linea al principio del
progr ama:

BORDER 2: PAPER 2: INK 7 : CLS

Los valores normales de INK y PAPER están comprendidos entre O y


7, pero pueden utilizarse también los números 8 y 9 . El número 8
puede emplearse con todos los comandos de color (menos con
BORDER). Su efecto es que la sentencia PRINT que sigue a aquella
en la que se ha aplicado imprimirá la información en el mismo
color. El numero 9 sólo puede emplearse con PAPER e INK e indica
que el papel ( o la tinta) han de contrastar; es, decir, que si s e
emplea un papel claro, la tinta será oscura y viceversa.

Cualquier utilización errónea de números para estos comandos


dará origen al error "K Invalid Colour".

Los atributos de las dos íineas inferiores s e controlan


normalmente por medio de BORDER e INK 9 ; no s e puede utilizar en
ellos PAPER, BRIGHT ni FLASH.

Existen otros dos comandos, INVERSE y OVER que, aunque no


mod ifican los atributos alteran la imp resión. Sus valores pueden
ser 0 o 1 (igual que en el caso de BRIGHT y FLASH). INVERSE 1
realiza el efecto de cambiar el papel por la tinta; es decir,
los cuadraditos oscuros se vuelven claros y viceversa.
Pag, 5 3

OVER 1 permite la sobreimpresión de dos caracteres en una misma


posición de carácter? de no emplearse OVER, el nuevo carácter
simplemente borraría al antiguo. Este programa utiliza OVER para
imprimir la "ñ":

10 OVER 1
2 0 PRINT "nin"?CHR$ 8?" o"

(Recuerde que CHRS 8 serv ía para retroceder la posición de


impresión )

Los comandos INK, PAPER, etc., pueden utilizarse como


complementarios de las sentencias PRINT, con el fin de que
actúen sólo con los elementos de dichas sentencias.

10 PRINT PAPER 1JINK 7? "esto en tinta blanca, papel azul”


2 0 PRINT "esto en el papel y tinta definido antes"

Podemos emplear esta cualidad para introducir atributos en la


parte inferior de la pantalla. Por ejemplo, podemos utilizar INK
y PAPER en una sentencia INPUT

INPUT PAPER 2? INK 7? “color “Ja

Se puede también escribir 1 en las dos ultimas lineas de la


pantalla (y emplear comandas de color) de la siguiente forma:

PRINT # 1? PAPER 4? INK O? AT 0,l?"PULSE UNA TECLA PARA


CONTINUAR": PAUSE 0

Recuerde en este caso que la aparición de cualquier mensaje o


cursor INPUT borrará lo que hemos escrito en estas lineas.

Podemos omitir el uso de los comandos de color y establecer los


atributos por medio de caracteres de control. Recuerde que en
capitulo anterior hablábamos _,de caracteres que no podían
imprimirse. Los caracteres de control que manejan el color son:

CHRÍ 16 equ i val e a INK


CHR$ 17 equ i val e a PAPER
CHRS 18 equ i val e a FLASH
CHR$ 19 equ i vale, a BRIGHT
CHF$ 20 equ i val e a INVERSE
CHR$ 21 equ i va 1 e a OVER
Pag. 54

Asi pues

CHR$ 17 ♦ CHRS 4

equivale a

PAPER 4

Estos caracteres no tienen por que ser introducidos


necesariamente empleando CHRS. Pueden introducirse directamente
en Modo Extendido utilizando las teclas numéricas. Las reglas
para ésto son las siguientes (siempre en Modo Extendido):

Los números 0 al 7 controlan el color del papel.

Si se utilizan con CAPS SHIFT determ i nan e1 color de


la tinta

Pulsando 8 y 9 se controla el brillo (9 1o conecta, 8


lo desconecta) .

Pulsando 8 y 9 con CAPS SHIFT se actúa sobr-e el FLASH


(9 activar, 8 desactivar).

Los caracteres de control funcionarán en un listado BASIC


mientras no se cambien. Para comprobar ésto haga lo siguiente:

10 PRINT "prueba de caracteres de control"


20 PRINT “continuación-

En la linea 10, después de las comillas, introduzca un carácter


de control (por ejemplo, pulsando Modo Extendido, apriete el
numero 6) y la frase aparecerá afectada por el carácter
introducido. Al introducir la siguiente linea, esta quedará
también afectada. Para eliminar el efecto del carácter de
control ' deber á introducir otro al final de lo que quiera
imprimir.

Ahora bién, si corre el programa verá que, aunque el listado ha


resultado afectado, no ha sido as ' con el texto impreso en la
linea 20. De todas formas, tenga cuidado al utilizar los
caracteres de control en listados, para evitar confusiones en el
mi s m o .
Pag. 55

Aunque los colores a utilizar no sean mas que 8 podemos simular


más tonalidades empleando un gráfico definido por el usuario. El
programa puede ser como sigue:

10 FOR n = 0 TO 7
20 READ a : POKE USR " a " + n , a
30 NEXT n
40 INPUT a,b
50 I F a > 8 OR b > 8 T H E N GO TO 4 0
60 P R I N T P A P E R a ; I N K b J " AAAAAAAAAAAAAAAAAAAAAAAAAAAAA ”
70 GO TO 4 0
80 DATA 8 5 , 1 7 0 , 8 5 , 1 7 0 , 8 5 , 1 7 0 , 8 5 , 1 7 0

(Las letras "A” de la linea 60 han de ser entradas en Modo


Gráf ico)

El programa imprimirá una serie de lineas de diferentes colores


(hasta 64) según sea la combinación de colores que introduzca
por medio de la sentencia INPUT de la linea 40. Por supuesto que
si introduce dos números i guales la f r an j a será del color
correspondiente.

En el capitulo dedicado al f i chero de pantal la hablaremos mas


del uso de los colores.

Para terminar, diremos que existe una fuñe i ón 1 1amada POINT,


cuyo argumento es una coordenada de pixel determinada y cuyo
resultado es 1 ó 0 (dependiendo si el pixel cor respond i en te es
de tinta o de papel, r espec t i vamen te ) . En el capitulo dedicado a
los dibujos en alta resolución hablaremos de las coordenadas de
pixel.
Pag. 56

CAPITULO 17

GRAFICOS E N ALTA RESOLUCION

R e c o r d e m o s q u e e n la p a n t a l l a t e n í a m o s d i s p o n i b l e s 3 2 x 2 2 ( 7 0 4 )
posiciones de carácter. Como cada una de esas posiciones
disponía de 8 x 8 (64) cuadraditos o "pixels”, resulta que
tenemos disponibles 256 x 1 7 6 pixels, que podemos oscurecer o
dejar en blanco a voluntad.

E s t o n o s p e r m i t e la r e a l i z a c i ó n d e d i b u j o s e n alta resolución.
Los comandos que permiten e s t e tipo de dibujo utilizan como
argumento las c o o r d e n a d a s d e la p a n t a l l a en a l t a r e s o l u c i ó n . L o s
extremos d e estas coordenadas son 0 , 0 p a r a la esquina inferior-
izquierda, 255,0 para la inferior derecha, 0,175 para la
s u p e r i o r i z q u i e r d a y 2 5 5 , 1 7 5 p a r a la s u p e r i o r d e r e c h a .

El c o m a n d o P L O T d e f i n e un punto en las coordenadas que le


e s p e c if i q u e m o s

1 0 F O R n=l T 0 2 0 0 S T E P 5
20 PLOT n,50
30 NEXT n

Este otro programa t r a z a la g r á f i c a del seno de los ángulos


comprendidos entre 0 y 360 grados.

10 FOR x=0 T0 255


20 PLOT x,88 + 80*SIN (n/128*PI)
30 NEXT x

(Recuerde que tanto S I N como PI son palabras clave)

La sentencia DRAW traza u n a linea recta

PLOT 0,100: DRAW 1 0 0 , 0 '

t r a z a r á u n a l i n e a h o r i z o n t a l p a r t i e n d o del p u n t o 0,100 de 100


pixels d e longitud. Si ahora hacemos:

DRAW 3 0 , 3 0

v e r e m o s q u e la n u e v a l i n e a t r a z a d a t i e n e s u o r i g e n e n el e x t r e m o
final d e la a n t e r i o r .
Pag. 57

El punto desde donde actúa una sentencia DRAW se denomina


"posición PLOT" y cambia con cada ejecución de una sentencia
DRAW. P r u e b e l o siguiente:

s
10 PLOT 50,50*. DRAW 3 0 , 0
20 DRAW 0,30
30 DRAW -30,0
40 DRAW 0,-30

obtedremos un cuadrado de lado 30 pixels. Pruebe a introducir


PLOT 50,50 al principio de las lineas 20, 30 y 40 y vea como
cambia la ejecución del programa.

Observe que se pueden emplear números negativos en una sentencia


DRAW. N u n c a p u e d e n e m p l e a r s e con PLOT.

RUN, CLEAR, NEW y C L S c o l o c a n la posición PLOT en el punto 0,0.

Se pueden utilizar comandos de color en sentencias DRAW, aunque


se deben tener en cuenta las limitaciones para la resolución de
los colores en la pantalla. Pruebe lo siguiente:

10 FOR n = l T 0 2 0 0 STEP 1 0
20 PLOT n,50: DRAW I N K I N T ( R N D * 8 ) ; 0 , 5 0
30 NEXT n
40 PLOT 0,80: DRAW I N K 6 ; 2 0 0 , 0

Como vemos, la linea horizontal ha alterado el color de las


lineas verticales en la posición de carácter por donde las ha
atravesado .

Puede emplearse DRAW c o n u n t e r c e r número para trazar arcos de


circunferencia. El número puede considerarse como la fracción de
círculo que se quiera trazar. Pruebe:

10 PLOT 80,80í DRAW 5 0 , 5 0 , P I

Dibujará una sern i c i r c u n f e r e n e i a .

Pueden obtenerse efectos curiosos empleando valores grandes para


el tercer número. Borre la pantalla y teclee:

PLOT 80,80: DRAW 5 0 , 5 0 , 3 5 0


Pag. 58

El c o m a n d o C I R C L E d i b u j a u n c í r c u l o . S e e m p l e a a s í :

CIRCLE x,y,r

sierido x e y l a s c o o r d e n a d a s del c e n t r o del c í r c u l o y r el r a d i o


del m i s m o ( e n p i x e l s ) .

Ya hemos visto que s e pueden emplear los comandos PAPER e INK


con una sentencia PLOT o DRAW. También pueden emplearse OVER e
I N V E R S E , a u n q u e los e f e c t o s c o n s e g u i d o s s e r á n d i f e r e n t e s a los
que s e obtienen normalmente.

PLOT INVERSE 1 dibujará un "punto borrador", e s decir, que si


hacemos P L O T INVERSE 1 en un punto previamente definido é s t e se
borrará; para s e r m a s exacto, e s t a s e n t e n c i a pone d e c o l o r P A P E R
el p u n t o a d o n d e s e a p l i q u e .

PLOT OVER 1 posee un efecto similar al anterior, pero mas


c o m p l e t o : si s e a p l i c a s o b r e u n p i x e l " P A P E R " lo convertirá en
"INK" y viceversa.

Veamos un ejemplo. Teclee:

10 P R I N T AT 11,0; " V a m o s a tachar e s t a linea"


20 PLOT 0,84: DRAW 2 1 0 , 0
30 PAUSE 200
40 P L O T 0 , 8 4 : D R A W I N V E R S E 1; 2 1 0 , 0

A u n q u e la l i n e a q u e t a c h a b a la e s c r i t u r a h a s i d o b o r r a d a , queda
el r a s t r o d e l a m i s m a . S i n e m b a r g o s i escribimos el programa
a s r:

10 P R I N T AT 11,0; " V a m o s a tachar e s t a linea"


20 P L O T 0 , 8 4 : D R A W O V E R 1; 2 1 0 , 0
30 PAUSE 200
40 P L O T 0 , 8 4 : D R A W O V E R 1; 2 1 0 , 0

L a linea d e s a p a r e c e r á s i n dejar r a s t r o .
Pag. 59

CAPITULO 18

SONIDO: USO DE BEEP

El S p e c t r u m p u e d e p r o d u c i r s o n i d o s q u e s i r v a n p a r a complementar
s u s p r o g r a m a s . P a r a e l l o s e d i s p o n e del comando BEEP, que se
u t i l i z a d e la s i g u i e n t e f o r m a :

BEEP duración, tono

L a d u r a c i ó n s e e x p r e s a e n s e g u n d o s y el t o n o e n semitonos. Los
valores extremos que s e pueden utilizar son d e O a 10 para la
d u r a c i ó n y d e - 6 0 a 6 9 p a r a el tono. Los valores pueden ser
números fraccionarios.

Pruebe este programa:

10 FOR n=-10 T0 70
20 BEEP .5,n
30 NEXT n

tocará notas cada vez mas altas y terminará parándose con un


m e n s a j e d e e r r o r " I n t e g e r o u t of r a n g e " .

El v a l o r 0 e s el " d o " c e n t r a l d e la e s c a l a m u s i c a l . El r e s t o de
los n ú m e r o s s i g u e n la m i s m a e s c a l a q u e l a s teclas consecutivas
d e u n p i a n o . E s d e c i r , 1 e s R E b e m o l , 2 e s R E , 3 MI b e m o l , e t c .

Desgraciadamente su Spectrum solo puede tocar una nota de cada


vez, d e f o r m a q u e los acordes están prohibidos. Es posible
simularlos con rutinas en c ó d i g o máquina que en realidad se
l i m i t a n a t o c a r d o s n o t a s u n a d e t r a s d e la o t r a , pero lo hace
tan rápido que parece que s e oyen juntas.

Puede simularse algunos de estos efectos empleando BASIC.


Pruebe:

1 0 F O R n=4 T 0 3 2 S T E P 4 : I
FOR m=n T O 4 STEP -1
20 FOR p=32 TO n-64 STEP -10: BEEP .01,m
30 NEXT p: NEXT m: NEXT n
Pag. 60

CAPITULO 19

LA MEMORIA

Y a d i j i m o s al p r i n c i p i o d e e s t e m a n u a l que el m icr o p r o c e s a d o r
con que esta equipado el Spectrum solo entiende las
i n s t r u c c i o n e s s i s e le e n v í a n en f o r m a d e n ú m e r o s b i n a r i o s . C a d a
O o 1 de cada uno de estos números binarios s e denomina "bit" y
c o n s e c u e n t e m e n t e s o l o p u e d e t e n e r d o s v a l o r e s : 0 o 1.

Cada número binario que s e procesa esta compuesto d e 8 bits y s e


le d e n o m i n a " b y t e " ( s e p r o n u n c i a " b a i t " ) u "octeto”. El mayor
número que s e puede almacenar en un byte es 255 (es decir
11111111 b i n a r i o ) . P o d e m o s d e c i r q u e u n b y t e e s la m e n o r unidad
de memoria.

C a d a u n o d e los l u g a r e s d e la m e m o r i a del o r d e n a d o r e n d o n d e se
p u e d e a l m a c e n a r un b y t e s e denomina "posición de memoria" o
" d i r e c c i ó n " El Spectrum posee un total de 65536 de estas
p o s i c i o n e s , n u m e r a d a s d e la 0 a la 6 5 5 3 5 .

L a s p o s i c i o n e s O a 1 6 3 8 4 c o n s t i t u y e n la R O M ( a b r e v i a t u r a d e R e a d
Only Memory - Memoria de s o l o lectura). En e s t a s posiciones se
a l m a c e n a el " s i s t e m a operativo" (programa escrito en código
máquina que sirve para hacer comprender al ordenador las
i nst rucc i o n e s ), el l e n g u a j e B A S I C y el j u e g o d e caracteres que
s e u s a p a r a imprimir los t e x t o s e n la p a n t a l l a . C o m o s u nombre
indica, e s t a m e m o r ia n o p u e d e s e r b o r r a d a ni s e puede escribir
en e l l a ; la i n f o r m a c i ó n c o n t e n i d a en la m i s m a e s t a d i s p o n i b l e e n
c u a n t o s e c o n e c t a el o r d e n a d o r .

L a s posiciones de memoria 16384 a 6 5 5 3 5 constituyen la memoria


RAM ( R a n d o m A c c e s s M e m o r y - M e m o r i a de acceso aleatorio). En
e s t a m e m o r i a s e p u e d e e s c r i b i r , leer o b o r r a r lo que interese.
T o d a la i n f o r m a c i ó n e n e l l a c o n t e n i d a s e b o r r a al d e s c o n e c t a r el
ordenador.

C u a n d o s e e s c r i b e o e j e c u t a un p r o g r a m a en B A S I C , el ordenador
v a a s i g n a n d o v a l o r e s c o m p r e n d i d o s e n t r e 0 y 2 5 5 a los b y t e s d e
la RAM. Se pueden introducir valores directamente en las
d i s t i n t a s p o s i c i o n e s d e m e m o r i a u t i l i z a n d o el comando POKE de
la s i g u i e n t e f o r m a :

POKE dirección, contenido


Pag. 61

L a dirección puede estar comprendida entre 16384 y 65535 (la


R A M ) . S i u t i l i z a m o s P O K E e n l a R O M el o r d e n a d o r simplemente no
n o s h a r a ni c a s o .

P a r a leer u n a d i r e c c i ó n s e e m p l e a l a f u n c i ó n P E E K . P r u e b e :

POKE 40000,30

y luego

PRINT PEEK 40000

C o m o s e v e , el u s o d e P O K E e s r e a l m e n t e útil c u a n d o s e t r a t a de
introducir datos directamente en la memoria, aunque también
puede ser algo muy peligroso; puede alterarse substanc ia 1ment e
el p r o g r a m a q u e e s t é e n e s e m o m e n t o e n m e m o r i a .

A p a r t i r d e la d i r e c c i ó n 1 6 3 8 4 h a s t a l a 23296 se almacena la
i m a g e n p a r a la p a n t a l l a d e t e l e v i s i ó n . E s lo que se llama el
“■Fichero d e p a n t a l l a " . L o s primeros 6 1 4 4 bytes almacenan la
imagen propiamente d i c h a y los 768 r e s t a n t e s los c o l o r e s de la
misma. Hablaremos mas extensamente de esto en el capítulo
d e d i c a d o al f i c h e r o d e p a n t a l l a .

D e s d e l a d i r e c c i ó n 2 3 2 9 6 a la 2 3 5 5 2 s e e n c u e n t r a el "buffer" o
m e m o r i a i n t e r m e d i a d e la impresora. En ella se guardan los
caracteres destinados a s e r impresos. C u a n d o s e ha llenado, su
c o n t e n i d o s e e n v í a a la i m p r e s o r a .

Desde la 23552 a la 23734 se almacenan las denominadas


" v a r i a b l e s del s i s t e m a " . S o n v a l o r e s que el propio ordenador
a c t u a l i z a s e g ú n s u s n e c e s i d a d e s . S e h a b l a r á d e las funciones y
u t i l i d a d e s d e e s t a s v a r i a b l e s e n el c a p í t u l o c o r r e s p o n d i e n t e.

En la dirección 2 3 7 3 4 c o m i e n z a u n a zona denominada "Mapas de


Microdrive". C o m o s u n o m b r e indica, s p l o e s t a r á o c u p a d a si está
conectado ese periférico. A continuación d e esta z o n a viene otra
d e s t i n a d a a r e t e n e r i n f o r m a c i ó n s o b r e el ú l t i m o c a n a l u t i l i z a d o .
L o s c a n a l e s m á s i m p o r t a n t e s s o n el " K " ( t e c l a d o ) , " S " ( p a n t a l l a )
y *P" (impresora). L a dirección d o n d e c o m i e n z a e s t a zona está
a l m a c e n a d a e n l a v a r i a b l e del s i s t e m a C H A N S .

Los programas en BASIC comienzan normalmente en la dirección


23755.
Pag. 62

P r i m e r o s e a l m a c e n a el p r o g r a m a e n s í , l u e g o las variables (a
p a r t i r d e la d i r e c c i ó n e s p e c i f i c a d a e n l a v a r i a b l e del sistema
V A R S ), d e s p u é s la l i n e a d e p r o g r a m a q u e s e e s t á e d i t a n d o y por
último u n a serie de datos. Por ejemplo, los números con los que
s e e s t á c a l c u l a n d o o las d i r e c c i o n e s a las q u e hay q u e volver e n
caso de GOSUB.

La zona de BASIC termina en la dirección contenida en la


variable RAMTOP. Puede alterarse este valor utilizando el
c o m a n d o C L E A R d e la s i g u i e n t e m a n e r a :

CLEAR nueva dirección d e RAMTOP

Esta sentencia tiene mas efectos aparte del ya descrito de


cambiar la RAMTOP; b o r r a t o d a s las variables, el fichero de
p a n t a l l a y r e s t a b l e c e la p o s i c i ó n P L O T a las coordenadas 0,0.
T a m b i é n t r a s l a d a la pila de GOSUB (donde se almacenan las
direcciones de vuelta de las subrutinas).

Los últimos 168 bytes de la memoria contienen los datos


c o r r e s p o n d i e n t e s a l o s G . D . U . ( g r á f i c o s p r o g r a m a b 1 e s ).

L a sentencia CLEAR permite reservar espacio para programas en


c ó d i g o m á q u i n a , r e d u c i e n d o el a r e a del B A S I C , o p o r el c o n t r a r i o
s u m a r a l a m i s m a la z o n a d e g r á f i c o s d e f i n i d o s p o r el u s u a r i o .

Como dijimos, e n un b y t e solo se puede almacenar un número


igual o m e n o r d e 2 5 5 . P e r o el o r d e n a d o r t a m b i é n p u e d e almacenar
n ú m e r o s h a s t a 6 5 5 3 5 u t i l i z a n d o 2 b y t e s . El n ú m e r o s e descompone
en o t r o s d o s menores d e 2 5 5 . P a r a ver c o m o s u c e d e ésto, ejecute
el s i g u i e n t e p r o g r a m a :

10 INPUT -Numero d e 0 a 65535“; a


20 RANDOMIZE a
30 P R I N T PEEK 23670,PEEK 23671

C u a n d o h a y a i n t r o d u c i d o el n ú m e r o , a p a r e c e r á n en pantalla dos
n ú m e r o s ; al p r i m e r o s e le l l a m a " b y t e m e n o s s i g n i f i c a t i v o " y al
s e g u n d o " b y t e m a s s i g n i f i c a t i v o " . C o m o s e v e , s e han almacenado
estos números en dos posiciones de m e m o r i a c o r r e 1 at i v a s, el
m e n o s s i g n i f i c a t i v o el p r i m e r o . P a r a r e c o n s t r u i r el n ú m e r o h a g a :

PRINT PEEK 23670+256*PEEK 23671


Pag. 63

T o d o s los n ú m e r o s s e a l m a c e n a n e n la m e m o r i a e n e s t e o r d e n , con
una excepción: los números de linea del BASIC. Teclee lo
s i g u i e n t e:

1 0 REM linea 0

y luego:

PRINT PEEK 23756+256*PEEK 23755

a p a r e c e r á el n u m e r o 1 0 . A h o r a h a g a :

POKE 23755,0: POKE 23756,0

! ! s o r p r e s a ! ! el l i s t a d o s e v e r a a s( a h o r a :

O REM 1 inea 0

trate d e editar esta linea.

P a r a restablecer haga los siguiente:

POKE 23756, 1

M u c h a s v a r i a b l e s del s i s t e m a e m p l e a n e s t e m é t o d o p a r a i n t r o d u c i r
n ú m e r o s . L o v e r e m o s e n el c a p í t u l o c o r r e s p o n d i en t e.
Pag, 64

CAPITULO 20

MEDIOS DE ALMACENAMIENTO EXTERNO

Como dijimos en el capítulo dedicado a la memoria, la


información c o n t e n i d a en la m e m o r i a R A M s e b o r r a r á c a d a v e z que
s e d e s c o n e c t e el o r d e n a d o r . C o m o n o p o d e m o s tener el Spectrum
conectado indefinidamente, e s t o s i g n i f i c a r á la pérdida de los
programas y datos.

Para poder utilizar de nuevo la información tendríamos dos


m e d i o s ; el p r i m e r o , v o l v e r a i n t r o d u c i r l a t o d a e n el ordenador,
lo q u e n o e s u n a s o l u c i ó n m u y p r ác t i c a . .. 1 a s e g u n d a ( q u e es la
que se emplea) consiste en almacenarla en algún dispositivo
a j e n o al p r o p i o o r d e n a d o r , a n t e s d e d e s c o n e c t a r éste; de esta
f o r m a , s i q u e r e m o s r e c u p e r a r la i n f o r m a c i ó n , s o l o t e n d r e m o s que
c a r g a r l a e n el e q u i p o d e s d e e s e d i s p o s i t i v o .

Todos los sistemas de almacenamiento se basan en soportes


magnéticos: cintas o discos. El más corrientemente utilizado
e n el S p e c t r u m ( p o r s u e c o n o m í a ) e s l a cinta de cassette. El
grabador que se utilice debe cumplir ciertas condiciones:

- n o s e r e s t e r e o f o n ic o

- poseer una buena respuesta d e frecuencia entre 900 y


1100 Hertzios

- Tener c o r rec t a m e n t e ajustada la cabeza de


grabación-reproducción.

- Tener un nivel d e s a l i d a lo suficientemente fuerte


como para que los datos puedan ser recibidos por el
o r d e n a d o r.

si alguna de estas características le son desconocidas,


c o n s u l t e a u n e s p e c i a l i s t a . P a r a c o n e c t a r el c a s s e t t e , s i g a las
i n s t r u c c i o n e s c o n t e n i d a s e n la I n t r o d u c c i ó n d e e s t e l i b r o .

Los comandos utilizados para la carga y grabación son los


siguientes:
Pag. 65

1 - SAVE S e u s a a s í : S A V E " n o m b r e del p r o g r a m a "

E s t e c o m a n d o g r a b a e n l a c i n t a el p r o g r a m a e n B A S I C q u e hay
en la m e m o r i a . Una vez introducido, aparece el mensaje
" s t a r t t a p e and p r e s s a n y k e y " . R e t i r e e n t o n c e s la c l a v i j a
EAR, a r r a n q u e el c a s s e t t e ( p u e s t o en modo "grabación") y
pulse cualquier tecla. Aparecerá una secuencia de dos
s e g u n d o s d e d u r a c i ó n d e r a y a s i g u a l e s d e c o l o r r o j o y azul y
a continuación otra muy corta de rayas amarillas y negras.
E s t o n o s i n d i c a q u e el ordenado ha introducido un corto
b l o q u e d e i n f o r m a c i ó n q u e le s e r v i r á m a s t a r d e d e r e f e r e n c i a
p a r a c a r g a r el p r o g r a m a d e s d e la c i n t a . E s t e b l o q u e c o n t i e n e
el t i p o d e i n f o r m a c i ó n ( B A S I C , c ó d i g o m á q u i n a o m a t r i z ) , la
longitud del b l o q u e y la l i n e a d e a u toej e c u c ión (si existe)
o la d i r e c c i ó n d e c o m i e n z o ( s i s e t r a t a d e c ó d i g o máquina).
A e s t e b l o q u e s e le l l a m a " c a b e c e r o " .

D e s p u é s d e ésto, a p a r e c e r á o t r a s e c u e n c i a d e u n segundo de
rayas azules y rojas y después otra configuración de rayas
amarillas y negras. Esta última corresponde al programa
propiamente dicho.

Si s e d e s e a g r a b a r el p r o g r a m a d e m a n e r a q u e s e autoej ecute
s e u t i l i z a el c o m a n d o :

SAVE "nombre" L I N E linea d e autoej ecuc ió n

(LINE e s palabra clave)

U n a v e z c a r g a d o , el p r o g r a m a c o m e n z a r á a e j e c u t a r s e a p a r t i r
d e la l i n e a q u e h e m o s i n d i c a d o .

Si lo q u e s e d e s e a g r a b a r e s c ó d i g o m á q u i n a , h a r e m o s :

S A V E " n o m b r e " C O D E d i r e c c i ó n , longitud

" d i r e c c i ó n " e s la p o s i c i ó n e n la m e m o r i a del p r i m e r b y t e q u e


s e d e s e a g r a b a r , " l o n g i t u d " e s la c a n t i d a d d e b y t e s a g r a b a r
d e s d e la " d i r e c c i ó n " .

SAVE también permite grabar matrices, que pueden ser


u t i l i z a d a s d e e s t a -forma c o m o a r c h i v o s e x t e r n o s d e d a t o s . S e
hace así:

S A V E " n o m b r e " D A T A " n o m b r e d e la m a t r i z " ( )


Pag. 66

El n o m b r e d e la m a t r i z d e b e e s t a r c o m p u e s t o por una letra


( e n c a s o d e q u e s e a u n a m a t r i z n u m é r i c a ) o por u n a letra y
el s i g n o “$“ ( m a t r i z a l f a n u m é r i c a ). E s e e s el nombre que
t i e n e la m a t r i z e n el p r o g r a m a q u e la c o n t i e n e .

Un c a s o e s p e c i a l d e u t i l i z a c i ó n d e S A V E e s :

SAVE “nombre" SCREEN*

q u e a l m a c e n a r á la i m a g e n q u e s e e n c u e n t r e en e s e m o m e n t o en
la p a n t a l l a d e t e l e v i s i ó n . E n r e a l i d a d e q u i v a l e a :

SAVE “nombre" CODE 16384,6912

2 - VERIFY

E s t e c o m a n d o s e u s a d e la m i s m a f o r m a q u e S A V E . Su función
e s v e r i f i c a r la g r a b a c i ó n q u e s e acaba de realizar. Para
e l l o s e r e b o b i n a la c i n t a h a s t a el inicio del bloque que
hemos grabado, s e vuelve a conectar la clavija EAR y se
i n t r o d u c e el c o m a n d o d e u n a d e e s t a s t r e s m a n e r a s :

VERIFY “nombre" (programas BASIC)


VERIFY "nombre" C O D E (código máquina)
V E R I F Y " n o m b r e " D A T A " n o m b r e d e la m a t r i z * ( ) ( m a t r i c e s )

No realice ninguna modificación en el programa antes de


ver if icar .

3.- LOAD S e u s a a s í : L O A D " n o m b r e del p r o g r a m a "

Este comando, utilizado así, carga el programa BASIC que


e x i s t a e n la c i n t a c o n e s e n o m b r e , j u n t o c o n s u s v a r i a b l e s y
b o r r a el p r o g r a m a y v a r i a b l e s q u e hubiera en la memoria.
R e c u e r d e q u e h a d e a r r a n c a r el c a s s e t t e u n a v e z escrito el
c o m a n d o . Si t o d o v a bien, aparecerá la c o n f i g u r a c i ón de
r a y a s d e la q u e y a h e m o s h a b l a d o al t r a t a r el c o m a n d o SAVE,
con la salvedad d e que debe aparecer en la pantalla la
p a l a b r a " P r o g r a m : " s e g u i d a p o r el n o m b r e d e l p r o g r a m a .

Si e s t o n o s u c e d e a s í , el programa no está cargando; en


otras ocasiones aparecerá un mensaje "Tape Loading Error".
Pag. 67

E n a m b o s c a s o s , r e b o b i n e la c i n t a , v u e l v a a introducir el
comando e intente de nuevo la carga a diferente volumen (el
v o l u m e n m a s a d e c u a d o e s , p a r a u n m a n d o g r a d u a d o del 1 al 10
el 8 ).

Si lo q u e s e d e s e a c a r g a r e s un bloque escrito en código


m á q u i n a el c o m a n d o s e r á :

L O A D " n o m b r e " C O D E d i r e c c i ón , 1 o n g i t ud

"dirección" especifica a partir d e que posición de memoria


s e c a r g a r á n los d a t o s . L a l o n g i t u d i n d i c a el n ú m e r o d e b y t e s
que s e cargarán.

si s e o m i t e la l o n g i t u d , s e c a r g a r á n t o d o s los b y t e s q u e se
e n c u e n t r e n e n el b l o q u e . E n c u a n t o a la d i r e c c i ó n , si n o se
indica, l o s b y t e s s e c a r g a r á n a p a r t i r d e la dirección que
s e e s p e c i f i c ó c u a n d o s e g r a b ó el b l o q u e .

A n t e s d e c a r g a r el b l o q u e , c o n v i e n e hacer un CLEAR a la
dirección "dirección" -1. Esto evitará q u e el bloque sea
c o r r o m p i d o por a l g ú n programa en BASIC que carguemos o
introduzcamos después.

L a m a n e r a d e c a r g a r e s la m i s m a q u e la q u e se ha descrito
p a r a los p r o g r a m a s e n B A S I C .

También puede usarse LOAD para cargar matrices previamente


g r a b a d a s . El c o m a n d o q u e s e u t i l i z a e s :

L O A D " n o m b r e " D A T A " n o m b r e d e la m a t r i z " ( )

Atención: Tanto CODE como DATA son palabras clave del


Spectrum.

2 - MERGE

E s t e c o m a n d o s e u t i l i z a igual que’ L O A D , aunque solo sirve


para programas BASIC. A diferencia de LOAD, no borra el
programa que había en la memoria, sino que mezcla el
p r o c e d e n t e d e la c i n t a c o n el e x i s t e n t e . T a n solo s e debe
p r o c u r a r q u e los n ú m e r o s d e l i n e a d e a m b o s n o c o i n c i d a n . Si
a s í -fuera, las l i n e a s del p r o g r a m a p r o c e d e n t e de la cinta
desplazarían a las que existieran previamente con el mismo
n ú m e r o.
Pag. 68

O t r a cualidad d e MERGE e s q u e si s e u t i l i z a p a r a cargar un


p r o g r a m a c o n a u t o e j e c u c i ó n, é s t a n o s e r e a l i z a .

U n a o b s e r v a c i ó n : si s e d a l a c a d e n a vacía como nombre de


programa c o n LOAD, VERIFY o MERGE, e s d e c i r :

L O A D ““ (por ejemplo)

el c o m a n d o a c t u a r é c o n el p r i m e r p r o g r a m a q u e encuentre en
la c i n t a .

L o s datos circulan del ordenador a la c a s s e t t e y viceversa en


s e r i e , e s d e c i r , l o s b i t s del b y t e "destilan** u n o t r a s o t r o . La
velocidad d e t r a n s m i s i ó n s e e x p r e s a e n BAUDIOS, es decir, en
b i t s por s e g u n d o . L a v e l o c i d a d d e t r a n s f e r e n c i a e n el Spectrum
e s d e 1.500 baudios, lo cual s u p o n e q u e un p r o g r a m a d e 4 0 k b y t e s
d e longitud t a r d a r á u n o s 4 m i n u t o s e n c a r g a r .

P o r o t r o lado, el c a s s e t t e , a pesar de su economía, no es


e x c e s i v a m e n t e -Fiable y t i e n d e a d a r e r r o r e s d e c a r g a a menudo.
E s por e l l o q u e e x i s t e n o t r o s d i s p o s i t i v o s en el mercado que
proporcionan mayor velocidad y f i a b i l i d a d .

L a propia c a s a Sinclair h a comercializado u n periférico llamado


■microdrive" ( s e l l a m a p e r i f é r i c o a t o d o a q u e l aparato externo
que puede conectarse a un o r d e n a d o r ) que permite la carga y
grabación de d a t o s a u n o s 1 5 . 0 0 0 baudios, a la vez q u e d a mayor
f i a b i l i d a d q u e el c a s s e t t e . L a información se graba en unas
cintas sin fin d e mucha mayor calidad que las d e cassette, las
cuales no necesitan ser posicionadas (rebobinadas o avanzadas)
p a r a c a r g a r o g r a b a r u n p r o g r a m a ; el p r o p i o o r d e n a d o r s e e n c a r g a
de esa operación.

L o s c o m a n d o s p a r a el u s o d e l m i c r o d r i v e v a n i n c l u i d o s y a en el
t e c l a d o del S p e c t r u m . S u u t i l i z a c i ó n v a c l a r a m e n t e e x p l i c a d a en
el manual q u e a c o m p a ñ a a e s t o s e q u i p o s .
Pag.. 6 9

CAPÍTULO 24
EL FICHERO DE PANTALLA

En el capítulo dedicado a la memoria indicábamos que los


p r i m e r o s 6 9 1 2 b y t e s d e la memoria RAM albergaban el llamado
"•fichero d e p a n t a l l a " . E s t a zona de la memoria almacena la
imagen q u e s e e s t a v i s u a l i z a n d o e n l a p a n t a l l a d e l t e l e v i s o r en
cada momento.

T a m b i é n d e c í a m o s q u e la i m a g e n s e almacenaba separada de los


c o l o r e s d e la m i s m a . E f e c t i v a m e n t e , l o s ú l t i m o s 7 6 8 bytes del
fichero d e pantalla contienen la información s o b r e los colores
d e la m i s m a . E s t o s b y t e s s e h a l l a n c o d i f i c a d o s e n f u n c i ó n d e l o s
c o l o r e s d e papel y t i n t a d e c a d a p o s i c i ó n d e c a r á c t e r , d e m a n e r a
q u e c o n u n s o l o n ú m e r o ( a l m a c e n a d o e n el byte c o r r e s p o n d ie n t e )
podemos obtener t o d a la información s o b r e los c o l o r e s de cada
p o s i c i ó n d e c a r á c t e r . A e s t e n ú m e r o s e le d e n o m i n a " a t r i b u t o " d e
e s a p o s i c i ó n , p o r lo q u e al c o n j u n t o d e e s t o s ú l t i m o s 7 6 8 bytes
s e le s u e l e d e n o m i n a r " f i c h e r o d e a t r i b u t o s " .

L o s r e s t a n t e s b y t e s del f i c h e r o d e p a n t a l l a a l m a c e n a n l a imagen
p r o p i a m e n t e d i c h a . Al c o n t r a r i o d e l o q u e s u c e d e e n el fichero
d e atributos, los b y t e s c o r r e s p o n d i e n t e s a la conf igur ac ión de
la imagen n o s e a l m a c e n a n c o r r e 1 a t i v a m e n t e. E f e c t i v a m e n t e , e n e l
f i c h e r o la p a n t a l l a e s dividida en tres partes iguales: la
s u p e r i o r , la i n t e r m e d i a y l a i n f e r i o r . L o s primeros 256 bytes
del f i c h e r o c o r r e s p o n d e n c o r r e 1 a t i v a m e n t e a l a p r i m e r a l i n e a de
p i x e l s d e la p r i m e r a l i n e a d e p o s i c i o n e s d e carácter. Los 256
siguientes a la p r i m e r a l i n e a d e p i x e l s d e la s e g u n d a linea de
posiciones y lo m i s m o s u c e d e c o n la t e r c e r a , c u a r t a y sucesivas
lineas d e posiciones de carácter del primer tercio de la
pantalla. Luego s e van r e l l e n a n d o las s e g u n d a s lineas d e pixels,
d e s p u é s las t e r c e r a s l i n e a s y a s í s u c e s i v a m e n t e , h a s t a c o m p l e t a r
el p r i m e r t e r c i o . L a m i s m a d i s t r i b u c i ó n s e h a c e c o n los otros
d o s t e r c i o s d e la p a n t a l l a .

Si t o d o e s t o p u e d e p a r e c e r l e u n p o c o l i o s o ( l o e s ) el siguiente
p r o g r a m a le a y u d a r a a c o m p r e n d e r 1 o. E s c r i b a l o y e j e c ú t e l o .

10 L O A D "* C O D E 4 0 0 0 0
20 FOR n=16384 TO 23296
30 POKE n,PEEK (n+23616): PAUSE 5
40 NEXT n
50 PAUSE 0
Pa*?, 7.9

C o l o q u e u n a c i n t a d e j u e g o s e n el c a s s e t t e . El segundo bloque
g r a b a d o e n la m i s m a s u e l e s e r l a " p a n t a l l a d e p r e s e n t a c i ó n " que
s e v e e n el t e l e v i s o r mientras carga el programa principal,.
S i t u é la c i n t a i n m e d i a t a m e n t e a n t e s d e d i c h o b l o q u e y e j e c u t e el
programa.

Las lineas 20, 3 0 y 4 0 s e encargan d e transferir p o c o a poco el


c o n t e n i d o d e d i c h a p a n t a l l a ( a l m a c e n a d a a p a r t i r d e la d i r e c c i ó n
4 0 0 0 0 ) h a s t a el f i c h e r o d e pantalla, con lo cual la imagen
c o m e n z a r á a a p a r e c e r e n l a p a n t a l l a del t e l e v i s o r en el mismo
orden que s e ha explicado antes.

L a l i n e a 5 0 d e t i e n e el p r o g r a m a p a r a e v i t a r q u e el m e n s a j e "0K"
e s t r o p e e l a s d o s u l t i m a s l i n e a s d e la p a n t a l l a .

La trasferencia de datos mediante BASIC no e s muy rápida, como


habrá tenido ocasión de comprobar con este programa. El el
último capítulo del libro, dedicado al código máquina,
explicaremos una sencilla rutina que realiza e s t a operación en
u n a f r a c c i ó n d e s e g u n d o <•••).

D e b i d o a e s t a e x t r a ñ a d i s t r i b u c i ó n del f i c h e r o d e pantalla, no
resulta muy práctico gestionarlo por medio d e PEEK y POKE, s o b r e
todo teniendo en cuenta que existen comandos en el BASIC del
Spectrum que s e encargan d e ello fácilmente (PRINT. AT, PLOT,
e t c . ).

L a función SCREENS detecta cualquier carácter situado en una


posición d e t e r m i n a d a d e la pantalla. S u a r g u m e n t o e s el número
d e l i n e a y el d e c o l u m n a q u e n o s i n t e r e s a y s u r e s u l t a d o e s una
c a d e n a q u e c o n t i e n e el c a r á c t e r d e t e c t a d o p o r la f u n c i ó n .

1 0 P R I N T AT 11,5; "Spectrum"
20 PRINT SCREENS (11,7)

E x i s t e u n i n c o n v e n i e n t e: S C R E E N S n o d e t e c t a l o s G . D . U .

Si la g e s t i ó n del f i c h e r o d e i m a g e n p o r m e d i o d e P E E K y P O K E no
e s p r á c t i c a n o o c u r r e lo m i s m o con el fichero de atributos.
Existe una función , denominada ATTR, cuyo argumento es la
posición d e carácter que n o s interesa y s u resultado el número
c o r r e s p o n d i e n t e del f i c h e r o d e a t r i b u t o s .
Pag, 7i

El atributo s e calcula de la siguiente forma:

atr ibuto=numero color tinta+8*numero color papel+128 (si


existe parpadeo ) +64 (si existe brillo especial).

L a función ATTR nos permite calcular el atributo d e una posición


de carácter dada, pero por desgracia no existe en el Spectrum un
comando que haga lo contrario (cambiar el atributo de u n a
posición de carácter). Sin embargo ello no implica que no
podamos simularla.

El siguiente programa imprime un texto en el lugar que queramos


y en un color determinado, y luego c a m b i a los colores de lo
impreso sin afectar para nada lo que está escrito.

1 0 DEF FN a(x, y )=22528+ (x*32) +y


2 0 DEF FN b( i ,p,b,+)=i+ (p*8) +128*(f=l) +64*(b=l)
3 0 INPUT "Posición x " J x, "Posición y "Jy
4 0 INPUT "Jexto " J a *
5 0 INPUT "Papel "Jp, "Tinta "Ji
6 0 INPUT "Brillo (0-1) ";b, "Flash ( 0 - 1 ) "?+
7 0 PRINT AT x,yJINK 7JPAPER 1 ; a $
80 PAUSE 200
9 0 FOR n=l T O LEN a *
100 POKE F N a(x,y),FN b(i,p,b,+)
110 LET y=y + l
120 NEXT n

El texto, que originalmente estaba escrito en papel azul y t i n t a


blanca, cambia a los valores que ha introducido, sin que s e
altere para nada lo que había escrito.
72

CAPITULO 22

USO DE LA IMPRESORA

El S p e c t r u m n o s o l o p u e d e mandar datos a la pantalla o al


grabador d e cassette; también p u e d e e s c r i b i r l o s s o b r e papel con
la a y u d a d e u n a i m p r e s o r a . E x i s t e n d i v e r s o s m o d e l o s d e i m p r e s o r a
que pueden conectarse, bien directamente, bien a través de una
" i n t e r f a c e ".

La interface es un dispositivo que permite al ordenador


conectarse con otros dispositivos ajenos al mismo. Las
interfaces d e impresora pueden ser de dos tipos: serie y
paralelo. En las primeras, como en el cassette, los bits
i n t e g r a n t e s del b y t e s o n e n v i a d o s u n o d e t r a s del o t r o . El tipo
d e i n t e r f a c e s e r i e m a s e x t e n d i d o e s el R S - 2 3 2 .

L a i n t e r f a c e p a r a l e l o n o r e a l i z a el e n v i o b i t a b i t s i n o b y t e a
b y t e j e s d e c i r , l o s o c h o b i t s del b y t e s o n p r o c e s a d o s a l a vez.
El t i p o mas extendido es el Centronics. En realidad, las
impresoras suelen estar adaptadas mas al sistema paralelo,
m i e n t r a s q u e l a s i n t e r f a c e s s e r i e s e e m p l e a n pref e r i b 1 e m e n t e en
otros periféricos.

L a s interfaces suelen llevar un programa en código máquina


incorporado que se encarga de establecer un "protocolo" de
c o m u n i c a c i ó n c o n la i m p r e s o r a . E s t e p r o g r a m a puede estar grabado
e n R O M d e n t r o d e la m i s m a i n t e r f a c e o bién registrado en una
c i n t a , c u y o c o n t e n i d o hay q u e c a r g a r e n la RAM del ordenador
d e s p u é s d e c o n e c t a d a la i n t e r f a c e .

L o s comandos que se utilizan para imprimir c o n el ZX Spectrum


son LPRINT, LLIST y COPY. Los dos primeros sirven como
sustitutos d e PRINT y LIST para que estos comandos actúen e n la
i m p r e s o r a.

El S p e c t r u m t r a n s m i t e l o s c a r a c t e r e s p r e v i a m e n t e a l m a c e n a d o s en
el " b u f f e r " d e i m p r e s o r a a l a m i s m a a t r a v é s d e l c a n a l ” p " . E s t e
canal emplea u n a linea ( o "corriente") para la transmisión de
los datos (la 3) por lo que LPRINT y LLIST pueden ser
sustituidos por P R I N T # 3 o L I S T # 3 .

C O P Y r e a l i z a un v o l c a d o del f i c h e r o de pantalla (excepto los


atributos), por lo q u e s e o b t e n d r á en papel una imagen de la
pantalla d e televisión.
Solo puede usarse TAB como comando complementario de LPRINT, ya
q u AT n o e s i n t e r p r e t a d o p o r l a i m p r e s o r a . S e p u e d e especificar
en L L I S T el n u m e r o d e l i n e a desde donde hay que empezar el
listado (igual que en LIST).

Algunas interfaces premiten realizar un COPY a doble tamaño.


Pag. 74

CAPITULO 23

LOS -PORTS" DE ENTRADA-SALIDA

L o s " p o r t s - d e E / S s o n l a s l i n e a s d e c o m u n i c a c i ó n q u e u t i l i z a el
microprocesador Z - 8 0 del Spectrum para comunicarse con los
diversos dispositivos periféricos. Entre estos dispositivos
e s t á n i n c l u i d o s a p a r a t o s t a l e s c o m o el t e c l a d o , la p a n t a l l a y el
altavoz, que normalmente c r e e m o s parte integrante del propio
o r d e n a d o r.

El p r o c e s a d o r c o m u n i c a c o n el m u n d o e x t e r i o r p o r medio de 1o s
" b u s e s " . H a y t r e s b u s e s e n el s i sterna: e 1 bus de direcciones,
q u e d i s p o n e d e 1 6 b i t s , el d e datos, de ocho bits y el de
c o n t r o l del p r o p i o s i s t e m a , d e 6 b i t s . L o s p o r t s s e direccionan
c o n la m i t a d i n f e r i o r del b u s d e d i r e c c i o n e s , e s d e c i r , c o n los
últimos 8 bits; por lo tanto, podremos definir 256 ports
d i G e r e n t e s.

C a d a u n o d e l o s b i t s del p o r t c o n t r o l a u n p e r i f é r i c o diferente.
Para indicar que periférico estamos operando, el bit
c o r r e s p o n d i e n t e al m i s m o d e b e r á e s t a r a O y t o d o s l o s d e m á s a 1 .

A s ', el port 2 5 4 ( b i n a r i o 11111110) maneja el teclado y la


e n t r a d a E A R c u a n d o s e u s a c o m o l e c t u r a y el a l t a v o z , la salida
M I C y el b o r d e d e l a p a n t a l l a c u a n d o s e u s a como escritura (o
s a l i d a ).

L o s comandos q u e tratan c o n los p o r t s s o n la s e n t e n c i a O U T y la


función IN. La primera escribe un dato en el port
c o r r e s p o n d i e n t e y la s e g u n d a lee u n d a t o d e e s e p o r t .

Teclee lo siguiente:

10 F O R n=l T 0 2 5
20 OUT 254, n
30 NEXT n
40 GO TO 1 0

p a r a d e t e n e r el p r o g r a m a p u l s e B R E A K .

C u a n d o s e lee el t e c l a d o p o r m e d i o d e l a f u n c i ó n I N se emplean
l o s 1 6 b i t s del b u s d e d i r e c c i o n e s , y a q u e l o s n ú m e r o s que son
argumentos de IN son mayores de 256.
Pag. 75

Eso e s porque, aunque solo pueden direccionarse 25ó ports, puede


utilizarse la mitad superior del bus de direcciones para
escribir n ú m e r o s c o m p l e m e n t a r i o s que indiquen a la ULA lo que
t i e n e q u e h a c e r ( d i s p o n e d e r e f e r e n c i a s a la U L A e n la c i n t a de
d e m o s t r a c i ó n ).

La conbinación de ambas mitades del bus de direcciones


constituyen un numero binario que, traducido al decimal
c o n s t i t u y e el a r g u m e n t o p a r a I N . P o r e j e m p l o s i e s c r i b i m o s P R I N T
IN 6 5 0 2 2 , el n ú m e r o s i g n i f i c a q u e s e e s c r i b e 254 en la mitad
i n f e r i o r del b u s d e d i r e c c i o n e s ( e l p o r t q u e s e encarga de la
l e c t u r a del t e c l a d o ) y 2 5 3 e n la superior (indicativo de la
s e m i f i l a a leer, e n e s t e c a s o d e l a " a " a l a " g ”.
Pag.. 7 6

CAPITULO 24

LAS VARIABLES DEL SISTEMA

E n la memoria RAM, inmediatamente despues del "buffer" de


impresora, s e e n c u e n t r a la z o n a r e s e r v a d a a las variables del
s i s t e m a , c u y o v a l o r e s d e t e r m i n a d o p o r el p r o p i o o r d e n a d o r s e g ú n
sus necesidades. Esto no quiere decir que no podamos variar
nosotros mismos esos valores para adaptarlos a las tareas que
queramos realizar.

V e a m o s a h o r a u n a d e s c r i p c i ó n d e e s t a s v a r i a b l e s e n el orden en
q u e s e e n c u e n t r a n e n la m e m o r i a .

Nombre: KSTATE Dirección: 23552 Longitud: 8 bytes

Cada uno de los bytes de esta variable tiene una función


especial, pero e n e s e n c i a lo q u e hacen e s leer la información
suministrada por el teclado. Cada byte almacena valores
c o r respond ien t e s a la t e c l a q u e a c a b a d e p u l s a r s e y el tiempo
que ha d e transcurrir antes d e que se autorrepita.

Nombre: LASTK Dirección: 23560 Longitud: 1 byte

A l m a c e n a el v a l o r d e l a u l t i m a t e c l a p u l s a d a . E s l a v a r i a b l e q u e
utiliza la f u n c i ó n INKEY».

Nombre: REPDEL Dirección: 23561 Longitud: 1 byte

C o n t r o l a el t i e m p o q u e s e h a d e t e n e r p u l s a d a u n a t e c l a a n t e s d e
q u e c o m i e n c e l a a u t o r r e p e t i c i ón . S u v a l o r inicial es 35 pero
puede alterarse para aumentarlo o disminuirlo.

Nombre: REPPER Dirección: 23562 Longitud: 1 byte

Almacena un valor para controlar el tiempo entre


a u t o r r e p e t i c i o n e s. Inicialmente vale 5, pero también puede
a 1 t e r a r s e.

Nombre: DEFADD Dirección: 23563 Longitud: 2 bytes

A l m a c e n a la d i r e c c i ó n d o n d e s e e n c u e n t r a el argumento de una
f u n c i ó n d e f i n i d a p o r el u s u a r i o . Si n o h a y n i n g u n a s u valor es
O.
Pag, 77

N o m b r e : K DATA Di rece i ón: 23565 L o n g i t u d :: 1 byte

Almacena el segundo byte del control de color que se ha


introducido por el teclado.

Nombre: TVDATA Di rece i ón: 23566 Longi tud : 2 bytes

Almacena el primer byte del contro 1 del co lor y controles para


AT y T A B .

Nombre: STRMS Di rece i ón: 23568 Longi tud : 38 bytes

Almacena las direcciones i de los canales de común i cae i ón .

Nombre: CHARS Dirección: 23606 Long i tud : 2 bytes

Contiene una dirección que es igual a la dirección donde


comienza el juego de carc teres (desde "espacio" hasta
"Copyright") menos 256. Los valores de los 2 bytes son O y 60,
que es la dirección d e l a ROM d o n d e e s t a a l m a c e n a d o e l j u e g o de
caracteres standard, pero puede alterarse para que el ordenador
se dirija a otra dirección de la RAM donde hayamos definido
nuestro propio juego de caracteres, o incluso sustituirlo por
los G.D.U.

Nombre: RASP Dirección! 23608 Longitud: 1 byte

Indica la duración del zumbido que suena cuando se ha llenado la


memoria. Puede alterarse y su valor normal es 64.

Nombre: PIP Dirección! 23609 Longitud: 1 byte

Indica la duración del pitido que se produce cuando se pulsa una


tecla. Inicialmente vale 0 por lo que suena como un chasquido.
El valor recomendado para un pitido audible es 50; si se le da
un valor superior de puede enlentecer demasiado la entrada de
datos. ■>

Nombre: E R R NR Dirección: 23610 Longitud: 1 byte

Almacena el codigo del mensaje de error cor respond i en te . Si no


h á ' ríi n g ú n e r r o r vale 255 y si lo hay almacena el código de
error menos 1.
78

Nombre: FLAGS Dirección: 23611 Longitud: 1 byte

Cada uno de los bits del byte es un indicador (banderín) que


indica una cosa u otra según este a O o a 1.

Nombre: TVFLAGS Dirección: 23612 Longitud: 1 byte

Igual que el anterior pero asociado con la pantalla de la


televisión.

Nombre: ERR SP Dirección: 23613 Longitud: 2 byte*

Almacena una dirección de memoria que es donde tiene que


dirigirse la ejecución en caso de error. Si introducimos un O en
esta variable, el ordenador se borrará al producirse cualquier
e r r o r.

Nombre: L I S T SP Dirección: 23615 Longitud: 2 bytes

Dirección a la que hay que volver después de un 1 is t a d o


automát ico.

Nombre: MODE Dirección: 23617 Longitud: 1 byte

Indica la letra o símbolo que tiene que aparecer en el cursor.


Puede a l t e r a r s e para que aparezca c u a l q u i e r cosa, pero eso no
a f e c t a r á a l a u t é n t i c o modo e n que se e n c u e n t r e e l ordenador.

Nombre: NEWPPC Dirección: 23618 Longitud: 2 bytes

Almacena el numero de linea al que hay que saltar. Podemos


simular el c o m a n d o GO TO alamacenando en esta variable en número
de linea al que queremos saltar.

Nombre: NSPPC D i r e c e ión: 23620 Longitud: 1 byte

Almacena el número de sentencia al que hay que saltar. Se emplea


conjuntamente con l a a n t e r io r.

Nombre: PPC D ir e c e ión: 23621 Longitud: 2 bytes

Almacena el número d e la 1 in e a en c u r s o.

Nombre: SUBPPC Di rece ión: 23623 Longitud: 1 byte

Almacena número de sentencia que se esta ejecutando dentro de la


linea en c u r s o.
Pa<a, 7 9

Nombre: BORDCR Dirección: 2 3 6 2 4 Longitud: 1 byte

Almacena los atributos d e la parte inferior d e la pantalla y el


color del BORDER.

Nombre: E PPC Dirección: 2 3 6 2 5 Longitud: 2 bytes

Almacena el número de la linea en c u r s o ( d o n d e está situado el


cursor del programa).

Nombre: VARS Dirección: 2 3 6 2 7 Longitud: 2 bytes

Almacena la dirección donde comienza la z o n a de variables.

Nombre: DEST Dirección: 2 3 6 2 9 Longitud: 2 bytes

Almacena la dirección donde s e almacena una variable al ser


asignada.

Nombre: CHANS Dirección: 23631 Longitud: 2 bytes

Almacena la dirección de comienzo del canal d e información.

Nombre: CURCHL Dirección: 2 3 6 3 3 Longitud: 2 bytes

Almacena la dirección donde empieza la información de


ent rada/sal ida.

Nombre: PROG Dirección: 2 3 6 3 5 Longitud: 2 bytes

Contiene la dirección de comienzo del programa BASIC.

Nombre; NXTLIN Dirección: 2 3 6 3 7 Longitud: 2 bytes

Guarda la dirección de comienzo de la siguiente linea.

Nombre: DATADD Dirección: 2 3 6 3 9 Longitud: 2 bytes

Contiene la dirección de la terminación de los datos ( l o s que s e


leen mediante READ).

Nombre: ELINE Dirección: 23641 Longitud: 2 bytes

Indica la dirección donde acaban las variables


Pag, 89

Nombre: STKEND Dirección: 23653 Longitud: 2 bytes

C o n t i e n e la d i r e c c i ó n d o n d e e m p i e z a l a m e m o r i a l i b r e .

Nombre: FLAGS2 Dirección! 23658 Longitud: 1 byte

Contiene mas indicadores similares a los de FLAGS. El mas


i m p o r t a n t e e s el bit 3 , q u e i n d i c a si e s t á a c t i v a d o o no CAPS
LOCK. Para utilizar esta posibilidad, teclee 23658,8 para
a c t i v a r el m o d o C y 2 3 6 5 8 , 0 p a r a d e s a c t i v a r l o .

Nombre: DF SZ Dirección: 23659 Longitud: 1 byte

I n d i c a el n ú m e r o d e l i n e a s q u e h a y e n la p a r t e inferior de la
p a n t a l la.

Nombre: S TOP Dirección: 23660 Longitud: 2 bytes

Almacena el número de la linea superior en los listados


a u t o m á t i e o s.

Nombre: OLDPPC Dirección: 23662 Longitud: 2 bytes

Número d e linea a la que s a l t a C O N T I N U E

Nombre: OSPCC Dirección: 23664 Longitud: 1 byte

C o n t i e n e el n ú m e r o d e la s e n t e n c i a d e n t r o d e la c o r respond ie n t e
l i n e a a la q u e s a l t a C O N T I N U E .

Nombre: SEED Dirección: 23670 Longitud: 2 bytes

Contiene el número de orden en la serie de números


p s e u d o a l e a t o r i o s d e s d e el q u e e m p i e z a a actuar RND (se -Fija
mediante RANDOMIZE).

Nombre: FRAMES Dirección: 23672 Longitud: 3 bytes

C u e n t a el n u m e r o d e v e c e s q u e c a m b i a l a p a n t a l l a de televisión
(aproximadamente 50 veces por segundo). P a r a leer e s t a variable
n o s e e m p l e a l a -formula u s u a l ( i n d i c a d a e n el c a p í t u l o dedicado
a la m e m o r i a ) , y a q u e el o r d e n d e s i g n i f i c a c i ó n d e l o s b y t e s no
e s el m i s m o . U s a r e m o s :

PRINT 65636*PEEK 23674+256*PEEK 23673+PEEK 23672


Pag. 81

E s t o puede s e r v i r n o s como reloj, pero hay que tener en cuenta


que el comando BEEP y las operaciones con el cassette "paran"
dicho reloj.

Nombre: UDG Dirección: 23675 Longitud: 2 bytes

Dirección donde comienzan los G.D.U

Nombre: COORDS Dirección: 23677 Longitud: 2 bytes

El primer byte contiene la coordenada x y el segundo la


coordenada y de la posición PLOT.

Nombre: P POSN Dirección: 23679 Longitud: 1 byte

Número de columnas a imprimir en la impresora

Nombre: PRCC Dirección: 23680 Longitud: 2 bytes

Menor y mayor byte, respect ivamente, de la posición LPRINT en el


"buffer" de la impresora.

Nombre: DF CC Dirección; 23684 Longitud: 2 bytes

Contiene la dirección de la posición d e PRINT en el fichero de


pantal la.

Nombre: SPOSN Dirección: 23688 Longitud: 2 bytes

Indica en cada momento donde está situada la posición PRINT


(columna y linea respectivamente) en la pantalla.

Nombre: SCR CT Dirección: 23692 Longitud: 1 byte

Indica al ordenador los desplazamientos hacia arriba del


contenido de la pantalla que tiene que hacer antes de preguntar
"scroll?". Inicialmente vale 1, pero pueden usarse números
mayores para evitar e l mensaje.

Nombre: ATTR P D ir e c e ión 23693 Longitud: 1 byte

Comtiene los atributos generales de la pantalla (no los que se


especifican en sentencias PRINT).
Pag- 82

Nombre: MASK P Dirección: 23694 Longitud: 1 byte

C a d a bit d e e s t a v a r i a b l e s e c o r r e s p o n d e c o n otro en ATTR P.


C u a n d o s e u t i l i z a el v a l o r 8 e n c o m a n d o s d e c o l o r , s e p o n e a O
el b i t c o r r e s p o n d i e n t e d e e s t a v a r i a b l e .

Nombre: ATTR T Dirección: 23695 Longitud: 1 byte.

C o n t r o l a l o s a t r i b u t o s q u e s e e s p e c if i c a n para cad'a sentencia


P R I N T e n p a r t i c u l a r ( a l c o n t r a r i o d e A T T R P ).

Nombre: MASK T Dirección: 23696 Longitud: 1 byte

Igual q u e MASK P p e r o c o n r e s p e c t o a ATTR T .

Nombre: P FLAGS Dirección: 23697 Longitud: 1 byte

E s p e c i f i c a el u s o d e l o s c o m a n d o s P A P E R 9, INK 9, INVERSE y
OVER.

Nombre: RAMTOP Dirección: 23730 Longitud: 2 bytes

I n d i c a l a d i r e c c i ó n del u l t i m o b y t e del a r e a del B A S I C . S e p u e d e


e s p e c i f i c a r med i a n t e C L E A R. N E W s o l o o p e r a h a s t a e s t a d i r e c c i ó n .

Nombre: RAMTP Dirección: 23732 Longitud: 2 bytes

D i r e c c i ó n d o n d e a c a b a la R A M del S p e c t r u m .

Recuerde que s o l o puede cambiar sin peligro aquellas variables


q u e le h e m o s i n d i c a d o . Si j u e g a c o n l a s o t r a s c o r r e el r i e s g o d e
q u e el s i s t e m a q u e d e s i n c o n t r o l o b l o q u e a d o . Por ejemplo, si
emplea POKE 23659,0 para tener 24 lineas en la pantalla,
cualquier mensaje de error, sentencia INPUT o cualquier otro
c o m a n d o q u e a f e c t e a la p a r t e i n f e r i o r d e la p a n t a l l a hara que
el o r d e n a d o r s e b l o q u e e s i n r e m e d i o .
Pag, 83

CAPITULO 25

INTRODUCCION A LA PROGRAMACION EN LENGUAJE MAQUINA

Al p r i n c i p i o d e e s t e l i b r o i n d i c á b a m o s q u e el B A S I C y l o s otros
lenguajes d e programación se habían inventado dada la dificultad
q u e e x i s t í a e n h a b l a r al o r d e n a d o r e n s u p r o p i o lenguaje. Como
s a b e m o s , el p r o c e s a d o r Z 8 0 de que está dotado el Spectrum
( t o d o s los ordenadores poseen un procesador, q u e no tiene por
que ser un Z 80) solo entiende números. En realidad, la
información la obtiene d e s u s memorias RAM y ROM, en cuyas
diversas posiciones hay almacenados números entre O y 255, como
ya sabemos.

Si en lugar de utilizar el BASIC introducimos los


c o r respond ie n t e s n ú m e r o s e n las d i r e c c i o n e s adecuadas mediante
POKE, estaremos utilizando el mismo lenguaje que emplea la
máquina; estaremos, pués, programando en "lenguaje máquina".
E s t o t i e n e la v e n t a j a d e q u e el o r d e n a d o r s e a h o r r a el t i e m p o d e
la t r a d u c c i ó n q u e r e a l i z a m e d i a n t e el BASIC, por lo que la
velocidad d e ejecución d e los programas en c ó d i g o m á q u i n a suelen
s e r u n a s 3 0 0 v e c e s m á s r á p i d a q u e la d e l o s p r o g r a m a s e n B A S I C .

Existe un lenguaje intermedio entre los de alto nivel y el


código máquina, llamado "ensamblador". C a d a procesador tiene su
p r o p i o e n s a m b l a d o r ( e s d e c i r , el e n s a m b l a d o r q u e utilicemos en
el Spectrum es el mismo que usaríamos en cualquier otro
o r d e n a d o r q u e d i s p o n g a del m i s m o p r o c e s a d o r ) . E n el ensamblador
s e usan u n o s c o m a n d o s abreviados q u e llamamos "mnemónicos" que
a c t ú a n s o b r e el m i s m o p r o c e s a d o r .

P a r a ilustrar t o d o esto, vamos a utilizar u n a pequeña r u t i n a en


lenguaje máquina, que nos s e r v i r á para trasplantar u n a pantalla
a l m a c e n a d a e n l a m e m o r i a a la z o n a del f i c h e r o d e r e p r e s e n t a c i ó n
v i s u a l e n u n a f r a c c i ó n d e s e g u n d o . E n el capítulo dedicado al
fichero d e pantalla veíamos como se hacía ésto mediante el
BASIC.

L a r u t i n a t i e n e 1 2 b y t e s d e l o n g i t u d y la v a m o s a almacenar a
p a r t i r d e la d i r e c c i ó n d e m e m o r i a 6 0 0 0 0 .

10 CLEAR 39999
20 L O A D "" CODE 40000
30 D A T A 1 7, 0 , 6 4 , 3 3 , 6 4 , 1 5 6 , 1 , 0 , 2 7, 2 3 7 , 1 7 6 , 2 0 1
40 FOR n=60000 T0 60011
50 READ a: POKE n,a¡ NEXT n
60 PAUSE 0 : RANDOMIZE USR 60000
Pag. 84

C o l o c a m o s el R A M T O P e n 3 9 9 9 9 p a r a q u e l a p a n t a l l a que vamos a
cargar en e s a dirección n o r e s u l t e afectada por el BASIC. A
c o n t i n u a c i ó n c a r g a m o s la p a n t a l l a e i n t r o d u c i m o s el p r o g r a m a en
código máquina con la ayuda del bucle FOR - NEXT y las
sentencias READ - DATA.

El P A U S E 0 e v i t a q u e el p r o g r a m a e n l e n g u a j e m á q u i n a s e ejecute
i n m e d i a t a m e n t e . E n c u a n t o al c o m a n d o R A N D O M I Z E U S R , e q u i v a l e al
R U N del B A S I C ; h a c e q u e s e e j e c u t e el p r o g r a m a e n c ó d i g o m á q u i n a
e x i s t e n t e a p a r t i r d e la d i r e c c i ó n e s p e c i f i c a d a .

El l i s t a d o del programa en lenguaje ensamblador sería como


s i g u e:

L D DE, 16384
L D HL, 40000
L D BC, 6 9 1 2
LDIR
RET

Esto se traduce como sigue:

C a r g a e 1 par d e r e g ist r o s D E c o n e 1 n ú m e r o 1 6 3 8 4
C a r g a el p a r d e r e g i s t r o s H L c o n e 1 n ú m e r o 4 0 0 0 0
C a r g a e 1 p a r d e r e g i s t r o s BC c o n el n ú m e r o 6 9 1 2
Carga, incrementa y repite
V u e l v e al B A S I C

L o s p a r e s d e r e g i s t r o s DE, H L y B C existen en el procesador.


C o m o cada registro tiene 8 bits, u n par d e r e g i s t r o s tendrá 16
bits, luego podrá almacenar un número comprendido entre O y
65535. L o s números 17, 33 y 1 significan "LD DE", " L D HL " y "LD
BC" respectivamente. En cuanto a los pares de números 0-64,
6 4 - 1 5 6 y 0 - 2 7 , si s e l e s a p l i c a l a -fórmula:

p r i m e r n ú m e r o + 256-M-segundo n ú m e r o

veremos que resulta, respectivamente, 16384, 40000 y 61912, que


s o n , por e s t e o r d e n , la n u e v a d i r e c c i ó n a d o n d e s e t r a s p l a n t a el
b l o q u e , la d i r e c c i ó n d e c o m i e n z o a c t u a l y l a l o n g i t u d del m i s m o .
Pa.cu 8 5

L o s n ú m e r o s 2 3 7 y 1 7 6 i n d i c a n la i n s t r u c c i ó n propiamente dicha
( l a q u e r e a l i z a el t r a s p l a n t e ) y 2 0 1 h a c e q u e s e v u e l v a al B A S I C
c u a n d o el p r o g r a m a h a t e r m i n a d o d e e j e c u t a r s e . E s t a instrucción
e s a b s o l u t a m e n t e n e c e s a r i o c o l o c a r l a al f i n a l del p r o g r a m a s i n o
q u e r e m o s q u e el o r d e n a d o r s e n o s b l o q u e e .

E j e c u t e el p r o g r a m a y v e a l o q u e s u c e d e .

E n el m e r c a d o e x i s t e n p r o g r a m a s e n s a m b l a d o r e s que permiten la
programación en código máquina por medio d e comandos. Si no
q u i e r e u t i l i z a r e n s a m b l a d o r , h á g a s e c o n u n l i b r o q u e e x p l i q u e el
ensamblador del Z 80 y traduzca Vd . mismo el programa a
lenguaje máquina, aunque seguramente encontrará mU y tedioso e s t e
m é t o d o.

L a m a n e r a d e g r a b a r p r o g r a m a s e n c ó d i g o m á q u i n a s e e x p l i c ó e n el
capítulo correspondiente.
Paa, 86

APENDICE

E L JUEGO D E C A R A C T E R E S

A continuación damos la relación del juego de caracteres del 32


al 255 (el resto no admite impresión) con sus cor r espond i en t es
cód i gos.

CARACTER CODIGO

espac i o

U U U U U U
M (h « A U N
I

$
%
8c 38
39
( 40
) 41
* 42
43
44
45
46
/ 47
0 48
1 49
2 50
3 51
4 52
5 53
6 54
7 55
8 56
9 57
58
59
< 60
61
> 62
63
§ 64
A 65
8.7
Pag.

o f\ 00 □ ' © ’ ■ • ( M n ’ T I D s O I X OOOsO-<NrO’TID'OI\OOOsO CMrJ ’ T i n o i x o o o s o - t N n insorxooo


o o SO orxixrxixixixrxix IXI\OOCOCOOOCOOOCOOOOOODOsDs(h(h O(hChCh(h(hOOOOOOOOOO
CQUQUÜ.OI»-'r) _JE ZOQ.0Q:(DHD>3X>Nl-»xn <- iQiifiu u di %- m x - « - i jí — s
Pag QS.

1 10
111
112
113
114
115
116
117
118
1 19
120
121
122
123
124
125
126
127
8 128
o o o o □ □
n n n n n n

1 129
2 130
3 131
4 132
5 133
gráfico 6 134
7 135
7 136
6 137
5 138
4 139
3 140
2 141
1 142
O 143
A 144
B 145
C 146
D 147
E 148
F 149
G 150
H 151
I 152
J 153
Pag. 89

grá+icQ
gráfico
gr ático

(flTjs-oozzrx
gráfico
gr ático
gr ático
gr át ico
gráfico
gr át i co
gr át i co
gr át ico
RND
INKEYS
PI
FN
POINT
SCREENS
ATTR
AT
TAB
VALS
CODE
VAL
LEN
SIN
COS
TAN
ASN
ACS
ATN
LN
EXP
I NT
SQR
SGN
ABS
PEEK
IN
USR
STRS
CHRS
NOT
BIN
OR
Pag, 90

AND 198
<= 199
>= 200
<> 201
LINE 202
THEN 203
TO 204
STEP 205
DEF FN 206
CAT 207
FORMAT 208
MOVE 209
ERASE 210
OPEN # 21 1
CLOSE # 212
MERGE 213
VERIFY 214
BEEP 215
CIRCLE 216
INK 217
PAPER 218
FLASH 219
BRIGHT 220
INVERSE 221
OVER 222
OUT 223
LPRINT 224
LLIST 225
STOP 226
READ 227
DATA 228
RESTORE 229
NEW 230
BORDER 231
CONTINUE 232
DIM 233
234
REM ,
FOR 235
GO TO 236
GOSUB 237
INPUT 238
LOAD 239
LIST 240
LET 241
Pag. 91

PAUSE 242
NEXT 243
POKE 244
PRINT 245
PLOT 246
RUN 247
SAVE 248
RANDOMIZE 249
IF 250
CLS 251
DRAW 252
CLEAR 253
RETURN 254
COPY 255
INDICE

CAPITULO TITULO PAGINA

P r Ó1 o g o 1

Introduce ión 3

1 El t e c l a d o del S p e c t r u m 4

2 El B A S I C 7

3 Las variables 14

4 Los bucles FOR-NEXT 18

5 Mat r ic e s 21

6 Usos especiales de PRINT e INPUT 24

7 Fragmentación d e cadenas 27

8 Toma d e decisiones 29

9 Subrut iñ a s 31

10 Expresiones matemáticas 33

11 F u n c i o n e s p r o p i a s del S p e c t r u m 35

12 Funciones matemáticas 39

13 Números aleatorios 41

14 Operadores lógicos 43

15 El j u e g o d e c a r a c t e r e s 46

16 L o s c o l o r e s del S p e c t r u m 51

17 G r á f i c o s en a l t a resolución 56

18 Sonido: uso de BEEP 59


19 La memoria 60

20 Medios de almacenamiento externo 64

21 El fichero de pantalla 69

22 Uso de la impresora 72

23 Los "ports" de entrada-salida 74

24 Las variables del sistema 76

25 Introducción a la programación en C/M 33

Apend ice El juego de caracteres 36


/MICRO

También podría gustarte