Los Secretos Del MSX PDF

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

.-.

,,

."'
,1'.,..

~' MANHATTAN TRANSFER S.A.


.-.,,

."'
,1'.,..

~' MANHATTAN TRANSFER S.A.


-----------------------~=

LOS SECRETOS DEL MSX INTRODUCCION

Este libro está escrito especialmente para aquellos que han


adoptado el sistema estándar MSX para iniciarse en los secre-
tos de la programación. La elección de esta norma no pc;idía ser
más afortunada pues 'creemos firmerµente en la necesidad de
un estándar que terminase de una vez con la terrible Babel que
rodea tanto a profesionales como aficionados de la informáti-
~ ~n~¿ .
El objetivo es que este libro sea un complemento ideal del
manual del usuario, de modo que explique con detalle todos
aquellos puntos que creemos quedan oscu~o~ y son im~rescin­
dibles de conocer para sacar un buen rendimiento al micro or-
denador.
En cada uno de los capítulos de este libro veremos con es-
pecial detalle todas las instrucciones que son peculiares del
sistema MSX y analizaremos en profundidad los dos potentes
Primera edición: julio de 1985 lenguajes auxiliares de programación,.~l generador de son_i~o.s
©Juan Carlos González y Francisco J. Guerrero y el macrolenguaje de gráficos. T ambten veremos las posibili-
Editado por Manhattan Transfer, S.A. dades de ampliación del sistema por medio de periféricos.
Roca i Batlle, 10-12- 08023 Barcelona -Tel. 21122 56 Finalmente completa «LOS SECRETOS DEL MSX» una
Fotocomposícíón y Fotomecáníca: Ungraf, S.A.
C!. Pujadas, 77-79, 8. 0 gran cantidad de progra~as relacionados ~i~ectamente c;_on,Ia
teoría expuesta y que seran los que en defimttva nos ensenaran
Impresión: Megra, S.A. a dominar el potente lenguaje MSX.
ISBN: 84-86465-00-1
D.L.B. 28875-85 j J.C.G. y F.J.G.
1
-J 5
n
-----------------------~=

LOS SECRETOS DEL MSX INTRODUCCION

Este libro está escrito especialmente para aquellos que han


adoptado el sistema estándar MSX para iniciarse en los secre-
tos de la programación. La elección de esta norma no pc;idía ser
más afortunada pues 'creemos firmerµente en la necesidad de
un estándar que terminase de una vez con la terrible Babel que
rodea tanto a profesionales como aficionados de la informáti-
~ ~n~¿ .
El objetivo es que este libro sea un complemento ideal del
manual del usuario, de modo que explique con detalle todos
aquellos puntos que creemos quedan oscu~o~ y son im~rescin­
dibles de conocer para sacar un buen rendimiento al micro or-
denador.
En cada uno de los capítulos de este libro veremos con es-
pecial detalle todas las instrucciones que son peculiares del
sistema MSX y analizaremos en profundidad los dos potentes
Primera edición: julio de 1985 lenguajes auxiliares de programación,.~l generador de son_i~o.s
©Juan Carlos González y Francisco J. Guerrero y el macrolenguaje de gráficos. T ambten veremos las posibili-
Editado por Manhattan Transfer, S.A. dades de ampliación del sistema por medio de periféricos.
Roca i Batlle, 10-12- 08023 Barcelona -Tel. 21122 56 Finalmente completa «LOS SECRETOS DEL MSX» una
Fotocomposícíón y Fotomecáníca: Ungraf, S.A.
C!. Pujadas, 77-79, 8. 0 gran cantidad de progra~as relacionados ~i~ectamente c;_on,Ia
teoría expuesta y que seran los que en defimttva nos ensenaran
Impresión: Megra, S.A. a dominar el potente lenguaje MSX.
ISBN: 84-86465-00-1
D.L.B. 28875-85 j J.C.G. y F.J.G.
1
-J 5
n
GENERALIDADES

DEL ORDENADOR PERSONAL AL ORDENADOR


DOMESTICO

Supongamos que usted tiene un ordenador personal; su-


pongamos que también tiene un amigo y supongamos que a su
vez ese amigo tiene otro ordenador. Todos estos supuestos
concurren en el caso de los autores de este libro. Siimagina-
mos todo esto nos encontraremos con un cuadro realmente co-
tidiano, pero no por ello menos trágico. Los programas de uno
difícilmente correrán en el micro del otro, será imposible cam-
biar cintas y cliskette-s, e incluso listados y, obviamente, cartu-
chos, dado que las diversas versiones de BASIC que corren en
los diferentes micros son muy distintas. Basta echar un vistazo
al manual de Spectrum, de Commodore o de Apple, por citar
sólo algunos, para comprobar esta afirmación.
De tal modo un programa enteramente esérito en BASIC
debe de ser revisado con mucha atención antes de poder adap-
tarlo a determinado micro. Incluso algunas marcas poseen in-
compatibilidades entre sus distintos modelos y en ocasiones
no es posible ni siquiera aprovechar las rutinas ele utilidad en
lenguaje máquina, y, desde luego, ni soñar en adquirir softwa-
re de un fabricante que no sea el específico.
Esta caótica situación se ha mantenido durante años debi-
do a que ello beneficiaba a las grandes compañías ya estableci-
das que a través ele esta avispada política comercial pretendía

6 7
GENERALIDADES

DEL ORDENADOR PERSONAL AL ORDENADOR


DOMESTICO

Supongamos que usted tiene un ordenador personal; su-


pongamos que también tiene un amigo y supongamos que a su
vez ese amigo tiene otro ordenador. Todos estos supuestos
concurren en el caso de los autores de este libro. Siimagina-
mos todo esto nos encontraremos con un cuadro realmente co-
tidiano, pero no por ello menos trágico. Los programas de uno
difícilmente correrán en el micro del otro, será imposible cam-
biar cintas y cliskette-s, e incluso listados y, obviamente, cartu-
chos, dado que las diversas versiones de BASIC que corren en
los diferentes micros son muy distintas. Basta echar un vistazo
al manual de Spectrum, de Commodore o de Apple, por citar
sólo algunos, para comprobar esta afirmación.
De tal modo un programa enteramente esérito en BASIC
debe de ser revisado con mucha atención antes de poder adap-
tarlo a determinado micro. Incluso algunas marcas poseen in-
compatibilidades entre sus distintos modelos y en ocasiones
no es posible ni siquiera aprovechar las rutinas ele utilidad en
lenguaje máquina, y, desde luego, ni soñar en adquirir softwa-
re de un fabricante que no sea el específico.
Esta caótica situación se ha mantenido durante años debi-
do a que ello beneficiaba a las grandes compañías ya estableci-
das que a través ele esta avispada política comercial pretendía

6 7
perpetuar su marca en el mercado internacional. Mientras fue- nológica, sino su eficacia. Es decir que los fabricantes han in-
se la más vendida también sería más fácil encontrar software terprc;tado .un inteligente t~rmino medio entre un lenguaje re-
para ella y si se encontraba más software también se vendería volucionario -el BASIC Microsoft Extended-, y un hardware
más. clásico, que descansa sobre el microprocesador Z80 de Zilog
La única solución viable para los fabricantes de nuevos or- de probada calidad y rendimiei;ito en el mercado de los micro
denadores hasta ahora era la emulación, la copia lisa y llana. El ordenadores.
mundo de los ordenadores medios de gestión _personal se ha Ahora bien, la posible creación de un estándar ha interesa-
visto invadido por aparatos «clónicos» (reproducciones exac· do tanto a usuarios como a profesionales del software. Ahora,
tas del original copiado). Así aparecieron los clónicos de Ap- gracias a ello, se pueden crear programas para un sistema que
ple y posteriormente los del IBM PC el que sin embargo pare- es apoyado por diversas marcas, lo que aumenta su posible
ce que ha logrado imponer su estándar. En el terreno de los mercado y limita los riesgos de un trabajo inútil, como en el
micro ordenadores la confusión era mayor. caso de programar un ordenador fabricado por determinada
Es en este contexto en el que la industria japonesa de orde- firma sujeta a los avatares del mercado.
nadores parece lanzar un rayo de luz y lo que en un principio En el caso de la norma MSX se pueden producir progra·
fue concebido como una ofensiva comercial para dominar el mas para un amplio mercado con el aval de varias marcas.
mercado partiendo del aserto de que la unión hace la fuerza, se Este es el motivo por el cual hay que considerar de un
ha convertido en la esperanza de un sistema estándar unificado. modo especial lo que; es la filosofía MSX. En efecto, tras este
sistema estándar se halla una cuidada filosofía del ordenador
-1 [_ familiar a partir de la cual se desarrollan amplias posibilidades
1: Esta estandarización afecta a dos frentes:
de interrupción, de salicl,a para periféricos y una serie de ins-
Material, pues permite el intercambio entre apara.tos de la trucciones especializadas de su BASIC, que facilitan la inte·
misma norma de todo tipo de p¡;riféricos, expansiones de
memoria, cartuchos, etc., sin ninguna excepción ni necesi- gración en el sistema de todos aquellos aparatos que estos in-
dad de adaptaciones previas. · geniosos japoneses nos han vendido previamente -cadena HI
FI, equipo doméstico; iluminación, etc.-. Bastará repasar la
Lógica, porque todos los programas, escritos en lenguaje
máquina o BASIC-E, pueden introducirse desde cualquier lista de compañías adscritas a la norma para darnos cuenta de
ello. Por ejemplo JVC está trabajando en el campo del Com·
periférico de almacenamiento -cartucho ROM, cassette, pact Disk y el vídeo lo mismo que Sony y Pioneer, y Yamaba
diskette, etc.-, a cualquier aparato de la norma sin otra li-
mitación que la de memoria necesaria para hacerlo correr, incorpora un interface para un teclado musical que aprovecha
al máximo las posibilidades del chip de sonido incluido en las
puesto que no todos los aparatos MSX disponen de la mis- especificaciones MSX. Verdaderamente, la introducción en el
ma memoria para el usuario. A esto hay que añadirle las mercado de las marcas japonesas niarca un nuevo hito en la in·
amplias posibilidades de expansión de memoria, lo que fa. formática familiar, teniendo en cuenta las cotas alcanzadas en
vorece la configuración del sistema por parte del propio campos como el del vídeo, y el sonido, con la consecuente re·
usuario. ducción de precios al estandarizar posiciones comerciales y
ofrecer mayores prestaciones al usuario. Quizás por ello Phi-
Sin embargo, un sistema que pretende unificar el mercado lips, compañía europea que ofrece diversos modelos de orde-
necesita tener una calidad probada, que pueda mantenerse lar- nadores de distinta capacidad, ha pagado alrededor de
go tiempo en marcha y gozando de buena salud. En este senti- 300.000 dólares por la licencia para fabricar un aparato MSX,
<Io las grandes líneas que se han seguido para el sistema MSX aparte de los royalties por aparato vendido, y sumarse así a la
han sido sencillas y en ellas no se ha buscado la innovación tec· arrolladora ola japonesa en el campo de la micro informática.

8 9
perpetuar su marca en el mercado internacional. Mientras fue- nológica, sino su eficacia. Es decir que los fabricantes han in-
se la más vendida también sería más fácil encontrar software terprc;tado .un inteligente t~rmino medio entre un lenguaje re-
para ella y si se encontraba más software también se vendería volucionario -el BASIC Microsoft Extended-, y un hardware
más. clásico, que descansa sobre el microprocesador Z80 de Zilog
La única solución viable para los fabricantes de nuevos or- de probada calidad y rendimiei;ito en el mercado de los micro
denadores hasta ahora era la emulación, la copia lisa y llana. El ordenadores.
mundo de los ordenadores medios de gestión _personal se ha Ahora bien, la posible creación de un estándar ha interesa-
visto invadido por aparatos «clónicos» (reproducciones exac· do tanto a usuarios como a profesionales del software. Ahora,
tas del original copiado). Así aparecieron los clónicos de Ap- gracias a ello, se pueden crear programas para un sistema que
ple y posteriormente los del IBM PC el que sin embargo pare- es apoyado por diversas marcas, lo que aumenta su posible
ce que ha logrado imponer su estándar. En el terreno de los mercado y limita los riesgos de un trabajo inútil, como en el
micro ordenadores la confusión era mayor. caso de programar un ordenador fabricado por determinada
Es en este contexto en el que la industria japonesa de orde- firma sujeta a los avatares del mercado.
nadores parece lanzar un rayo de luz y lo que en un principio En el caso de la norma MSX se pueden producir progra·
fue concebido como una ofensiva comercial para dominar el mas para un amplio mercado con el aval de varias marcas.
mercado partiendo del aserto de que la unión hace la fuerza, se Este es el motivo por el cual hay que considerar de un
ha convertido en la esperanza de un sistema estándar unificado. modo especial lo que; es la filosofía MSX. En efecto, tras este
sistema estándar se halla una cuidada filosofía del ordenador
-1 [_ familiar a partir de la cual se desarrollan amplias posibilidades
1: Esta estandarización afecta a dos frentes:
de interrupción, de salicl,a para periféricos y una serie de ins-
Material, pues permite el intercambio entre apara.tos de la trucciones especializadas de su BASIC, que facilitan la inte·
misma norma de todo tipo de p¡;riféricos, expansiones de
memoria, cartuchos, etc., sin ninguna excepción ni necesi- gración en el sistema de todos aquellos aparatos que estos in-
dad de adaptaciones previas. · geniosos japoneses nos han vendido previamente -cadena HI
FI, equipo doméstico; iluminación, etc.-. Bastará repasar la
Lógica, porque todos los programas, escritos en lenguaje
máquina o BASIC-E, pueden introducirse desde cualquier lista de compañías adscritas a la norma para darnos cuenta de
ello. Por ejemplo JVC está trabajando en el campo del Com·
periférico de almacenamiento -cartucho ROM, cassette, pact Disk y el vídeo lo mismo que Sony y Pioneer, y Yamaba
diskette, etc.-, a cualquier aparato de la norma sin otra li-
mitación que la de memoria necesaria para hacerlo correr, incorpora un interface para un teclado musical que aprovecha
al máximo las posibilidades del chip de sonido incluido en las
puesto que no todos los aparatos MSX disponen de la mis- especificaciones MSX. Verdaderamente, la introducción en el
ma memoria para el usuario. A esto hay que añadirle las mercado de las marcas japonesas niarca un nuevo hito en la in·
amplias posibilidades de expansión de memoria, lo que fa. formática familiar, teniendo en cuenta las cotas alcanzadas en
vorece la configuración del sistema por parte del propio campos como el del vídeo, y el sonido, con la consecuente re·
usuario. ducción de precios al estandarizar posiciones comerciales y
ofrecer mayores prestaciones al usuario. Quizás por ello Phi-
Sin embargo, un sistema que pretende unificar el mercado lips, compañía europea que ofrece diversos modelos de orde-
necesita tener una calidad probada, que pueda mantenerse lar- nadores de distinta capacidad, ha pagado alrededor de
go tiempo en marcha y gozando de buena salud. En este senti- 300.000 dólares por la licencia para fabricar un aparato MSX,
<Io las grandes líneas que se han seguido para el sistema MSX aparte de los royalties por aparato vendido, y sumarse así a la
han sido sencillas y en ellas no se ha buscado la innovación tec· arrolladora ola japonesa en el campo de la micro informática.

8 9
ASI CONCIBIO MICROSOFT SU BASIC EXTENDED
En el año 1982 Harry Fox y Alex Weiss, dos comerciantes ""
<
o"
- =
~=
.:5E=~ o i::
-e ¡e·
-" "...
-~..s
=..... ]
~
... o "'~"'
~ ~ ",. "'" "'o
---º_. .
(I}

¡,,:¡ "" -
.,,-g =
de Nueva York dedicados a la importación de relojes desde 'º eii~ ;:;:¡ -=o
"'
i~~ =
'O :>
""'=..
¡... >Ll o= =""t:I·~ ·;;i
Hong Kong, decidieron apunt~rse al carro de las nuevas tec- e cu< ... "' ... ...s= c:i" " = .,, .,,
~
a:
~- :>
"'...
Q ~""O ...!:
..."'~=~ ""' =
~.,,
11.1·-

- "
-C
~

H _,,, B
-.-':'.o =~t
~
~ ~eh:;a
nologías de consumo y diseñaron el hardware de un ordena-
dor que debería fabricarse en la famosa colonia británica en . "'
= j " ... ~ o =
(I} ;.. ..::

"' $!" "


::.: "-o ;:;:¡
., ·- ""'
·- (I}
f! ·- .s"""'~s -... ""'"'
-::l ,.....¡ u
..., ~
~

..e
Asia y no superar los 50 dólares de precio de coste. 00 o "
"'"'e ¡-:¡ "'o " " e " e... o
o~~ "·-
... " =
~ V""t:I
;.. :15...$ "' ;.. $.1,S
oº,~
~
o E"'
, La estructura de este ordenador, que con el tiempo sería el ~ ..S·~

¡:.;; "" 1l .
"=·-o
e
~
& E-' &o
j t
"'~ .....
--........ -- ""
o~ e
W)
Ol·-
te~ oti 88
Spectravídeo, se basaba en el microprocesador Z80 y su soft- " .J:¡
o 'Cj~ t'<"'\
o ce~
o V "t;:j 11.1
=e ..
ware de base (firmware), el produci<lo por la firma norteame-
- - dJ ..=¡
i-5·'ii.""O ..=¡ ... "' "~ u
N "

ricana Microsoft. o NN

Kaye Nishi, vicepresidente de Microsoft, fue el encargado oz f'.C "'


t- "' "'
t- t-
N
t- "'
t- t- t- t- t - "'
t- "'
t- "'
t- "'
t-

de llevar a término el proyecto. Nisbi, excelente ingeniero y :;i >< >< >< >< ¡:¡: ><
EE ~ g~ g~
}(


'

,,;¡
avispado comerciante, había ya obtenido un rotundo éxito con
el Tandy 100, aparato diseñado por él para una marca japone-
sa (Kyocero), y que penetró totalmente en el mercado ameri-
cano, abriéndole, consecuentemente, las puertas de los
EE.UU.
d
"10
¡..."'""
¡::: ~
::.:
g
>Ll
¡¡::
O' ~i
::.: ::.:
ii ~~
gg gg
::.: ::.: ::.:
¡¡::
·o
::.: ::.:
g
>Ll
¡¡::
O'

::.:
, Pues bien, este inteligente ingeniero japonés diseñó un ....
::E "' ...."'+ "'.... ........
++ "'
"'"' ....+oo
::.: ....+ ~ "'....+
"' ....+
"'
'
1 equipo que si bien aumentó su precio de coste a 80 dólares,
~~
+
::.:
~-
"' ::.: ~ .... ~00
l;3
::.: ::.: ::.: """
........ ::.:
.... "' ::.: ::.:
....
disponía de expansión hasta 256 K., acceso a diversas posibili- $ $ $ $ N
;1
:l
¡¡
dades de display y de gráficos, un macrolenguaje musical y, lo o;:;:¡ "' "' "' "' "'
g
,, más importante, un sistema de inter¡:upciones fácilmente pro- >Ll ::.: ::.:
gramables por el usuario que hacían posible el control de los ;:;:¡ ;:;:¡ ::.: ::.: ::.: ::.: ::.: ::.: ::.: ::.:
N N ++
"'........
"' ::.: ::.: ::.: ::.:
~
N
~ ~
N N
dispositivos digítales electrodomésticos. Fue así como nació ~
N
"'
N

"' "'
N

"' "' N N ::.: ::.: "' "'


"' "' "'
el Spectravídeo 318/328. , , "' "'
Nishi, que debía de sentirse muy satisfecho de su trabajo,
recibió un año después -enero,de 1983-:-, de una serie de com- ........
"'"..._""' o
pañías niponas el encargo de crear un sistema estándar de or-
o~
....
o o "'""o 88
~
denadores personales. Obviamente el ingeniero pensó en su 00
....
~
~~
o 00;::
N . , ~~
trabajo realizado para Spectravídeo y ,en marzo négoció con o;:;:¡ o
o
,.;¡ uu
t:t: "'t-
,.:.
0><
Weiss y Fox el permiso para fabricar el modelo. Sobre el modo ~
> ~ ~
;:;:¡ ;:;:¡ ::i:: "'"" ::i::::i::
"'"" ;:;:¡
¡;;
en que se desarrollaron las negociaciones poco se conoce, sin
....o ;:;:¡
embargo el 17 de junio de 1983, William Gates y Kaye Nishi,
dieron a conocer en Tokio el nuevo estándar, ligeramente dife-
rente del SV328, pero lo suficiente111ente similar.como pai'a
.::.::
<
-
s~
~8
<
z !;.: "'
1 ~~
él:z ¡,,:¡
</)
o
~< oz
~~ ~~
que fuesen compatibles por medio de un cartuch0 ,adaptador. o,_:¡ ><
De todos modos, más tarde se ,inició la fabricacic)n del Spectra- ><
z z ::i::
o "'
vídeo 728 totalmente compatible con la norma. ;:;:¡ < u ;¡) o >< . <
><
"' "'
10 11
ASI CONCIBIO MICROSOFT SU BASIC EXTENDED
En el año 1982 Harry Fox y Alex Weiss, dos comerciantes ""
<
o"
- =
~=
.:5E=~ o i::
-e ¡e·
-" "...
-~..s
=..... ]
~
... o "'~"'
~ ~ ",. "'" "'o
---º_. .
(I}

¡,,:¡ "" -
.,,-g =
de Nueva York dedicados a la importación de relojes desde 'º eii~ ;:;:¡ -=o
"'
i~~ =
'O :>
""'=..
¡... >Ll o= =""t:I·~ ·;;i
Hong Kong, decidieron apunt~rse al carro de las nuevas tec- e cu< ... "' ... ...s= c:i" " = .,, .,,
~
a:
~- :>
"'...
Q ~""O ...!:
..."'~=~ ""' =
~.,,
11.1·-

- "
-C
~

H _,,, B
-.-':'.o =~t
~
~ ~eh:;a
nologías de consumo y diseñaron el hardware de un ordena-
dor que debería fabricarse en la famosa colonia británica en . "'
= j " ... ~ o =
(I} ;.. ..::

"' $!" "


::.: "-o ;:;:¡
., ·- ""'
·- (I}
f! ·- .s"""'~s -... ""'"'
-::l ,.....¡ u
..., ~
~

..e
Asia y no superar los 50 dólares de precio de coste. 00 o "
"'"'e ¡-:¡ "'o " " e " e... o
o~~ "·-
... " =
~ V""t:I
;.. :15...$ "' ;.. $.1,S
oº,~
~
o E"'
, La estructura de este ordenador, que con el tiempo sería el ~ ..S·~

¡:.;; "" 1l .
"=·-o
e
~
& E-' &o
j t
"'~ .....
--........ -- ""
o~ e
W)
Ol·-
te~ oti 88
Spectravídeo, se basaba en el microprocesador Z80 y su soft- " .J:¡
o 'Cj~ t'<"'\
o ce~
o V "t;:j 11.1
=e ..
ware de base (firmware), el produci<lo por la firma norteame-
- - dJ ..=¡
i-5·'ii.""O ..=¡ ... "' "~ u
N "

ricana Microsoft. o NN

Kaye Nishi, vicepresidente de Microsoft, fue el encargado oz f'.C "'


t- "' "'
t- t-
N
t- "'
t- t- t- t- t - "'
t- "'
t- "'
t- "'
t-

de llevar a término el proyecto. Nisbi, excelente ingeniero y :;i >< >< >< >< ¡:¡: ><
EE ~ g~ g~
}(


'

,,;¡
avispado comerciante, había ya obtenido un rotundo éxito con
el Tandy 100, aparato diseñado por él para una marca japone-
sa (Kyocero), y que penetró totalmente en el mercado ameri-
cano, abriéndole, consecuentemente, las puertas de los
EE.UU.
d
"10
¡..."'""
¡::: ~
::.:
g
>Ll
¡¡::
O' ~i
::.: ::.:
ii ~~
gg gg
::.: ::.: ::.:
¡¡::
·o
::.: ::.:
g
>Ll
¡¡::
O'

::.:
, Pues bien, este inteligente ingeniero japonés diseñó un ....
::E "' ...."'+ "'.... ........
++ "'
"'"' ....+oo
::.: ....+ ~ "'....+
"' ....+
"'
'
1 equipo que si bien aumentó su precio de coste a 80 dólares,
~~
+
::.:
~-
"' ::.: ~ .... ~00
l;3
::.: ::.: ::.: """
........ ::.:
.... "' ::.: ::.:
....
disponía de expansión hasta 256 K., acceso a diversas posibili- $ $ $ $ N
;1
:l
¡¡
dades de display y de gráficos, un macrolenguaje musical y, lo o;:;:¡ "' "' "' "' "'
g
,, más importante, un sistema de inter¡:upciones fácilmente pro- >Ll ::.: ::.:
gramables por el usuario que hacían posible el control de los ;:;:¡ ;:;:¡ ::.: ::.: ::.: ::.: ::.: ::.: ::.: ::.:
N N ++
"'........
"' ::.: ::.: ::.: ::.:
~
N
~ ~
N N
dispositivos digítales electrodomésticos. Fue así como nació ~
N
"'
N

"' "'
N

"' "' N N ::.: ::.: "' "'


"' "' "'
el Spectravídeo 318/328. , , "' "'
Nishi, que debía de sentirse muy satisfecho de su trabajo,
recibió un año después -enero,de 1983-:-, de una serie de com- ........
"'"..._""' o
pañías niponas el encargo de crear un sistema estándar de or-
o~
....
o o "'""o 88
~
denadores personales. Obviamente el ingeniero pensó en su 00
....
~
~~
o 00;::
N . , ~~
trabajo realizado para Spectravídeo y ,en marzo négoció con o;:;:¡ o
o
,.;¡ uu
t:t: "'t-
,.:.
0><
Weiss y Fox el permiso para fabricar el modelo. Sobre el modo ~
> ~ ~
;:;:¡ ;:;:¡ ::i:: "'"" ::i::::i::
"'"" ;:;:¡
¡;;
en que se desarrollaron las negociaciones poco se conoce, sin
....o ;:;:¡
embargo el 17 de junio de 1983, William Gates y Kaye Nishi,
dieron a conocer en Tokio el nuevo estándar, ligeramente dife-
rente del SV328, pero lo suficiente111ente similar.como pai'a
.::.::
<
-
s~
~8
<
z !;.: "'
1 ~~
él:z ¡,,:¡
</)
o
~< oz
~~ ~~
que fuesen compatibles por medio de un cartuch0 ,adaptador. o,_:¡ ><
De todos modos, más tarde se ,inició la fabricacic)n del Spectra- ><
z z ::i::
o "'
vídeo 728 totalmente compatible con la norma. ;:;:¡ < u ;¡) o >< . <
><
"' "'
10 11
-----~------------------~

Para cumplir con su misión, el ordenador necesita dispo-


Los primeros micro ordenadores MSX empezaron a co- ner de un almacén donde guarda las instrucciones que debe
mercializarse el oto.ño dc;l mismo a_ño 1?83 y, en ~oco .m~s de ejecutar y los datos sobre los que se efectuarán los cruculos y
un año se han vendido solo en Japon mas de medio mdlon de operaciones incluidas en el programa.
aparatos. Un programa es un conjunto de instrucciones con las que
Ante el éxito, otras compañías japonesas, coreanas y la eu- se alimenta un ordenador para realizar una misión determina-
ropea Philips se interesaro? por el siste~a. Al punto de .que en da.
España contamos con un importante numero de fabricantes Así pues, vemos que un ordenador es una máquina abierta
de la norma MSX que comercializan sus aparatos desde fina- de ilimitadas posibilidades, que se compone de dos elemen-
les de 1984. tos. Una parte física, es decir la máquina en sí, a la que se deno-
Si además de la cantidad de marcas observamos el grado de mina ha_rdware y otra parte conceptual? representada por las
introducción en el mercado y el prestigio de muchas de ellas, instrucctones que el ordenador debe mterpretar y eiecutar
podemos confiar en un futuro despejado de dudas para aque- para realizar determinada operaci~n. Estas instruc~io!1es qu_e
llos que adquieran un micro ordenador MSX. También es fácil hacen útil al ordenador se denomman so&ware y sm el la ma-
suponer que el bajo precio con que se presenta el sistema quina sólo es un montón de cables y circuitos lógicos sin nin-
MSX en el mercado, unido a la gran cantidad y variedad de guna función a realizar.
so&ware y periféricos, que puede generar debido a la compati- El so&ware de un. ordenador es lo que define las funciones
bilidad entre marcas, revolucionará lo que se conoce como in- hacia donde va dirigido. De modo que dos máquinas de idén-
fórmática familiar. tico hardware pueden ejecutar funciones muy diferentes, se-
No obstante el punto de mira de la competencia está pues- gún el so&ware con el que las alim~ntamos.
to en el mercado norteamericano, en el que hasta el momento
el estándar MSX no tiene demasiada incidencia. Es posible
que los fabricantes estén esperando tener más variedad de
so&ware y periféricos acoplados al sistema para lanzarlo en ESQUEMA «A»
EE.UU. Este mercado es difícil, aunque ya ha sido penetrado
por la industria japonesa en otros campos -alta fidelidad, au- Especificacion~s Hardware MSX
tomotores, etc.-, y cuenta con un aliado interior, pues no de-
bemos olvidar el Spectravídeo. Según los observadores lllás - Microprocesador Zilog 80A.
cualificados, el lanzamiento en Estados Unidos de la norma - Interface programable (PPI) Intel 8255. ,
MSX se realizará en 1986 e irá acompañada y apoyada por una - Procesador de vídeo Texas Instruments 9118A o 9928A.
espectacular bajada de precios, que representaría sustituir la - Unidad de memoria independiente para vídeo VRAM de
actual estructura de tarje~as LSI -circ':1ito~ integrados .de gran 16K.
tamaño-, por otras del tlpo VLSI .,.-circmtos de alta mtegra- - Generador programable de sonido (PSG) AY-3-8910 de
ción-, los cuales sustentarían toda la circuitería del sistema General Instruments.
MSX en una sola tarjeta. - Unidad MSX ROM de 32 K;
- Te>dos los MSX disponen de por lo menos 16 K d_e RAM.
EL ORDENADOR MSX ~ Ranura para BUS (conexión externa para a~cesono~).
El procesador dispone de 64 K de memoria orgamzad'.' en
En términos muy simples un ordenador es una m~quina grupos de cuatro «páginas» de 16 K. Cada una de est_as págmas
que obedece órdenes para efectuar cálculos y operacioriesJó- puede ser seleccionada de una de cuatro ranuras posibles (o es-
gieas. ·
13
12
-----~------------------~

Para cumplir con su misión, el ordenador necesita dispo-


Los primeros micro ordenadores MSX empezaron a co- ner de un almacén donde guarda las instrucciones que debe
mercializarse el oto.ño dc;l mismo a_ño 1?83 y, en ~oco .m~s de ejecutar y los datos sobre los que se efectuarán los cruculos y
un año se han vendido solo en Japon mas de medio mdlon de operaciones incluidas en el programa.
aparatos. Un programa es un conjunto de instrucciones con las que
Ante el éxito, otras compañías japonesas, coreanas y la eu- se alimenta un ordenador para realizar una misión determina-
ropea Philips se interesaro? por el siste~a. Al punto de .que en da.
España contamos con un importante numero de fabricantes Así pues, vemos que un ordenador es una máquina abierta
de la norma MSX que comercializan sus aparatos desde fina- de ilimitadas posibilidades, que se compone de dos elemen-
les de 1984. tos. Una parte física, es decir la máquina en sí, a la que se deno-
Si además de la cantidad de marcas observamos el grado de mina ha_rdware y otra parte conceptual? representada por las
introducción en el mercado y el prestigio de muchas de ellas, instrucctones que el ordenador debe mterpretar y eiecutar
podemos confiar en un futuro despejado de dudas para aque- para realizar determinada operaci~n. Estas instruc~io!1es qu_e
llos que adquieran un micro ordenador MSX. También es fácil hacen útil al ordenador se denomman so&ware y sm el la ma-
suponer que el bajo precio con que se presenta el sistema quina sólo es un montón de cables y circuitos lógicos sin nin-
MSX en el mercado, unido a la gran cantidad y variedad de guna función a realizar.
so&ware y periféricos, que puede generar debido a la compati- El so&ware de un. ordenador es lo que define las funciones
bilidad entre marcas, revolucionará lo que se conoce como in- hacia donde va dirigido. De modo que dos máquinas de idén-
fórmática familiar. tico hardware pueden ejecutar funciones muy diferentes, se-
No obstante el punto de mira de la competencia está pues- gún el so&ware con el que las alim~ntamos.
to en el mercado norteamericano, en el que hasta el momento
el estándar MSX no tiene demasiada incidencia. Es posible
que los fabricantes estén esperando tener más variedad de
so&ware y periféricos acoplados al sistema para lanzarlo en ESQUEMA «A»
EE.UU. Este mercado es difícil, aunque ya ha sido penetrado
por la industria japonesa en otros campos -alta fidelidad, au- Especificacion~s Hardware MSX
tomotores, etc.-, y cuenta con un aliado interior, pues no de-
bemos olvidar el Spectravídeo. Según los observadores lllás - Microprocesador Zilog 80A.
cualificados, el lanzamiento en Estados Unidos de la norma - Interface programable (PPI) Intel 8255. ,
MSX se realizará en 1986 e irá acompañada y apoyada por una - Procesador de vídeo Texas Instruments 9118A o 9928A.
espectacular bajada de precios, que representaría sustituir la - Unidad de memoria independiente para vídeo VRAM de
actual estructura de tarje~as LSI -circ':1ito~ integrados .de gran 16K.
tamaño-, por otras del tlpo VLSI .,.-circmtos de alta mtegra- - Generador programable de sonido (PSG) AY-3-8910 de
ción-, los cuales sustentarían toda la circuitería del sistema General Instruments.
MSX en una sola tarjeta. - Unidad MSX ROM de 32 K;
- Te>dos los MSX disponen de por lo menos 16 K d_e RAM.
EL ORDENADOR MSX ~ Ranura para BUS (conexión externa para a~cesono~).
El procesador dispone de 64 K de memoria orgamzad'.' en
En términos muy simples un ordenador es una m~quina grupos de cuatro «páginas» de 16 K. Cada una de est_as págmas
que obedece órdenes para efectuar cálculos y operacioriesJó- puede ser seleccionada de una de cuatro ranuras posibles (o es-
gieas. ·
13
12
pacios de direccionamiento). La r~u~a Oestá r~serv~da para la ESQUEMA!
placa del sistema. La ranura .1 esta siempre dispomble coro~
zona libre de la máquina para conectar cartuchos externos. Si
se accede a las ranuras 2 y 3 conectando un módulo de expan-
sión sumínístrado por el fabrí.cante,_ ~ualquíera de }as «ranuras
l LECTURA/ESCRITURA

primarías» puede ser expandida utilizando el «modulo de e;x-


pansíón de ranuras», dando lugar a c;uatro ranuras s~cund~nas
por cada una primaría. El resultado fi_nal_es u~ espaci? de direc-
ciones de un Megabyte en total sm mcluir la Video Raro
(VRAM).
Ancho de 16 bits
1
EL HARDWARE
MEMORIA
--"
BUSDE
DIRECCIONES
I z 80

La parte principal del hardware de un ordenador es la Uni- "


dad de Control. . ·
Unidad de Control. Su misión es seleccionar las instruccio- /,.
nes contenidas en la memoria, decodificarlas -interpretarlas-,
y hacer que se ejecuten. Si la instrucción necesita de alguna Ancho de 8 bits· <->
operación lógica o aritmética la Unidad de Control transfiere
los datos a la Unidad Lógica y Aritmética.
La Unidad de Control, la Unidad Lógica y Aritmética y la ,
Memoria forman el corazón del ordenador, constituyendo el 't.
Procesador Central. Las tres partes mencionadas integran una
sola placa de tecnología muy avanzl!da .:..vLSI- (Very 1:-ong
Scale Integration), a la que se denomma popularmente micro· Los periféricos mínimos de que consta un sistema son: Te-
procesador. clado (entrada), pantalla de TV o monitor (salida) y cassettes
Cada modelo de microprocesador dispone de un Código pata grabar o cargar programas y datos (entrada/salida). A es-
Máquina peculiar que facilita el fabricante. Este Código Má- tos su~den añadirse .ot~os como im~resora y joysticks, pizarras,
quina está constituído por el conjunto de instrucciones ele- cats, ligh pen y un smfín de accesorios adaptados ya a la norma
1 mentales que puede entender y ejecutar el ordenador siendo
en consecuencia el lenguaje del micro procesador.
MSX.
·.·''El cassette puede ser sustituído por una unidad de disket·
l
.Las instrucciones del Código Máquina sólo trabajan con tes que si bien cumple la misma misión es mucho más rápida
datos binarios y mueven estos datos de la memoria a las distin- pata llevarla a cabo. Tanto el cassette como el diskette es una
1 tas unidades del microprocesador y a los dispositivos periféri- memoria de almacenamiento o memoria secundaria que con-
cos conectados al ordenador y que comunican a éste con el ex· serva los datos y programas, mientras el ordenador se encarga
terior. Estos dispositivos realizan las funciones de recogida de de ejecutar otras tareas, ya que sólo puede contener un progra-
datos (Input/Entrada), y la entrega de tales datos ya elabora- ma en su memoria central. El siguiente esquema da una idea
dos (Output/Salida). gráfica de lo antedicho:

14 15
pacios de direccionamiento). La r~u~a Oestá r~serv~da para la ESQUEMA!
placa del sistema. La ranura .1 esta siempre dispomble coro~
zona libre de la máquina para conectar cartuchos externos. Si
se accede a las ranuras 2 y 3 conectando un módulo de expan-
sión sumínístrado por el fabrí.cante,_ ~ualquíera de }as «ranuras
l LECTURA/ESCRITURA

primarías» puede ser expandida utilizando el «modulo de e;x-


pansíón de ranuras», dando lugar a c;uatro ranuras s~cund~nas
por cada una primaría. El resultado fi_nal_es u~ espaci? de direc-
ciones de un Megabyte en total sm mcluir la Video Raro
(VRAM).
Ancho de 16 bits
1
EL HARDWARE
MEMORIA
--"
BUSDE
DIRECCIONES
I z 80

La parte principal del hardware de un ordenador es la Uni- "


dad de Control. . ·
Unidad de Control. Su misión es seleccionar las instruccio- /,.
nes contenidas en la memoria, decodificarlas -interpretarlas-,
y hacer que se ejecuten. Si la instrucción necesita de alguna Ancho de 8 bits· <->
operación lógica o aritmética la Unidad de Control transfiere
los datos a la Unidad Lógica y Aritmética.
La Unidad de Control, la Unidad Lógica y Aritmética y la ,
Memoria forman el corazón del ordenador, constituyendo el 't.
Procesador Central. Las tres partes mencionadas integran una
sola placa de tecnología muy avanzl!da .:..vLSI- (Very 1:-ong
Scale Integration), a la que se denomma popularmente micro· Los periféricos mínimos de que consta un sistema son: Te-
procesador. clado (entrada), pantalla de TV o monitor (salida) y cassettes
Cada modelo de microprocesador dispone de un Código pata grabar o cargar programas y datos (entrada/salida). A es-
Máquina peculiar que facilita el fabricante. Este Código Má- tos su~den añadirse .ot~os como im~resora y joysticks, pizarras,
quina está constituído por el conjunto de instrucciones ele- cats, ligh pen y un smfín de accesorios adaptados ya a la norma
1 mentales que puede entender y ejecutar el ordenador siendo
en consecuencia el lenguaje del micro procesador.
MSX.
·.·''El cassette puede ser sustituído por una unidad de disket·
l
.Las instrucciones del Código Máquina sólo trabajan con tes que si bien cumple la misma misión es mucho más rápida
datos binarios y mueven estos datos de la memoria a las distin- pata llevarla a cabo. Tanto el cassette como el diskette es una
1 tas unidades del microprocesador y a los dispositivos periféri- memoria de almacenamiento o memoria secundaria que con-
cos conectados al ordenador y que comunican a éste con el ex· serva los datos y programas, mientras el ordenador se encarga
terior. Estos dispositivos realizan las funciones de recogida de de ejecutar otras tareas, ya que sólo puede contener un progra-
datos (Input/Entrada), y la entrega de tales datos ya elabora- ma en su memoria central. El siguiente esquema da una idea
dos (Output/Salida). gráfica de lo antedicho:

14 15
···-···---------------------e

ESQUEMA2 CAPITULO!

Tal como hemos señalado el microprocesador tiene su


propio lenguaje y éste es lo qu~ llamamos ~ó~igo Máquina. Construcción de programas
Trabajar con él de un modo habitual es algo mcomodo y engo-
rroso, por lo que teniéndolo ~orno base ~e. han desarr'?llado
otros lenguajes de más alto mvel que facilitan el traba10 del Llamamos programa a um~ sucesión lógica de pasos tenden-
programador. . tes a realizar una misión concreta.
La característica más importante de estos lenguaJe~ de ~lto Estos pasos deben ser traducidos a un lenguaje inteligible
nivel es aquella que permite que ~on una .sola se~tencia o m~­ 1
por el ordenador (en este caso Basic) y ser introducidos por me-
trucción se ejecute una gran cantidad ?e
mstrucci~nes en Co- dio de algún periférico (teclado, lector de cassette, unidad de
digo Máquina. Entre todos los lenguajes de alto mv~l, el~~­ diskette, etc.). A partir de entonces, el ordenador lo traduce a
SIC es quizás uno de los más desarrollados en su orientacion una sucesión de números binarios con los que opera el micro-
hacia el problema. Es decir, que el I?rograma.dor se pr~oc?Pª procesador.
más:de lo que quiere hacer.que de como funciona lamaquma, Un programa en BASIC no es sino la traducción mediante
pues de lo contrario estaríamos ante un lenguaje orientado ha- una serie de palabras clave (res·ervadas) de unas instrucciones
cia la máquina. . concretas para trabajar con series de datos numéricos o alfanu-
En el BASIC es tal la orientación hacia la solución del pro- méricos, que pueden ser fijos tconstantes) o evolucionar (varia-
blema que se suele hablar de lenguaje dialogal, es decir de un bles).
idioma que permite que el .hecho de operar .con el or?enador Más adelante veremos las variables, constantes y palabras
se convierte en un diálogo entre el hombre y la m¡lquma, gra- reservadas que utiliza el sistema MSX.
cias a la variedad de instrucciones que permiten decirl.e.·a·l.apa- Una de las grandes ventajas que nos proporciona la infor-
rato que realice un mi.smo trabajo de formas muy diferent~s. mática, es el hecho de permitirnos trabajar con muchos datos
Esto es lo que hace posible que se hable de tal o cual estilo que varían a medida que se va ejecutando el programa. Estos
para referirse a la forma de trabajar de determinad,os prog~a­ datos se denominan «variables». Debemos imaginamos estas
madores, del mismo modo que hablamos de lo.s estilos de dis- variables como depósitos de información, ya sea numérica o al-
tintos escritores. fanumérica, denominándose en este último caso cadenas.

16 17
···-···---------------------e

ESQUEMA2 CAPITULO!

Tal como hemos señalado el microprocesador tiene su


propio lenguaje y éste es lo qu~ llamamos ~ó~igo Máquina. Construcción de programas
Trabajar con él de un modo habitual es algo mcomodo y engo-
rroso, por lo que teniéndolo ~orno base ~e. han desarr'?llado
otros lenguajes de más alto mvel que facilitan el traba10 del Llamamos programa a um~ sucesión lógica de pasos tenden-
programador. . tes a realizar una misión concreta.
La característica más importante de estos lenguaJe~ de ~lto Estos pasos deben ser traducidos a un lenguaje inteligible
nivel es aquella que permite que ~on una .sola se~tencia o m~­ 1
por el ordenador (en este caso Basic) y ser introducidos por me-
trucción se ejecute una gran cantidad ?e
mstrucci~nes en Co- dio de algún periférico (teclado, lector de cassette, unidad de
digo Máquina. Entre todos los lenguajes de alto mv~l, el~~­ diskette, etc.). A partir de entonces, el ordenador lo traduce a
SIC es quizás uno de los más desarrollados en su orientacion una sucesión de números binarios con los que opera el micro-
hacia el problema. Es decir, que el I?rograma.dor se pr~oc?Pª procesador.
más:de lo que quiere hacer.que de como funciona lamaquma, Un programa en BASIC no es sino la traducción mediante
pues de lo contrario estaríamos ante un lenguaje orientado ha- una serie de palabras clave (res·ervadas) de unas instrucciones
cia la máquina. . concretas para trabajar con series de datos numéricos o alfanu-
En el BASIC es tal la orientación hacia la solución del pro- méricos, que pueden ser fijos tconstantes) o evolucionar (varia-
blema que se suele hablar de lenguaje dialogal, es decir de un bles).
idioma que permite que el .hecho de operar .con el or?enador Más adelante veremos las variables, constantes y palabras
se convierte en un diálogo entre el hombre y la m¡lquma, gra- reservadas que utiliza el sistema MSX.
cias a la variedad de instrucciones que permiten decirl.e.·a·l.apa- Una de las grandes ventajas que nos proporciona la infor-
rato que realice un mi.smo trabajo de formas muy diferent~s. mática, es el hecho de permitirnos trabajar con muchos datos
Esto es lo que hace posible que se hable de tal o cual estilo que varían a medida que se va ejecutando el programa. Estos
para referirse a la forma de trabajar de determinad,os prog~a­ datos se denominan «variables». Debemos imaginamos estas
madores, del mismo modo que hablamos de lo.s estilos de dis- variables como depósitos de información, ya sea numérica o al-
tintos escritores. fanumérica, denominándose en este último caso cadenas.

16 17
El BASIC MSX puede ser utilizado en dos modos: directo y Los Comandos se pueden utilizar en modo directo; las Sen-
diferido. tencias se utilizan habitualmente en líneas de programa. No
En modo directo, las sentencias y comandos MSX no van obstante, unos y otros pueden ser utilizados de forma diferente
precedidas por números de líneas: .se eje~utan a r;ned_ida que ~e para fines específicos.
introducen. Los resultados de las operaciones antmet1cas y lo- Las Sentencias son palabras reservadas que realizan la parte
gicas pueden presentarse irn;nediatament<; en la pi::ntalla y alrr;a- principal del trabajo en BASIC. Son procesadas automática-
cenarse para su uso posterioi;; pero l~s m~t,rucc1ones prc;pia- mente en orden secuencial -según número de línea- por el or-
mente dichas se borran despues ae la e1ecucion. El modo direc- denador.
to es útil para la corrección de programas y como calculadora Las Funciones se usan para el tratamiento de expresiones
en operaciones rápidas que no exijan un programa completo. (lógicas o aritméticas). Tornan argumentos que son evaluados y
El modo diferido es lo que otros llaman modo de programa. utilizados luego para realizar la operación definida. El resulta-
Las líneas de programa van precedidas por sus correspondiente do de dicha operación sustituye a la función cuando es invoca-
números, y se archivan por ese orden en la memoria. Los pro- da en la expresión de que se trate.
gramas se ejecutan en respuesta al comando RUN. En realidad las funciones enmascaran variables y constan-
Puede teclearse cualquiera línea lógica (formada por varias tes: por ejemplo, ABS es una función que cuando se aplica a
lineas físicas hasta un máximo de 25 5 carácteres) y al presionar una constante o variable la modifica dándonos su valor absolu-
la tecla RETURN, el ordenador examina lo tecleado y trata de to y, excepto raras veces, no tiene sentido si no es aplicada a un
realizar la tarea. valor concreto sea constante o variable.
Si la línea empieza con un número, ésta se almacena en la A continuación pasamos a detallar el conjunto de instruc-
memoria para la posterior ejecución y si ya hubiera un progra- ciones BASIC MSX que serán tratadas en este texto. Algunas
ma en memoria, se modifica la línea introducida sobre el pro- por ser típicas de cualquier BASIC, por lo tanto muy conoci-
grama existente. En otro caso, si no hay número de línea, se su- das, y detalladamente explicadas en todos los manuales, no se
pone que se ha tecleado un comando que ha de realizarse inme- estudiarán y nos remitirnos a los programas de ejemplo para en-
aiatamente. El mensaje OK, es señal de que el BASIC ha vuelto tender su funcionamiento. Otras serán estudiadas con detalle
a modo directo; esto ocurre cuando se termina de ejecutar el dado su peculiar interés y, por fin, las instrucciones referentes a
programa, cuando se da un error en el flujo del programa, o gráficos, sonido y gestión de archivo, serán estudiadas separa-
cuando se interrumpe con las teclas de control. aamente en sendos capítulos de este libro.
Para optimizar los programas (corregir, simplificar, modifi-
car) disponemos de un potente auxiliar: el EDITOR ESQUEMA3
El BASIC MSX, se compone de aproximadamente 150
«expresiones» o palabras clave, las cuales se complemetan con Instrucciones MSX BASIC
varios subcomanaos, o subórdenes que le complementan y am- ORDENES SISTEMATICAS
plían. Estas palabras clave se pueden dividir en: AUTO - Numeración automática
COMANDOS CONT - Continúa la ejecución
DELETE - Borra líneas
FUNCIONES LIST - Listado de programa
SENTENCIAS LLIST - Impresión de programa
Los Comandos son palabras reservadas que se utilizan para NEW - Supresión del programa
modificar algún atributo del ordenador y de su operación. De- RENUM - Renumeración del programa
ben ser introducidos individualmente por el operador. Ejem- RUN - Ejecución del programa
plos de Comandos son: RUN, LIST y NEW. TRON/TROFF - Trazado de la ejecución

18 19
El BASIC MSX puede ser utilizado en dos modos: directo y Los Comandos se pueden utilizar en modo directo; las Sen-
diferido. tencias se utilizan habitualmente en líneas de programa. No
En modo directo, las sentencias y comandos MSX no van obstante, unos y otros pueden ser utilizados de forma diferente
precedidas por números de líneas: .se eje~utan a r;ned_ida que ~e para fines específicos.
introducen. Los resultados de las operaciones antmet1cas y lo- Las Sentencias son palabras reservadas que realizan la parte
gicas pueden presentarse irn;nediatament<; en la pi::ntalla y alrr;a- principal del trabajo en BASIC. Son procesadas automática-
cenarse para su uso posterioi;; pero l~s m~t,rucc1ones prc;pia- mente en orden secuencial -según número de línea- por el or-
mente dichas se borran despues ae la e1ecucion. El modo direc- denador.
to es útil para la corrección de programas y como calculadora Las Funciones se usan para el tratamiento de expresiones
en operaciones rápidas que no exijan un programa completo. (lógicas o aritméticas). Tornan argumentos que son evaluados y
El modo diferido es lo que otros llaman modo de programa. utilizados luego para realizar la operación definida. El resulta-
Las líneas de programa van precedidas por sus correspondiente do de dicha operación sustituye a la función cuando es invoca-
números, y se archivan por ese orden en la memoria. Los pro- da en la expresión de que se trate.
gramas se ejecutan en respuesta al comando RUN. En realidad las funciones enmascaran variables y constan-
Puede teclearse cualquiera línea lógica (formada por varias tes: por ejemplo, ABS es una función que cuando se aplica a
lineas físicas hasta un máximo de 25 5 carácteres) y al presionar una constante o variable la modifica dándonos su valor absolu-
la tecla RETURN, el ordenador examina lo tecleado y trata de to y, excepto raras veces, no tiene sentido si no es aplicada a un
realizar la tarea. valor concreto sea constante o variable.
Si la línea empieza con un número, ésta se almacena en la A continuación pasamos a detallar el conjunto de instruc-
memoria para la posterior ejecución y si ya hubiera un progra- ciones BASIC MSX que serán tratadas en este texto. Algunas
ma en memoria, se modifica la línea introducida sobre el pro- por ser típicas de cualquier BASIC, por lo tanto muy conoci-
grama existente. En otro caso, si no hay número de línea, se su- das, y detalladamente explicadas en todos los manuales, no se
pone que se ha tecleado un comando que ha de realizarse inme- estudiarán y nos remitirnos a los programas de ejemplo para en-
aiatamente. El mensaje OK, es señal de que el BASIC ha vuelto tender su funcionamiento. Otras serán estudiadas con detalle
a modo directo; esto ocurre cuando se termina de ejecutar el dado su peculiar interés y, por fin, las instrucciones referentes a
programa, cuando se da un error en el flujo del programa, o gráficos, sonido y gestión de archivo, serán estudiadas separa-
cuando se interrumpe con las teclas de control. aamente en sendos capítulos de este libro.
Para optimizar los programas (corregir, simplificar, modifi-
car) disponemos de un potente auxiliar: el EDITOR ESQUEMA3
El BASIC MSX, se compone de aproximadamente 150
«expresiones» o palabras clave, las cuales se complemetan con Instrucciones MSX BASIC
varios subcomanaos, o subórdenes que le complementan y am- ORDENES SISTEMATICAS
plían. Estas palabras clave se pueden dividir en: AUTO - Numeración automática
COMANDOS CONT - Continúa la ejecución
DELETE - Borra líneas
FUNCIONES LIST - Listado de programa
SENTENCIAS LLIST - Impresión de programa
Los Comandos son palabras reservadas que se utilizan para NEW - Supresión del programa
modificar algún atributo del ordenador y de su operación. De- RENUM - Renumeración del programa
ben ser introducidos individualmente por el operador. Ejem- RUN - Ejecución del programa
plos de Comandos son: RUN, LIST y NEW. TRON/TROFF - Trazado de la ejecución

18 19
BUCLES Y RAMIFICACIONES END - Fin del programa
INPUT - Entrada por teclado
FOR/NEXT/STEP -Bucle LET Asignación de variables
GOSUB - Llamada a subrutina LINEINPUT - Entrada de cadena
GOTO - Salto a una línea del programa LPRJNT - Impresiói;i
IF/THEN/ELSE - Condición y decisión LPRJNTUSING - Impresión de un formato
ON ... GOSUB - Bifurcación condicional OUT ·- Salida controlada de un bit
ON ... GOTO - Salto indicado POKE - Escribe sobre la memoria
RETURN - Fin de la subrutina PRJNT - Escritura en la pantalla
PRJNTUSING - Escritura en formato
DECLARACIONES READ - Lectura de datos
REM - Comentarios
DEFFN - Define una función RESTORE - Posiciona el puntero al inicio de
DEFDBL - Define las variables del tipo «doble los datos
precisión» STOP - Para provisional
DEFINT - Define las variables enteras SWAP - Intercambia valores entre dos
DEFSGN - Define las variables del tipo «simple variables
precisión» WAIT - Espera llegada de un bit
DEFSTR - Define el «tipo cadena»
DEFUSR - Define una rutina en lenguaje
mágtiína FUNCIONES DE USO GENERAL
DIM - Define una tabla
ERASE - Suprime una tabla BASE - Organiza VRAM
BIN$ - Conversión en binario
INTERRUPCIONES CDBL - Conversión en doble precisión
CINT - Conversión en enteros
INTERVAL ON/OFF/STOP - Paro/funcionamiento de intervalos CSNG - Conversión en simple precisión
ON INTERVAL GOSUB - Interrupción tras un intervalo FIX - Supresión de decimales
ON STOP GOSUB - Interrupción al pulsar STOP FN - Función del usuario
STOP ON/OFF/STOP - Ignorá/admite la interrupción FRE - Memoria disponible
HEX$ - Conversión en hexadecimales
TRATAMIENTO DE ERRORES INKEY$ - Modo tablero
INP - Entrada controlada de un bit
ONERRORGOTO - Salto si hay error INPUT$ ·- Espera teclado
RESUME - Continúa después de la corrección INT - Produce un entero matemático
ERROR - Genera error aefinido por el usuario LPO$ - Posición del cursor impresora
ERL - Número de línea del error OCT$ - Conversión de octales
ERR - Código del error PEEK - Acceso de memoria (lectura)
Rt'\!D - Número aleatorio
SPC .- Imprime espacios en blanco
ORDENES DE USO GENERAL TAB - Columnado del cursor
TIME - Reloj del sistema
CLEAR - Borra las variables y reserva espacio USR - Conversión de una cadena
para cadena y otros usos en números
DATA - Datos del programa VARPTR - Puntero de la posición de las variables

20 21
BUCLES Y RAMIFICACIONES END - Fin del programa
INPUT - Entrada por teclado
FOR/NEXT/STEP -Bucle LET Asignación de variables
GOSUB - Llamada a subrutina LINEINPUT - Entrada de cadena
GOTO - Salto a una línea del programa LPRJNT - Impresiói;i
IF/THEN/ELSE - Condición y decisión LPRJNTUSING - Impresión de un formato
ON ... GOSUB - Bifurcación condicional OUT ·- Salida controlada de un bit
ON ... GOTO - Salto indicado POKE - Escribe sobre la memoria
RETURN - Fin de la subrutina PRJNT - Escritura en la pantalla
PRJNTUSING - Escritura en formato
DECLARACIONES READ - Lectura de datos
REM - Comentarios
DEFFN - Define una función RESTORE - Posiciona el puntero al inicio de
DEFDBL - Define las variables del tipo «doble los datos
precisión» STOP - Para provisional
DEFINT - Define las variables enteras SWAP - Intercambia valores entre dos
DEFSGN - Define las variables del tipo «simple variables
precisión» WAIT - Espera llegada de un bit
DEFSTR - Define el «tipo cadena»
DEFUSR - Define una rutina en lenguaje
mágtiína FUNCIONES DE USO GENERAL
DIM - Define una tabla
ERASE - Suprime una tabla BASE - Organiza VRAM
BIN$ - Conversión en binario
INTERRUPCIONES CDBL - Conversión en doble precisión
CINT - Conversión en enteros
INTERVAL ON/OFF/STOP - Paro/funcionamiento de intervalos CSNG - Conversión en simple precisión
ON INTERVAL GOSUB - Interrupción tras un intervalo FIX - Supresión de decimales
ON STOP GOSUB - Interrupción al pulsar STOP FN - Función del usuario
STOP ON/OFF/STOP - Ignorá/admite la interrupción FRE - Memoria disponible
HEX$ - Conversión en hexadecimales
TRATAMIENTO DE ERRORES INKEY$ - Modo tablero
INP - Entrada controlada de un bit
ONERRORGOTO - Salto si hay error INPUT$ ·- Espera teclado
RESUME - Continúa después de la corrección INT - Produce un entero matemático
ERROR - Genera error aefinido por el usuario LPO$ - Posición del cursor impresora
ERL - Número de línea del error OCT$ - Conversión de octales
ERR - Código del error PEEK - Acceso de memoria (lectura)
Rt'\!D - Número aleatorio
SPC .- Imprime espacios en blanco
ORDENES DE USO GENERAL TAB - Columnado del cursor
TIME - Reloj del sistema
CLEAR - Borra las variables y reserva espacio USR - Conversión de una cadena
para cadena y otros usos en números
DATA - Datos del programa VARPTR - Puntero de la posición de las variables

20 21
CALCULO CAPITULOII
ABS - Numeración automática
ATN - Arco tangente
cos -Coseno
EXP - Exponencial
LOG - Logaritmo neperiano
SGN - Función signo
SING -Seno
SQR - Raíz cuadrada
TAN -Tangente
TRATAMIENTO DE CADENAS
ASC - Valor ASCII de una cadena
CHR$ - Genera un carácter ASCII a partir
de número. Es complementaria
a la función ASC El potente editor «todo pantalla»
INSTR - Búsqueda de subcadena
LEFT$ - Lado izquierdo de una cadena
LEN Largo de una cadena Cuando se introduce un programa por primera vez en la
MID$ - Medio de una cadena máquina, habitualmente es preciso efectuar una serie de modi-
RIGHT$ - Lado derecho de una cadena ficaciones en su listado (intercalar alguna instrucción, modifi-
SPACE$ - Cadena de espacios car algún orden ... ). A toda la serie de recursos técnicos que nos
STR$ - Conversión de un número brinda el sistema para efectuar estas correcciones lo denomina-
encadena mos EDITOR.
STRING$ - Produce una cadena Un Editor «todo pantalla» como el que llevan incorporados
los aparatos de la norma MSX es francamente útil, puesto que
teniendo en pantalla el listado podemos ir a cualquier sitio que
deseemos con las teclas del cursor y efectuar los arreglos perti-
nentes. Veamos que opciones nos proporciona este editor:
LIST: Este comando es conocido de todos los usuarios de
miniordenadores; pues-como es sabido- sí colocamos LIST en
modo directo y pulsamos RETURN inmediatamente aparecerá
en pantalla el listado del programa que esté almacenado en la
memoria. El BASIC MSX enriquece este comando con una se-
rie de variantes que lo hacen aún más útil. Si después de LIST
colocamos un número de línea, tan sólo se nos presentará en
¡' pantalla la línea especificada. Si en lugar de un solo número de
línea especificamos dos separados por un guión (-), serán lista-
das todas las líneas comprendidas entre las dos que hayamos es-
crito. Podemos también escribir primero el guión y después un
número de línea, lo que nos proporcionará el listado del pro-
1
22 23
CALCULO CAPITULOII
ABS - Numeración automática
ATN - Arco tangente
cos -Coseno
EXP - Exponencial
LOG - Logaritmo neperiano
SGN - Función signo
SING -Seno
SQR - Raíz cuadrada
TAN -Tangente
TRATAMIENTO DE CADENAS
ASC - Valor ASCII de una cadena
CHR$ - Genera un carácter ASCII a partir
de número. Es complementaria
a la función ASC El potente editor «todo pantalla»
INSTR - Búsqueda de subcadena
LEFT$ - Lado izquierdo de una cadena
LEN Largo de una cadena Cuando se introduce un programa por primera vez en la
MID$ - Medio de una cadena máquina, habitualmente es preciso efectuar una serie de modi-
RIGHT$ - Lado derecho de una cadena ficaciones en su listado (intercalar alguna instrucción, modifi-
SPACE$ - Cadena de espacios car algún orden ... ). A toda la serie de recursos técnicos que nos
STR$ - Conversión de un número brinda el sistema para efectuar estas correcciones lo denomina-
encadena mos EDITOR.
STRING$ - Produce una cadena Un Editor «todo pantalla» como el que llevan incorporados
los aparatos de la norma MSX es francamente útil, puesto que
teniendo en pantalla el listado podemos ir a cualquier sitio que
deseemos con las teclas del cursor y efectuar los arreglos perti-
nentes. Veamos que opciones nos proporciona este editor:
LIST: Este comando es conocido de todos los usuarios de
miniordenadores; pues-como es sabido- sí colocamos LIST en
modo directo y pulsamos RETURN inmediatamente aparecerá
en pantalla el listado del programa que esté almacenado en la
memoria. El BASIC MSX enriquece este comando con una se-
rie de variantes que lo hacen aún más útil. Si después de LIST
colocamos un número de línea, tan sólo se nos presentará en
¡' pantalla la línea especificada. Si en lugar de un solo número de
línea especificamos dos separados por un guión (-), serán lista-
das todas las líneas comprendidas entre las dos que hayamos es-
crito. Podemos también escribir primero el guión y después un
número de línea, lo que nos proporcionará el listado del pro-
1
22 23
....-----------------=::::;::;;;;~íiíiiiiiiiiil
- -".:_,_, __ -_>/--;_ :·._ --.

11.'.·.~t~~o\lh Jm~ indi~d,


d principió HMm la T•mbién po
' '''. ~<"U:iostedear un n.º de línea y tr~s él el guión, lo que nos dará
intercalado líneas una vez listado, etc. RENUM nos ayuda (silo
tecleamos en modo directo seguido de RETURN) renumeran-
e}~tado de l~s líneas comprendida~ <:ntre la que hayamos es- do todas las líneas a partir de la 10 y con incrementos de 10, ac-
érito hasta el final del programa. En ulumo lugar, podemos em- tualizándose automáticamente los n. 0 de línea que figuren en
plear un punto(.) después de LIST, con lo que obtei;idrei;rios la programa en sentencias como GOTO, GOSUB, etc. Por si esto
última línea que hayamos entrado o gue hayamos visualizado. fuera poco, también se puede renumerar el programa definien-
El comando LIST puede también utilizarse como sentencia de do el n. 0 de línea en que queremos que comience escribiendo
programa, pero una vez ejecutada nos devolverá al modo direc- RENUM y el n. 0 de línea deseado; e incluso si después de RE-
to. Podemos detener el listado pulsandó STOP, y reempren- NUM y un n. 0 de línea colocamos una coma(,) yunn. 0 de línea
derlo volviéndolo a pulsar. Asimismo podemos interrumpirlo ya existente renumeraremos la porción del programa compren-
pulsando CTRL-STOP o CTRL-C. Todo lo dicho anterior- dida entre el segundo n. 0 de línea y el final con el n.º de línea
mente es válido también para obtener listados por impresora, que hayamos especificado en primer lugar después de RENUM
pero debemos tener en cuenta que la orden para listar por éste y en incrementos de 10. ·
periférico es LLIST. También podemos variar los incrementos, haciendo seguir
AUTO: Este comando tiene una gran utilidad. Si escribi- a los dos valores especificados anteriormente otra coma y el
mos AUTO en modo directo y pulsamos RETURN, se inicia la nuevo valor del incremento. Si omitimos cualquiera de estos va-
autonumeración de líneas, comenzando en la n. 0 10 y con incre- lores, debemos especificarlo mediante una coma. Unos ejem-
mentos de 10. También puede iniciarse la autonumeración co- plos nos aclararán esto:
menzando a partir de una línea determinada y con incrementos RENUM 100, 30 convertirá la actual línea 30 en línea
de 1Ointroduciendo AUTO seguido del n. 0 de línea a partir del 100, y a partir de ella todas las líneas de 10 en 10.
que deseemos comenzar. Podemos también modificar el incre- RENUM 100, 30, 5 hará lo mismo que el ejemplo ante-
mento de líneas tecleando AUTO, seguido del incremento de rior, pero los incrementos de línea irán de 5 en 5.
líneas que deseemos; y obviamente también podemos empezar RENUM 7, renumerará todo el programa desde el co-
la autonumeración en una línea cualquiera y con el incremento mienzo con incrementos de línea de 7 en 7.
que deseemos tecleando AUTO seguido del n. 0 de línea, una Si en una sentencia de programa hubiéramos utilizado un
coma (,) y el incremento. Si en lugar de escribir un n. 0 de línea n. 0 de línea inexistente por error, al utilizar RENUl\1 seríamos
colocamos un punto(.), se iniciará la autonumeración a partir avisados de ello con el mensaje «Undefined line number ...
de la última línea escrita. Caso de que utilizando AUTO nos en- in ... ».. Al margen de su gran utilidad como controldel texto del
contráramos con una línea que ya estuviera utilizada, seremos programa, es muy útil también para la fusión de programas con
avisados de ello por un asterisco(*) que aparecerá al lado del MERGE, puesto que con RENUM podemos tener la certeza de
n. 0 de línea. Si deseamos conservar la línea tal como está simple- que no se repitan números de línea. Hemos de tener en cuenta
mente debemos pulsar RETURN, caso contrario borraremos el que el uso de RENUM es irreversible, por lo tanto debemos te-
asterisco y escribiremos la nueva línea. Este comando sirve para ner cuidado en señalizar convenientemente las partes del pro-
ahorrar tiempo, puesto que nos permite ignorar los n. 0 de línea grama de interés para nosotros (subrutinas, entradas o salidas
y para acelerar tareas repetitivas, sobre todo si combinamos su de datos ... ) puesto que en caso contrario podemos perder un
uso con el de alguna tecla de función. Para salir del modo de au- tiempo considerable tratando de reubicarlas.
tonumeración debemos pulsar CTRL-STOP o CTRL-C. DELETE: Es sabido de todos los usuarios que para elimi-
RE,NUM: Este es un comando que nos ayuda a ordenar las nar una línea de programa, basta con introducir su número y
líneas de un programa. Cuando hemos tecleado un programa pulsar RETURN. El problema viene cuando se desea borrar un
en el que los incrementos de línea no son fijos, o cuando hemos grupo de líneas, puesto que si hay muchas líneas ese procedí-

24 25
....-----------------=::::;::;;;;~íiíiiiiiiiiil
- -".:_,_, __ -_>/--;_ :·._ --.

11.'.·.~t~~o\lh Jm~ indi~d,


d principió HMm la T•mbién po
' '''. ~<"U:iostedear un n.º de línea y tr~s él el guión, lo que nos dará
intercalado líneas una vez listado, etc. RENUM nos ayuda (silo
tecleamos en modo directo seguido de RETURN) renumeran-
e}~tado de l~s líneas comprendida~ <:ntre la que hayamos es- do todas las líneas a partir de la 10 y con incrementos de 10, ac-
érito hasta el final del programa. En ulumo lugar, podemos em- tualizándose automáticamente los n. 0 de línea que figuren en
plear un punto(.) después de LIST, con lo que obtei;idrei;rios la programa en sentencias como GOTO, GOSUB, etc. Por si esto
última línea que hayamos entrado o gue hayamos visualizado. fuera poco, también se puede renumerar el programa definien-
El comando LIST puede también utilizarse como sentencia de do el n. 0 de línea en que queremos que comience escribiendo
programa, pero una vez ejecutada nos devolverá al modo direc- RENUM y el n. 0 de línea deseado; e incluso si después de RE-
to. Podemos detener el listado pulsandó STOP, y reempren- NUM y un n. 0 de línea colocamos una coma(,) yunn. 0 de línea
derlo volviéndolo a pulsar. Asimismo podemos interrumpirlo ya existente renumeraremos la porción del programa compren-
pulsando CTRL-STOP o CTRL-C. Todo lo dicho anterior- dida entre el segundo n. 0 de línea y el final con el n.º de línea
mente es válido también para obtener listados por impresora, que hayamos especificado en primer lugar después de RENUM
pero debemos tener en cuenta que la orden para listar por éste y en incrementos de 10. ·
periférico es LLIST. También podemos variar los incrementos, haciendo seguir
AUTO: Este comando tiene una gran utilidad. Si escribi- a los dos valores especificados anteriormente otra coma y el
mos AUTO en modo directo y pulsamos RETURN, se inicia la nuevo valor del incremento. Si omitimos cualquiera de estos va-
autonumeración de líneas, comenzando en la n. 0 10 y con incre- lores, debemos especificarlo mediante una coma. Unos ejem-
mentos de 10. También puede iniciarse la autonumeración co- plos nos aclararán esto:
menzando a partir de una línea determinada y con incrementos RENUM 100, 30 convertirá la actual línea 30 en línea
de 1Ointroduciendo AUTO seguido del n. 0 de línea a partir del 100, y a partir de ella todas las líneas de 10 en 10.
que deseemos comenzar. Podemos también modificar el incre- RENUM 100, 30, 5 hará lo mismo que el ejemplo ante-
mento de líneas tecleando AUTO, seguido del incremento de rior, pero los incrementos de línea irán de 5 en 5.
líneas que deseemos; y obviamente también podemos empezar RENUM 7, renumerará todo el programa desde el co-
la autonumeración en una línea cualquiera y con el incremento mienzo con incrementos de línea de 7 en 7.
que deseemos tecleando AUTO seguido del n. 0 de línea, una Si en una sentencia de programa hubiéramos utilizado un
coma (,) y el incremento. Si en lugar de escribir un n. 0 de línea n. 0 de línea inexistente por error, al utilizar RENUl\1 seríamos
colocamos un punto(.), se iniciará la autonumeración a partir avisados de ello con el mensaje «Undefined line number ...
de la última línea escrita. Caso de que utilizando AUTO nos en- in ... ».. Al margen de su gran utilidad como controldel texto del
contráramos con una línea que ya estuviera utilizada, seremos programa, es muy útil también para la fusión de programas con
avisados de ello por un asterisco(*) que aparecerá al lado del MERGE, puesto que con RENUM podemos tener la certeza de
n. 0 de línea. Si deseamos conservar la línea tal como está simple- que no se repitan números de línea. Hemos de tener en cuenta
mente debemos pulsar RETURN, caso contrario borraremos el que el uso de RENUM es irreversible, por lo tanto debemos te-
asterisco y escribiremos la nueva línea. Este comando sirve para ner cuidado en señalizar convenientemente las partes del pro-
ahorrar tiempo, puesto que nos permite ignorar los n. 0 de línea grama de interés para nosotros (subrutinas, entradas o salidas
y para acelerar tareas repetitivas, sobre todo si combinamos su de datos ... ) puesto que en caso contrario podemos perder un
uso con el de alguna tecla de función. Para salir del modo de au- tiempo considerable tratando de reubicarlas.
tonumeración debemos pulsar CTRL-STOP o CTRL-C. DELETE: Es sabido de todos los usuarios que para elimi-
RE,NUM: Este es un comando que nos ayuda a ordenar las nar una línea de programa, basta con introducir su número y
líneas de un programa. Cuando hemos tecleado un programa pulsar RETURN. El problema viene cuando se desea borrar un
en el que los incrementos de línea no son fijos, o cuando hemos grupo de líneas, puesto que si hay muchas líneas ese procedí-

24 25
miento representa una considerable pérdida de tiempo. El Edi-
tor MSX cuenta con el comando DELETE para solucionar ese
problema. Este comando puede borrar todo o parte del progra-
ma, por lo que debemos utilizarlo con especial atención. Si in- 1 Variantes del editor
troducimos DELETE seguido de un n. 0 de línea, un guión y
otro n.º de línea serán automáticamente borradas de la memo-
ria todas las líneas comprendidas entre las especificadas, estas
1
inclusive. También podemos omitir el segundo n. 0 de línea
R¡fn~l~
VARIANTES DE LIST
pero no el guión si deseamos borrar las líneas entre la primera y LIST Lista el programa completo line 1 ,
el final del programa. Asimismo, podemos colocar el guión y el LIST line Lista la línea específica line2 Renumera desde el anterior
LIST ( line 1)- número de-la línea 2
2. 0 n.º de línea con lo que borraremos las líneas desde el princi- (line 2) Lista el programa desde la empezando una nueva línea
pio hasta la especificada. Si tras DELETE colocamos un punto, línea 1 ala2 1 en incrementos de 10
LIST line- Lista desde la línea
se borrará la última línea que hayamos visualizado. Si en el pro- RENUM
grama no existiera ninguno de los números de línea especifica-
dos en DELETE obtendríamos el mensa1·e «Illegal function
call». De todos modos, si deseamos borrar a totalidad del pro-
LIST -line
· específica hasta el final
Lista desde el principio
hasta la línea específica ¡line 1),
line2),
increment) Renumera desde la anterior
línea 2 empezando con una
nueva línea 1 en el
grama, lo más práctico es teclear NEW con lo que además del incremento especificado
borrado de la memoria, se reinicializan las variables, ficheros, VARIANTES DE AUTO RENUM,
AUTO Numera las líneas desde (line2),
etc. el 10 en grupos de 10 ( increment) Renumera desde la vieja
Además de los comandos mencionados, el BASIC MSX AUTOline Numera las líneas desde línea 2, desde la nueva línea
el número de la línea. 10 con incrementos de 10
dispone de una serie de utilísimas teclas de control y especiales especificada en grupos de 10 RENUM
que poseen la finalidad de hacer más sencillo el editaje de pro- AUTOline, (Iine2) Renumera desde la vieja
gramas. Quedan detalladas en la figura adjunta. increment Numera las líneas desde línea 2 a partii' de la nueva
el número de la línea línea 10, con incrementos
Dos sentencias que van íntimamente unidas (una desactiva especificada en grupos delO
a la otra) también muy útiles para el editaje de programas son de incremento RENUM
AUTO, ( increment) Renumera desde la nueva
TRON y TROFF, que pueden ser usadas como comandos en increment Continúa desde el número línea 10 con un incremento
modo directo. TRON resulta muy práctico cuando se desea sa- de la línea que se ha dejado especificado
con el incremento RENUM
ber que hace un programa durante su ejecución, es decir, cuan- especificado (line2),
do bifurca hacia una u otra línea o que está ejecutando en cada AUTOline Numera las líneas desde ( increment) Renumera empezando con
momento. Tras la introducción de TRON y durante la ejecu- el número de la línea la nueva línea 1 desde la
especificada con el mismo vieja línea 10 con el
ción del programa se visualizarán en pantalla (siempre que este- incremento que el incremento dado
mos en un modo de texto) los números de las líneas del progra- incremento previo
ma a medida que se vayan ejecutando. TROFF detiene este se- VARIANTES DE DELETE
DELETE
guimiento. (Iine) Borra la línea especificada
VARIANTES DE RENUM DELETE·
RENUM Renumera desde el número (linel)-
de línea 10 en grupos de 10 (line2) Borra desde la línea 1 a la
RENUM 2inclusive
(line 1) Renumera desde el nuevo DELETE
número de la línea 1 en (line2) Borra desde la línea 2
incrementos de 10 inclusive

26 27
il
.fil
miento representa una considerable pérdida de tiempo. El Edi-
tor MSX cuenta con el comando DELETE para solucionar ese
problema. Este comando puede borrar todo o parte del progra-
ma, por lo que debemos utilizarlo con especial atención. Si in- 1 Variantes del editor
troducimos DELETE seguido de un n. 0 de línea, un guión y
otro n.º de línea serán automáticamente borradas de la memo-
ria todas las líneas comprendidas entre las especificadas, estas
1
inclusive. También podemos omitir el segundo n. 0 de línea
R¡fn~l~
VARIANTES DE LIST
pero no el guión si deseamos borrar las líneas entre la primera y LIST Lista el programa completo line 1 ,
el final del programa. Asimismo, podemos colocar el guión y el LIST line Lista la línea específica line2 Renumera desde el anterior
LIST ( line 1)- número de-la línea 2
2. 0 n.º de línea con lo que borraremos las líneas desde el princi- (line 2) Lista el programa desde la empezando una nueva línea
pio hasta la especificada. Si tras DELETE colocamos un punto, línea 1 ala2 1 en incrementos de 10
LIST line- Lista desde la línea
se borrará la última línea que hayamos visualizado. Si en el pro- RENUM
grama no existiera ninguno de los números de línea especifica-
dos en DELETE obtendríamos el mensa1·e «Illegal function
call». De todos modos, si deseamos borrar a totalidad del pro-
LIST -line
· específica hasta el final
Lista desde el principio
hasta la línea específica ¡line 1),
line2),
increment) Renumera desde la anterior
línea 2 empezando con una
nueva línea 1 en el
grama, lo más práctico es teclear NEW con lo que además del incremento especificado
borrado de la memoria, se reinicializan las variables, ficheros, VARIANTES DE AUTO RENUM,
AUTO Numera las líneas desde (line2),
etc. el 10 en grupos de 10 ( increment) Renumera desde la vieja
Además de los comandos mencionados, el BASIC MSX AUTOline Numera las líneas desde línea 2, desde la nueva línea
el número de la línea. 10 con incrementos de 10
dispone de una serie de utilísimas teclas de control y especiales especificada en grupos de 10 RENUM
que poseen la finalidad de hacer más sencillo el editaje de pro- AUTOline, (Iine2) Renumera desde la vieja
gramas. Quedan detalladas en la figura adjunta. increment Numera las líneas desde línea 2 a partii' de la nueva
el número de la línea línea 10, con incrementos
Dos sentencias que van íntimamente unidas (una desactiva especificada en grupos delO
a la otra) también muy útiles para el editaje de programas son de incremento RENUM
AUTO, ( increment) Renumera desde la nueva
TRON y TROFF, que pueden ser usadas como comandos en increment Continúa desde el número línea 10 con un incremento
modo directo. TRON resulta muy práctico cuando se desea sa- de la línea que se ha dejado especificado
con el incremento RENUM
ber que hace un programa durante su ejecución, es decir, cuan- especificado (line2),
do bifurca hacia una u otra línea o que está ejecutando en cada AUTOline Numera las líneas desde ( increment) Renumera empezando con
momento. Tras la introducción de TRON y durante la ejecu- el número de la línea la nueva línea 1 desde la
especificada con el mismo vieja línea 10 con el
ción del programa se visualizarán en pantalla (siempre que este- incremento que el incremento dado
mos en un modo de texto) los números de las líneas del progra- incremento previo
ma a medida que se vayan ejecutando. TROFF detiene este se- VARIANTES DE DELETE
DELETE
guimiento. (Iine) Borra la línea especificada
VARIANTES DE RENUM DELETE·
RENUM Renumera desde el número (linel)-
de línea 10 en grupos de 10 (line2) Borra desde la línea 1 a la
RENUM 2inclusive
(line 1) Renumera desde el nuevo DELETE
número de la línea 1 en (line2) Borra desde la línea 2
incrementos de 10 inclusive

26 27
il
.fil
N
00 Código de teclas de control y funciones especiales
CODIGO T.DE T.
HEX CONTROL ESPECIAL FUNCION
02 * (CTRL) (B) Mueve el cursor hacia la izquierda una palabra.
03 * (CTRL) (C) Detiene la ejecución cuando el BASIC está esperando el INPUT. Vuelve al
nivel de la orden.
05 * (CTRL) (E) Borra todo lo que está a la derecha del cursor, incluyendo el carácter que está
por debajo del cursor.
06 Mueve el cursor hacia la derecha una palabra. '
07 ** ¡cTRL¡ G)
CTRL ¡F) Beep.
08 CTRL H) BS Retrocede y borra un carácter a la izquierda del cursor y después tira todo lo
que hay a la derecha del cursor hacia la izquierda con un espacio.
09 * (CfRL) (I) TAB Mueve hasta la próxima posición TAB. TAB está ajustada con un intervalo
de 8 caracteres·. Dejará blancos desde la posición de la que se ha movido.
OA * (CTRL) (J) Alimentación de línea. Mueve fisicamente el cursor hasta el principio de la
próxima linea. .
OB * (CTRL) (K) HOME Mueve el cursor hasta la parte superior izquierda de la pantalla.
oc * (CTRL) (L) CLS Limpia la pantalla y mueve el cursor hasta la posición de HOME (parte
supetior izquierda).
OD RETURN Retorno del carro. Inserta la línea en cuestión.
OE CTRL ¡M)
** ¡CTRL¡ N) Mueve el cursor hasta el final de la línea en cuestión.
12 * CTRL R) INS Se pone en modo de INSERT. El cursor se convierte en la mitad de su
tamaño normal y permite insertar caracteres a la posición actual del cursor
sin horrar nada.
15 * CTRL¡ (U) Borra todá la línea en cuestión.
18 * CTRL (X) SELECT Ignorado por la versión actual del MSX.
1B ESC Ignorado por la versión actual del MSX.
lC Mueve el cursor hacia la derecha un espacio.
ID '' CTRL J) Mueve el cursor hacia la izquierda un espacio.
* CTRL ' Mueve el cursor hacia arriba un espacio.
lE
1F
7F
:~~ti I<~»
* CTRL
CTRL DEL) DEL
Mueve el curso1· hacia ahajo un espacio.
Borra el carácter en la posición del cursor y tira la parte dereéha hacia la
izquierda un espacio.
La marca * indica que inhabilitará el modo INSERT si éste está puesto.

Í:,Oúi'-'' -0·---~---·,:·,.¡,,,,

.,Q.. >oo
1
"' ,.,
l[,ltr111>t-'
.g] ?rrfü:ª·5':§ ~§ ~~ @·~'Q ~~~~ .. ~~~
¡: Q, o; [!l."' (/) !!:l
!::: V ......_¡
g f!l,o.::>e- >o(6 pº' ,.,~ 11>8 o(") ~"'~· I::' ~ t:s
g oo.. oo..¡;;- ~ ::t.~ t:d 1-j i:j
O)
>-'• ;:;· i)l' >-' ~
>o8 ~ ::iO> "'11> 11> a;_ V
"'
i\,~
· <1 :->
0 .
;:.. () ¡¡i
(/) ':;;;>
i.., oo (¡)
(")~""º'
::> 11>81-1 ,.,~. 0...1-t ~ o ¡..;....1-1 ~ e 1-1 ~ n
o-~iil §' ] 11> g g>o ~ ñl rt ~.g t:.. o::::; ()1::'1§
~::i-
''p:i!oJOO 11>11>~-o
ool-'-<()Ul
8 >o'"'~º
1-tOt--;.• p:i v- ':::>'"'"'
j::;:.., rt
o (") ., i::· ?r,., a: (5; i::· § 11> ""'-' (") ~ > (/)>o ., ~
g (¡) ~ ~ ::s Vº o CJ ~• ~ o r;: 1-"• o rJQ ~ ~~ g
¡,¡;"'"E.. 11> -"',.,a fil ::i o..1' a g () , ., 11> =
o.l:J""'§J~ ~Si g ro· 0 ~S' o n ~ ~- o;~~
?~38 ([)
~ 1-f
~g~ª'::iJl8"~s
t>< .._., ;:::D (D
¡:: O oo -.o
g

~~ sai:a
;...,,..t
00 ,... i ....,
~
::> (") ~' (il >o 8 ...... (") ·q;; -· ::> ¡;;·.g 8 (") "' (") ¡;; ,,,, "'
o..., >-'a•"' ..., ~ o~ ,., g- o.. o..>-'• ., ºa ¡:¡ o ,.,00 ;:!.
o 8 ~ ~ o \Jóft <· o 0 A :;;' p:i ::s Q
g:1-10§ ~oo'-<¡..;'O~oo~::S (D' ~~ ~~oo ~
11> R o..o.. §-0.. ...... 0
a ro -'E 91 i:, ::i ~ '10º ~ ,., !>:> 11>'
...,
...
"O' 11>11> "'11> ~""'~- 8 11> ,_, ... ~-
ss
fi~°'p:i B§·.e~~ADi~a: <i ~8 ~8~ ~
p,VlO..§ "'., ~§,., .. g•o >o o::> >o o::>
oo >::o ~· - n 0 p:i e o.. ~ oo l"'Í'
e w ~-
::>s:,..
,., 8º·"'"'" >oa f-l -....i: ::i tr'J::i"'-· l'l>a "'11> º !li.
11> o.. ~
a
~~e:..~ ~º i~¡~g¡¡; ::; Ri g ~
(¡).s.~ @ º 3 3 tn ro. !3 §-s· ~ rn o Ul Ul
>o"''º::> o.. rt::ii:~ "'"'
N"'
J, ¡¡)0> g..g (il .....,::>O ?rº
o.. .,~ 11>,_, ¡:t:t.
t!Q ,_, •
¡:11> ,..,.
8 - ,... ::> '-"'
0..::i o..,_,. 11>., ¡:,;:..::i ::> 8·8 <" 11> 11> ;¡;....D 11>O.. ¡gi="'·
~ O ~ g 'E! 0. 8 Vl (ti (Ó D D (/) 00 ~ "'
N 0 11> 0O..
0-f-('D '-< Ul ~· Ul
-"'"'"' ?·~
\,~o roo ::s ? H...,,.,.,p_.ºº >:::

N
00 Código de teclas de control y funciones especiales
CODIGO T.DE T.
HEX CONTROL ESPECIAL FUNCION
02 * (CTRL) (B) Mueve el cursor hacia la izquierda una palabra.
03 * (CTRL) (C) Detiene la ejecución cuando el BASIC está esperando el INPUT. Vuelve al
nivel de la orden.
05 * (CTRL) (E) Borra todo lo que está a la derecha del cursor, incluyendo el carácter que está
por debajo del cursor.
06 Mueve el cursor hacia la derecha una palabra. '
07 ** ¡cTRL¡ G)
CTRL ¡F) Beep.
08 CTRL H) BS Retrocede y borra un carácter a la izquierda del cursor y después tira todo lo
que hay a la derecha del cursor hacia la izquierda con un espacio.
09 * (CfRL) (I) TAB Mueve hasta la próxima posición TAB. TAB está ajustada con un intervalo
de 8 caracteres·. Dejará blancos desde la posición de la que se ha movido.
OA * (CTRL) (J) Alimentación de línea. Mueve fisicamente el cursor hasta el principio de la
próxima linea. .
OB * (CTRL) (K) HOME Mueve el cursor hasta la parte superior izquierda de la pantalla.
oc * (CTRL) (L) CLS Limpia la pantalla y mueve el cursor hasta la posición de HOME (parte
supetior izquierda).
OD RETURN Retorno del carro. Inserta la línea en cuestión.
OE CTRL ¡M)
** ¡CTRL¡ N) Mueve el cursor hasta el final de la línea en cuestión.
12 * CTRL R) INS Se pone en modo de INSERT. El cursor se convierte en la mitad de su
tamaño normal y permite insertar caracteres a la posición actual del cursor
sin horrar nada.
15 * CTRL¡ (U) Borra todá la línea en cuestión.
18 * CTRL (X) SELECT Ignorado por la versión actual del MSX.
1B ESC Ignorado por la versión actual del MSX.
lC Mueve el cursor hacia la derecha un espacio.
ID '' CTRL J) Mueve el cursor hacia la izquierda un espacio.
* CTRL ' Mueve el cursor hacia arriba un espacio.
lE
1F
7F
:~~ti I<~»
* CTRL
CTRL DEL) DEL
Mueve el curso1· hacia ahajo un espacio.
Borra el carácter en la posición del cursor y tira la parte dereéha hacia la
izquierda un espacio.
La marca * indica que inhabilitará el modo INSERT si éste está puesto.

Í:,Oúi'-'' -0·---~---·,:·,.¡,,,,

.,Q.. >oo
1
"' ,.,
l[,ltr111>t-'
.g] ?rrfü:ª·5':§ ~§ ~~ @·~'Q ~~~~ .. ~~~
¡: Q, o; [!l."' (/) !!:l
!::: V ......_¡
g f!l,o.::>e- >o(6 pº' ,.,~ 11>8 o(") ~"'~· I::' ~ t:s
g oo.. oo..¡;;- ~ ::t.~ t:d 1-j i:j
O)
>-'• ;:;· i)l' >-' ~
>o8 ~ ::iO> "'11> 11> a;_ V
"'
i\,~
· <1 :->
0 .
;:.. () ¡¡i
(/) ':;;;>
i.., oo (¡)
(")~""º'
::> 11>81-1 ,.,~. 0...1-t ~ o ¡..;....1-1 ~ e 1-1 ~ n
o-~iil §' ] 11> g g>o ~ ñl rt ~.g t:.. o::::; ()1::'1§
~::i-
''p:i!oJOO 11>11>~-o
ool-'-<()Ul
8 >o'"'~º
1-tOt--;.• p:i v- ':::>'"'"'
j::;:.., rt
o (") ., i::· ?r,., a: (5; i::· § 11> ""'-' (") ~ > (/)>o ., ~
g (¡) ~ ~ ::s Vº o CJ ~• ~ o r;: 1-"• o rJQ ~ ~~ g
¡,¡;"'"E.. 11> -"',.,a fil ::i o..1' a g () , ., 11> =
o.l:J""'§J~ ~Si g ro· 0 ~S' o n ~ ~- o;~~
?~38 ([)
~ 1-f
~g~ª'::iJl8"~s
t>< .._., ;:::D (D
¡:: O oo -.o
g

~~ sai:a
;...,,..t
00 ,... i ....,
~
::> (") ~' (il >o 8 ...... (") ·q;; -· ::> ¡;;·.g 8 (") "' (") ¡;; ,,,, "'
o..., >-'a•"' ..., ~ o~ ,., g- o.. o..>-'• ., ºa ¡:¡ o ,.,00 ;:!.
o 8 ~ ~ o \Jóft <· o 0 A :;;' p:i ::s Q
g:1-10§ ~oo'-<¡..;'O~oo~::S (D' ~~ ~~oo ~
11> R o..o.. §-0.. ...... 0
a ro -'E 91 i:, ::i ~ '10º ~ ,., !>:> 11>'
...,
...
"O' 11>11> "'11> ~""'~- 8 11> ,_, ... ~-
ss
fi~°'p:i B§·.e~~ADi~a: <i ~8 ~8~ ~
p,VlO..§ "'., ~§,., .. g•o >o o::> >o o::>
oo >::o ~· - n 0 p:i e o.. ~ oo l"'Í'
e w ~-
::>s:,..
,., 8º·"'"'" >oa f-l -....i: ::i tr'J::i"'-· l'l>a "'11> º !li.
11> o.. ~
a
~~e:..~ ~º i~¡~g¡¡; ::; Ri g ~
(¡).s.~ @ º 3 3 tn ro. !3 §-s· ~ rn o Ul Ul
>o"''º::> o.. rt::ii:~ "'"'
N"'
J, ¡¡)0> g..g (il .....,::>O ?rº
o.. .,~ 11>,_, ¡:t:t.
t!Q ,_, •
¡:11> ,..,.
8 - ,... ::> '-"'
0..::i o..,_,. 11>., ¡:,;:..::i ::> 8·8 <" 11> 11> ;¡;....D 11>O.. ¡gi="'·
~ O ~ g 'E! 0. 8 Vl (ti (Ó D D (/) 00 ~ "'
N 0 11> 0O..
0-f-('D '-< Ul ~· Ul
-"'"'"' ?·~
\,~o roo ::s ? H...,,.,.,p_.ºº >:::

de caracteres) otra variable o constante del mismo tipo, leccionar uno u otro modo de la siguiente forma: si traba-
sin sobrepasar los 255 caracteres. jamos con números decimales, para hacerlo en precisión
Ejemplo de variable de cadena: A$ ="PEPE" simple añadiremos el signo ! después del número (por
Variables numéricas enteras: Su nombre debe ir seguido ejemplo 3.14!); si lo hacemos en precisión doble, añadi-
del signo «%»por ejemplo: A%. remos el símbolo# (por ejemplo 3.1415296#).
Variables numéricas en precisión simple o doble: Como en Si trabajamos con notación científica, E corresponde a
el caso de las constantes, su nombre debe ir seguido de ! precisión simple; D a precisión doble.
en el caso de la precisión simple (A!) o de# en caso de - Hexadecimal: En informática se usa con frecuencia el sis-
doble precisión (A#); aunque por omisión, la máquina tema de cómputo hexadecimal, dado que resulta más útil
siempre trabaja en doble precisión. que el decimal para trabajar con bytes. En este sistema se
De todos modos, no es preceptivo -en el caso de las va- dispone de quince signos: guarismos del Oal 9 y letras de
riables numéricas- la colocación de signos para indicar la A a la F; siendo F = 15.
precisión; puesto que MSX dispone de instrucciones El BASIC MSX, reconoce cualquier número como hexa-
concretas (DEFINT, DEFSGN, DEFSTR, DEFDBL) decimal siempre que vaya precedido de «&H»; y auto-
que efectúan sistemáticamente la conversión. Los nom- máticamente lo transforma en decimal.
bres de las tablas de variables siguen las mismas reglas Octal: También es posible utilizar la base ocho para tra-
que las variables. En MSX, 255 es el número máximo de tar los número.s en BASIC MSX. En este caso, dispone-
dimensiones posibles para una tabla, y la declaración mos de los guarismos O al 7 para expresar los números.
DIM sirve para fijarlas [DIMA (3, 6, 9)]. El número de Los signos «&Ü» sirven para identificar esta notación.
elementos constitutivos de las tablas sólo viene determi- - Binaria: De todos es sabido que el sistema binario, es
nado por la capacidad de memoria disponible. aquel en que realiza la máquina todas las operaciones. A
Es posible convertir un número asignándolo a una varia- menudo resulta más útil entrar el valor de cada bit por se-
ble de la precisión deseada, por ejemplo: A% = 10/3 parado que su equivalente decimal. El prefijo «&B» sirve
asignará a A% el valor 3, A! = 10/3 nos dará 3.33333 y para que cualquier MSX identifique una sucesión de Oy l
con A# (o A sola) - 10/3 obtendremos como número binario.
3.3333333333333.
Las variables enteras ocupan 2 bytes de memoria, las de
precisión simple ocupan 4, y las de precisión doble 8. Por Variables
lo tanto, es muy importante a la hora de ahorrar memoria
o de aumentar la velocidad de ejecución de un programa, Para definir las variables en MSX no hay limitación en
definir el tipo de variable a utilizar. Las variables de cade- cuanto al nombre asignado, pero la máquina sólo reconocerá
na, ocupan en memoria un espacio igual a la longitud de la los dos primeros caracteres. Se pueden mezclar letras y cifras,
cadena más 3 bytes. teniendo en cuenta que el primer carácter debe ser obligatoria-
En las tablas numéricas, cada elemento ocupa el espacio mente una letra. Otra regla muy importante que debe observar-
correspondiente al tipo de variable al que pertenezca la ta- se, es la no inclusión de palabras reservadas -en su totalidad o
bla, incluso en el caso de que esté vacía. Si son tablas de ca- en parte-para nombrar las variables. En MSX existen cuatro ti-
denas el espacio de memoria varía según la longitud de las pos de variables:
cadenas que forman la tabla. Si una cadena es nula sólo - Variables de cadena: Su nombre debe finalizar obligato-
ocupa 3 bytes. riamente con el signo$ y su contenido debe ir entre comi-
Es posible, como hemos mencionado, definir una variable llas. Se puede asociar a una variable de cadena (o cadena

30 31
de caracteres) otra variable o constante del mismo tipo, leccionar uno u otro modo de la siguiente forma: si traba-
sin sobrepasar los 255 caracteres. jamos con números decimales, para hacerlo en precisión
Ejemplo de variable de cadena: A$ ="PEPE" simple añadiremos el signo ! después del número (por
Variables numéricas enteras: Su nombre debe ir seguido ejemplo 3.14!); si lo hacemos en precisión doble, añadi-
del signo «%»por ejemplo: A%. remos el símbolo# (por ejemplo 3.1415296#).
Variables numéricas en precisión simple o doble: Como en Si trabajamos con notación científica, E corresponde a
el caso de las constantes, su nombre debe ir seguido de ! precisión simple; D a precisión doble.
en el caso de la precisión simple (A!) o de# en caso de - Hexadecimal: En informática se usa con frecuencia el sis-
doble precisión (A#); aunque por omisión, la máquina tema de cómputo hexadecimal, dado que resulta más útil
siempre trabaja en doble precisión. que el decimal para trabajar con bytes. En este sistema se
De todos modos, no es preceptivo -en el caso de las va- dispone de quince signos: guarismos del Oal 9 y letras de
riables numéricas- la colocación de signos para indicar la A a la F; siendo F = 15.
precisión; puesto que MSX dispone de instrucciones El BASIC MSX, reconoce cualquier número como hexa-
concretas (DEFINT, DEFSGN, DEFSTR, DEFDBL) decimal siempre que vaya precedido de «&H»; y auto-
que efectúan sistemáticamente la conversión. Los nom- máticamente lo transforma en decimal.
bres de las tablas de variables siguen las mismas reglas Octal: También es posible utilizar la base ocho para tra-
que las variables. En MSX, 255 es el número máximo de tar los número.s en BASIC MSX. En este caso, dispone-
dimensiones posibles para una tabla, y la declaración mos de los guarismos O al 7 para expresar los números.
DIM sirve para fijarlas [DIMA (3, 6, 9)]. El número de Los signos «&Ü» sirven para identificar esta notación.
elementos constitutivos de las tablas sólo viene determi- - Binaria: De todos es sabido que el sistema binario, es
nado por la capacidad de memoria disponible. aquel en que realiza la máquina todas las operaciones. A
Es posible convertir un número asignándolo a una varia- menudo resulta más útil entrar el valor de cada bit por se-
ble de la precisión deseada, por ejemplo: A% = 10/3 parado que su equivalente decimal. El prefijo «&B» sirve
asignará a A% el valor 3, A! = 10/3 nos dará 3.33333 y para que cualquier MSX identifique una sucesión de Oy l
con A# (o A sola) - 10/3 obtendremos como número binario.
3.3333333333333.
Las variables enteras ocupan 2 bytes de memoria, las de
precisión simple ocupan 4, y las de precisión doble 8. Por Variables
lo tanto, es muy importante a la hora de ahorrar memoria
o de aumentar la velocidad de ejecución de un programa, Para definir las variables en MSX no hay limitación en
definir el tipo de variable a utilizar. Las variables de cade- cuanto al nombre asignado, pero la máquina sólo reconocerá
na, ocupan en memoria un espacio igual a la longitud de la los dos primeros caracteres. Se pueden mezclar letras y cifras,
cadena más 3 bytes. teniendo en cuenta que el primer carácter debe ser obligatoria-
En las tablas numéricas, cada elemento ocupa el espacio mente una letra. Otra regla muy importante que debe observar-
correspondiente al tipo de variable al que pertenezca la ta- se, es la no inclusión de palabras reservadas -en su totalidad o
bla, incluso en el caso de que esté vacía. Si son tablas de ca- en parte-para nombrar las variables. En MSX existen cuatro ti-
denas el espacio de memoria varía según la longitud de las pos de variables:
cadenas que forman la tabla. Si una cadena es nula sólo - Variables de cadena: Su nombre debe finalizar obligato-
ocupa 3 bytes. riamente con el signo$ y su contenido debe ir entre comi-
Es posible, como hemos mencionado, definir una variable llas. Se puede asociar a una variable de cadena (o cadena

30 31
mediante la sentencia DEF seguida de INT, SNG, DEL, OPERADORES DE RELACION
STR. Cuando la variable en cuestión es definida mediante
una de estas sentencias no es preciso añadirle ningún sufijo Estos operadores se utilizan para efectuar comparaciones
para expresar su condición excepto en el caso de que se entre valores numéricos o cadenas de caracteres. Si el resultado
desee modificar una variable en concreto: de la operación es verdadero se le asigna ·un l; si es falso O. To-
10 DEFSTRA-Z man en cuenta -en el caso de los números- los decimales y el
20 C% = .3.14/ATN(l):B! =RND(l)*C% signo para efectuar la comparación. Si se trata de cadenas se co-
En la línea 10 hemos definido todas las variables del pro- mienza a efectuar la comparación comenzando en el primer ele-
grama como alfanuméricas, es decir, todas las letras de la mento a la izquierda de la cadena y carácter por carácter. Se cla-
«a» a la «Z» son consideradas como nombres de cadenas sifican en el orden de los códigos ASCII, que en el caso de las le-
de caracteres aunque no lleven el signo$. _En la línea 20 tras supone que comience por las mayúscUlas y siga en orden al-
modificamos esta definición ya que convertrmos a C en va- fabético. Estos operadores son:
riable numérica entera(%) y a Ben variable nrunérica en

prioridad sobre cualquier defin1c1on DEF.


*,
precisión simple ( !) . L~s sufii<;>s. '7'.o; !, $ siempre tienen =IGUALDAD (X=Y)
<>DESIGUALDAD (X<>Y)
< MENORQUE (X<Y)
Tratamiento de variables numéricas > MAYORQUE (X>Y)
<=MENOR O IGUAL (X<=Y)
El BASIC MSX nos permite utilizar un gran número de >=MAYOR O IGUAL (X>=Y)
operaciones, ya sean aritméticas, Booleanas o lógicas. Pasamos
a detallarlas a continuación.
OPERADORES ARITMETICOS
OPERADORES LOGICOS O BOOLEANOS
Los operadores aritméticos realizan operaciones matemáti-
cas con valores cuyo orden de prioridad de ejecución es el si- Estos operadores efectúan sus operaciones según las reglas
guiente: del álgebra de BOOLE. Pueden utilizarse para comparar valo-
res numéricos o junto con operadores de relación. Trabajan de
APOTENCIACION (XAY) eleva X a la potencia Y la siguiente manera:
- NEGACION (-X) calcula la negación de X
* MULTIPLICACION (X*Y) multiplica X por Y
! DIVISION (X/Y) divide X por Y
\ DIVISION ENTERA (X\Y) convierte en enteros los facto- NOT EQV AND
res de la división. Tras eso di- y y XANDY
vide y el resultado también se X NOTX X XEQVY X
convierte en entero. 1 o 1 1 1 1 1 1
MOD (XMODY) nos da el resto de una división
entera, también un entero. o 1 1 o o 1 o o
+SUMA (X+Y) sumadeXmásY o 1 o o 1 o
-RESTA (X-Y) resta Y a X o o 1 o o o
.32 .3 .3
1
mediante la sentencia DEF seguida de INT, SNG, DEL, OPERADORES DE RELACION
STR. Cuando la variable en cuestión es definida mediante
una de estas sentencias no es preciso añadirle ningún sufijo Estos operadores se utilizan para efectuar comparaciones
para expresar su condición excepto en el caso de que se entre valores numéricos o cadenas de caracteres. Si el resultado
desee modificar una variable en concreto: de la operación es verdadero se le asigna ·un l; si es falso O. To-
10 DEFSTRA-Z man en cuenta -en el caso de los números- los decimales y el
20 C% = .3.14/ATN(l):B! =RND(l)*C% signo para efectuar la comparación. Si se trata de cadenas se co-
En la línea 10 hemos definido todas las variables del pro- mienza a efectuar la comparación comenzando en el primer ele-
grama como alfanuméricas, es decir, todas las letras de la mento a la izquierda de la cadena y carácter por carácter. Se cla-
«a» a la «Z» son consideradas como nombres de cadenas sifican en el orden de los códigos ASCII, que en el caso de las le-
de caracteres aunque no lleven el signo$. _En la línea 20 tras supone que comience por las mayúscUlas y siga en orden al-
modificamos esta definición ya que convertrmos a C en va- fabético. Estos operadores son:
riable numérica entera(%) y a Ben variable nrunérica en

prioridad sobre cualquier defin1c1on DEF.


*,
precisión simple ( !) . L~s sufii<;>s. '7'.o; !, $ siempre tienen =IGUALDAD (X=Y)
<>DESIGUALDAD (X<>Y)
< MENORQUE (X<Y)
Tratamiento de variables numéricas > MAYORQUE (X>Y)
<=MENOR O IGUAL (X<=Y)
El BASIC MSX nos permite utilizar un gran número de >=MAYOR O IGUAL (X>=Y)
operaciones, ya sean aritméticas, Booleanas o lógicas. Pasamos
a detallarlas a continuación.
OPERADORES ARITMETICOS
OPERADORES LOGICOS O BOOLEANOS
Los operadores aritméticos realizan operaciones matemáti-
cas con valores cuyo orden de prioridad de ejecución es el si- Estos operadores efectúan sus operaciones según las reglas
guiente: del álgebra de BOOLE. Pueden utilizarse para comparar valo-
res numéricos o junto con operadores de relación. Trabajan de
APOTENCIACION (XAY) eleva X a la potencia Y la siguiente manera:
- NEGACION (-X) calcula la negación de X
* MULTIPLICACION (X*Y) multiplica X por Y
! DIVISION (X/Y) divide X por Y
\ DIVISION ENTERA (X\Y) convierte en enteros los facto- NOT EQV AND
res de la división. Tras eso di- y y XANDY
vide y el resultado también se X NOTX X XEQVY X
convierte en entero. 1 o 1 1 1 1 1 1
MOD (XMODY) nos da el resto de una división
entera, también un entero. o 1 1 o o 1 o o
+SUMA (X+Y) sumadeXmásY o 1 o o 1 o
-RESTA (X-Y) resta Y a X o o 1 o o o
.32 .3 .3
1
IMP OR XOR
l De modo que crea una cadena A$ de un carácter corres-
pondiente al código ASCII incluido en el paréntesis. '
X y XIMPY X y XORY X y XXORY 10 F'F.:INTCHf'~$ (8(2) ¡

1 1 1 1 1 1 1 1 o l IZJ F'R I NTCHF.:$ ( 1 l ; CHR$ ( 65)

1 o o 1 o 1 1 o 1
Los números de código del ASCII se reparten de la siguien-
o 1 1 o 1 1 o 1 1 te manera: los primeros 31 códigos (del &HOO al &HlF) están
o o 1 o o o o o o reservado~ para el sistema, que los utiliza para gestionar la pan-
talla, el editor de toda-pantalla, etc. etc. Estos 31 códigos están
detallados en la tabla n. 0 3 junto con sus equivalencias en deci-
mal y hexadecimal, y corresponden en la tabla 1 a los espacios
Código de caracteres ASCII en blanco que se encuentran entre HOO y HlF. La forma en que
estos caracteres se pueden ejecutar, es mediante una instruc-
El MSX tiene guardados en ROM una serie de caracteres ción PRINT, es decir, si le pedimos al ordenador que ejecute
que utiliza para comunicarse con el usuario por medio del tecla- tanto en modo directo como diferido el mandato PRINT
do. Estos caracteres comprenden las letras, los números, los ca- CHR$ (12), el efecto ·que observaremos será la ejecución de
racteres especiales como asteriscos, _paréntesis, etc. etc. CLS (borrado de pa!1talla); de la misma forma, si ejecutamos un
A cada uno de estos caracteres le corresponde un número PRINT CHR$ (7) oiremos un BEEP (ver capítulos dedicado al
de código. Este número de código es estandard respecto a 'los sonido).
caracteres alfanuméricos y especiales y fue definido por una se- A continuación de estos 31 códigos nos encontramos con la
rie de fabricantes americanos, que dejaron un gran número de serie que va desde el 32 al 255, que incluyen una serie de carac-
códigos libres, para que cada fabricante los utilizara a su estilo. teres (mayúsculas, minúsculas, teclas como ¿ ? & ( /etc. etc. y
Es por eso por lo que el MSX, puede disponer de una gran serie hasta un alfabeto griego).
de caracteres gráficos, que pueden obtenerse directamente Sin embargo lo más interesante para el programador que
pues están definidos también en ROM y su forma de aparecer desea realizar juegos los códigos que más le interesan son los có-
en la pantalla responde a las llamadas de teclado, como cual- di~os gráficos que se encuentran ubicados en dos bloques. El
quier letra o símbolo común. Estos caracteres aparecen me- primero que consta de 32 caracteres va desde el código 192 al
diante la combinación de las letras ordinarias del teclado más la 223 (HCO y HDF) lo que puede comprobarse en la tabla 1 la
tecla GRAPH, o con MAYUSCULAS (SIDFT) más GRAPH que nos da los códigos ASCII en Hexadecimal. De esta man~ra
más letra ordinaria, etc. etc. ahorramos espacio y el usuario puede fácilmente, con ayuda de
Los números de código, pueden ser utilizados directamente su ordenador transformarlos en decimal. Por otra parte el siste-
por el programador por medio de las funciones ASC y CHR$. ma no tiene ningún inconveniente en aceptar un PRINT
CHR$(&HCO).
A= ASC (C$J El esquema 2 nos muestra la segunda serie de 32 caracteres
gráficos, cuyos códigos están por encima del 255 que es la máxi-
Esta función almacena en A el código ASCII del primer ma expresión que podt;~os darle a la función CHR$, por lo
miembro de la cadena C$. Así 10 F'F.: I NT,6,SC <"·F'ep e" ) tanto tendremos que utilizar un truco, que consiste en realizar
un PRINT CHR$(1), que equivale a oprimir la tecla GRAPH o
A$= CHR$(A) sea que si acto seguido mediante un punto y coma (;) hacem~s

¡
1 34 35
,.
!i
IMP OR XOR
l De modo que crea una cadena A$ de un carácter corres-
pondiente al código ASCII incluido en el paréntesis. '
X y XIMPY X y XORY X y XXORY 10 F'F.:INTCHf'~$ (8(2) ¡

1 1 1 1 1 1 1 1 o l IZJ F'R I NTCHF.:$ ( 1 l ; CHR$ ( 65)

1 o o 1 o 1 1 o 1
Los números de código del ASCII se reparten de la siguien-
o 1 1 o 1 1 o 1 1 te manera: los primeros 31 códigos (del &HOO al &HlF) están
o o 1 o o o o o o reservado~ para el sistema, que los utiliza para gestionar la pan-
talla, el editor de toda-pantalla, etc. etc. Estos 31 códigos están
detallados en la tabla n. 0 3 junto con sus equivalencias en deci-
mal y hexadecimal, y corresponden en la tabla 1 a los espacios
Código de caracteres ASCII en blanco que se encuentran entre HOO y HlF. La forma en que
estos caracteres se pueden ejecutar, es mediante una instruc-
El MSX tiene guardados en ROM una serie de caracteres ción PRINT, es decir, si le pedimos al ordenador que ejecute
que utiliza para comunicarse con el usuario por medio del tecla- tanto en modo directo como diferido el mandato PRINT
do. Estos caracteres comprenden las letras, los números, los ca- CHR$ (12), el efecto ·que observaremos será la ejecución de
racteres especiales como asteriscos, _paréntesis, etc. etc. CLS (borrado de pa!1talla); de la misma forma, si ejecutamos un
A cada uno de estos caracteres le corresponde un número PRINT CHR$ (7) oiremos un BEEP (ver capítulos dedicado al
de código. Este número de código es estandard respecto a 'los sonido).
caracteres alfanuméricos y especiales y fue definido por una se- A continuación de estos 31 códigos nos encontramos con la
rie de fabricantes americanos, que dejaron un gran número de serie que va desde el 32 al 255, que incluyen una serie de carac-
códigos libres, para que cada fabricante los utilizara a su estilo. teres (mayúsculas, minúsculas, teclas como ¿ ? & ( /etc. etc. y
Es por eso por lo que el MSX, puede disponer de una gran serie hasta un alfabeto griego).
de caracteres gráficos, que pueden obtenerse directamente Sin embargo lo más interesante para el programador que
pues están definidos también en ROM y su forma de aparecer desea realizar juegos los códigos que más le interesan son los có-
en la pantalla responde a las llamadas de teclado, como cual- di~os gráficos que se encuentran ubicados en dos bloques. El
quier letra o símbolo común. Estos caracteres aparecen me- primero que consta de 32 caracteres va desde el código 192 al
diante la combinación de las letras ordinarias del teclado más la 223 (HCO y HDF) lo que puede comprobarse en la tabla 1 la
tecla GRAPH, o con MAYUSCULAS (SIDFT) más GRAPH que nos da los códigos ASCII en Hexadecimal. De esta man~ra
más letra ordinaria, etc. etc. ahorramos espacio y el usuario puede fácilmente, con ayuda de
Los números de código, pueden ser utilizados directamente su ordenador transformarlos en decimal. Por otra parte el siste-
por el programador por medio de las funciones ASC y CHR$. ma no tiene ningún inconveniente en aceptar un PRINT
CHR$(&HCO).
A= ASC (C$J El esquema 2 nos muestra la segunda serie de 32 caracteres
gráficos, cuyos códigos están por encima del 255 que es la máxi-
Esta función almacena en A el código ASCII del primer ma expresión que podt;~os darle a la función CHR$, por lo
miembro de la cadena C$. Así 10 F'F.: I NT,6,SC <"·F'ep e" ) tanto tendremos que utilizar un truco, que consiste en realizar
un PRINT CHR$(1), que equivale a oprimir la tecla GRAPH o
A$= CHR$(A) sea que si acto seguido mediante un punto y coma (;) hacem~s

¡
1 34 35
,.
!i
un PRINT CHR$(65), nos da un sol sonriente de color blanco,
o sea PRINT CHR$(1) ;CHR$(65), pero hay que tener cuidado,
porque este truco sólo funciona con punto y coma. Una coma
sola, o dos PRINT consecutivos no producirán el efecto desea- N

~fil t1~1;1;1~1:1~1 l~l"~1:1::1~1t1 1


do. En la tabla 2 encontraremos los códigos de esta segunda se-
rie de caracteres en hexadecimales que desde el &H40 hasta el
&H5F y pueden utilizarse directamente de esta forma: PRINT
CHR$(1); PRINT CHR$(&H41), lo que produce el mismo
efecto que en el ejemplo anterior.
La utilidad de poder controlar estos códigos ASCII en
nuestros programas es grande, pues de esta forma podemos
comparar cadenas de caracteres, y ordenarlos por su código
que coincide con el orden alfabético. Aparte, nos permite todo
tipo de cálculos aritméticos con el valor de los códigos, pero
esto, es mejor ir aprendiéndolo con la práctica, a base de copiar
y analizar programas y, lo más importante, practicando con tu
ordenador.
u. 11\ +I /'JI
-\111 <:__
-. ·I· 11 o
• 1
L. e ~

... • • - . •- - • • --JJ
Para obtener el código hexadecimal de un carácter determi-
8 -s.
... w
111 \:j <>:::¡_ ¡:... t:: b ~ ;... >6' G 'o !::-
nado, en primer lugar debemos localizar el carácter, y la nume-
..... "" "'
ración que encontraremos en la parte superior, en sentido hori-
zontal, nos dan el primer dígito de dicho carácter. El segundo
Q
X • ~
• 1:::: <J ++ 3 1
lo obtenemos a la derecha de la tabla 1 (a la izquierda en la tabla
o 1 ~ '// ~ ~ ......
2) de esta manera la A mayúscula nos da el código &H41. La ta- m •< "" ,_ IO 1::::i -,
·-. ~/ o ~
bla 2 funciona de la misma forma con la peculiaridad de que en
..... 1-
'º ,z '"'
·~

"" ""'
,,..._
la fila superior, sólo tenemos dos números el 4 y el 5, lo que es <
....:¡
< ""
,_
'° '"'
¡¡:
"'' 01 •v L
r ~
:::;¿ ·- 'V

lógico, pues sus valores van del &H40 al &H5F. Por ejemplo el t:Q OI ,µ¡ ru ~ <O :e :>. :o :::::i ..,
<;.¡ ;¡¡.. ~

o...
< 'º <!:'
'"'<> """
corazón se obtiene en pantalla mediante PRINT CHR$(1);
CHR$(&H43).
r... Cl)
Ü"
'"' "".... <o:l .;ro
'"' º"'
¡;:
«!)
"">.
.,,,, ,_
-
·- -
- -
:< --<
l ""' o. Cf 1/) ~

"' > >< N - 1 <J


'j

l
co ,
"' .o u "O (lJ ..__ bO ..e ·- ·~ ~
- E ¡::: e
¡
11) o... o o,; (/) ¡.... ;::::¡ > ¡:;;: X ;::.... N ~
/ ~ < 1
J.
..,. < u - ,_, ;;s z o
- .*"' ::r::
@ Q ¡,,) 0 ~ .....¡
(') o
¡:Q

M ..,,, l.()
'"'
""
,._ 00 Ol .. . - V 11 ,... <--·
"'
~
-· ~ c::J - ~
- .
... ~ • =
"" * ~
+ 1
"
I'
/i.
o ~ t11 v oo aasaa
li
1l
"f 36 37
1'
11
un PRINT CHR$(65), nos da un sol sonriente de color blanco,
o sea PRINT CHR$(1) ;CHR$(65), pero hay que tener cuidado,
porque este truco sólo funciona con punto y coma. Una coma
sola, o dos PRINT consecutivos no producirán el efecto desea- N

~fil t1~1;1;1~1:1~1 l~l"~1:1::1~1t1 1


do. En la tabla 2 encontraremos los códigos de esta segunda se-
rie de caracteres en hexadecimales que desde el &H40 hasta el
&H5F y pueden utilizarse directamente de esta forma: PRINT
CHR$(1); PRINT CHR$(&H41), lo que produce el mismo
efecto que en el ejemplo anterior.
La utilidad de poder controlar estos códigos ASCII en
nuestros programas es grande, pues de esta forma podemos
comparar cadenas de caracteres, y ordenarlos por su código
que coincide con el orden alfabético. Aparte, nos permite todo
tipo de cálculos aritméticos con el valor de los códigos, pero
esto, es mejor ir aprendiéndolo con la práctica, a base de copiar
y analizar programas y, lo más importante, practicando con tu
ordenador.
u. 11\ +I /'JI
-\111 <:__
-. ·I· 11 o
• 1
L. e ~

... • • - . •- - • • --JJ
Para obtener el código hexadecimal de un carácter determi-
8 -s.
... w
111 \:j <>:::¡_ ¡:... t:: b ~ ;... >6' G 'o !::-
nado, en primer lugar debemos localizar el carácter, y la nume-
..... "" "'
ración que encontraremos en la parte superior, en sentido hori-
zontal, nos dan el primer dígito de dicho carácter. El segundo
Q
X • ~
• 1:::: <J ++ 3 1
lo obtenemos a la derecha de la tabla 1 (a la izquierda en la tabla
o 1 ~ '// ~ ~ ......
2) de esta manera la A mayúscula nos da el código &H41. La ta- m •< "" ,_ IO 1::::i -,
·-. ~/ o ~
bla 2 funciona de la misma forma con la peculiaridad de que en
..... 1-
'º ,z '"'
·~

"" ""'
,,..._
la fila superior, sólo tenemos dos números el 4 y el 5, lo que es <
....:¡
< ""
,_
'° '"'
¡¡:
"'' 01 •v L
r ~
:::;¿ ·- 'V

lógico, pues sus valores van del &H40 al &H5F. Por ejemplo el t:Q OI ,µ¡ ru ~ <O :e :>. :o :::::i ..,
<;.¡ ;¡¡.. ~

o...
< 'º <!:'
'"'<> """
corazón se obtiene en pantalla mediante PRINT CHR$(1);
CHR$(&H43).
r... Cl)
Ü"
'"' "".... <o:l .;ro
'"' º"'
¡;:
«!)
"">.
.,,,, ,_
-
·- -
- -
:< --<
l ""' o. Cf 1/) ~

"' > >< N - 1 <J


'j

l
co ,
"' .o u "O (lJ ..__ bO ..e ·- ·~ ~
- E ¡::: e
¡
11) o... o o,; (/) ¡.... ;::::¡ > ¡:;;: X ;::.... N ~
/ ~ < 1
J.
..,. < u - ,_, ;;s z o
- .*"' ::r::
@ Q ¡,,) 0 ~ .....¡
(') o
¡:Q

M ..,,, l.()
'"'
""
,._ 00 Ol .. . - V 11 ,... <--·
"'
~
-· ~ c::J - ~
- .
... ~ • =
"" * ~
+ 1
"
I'
/i.
o ~ t11 v oo aasaa
li
1l
"f 36 37
1'
11
CAPITULO IV
TABLA3
¡~

l Código Código
decimal hexa.

1
2
3
1
2
3
Concepto

Vacío (interpreta el siguiente como gráfico)


Pone el cursor al inicio ae la siguiente palabra
Interrumpe el programa
4 4 Vacío
5 5 Borra la línea hacia la derecha Series, tablas y cadenas
6 6 Como eln°2
7 7 Equivale a BEEP Muchos problemas de programación haceh necesario el
8 8 Equivale a BS procesamiento de diversas variabl.es en fon~a idéntica: en.estos
9 9 Equivale a TAB casos es interesante crear una sene, es decir, una determmada
10 A Baja el cursor una línea cantidad de variables que tienen un mismo nombre y se distin-
11 B Equivale a HOME guen unas de otras por su subíndice (un número asociado al
12 e Equivale a CLS nombre de la variable). Este subíndice se escribe entre parénte-
13 D Equivale a RETURN sis y a continuación del nombre de la variable; de esta manera,
14 E Mueve el cursor al final de la línea A(O), A(l), A(2), A(3), etc. etc.
15 F Vacío Los subíndices de las series van desde Ohasta 255 y pueden
16 10 Vacío ser perfectamente variables; A(Z); BTO); A$(P), etc.
17 11 Vacío En un mismo programa .se pueden emplear nombre;; de ~a­
18 12 Equivale a INS trices idénticos a nombres de variables simples, es decir, el sis-
19 13 Vacío tema distinguirá entre A, A$, A(n) y A$(~). El sistema ~signa
20 14 Vacío automáticamente 11 espacios en su memoria (no confundir ~on
21 15 Borra la línea donde está el cursor áreas de memoria) para los subíndices de O a 10, lo cual qu1e.re
22 16 ·Vacío decir, que no necesitamos definir de ninguna manera especial
23 17 Vacío las tablas de menos de 11 elementos como veremos en este
24 18 Vacío ejemplo.
25 19 Vacío
26 lA Vacío 10 FOR 1=0 TO 10
Vacío 20 R.EAD A$ CI )
27 lB 30 NEXT
28 lC Equivale a cursor derecho 40 PRINT A$C4);A$ClJ;A$C0J
29 lD Equivale a cursor izquierda 50 DATA na,cio,30,40,fun,60,70;90,100,11
30 lE Equivale a cursor arriba 0, 120
31 lF Equivale a cursor abajo
funciona

39
38
CAPITULO IV
TABLA3
¡~

l Código Código
decimal hexa.

1
2
3
1
2
3
Concepto

Vacío (interpreta el siguiente como gráfico)


Pone el cursor al inicio ae la siguiente palabra
Interrumpe el programa
4 4 Vacío
5 5 Borra la línea hacia la derecha Series, tablas y cadenas
6 6 Como eln°2
7 7 Equivale a BEEP Muchos problemas de programación haceh necesario el
8 8 Equivale a BS procesamiento de diversas variabl.es en fon~a idéntica: en.estos
9 9 Equivale a TAB casos es interesante crear una sene, es decir, una determmada
10 A Baja el cursor una línea cantidad de variables que tienen un mismo nombre y se distin-
11 B Equivale a HOME guen unas de otras por su subíndice (un número asociado al
12 e Equivale a CLS nombre de la variable). Este subíndice se escribe entre parénte-
13 D Equivale a RETURN sis y a continuación del nombre de la variable; de esta manera,
14 E Mueve el cursor al final de la línea A(O), A(l), A(2), A(3), etc. etc.
15 F Vacío Los subíndices de las series van desde Ohasta 255 y pueden
16 10 Vacío ser perfectamente variables; A(Z); BTO); A$(P), etc.
17 11 Vacío En un mismo programa .se pueden emplear nombre;; de ~a­
18 12 Equivale a INS trices idénticos a nombres de variables simples, es decir, el sis-
19 13 Vacío tema distinguirá entre A, A$, A(n) y A$(~). El sistema ~signa
20 14 Vacío automáticamente 11 espacios en su memoria (no confundir ~on
21 15 Borra la línea donde está el cursor áreas de memoria) para los subíndices de O a 10, lo cual qu1e.re
22 16 ·Vacío decir, que no necesitamos definir de ninguna manera especial
23 17 Vacío las tablas de menos de 11 elementos como veremos en este
24 18 Vacío ejemplo.
25 19 Vacío
26 lA Vacío 10 FOR 1=0 TO 10
Vacío 20 R.EAD A$ CI )
27 lB 30 NEXT
28 lC Equivale a cursor derecho 40 PRINT A$C4);A$ClJ;A$C0J
29 lD Equivale a cursor izquierda 50 DATA na,cio,30,40,fun,60,70;90,100,11
30 lE Equivale a cursor arriba 0, 120
31 lF Equivale a cursor abajo
funciona

39
38
Sin embargo, para series mayores de 11 elementos, es nece-
sario utilizar previamente una instrucción DIM cuya sintaxis es 10 SCREEN 0:CLS:KEYOFF
DIM A(n), o DIM A$(n) donde A puede ser una variable nu- 20 LOCATE 7.10
mérica de precisión sencilla, doble o entera y n es un subíndice 30 COLOR 1.12
de 1 a255 (un subíndice Onos daría una variable simple) a con- 40 PRINT"ESTE PROGRAMA DEMUES-"
50 PRINT"TRA GIUE NO ES NECESARIO DIMEN-"
tinuación podemos, tras una coma, dimensionar otras series.
DIM A(n), B$(n), Z(n) 60 PRINT"SIONAR UNA TABL.A DE HASTA 121"
La utilización de series combinadas con bucles ahorra mu- 70 PRINT"ELEMENTOS."
cho trabajo de escritura y posibilita gran número d~ algoritmos 80 FOR A=l TO 3000:NEXT
útiles en programación. 80 SCREEN 1
. En ocasíonc:s será, út4 crear una tabla que no es sino una se- 100 FOR P=l TO 6
ne con dos o mas submd1ces, como A(n,m) lo cual nos dará una 110 FOR I=1 TO 2
serie de elementos que localizaremos por medio de dos núme- 120 READ PCP,I)
r<;>s, el (1,5) el (2,6): etc. etc. Estos dos números nos apuntan ha- 130 NEXT I. P
cia un solo contemdo, dentro de la tabla de variables que res- 140 PRINT:PRINT:PRINT:PRINT''LOS DATOS Y
. ponde a un nombre concreto. SUS CUADRADOS ESTAN ORDENADOS POR PAR
Con el esquema representa una tabla de 3 por 3 elementos ES"
o sea, una tabla del tipo ' 150 LOCATE 0,10:FOR P=l TO 5:PRINTTABC3)
DIMA(2,2) , PCP, 1) :TABC15)PCP. 2)
A(0,0) A(l,O) A(2,0) 160 NEXT
A(O,l) A(l,1) A(2,1) 170 DATA 5.25.3.8,4,16.6.36.7.48.8.81
A(0,2) A(l,2) A(2,2)
De la misma forma que en las series, las tablas con subíndi- Requerimientos de memoria para series y tablas
ces menores de 10 no necesitan ser dimensionadas
Sin embargo, sería muy útil si deseamos ahor;ar memoria Las variables que utilizamos en nuestros programas BASIC
dimensionar las tablas y series aun cuando sus subíndices sean son almacenadas en una zona de memoria llamada DIM AREA,
menor<;s de 10, ~ues de e~ta forma el sistema reserva, justo la VARIABLE AREA o STRING AREA según sean tablas varia-
bles numéricas o cadenas, ya vimos que según el tipo de varia-
memona necesaria. Es decir, si creamos una tabla del tipo DIM 1 ble que utilizáramos (numérica entera, de precisión doble, o ca-
(2,3) el sistema sólo reserva el espacio necesario y ninguno más !
no como en el caso de omitir la sentencia DIM pues entonce~ dena) necesitaban más o menos bytes para ser almacenadas. En
por omisión reservaría una serie de espacios ( 12 l) equivalente a el caso de las tablas, si son de números enteros es necesario re-
un DIM (10,10). · servar los bytes por elemento,
Es po~ible crear series y tablas de cualquier tipo mientras las de precisión simple 4 bytes por elemento
que este tlpo sea declarado. Por ejemplo: DIM S$(100) dará las de doble precisión 8 bytes por elemento
una serie de 101 elementos de cadena. y ·las cadenas 3 más la longitud del contenido por cada
Cuando se inicializa una orden, todos los valores son asumi- elemento.
dos como cero para series y tablas numéricas y cadenas nulas Mediante la función VARPTR puedes encontrar la situa-
para series de cadenas. ción de cada una de las variables utilizadas, ya sean cadenas, se-
ries tablas, variables numéricas. Ejemplo
10A% = 100
·20 PRINT VARPTR (A%)

40 41
Sin embargo, para series mayores de 11 elementos, es nece-
sario utilizar previamente una instrucción DIM cuya sintaxis es 10 SCREEN 0:CLS:KEYOFF
DIM A(n), o DIM A$(n) donde A puede ser una variable nu- 20 LOCATE 7.10
mérica de precisión sencilla, doble o entera y n es un subíndice 30 COLOR 1.12
de 1 a255 (un subíndice Onos daría una variable simple) a con- 40 PRINT"ESTE PROGRAMA DEMUES-"
50 PRINT"TRA GIUE NO ES NECESARIO DIMEN-"
tinuación podemos, tras una coma, dimensionar otras series.
DIM A(n), B$(n), Z(n) 60 PRINT"SIONAR UNA TABL.A DE HASTA 121"
La utilización de series combinadas con bucles ahorra mu- 70 PRINT"ELEMENTOS."
cho trabajo de escritura y posibilita gran número d~ algoritmos 80 FOR A=l TO 3000:NEXT
útiles en programación. 80 SCREEN 1
. En ocasíonc:s será, út4 crear una tabla que no es sino una se- 100 FOR P=l TO 6
ne con dos o mas submd1ces, como A(n,m) lo cual nos dará una 110 FOR I=1 TO 2
serie de elementos que localizaremos por medio de dos núme- 120 READ PCP,I)
r<;>s, el (1,5) el (2,6): etc. etc. Estos dos números nos apuntan ha- 130 NEXT I. P
cia un solo contemdo, dentro de la tabla de variables que res- 140 PRINT:PRINT:PRINT:PRINT''LOS DATOS Y
. ponde a un nombre concreto. SUS CUADRADOS ESTAN ORDENADOS POR PAR
Con el esquema representa una tabla de 3 por 3 elementos ES"
o sea, una tabla del tipo ' 150 LOCATE 0,10:FOR P=l TO 5:PRINTTABC3)
DIMA(2,2) , PCP, 1) :TABC15)PCP. 2)
A(0,0) A(l,O) A(2,0) 160 NEXT
A(O,l) A(l,1) A(2,1) 170 DATA 5.25.3.8,4,16.6.36.7.48.8.81
A(0,2) A(l,2) A(2,2)
De la misma forma que en las series, las tablas con subíndi- Requerimientos de memoria para series y tablas
ces menores de 10 no necesitan ser dimensionadas
Sin embargo, sería muy útil si deseamos ahor;ar memoria Las variables que utilizamos en nuestros programas BASIC
dimensionar las tablas y series aun cuando sus subíndices sean son almacenadas en una zona de memoria llamada DIM AREA,
menor<;s de 10, ~ues de e~ta forma el sistema reserva, justo la VARIABLE AREA o STRING AREA según sean tablas varia-
bles numéricas o cadenas, ya vimos que según el tipo de varia-
memona necesaria. Es decir, si creamos una tabla del tipo DIM 1 ble que utilizáramos (numérica entera, de precisión doble, o ca-
(2,3) el sistema sólo reserva el espacio necesario y ninguno más !
no como en el caso de omitir la sentencia DIM pues entonce~ dena) necesitaban más o menos bytes para ser almacenadas. En
por omisión reservaría una serie de espacios ( 12 l) equivalente a el caso de las tablas, si son de números enteros es necesario re-
un DIM (10,10). · servar los bytes por elemento,
Es po~ible crear series y tablas de cualquier tipo mientras las de precisión simple 4 bytes por elemento
que este tlpo sea declarado. Por ejemplo: DIM S$(100) dará las de doble precisión 8 bytes por elemento
una serie de 101 elementos de cadena. y ·las cadenas 3 más la longitud del contenido por cada
Cuando se inicializa una orden, todos los valores son asumi- elemento.
dos como cero para series y tablas numéricas y cadenas nulas Mediante la función VARPTR puedes encontrar la situa-
para series de cadenas. ción de cada una de las variables utilizadas, ya sean cadenas, se-
ries tablas, variables numéricas. Ejemplo
10A% = 100
·20 PRINT VARPTR (A%)

40 41
Todo el contenido de las variables de cadena está almacena-
1¡ principio de programa mediante CLEAR, pues cualquier sen-
do en la sección STRING AREA O AREA DE CADENA de la tencia CLEAR a mitad de programa nos destruirá las variables
memoria del ordenador (ver mapa de memoria). El tamaño de acumuladas, por ello es importante mediante FRE (" ") contro-
este String área es de 200 bytes, por defecto, es por ello que la lar el espacio libre para introducir nuevos datos, y si no es posi-
máxima cantidad de elementos de una cadena es de 200 carac- ble seguir introduciendo, enviarlo al fin de ejecución.
teres, si no incrementamos este área de cadenas mediante la ins- IF FRE ('"') ( 20 THEN END, ·
trucción CLEARlo que será necesario, casi siempre que utilice- Introduciendo en el lugar conveniente esta línea en nuestro
mos una tabla de cadenas o una serie de cadenas de una longi- programa para tratamiento de.cadenas, cuando no tengamos
tud. más de 20 bytes libres en el STRING AREA (área libre para ca-
Utilización de la sentencia CLEAR denas), el programa terminará.

Con CLEAR limpiamos el espacio de memoria para varia-


bles y anulamos todas las variables de cadena y numéricas que Tratamiento de cadenas
hayamos creado y almacenado, previas a la ejecución de esta
sentencia. Consta de dos parámetros, con el primero controla- Y a hemos visto que denominamos cadenas literales a las va-
mos el espacio disponible para cadenas (200 Bytes por omisión) riables, que pueden contener caracteres alfanuméricos, tanto
y lo podemos incrementar. Por ejemplo CLEAR 255 aumenta- números como letras. En el caso de que estas cadenas conten-
rá el área de cadenas a 255 bytes. gan números, estos no tendrán valor aritmético, sino simple-
Es necesario tener en cuenta que tras una orden CLEAR, mente gramatical, es decir que si definimos una variable como
también se cierran todos los ficheros o dispositivos de archivo cadena mediante una asignación A$= "xxxxx" esta puede con-
que pudieran estar abiertos. tener letras, números y caracteres especiales (gráficos o de con-
El segundo parámetro, tras una coma (,) reserva espacio trol) introducidos por medio de sus códigos.
para programas en código máquina, por lo que no será tratado Aunque el contenido de una cadena sea únicamente numé-
aún. rico, la única operación que podemos ejecutar con eµa es la
En ocasiones puede ser muy útil conocer el espacio que nos concatenación con otra cadena; según podemos apreciar en el
queda libre en memoria para introducir más líneas de progra- siguiente ejemplo:
mas, y de forma particular, conocer el espacio libre de que dis-
ponemos en el área de cadenas (string area). Todo esto pode- 10 A$= "123"
mos averig. uarlo med.iante la función FRE que posee dos sinta- 20 B$= "456"
xis distintas. Con FRE (O) nos da el número de bytes libres que 3!11 LF'RINT A$+B$
quedan en memoria.
PRINT FRE (O) recibirá una respuesta automática del siste-
ma, ya sea_ en modo directo o diferido. Otra aplicación seria Después de listar este corto programa no da como resultado
25 IF FRE(O) ( :X: THEN 50 123456. /
con lo que en caso de que dispongamos de menos de X bytes de Recordemos al ver estos ejemplos, que una cadena de carac-
memoria libre nuestro programa transfiere el control a la línea 25. teres se define siempre con un símbolo$ detrás de su nombre o
Con la siguiente sintaxis FRE (" ") el sistema nos entrega con una declaración previa mediante la instrucción STR. Si
sólo el espacio libre para cadenas, lo que es vital, pues en el sis- cambiamos en la línea 10 y 20 del anterior programa los valores
tema MSX el espacio para cadenas es fijo a lo largo de la ejecu- de A$ y B$, y los sustituimos por los valores que deseemos
ción de una tarea. Por lo tanto sólo podemos dimensionar al (cualquier carácter hasta un límite de 255) podemos ver cómo

42 43
Todo el contenido de las variables de cadena está almacena-
1¡ principio de programa mediante CLEAR, pues cualquier sen-
do en la sección STRING AREA O AREA DE CADENA de la tencia CLEAR a mitad de programa nos destruirá las variables
memoria del ordenador (ver mapa de memoria). El tamaño de acumuladas, por ello es importante mediante FRE (" ") contro-
este String área es de 200 bytes, por defecto, es por ello que la lar el espacio libre para introducir nuevos datos, y si no es posi-
máxima cantidad de elementos de una cadena es de 200 carac- ble seguir introduciendo, enviarlo al fin de ejecución.
teres, si no incrementamos este área de cadenas mediante la ins- IF FRE ('"') ( 20 THEN END, ·
trucción CLEARlo que será necesario, casi siempre que utilice- Introduciendo en el lugar conveniente esta línea en nuestro
mos una tabla de cadenas o una serie de cadenas de una longi- programa para tratamiento de.cadenas, cuando no tengamos
tud. más de 20 bytes libres en el STRING AREA (área libre para ca-
Utilización de la sentencia CLEAR denas), el programa terminará.

Con CLEAR limpiamos el espacio de memoria para varia-


bles y anulamos todas las variables de cadena y numéricas que Tratamiento de cadenas
hayamos creado y almacenado, previas a la ejecución de esta
sentencia. Consta de dos parámetros, con el primero controla- Y a hemos visto que denominamos cadenas literales a las va-
mos el espacio disponible para cadenas (200 Bytes por omisión) riables, que pueden contener caracteres alfanuméricos, tanto
y lo podemos incrementar. Por ejemplo CLEAR 255 aumenta- números como letras. En el caso de que estas cadenas conten-
rá el área de cadenas a 255 bytes. gan números, estos no tendrán valor aritmético, sino simple-
Es necesario tener en cuenta que tras una orden CLEAR, mente gramatical, es decir que si definimos una variable como
también se cierran todos los ficheros o dispositivos de archivo cadena mediante una asignación A$= "xxxxx" esta puede con-
que pudieran estar abiertos. tener letras, números y caracteres especiales (gráficos o de con-
El segundo parámetro, tras una coma (,) reserva espacio trol) introducidos por medio de sus códigos.
para programas en código máquina, por lo que no será tratado Aunque el contenido de una cadena sea únicamente numé-
aún. rico, la única operación que podemos ejecutar con eµa es la
En ocasiones puede ser muy útil conocer el espacio que nos concatenación con otra cadena; según podemos apreciar en el
queda libre en memoria para introducir más líneas de progra- siguiente ejemplo:
mas, y de forma particular, conocer el espacio libre de que dis-
ponemos en el área de cadenas (string area). Todo esto pode- 10 A$= "123"
mos averig. uarlo med.iante la función FRE que posee dos sinta- 20 B$= "456"
xis distintas. Con FRE (O) nos da el número de bytes libres que 3!11 LF'RINT A$+B$
quedan en memoria.
PRINT FRE (O) recibirá una respuesta automática del siste-
ma, ya sea_ en modo directo o diferido. Otra aplicación seria Después de listar este corto programa no da como resultado
25 IF FRE(O) ( :X: THEN 50 123456. /
con lo que en caso de que dispongamos de menos de X bytes de Recordemos al ver estos ejemplos, que una cadena de carac-
memoria libre nuestro programa transfiere el control a la línea 25. teres se define siempre con un símbolo$ detrás de su nombre o
Con la siguiente sintaxis FRE (" ") el sistema nos entrega con una declaración previa mediante la instrucción STR. Si
sólo el espacio libre para cadenas, lo que es vital, pues en el sis- cambiamos en la línea 10 y 20 del anterior programa los valores
tema MSX el espacio para cadenas es fijo a lo largo de la ejecu- de A$ y B$, y los sustituimos por los valores que deseemos
ción de una tarea. Por lo tanto sólo podemos dimensionar al (cualquier carácter hasta un límite de 255) podemos ver cómo

42 43
funciona esta operación de concatenación. Por ejemplo si A$ MID$
.="ABC" y B$ = "DEF" el resultado será TOTAL="ABCDEF". SINTAXIS: A$=MID$(C$;N,M)
. ·Si a continuación creamos una cadena nula, o sea una cade- Extrae para crear la nueva subcadena, N caracteres a partir
na cuyo contenido sean uno o varios espacios, poder.:ios conca- del número N inclusive, empezando por la izquierda. Si se omi-
tenarla con otra u otras, de manera que deje espacios en blanco te N, o si su valor es superior al total de caracteres desde el nú-
entre los contenidos de otra cadena. Por ejemplo: mero N hasta el fin, la función envía todos estos, es decir, que
por omisión de N, la nueva cadena contiene los caracteres des-
1 (2j 1~$::::.. .. de N hasta el fin.
.:-¿!0 B$::::: 11 a 11 Naturalmente, si N es superior a la longitud de A$ el resul-
30 PRINT A$+B$+A$+B$ tado será cadena nula.
Ejemplo:
10 p¡;~INT MID$ ( llJ.avíer" ,2, 1)
Esta posibilidad es muy socorrida a la hora de manipular ar- a
chivos en cassette.
10 PF.:INT 1'1ID$ (
11
Javier 11 , 2 ';! 2}
A continuación veremos aquellas instrucciones que se refie- av
ren al tratamiento de cadenas: 1 lZJ PF.!INT MID$ (
11
Javíer" ,3)
vi e r
LEFT$
SINTAXIS: A$=LEFT$(C$,NJ
La i~strucción LEFT$ crea una subcadena constituida por LEN$
los N pruneros caracteres extraídos por la izquierda de una ca- SINTAXIS: A$=LEN$(C$)
dena C$. Si N=O, el resultado de la operación es una cadena Nos dará en A el número de caracteres (incluidos los no im-
nula "", si pór el contrario N es superior al número de caracte- primibles y de control, de que consta la cadena C$.
res contenidos en C$, A$ contendrá la totalidad de C$ Si C$ es una cadena nula A será O.
Ejemplo: Ejemplo:
10 PFi:INT LEN ( "JAVIEF'-~")
10 PRINT LEFT$ l''Javier'',3l 6
Jav

STRING$
RIGHT$ SINTAXIS: A$=STRING$(N,X)
SINTAXIS: A$=RIGHT$(C$,N) Con esta función creamos una nueva cadena A$ contenien-
Í"
~sta función ·realiza la misma operación que LEFT$, pero do N veces el valor del primer carácter de una cadena C$, o el ;,

empieza a extraer caracteres por la derecha (evidentemente carácter correspondiente al código ASCII del número X.
RIGHT es derecha en inglés y LEFT izquierda). 1
Ejemplo: PRINT STRING$<5,"PEPE"l
llZl 1
:i !
PPPPP
10 PRINT RIGHTSl''Javiar'',2> 10 PRINT STRING$ C5.&HA5J
er ÑÑÑÑÑ
44
45
funciona esta operación de concatenación. Por ejemplo si A$ MID$
.="ABC" y B$ = "DEF" el resultado será TOTAL="ABCDEF". SINTAXIS: A$=MID$(C$;N,M)
. ·Si a continuación creamos una cadena nula, o sea una cade- Extrae para crear la nueva subcadena, N caracteres a partir
na cuyo contenido sean uno o varios espacios, poder.:ios conca- del número N inclusive, empezando por la izquierda. Si se omi-
tenarla con otra u otras, de manera que deje espacios en blanco te N, o si su valor es superior al total de caracteres desde el nú-
entre los contenidos de otra cadena. Por ejemplo: mero N hasta el fin, la función envía todos estos, es decir, que
por omisión de N, la nueva cadena contiene los caracteres des-
1 (2j 1~$::::.. .. de N hasta el fin.
.:-¿!0 B$::::: 11 a 11 Naturalmente, si N es superior a la longitud de A$ el resul-
30 PRINT A$+B$+A$+B$ tado será cadena nula.
Ejemplo:
10 p¡;~INT MID$ ( llJ.avíer" ,2, 1)
Esta posibilidad es muy socorrida a la hora de manipular ar- a
chivos en cassette.
10 PF.:INT 1'1ID$ (
11
Javier 11 , 2 ';! 2}
A continuación veremos aquellas instrucciones que se refie- av
ren al tratamiento de cadenas: 1 lZJ PF.!INT MID$ (
11
Javíer" ,3)
vi e r
LEFT$
SINTAXIS: A$=LEFT$(C$,NJ
La i~strucción LEFT$ crea una subcadena constituida por LEN$
los N pruneros caracteres extraídos por la izquierda de una ca- SINTAXIS: A$=LEN$(C$)
dena C$. Si N=O, el resultado de la operación es una cadena Nos dará en A el número de caracteres (incluidos los no im-
nula "", si pór el contrario N es superior al número de caracte- primibles y de control, de que consta la cadena C$.
res contenidos en C$, A$ contendrá la totalidad de C$ Si C$ es una cadena nula A será O.
Ejemplo: Ejemplo:
10 PFi:INT LEN ( "JAVIEF'-~")
10 PRINT LEFT$ l''Javier'',3l 6
Jav

STRING$
RIGHT$ SINTAXIS: A$=STRING$(N,X)
SINTAXIS: A$=RIGHT$(C$,N) Con esta función creamos una nueva cadena A$ contenien-
Í"
~sta función ·realiza la misma operación que LEFT$, pero do N veces el valor del primer carácter de una cadena C$, o el ;,

empieza a extraer caracteres por la derecha (evidentemente carácter correspondiente al código ASCII del número X.
RIGHT es derecha en inglés y LEFT izquierda). 1
Ejemplo: PRINT STRING$<5,"PEPE"l
llZl 1
:i !
PPPPP
10 PRINT RIGHTSl''Javiar'',2> 10 PRINT STRING$ C5.&HA5J
er ÑÑÑÑÑ
44
45
SPACE$ STR$
SINTAXIS: A$=SPACE$(N) SINTAXIS: A$=STR$(N)
Crea una cadena con N espacios (caracteres en blanco). Sabemos que cuando dos números son almacenados en va-
riables del tipo A,B etc o A% ,B % o bien A! ,B ! o por último
10 .FOR N=l TO 3 A# B#estamos hablando de valores aritméticos y matemáticos,
20 PRINT SPACE$ (N);" TEXTO" pero si esos dos números se almacenan en una variable de cade-
30 NEXT na A$;B$ sólo contará para nosotros su valor gráfico o gramati-
cal, y además de tener que tratarlos entre comillas "200", "300"
TEXTO no podremos, con ellos ejecutar más éfue la operación de conca-
TEXTO
tenación. Esta función transforma úna variable numérica en
TEXTO una de cadena, por ejemplo:
10 PRINT SPACE$ <15l;"TEXTO" 10 A=300 : B=200
TEXTO 20 A$=STR$(A)
30 B$=STR$<Bl
INSTR 40 PRINT A+B
SINTAXIS: A$=INSTR(N,A$,C$) 50 PRINT A$+B$
Esta función busca en una cadena A$, la cadena o subcade- 50121
na C$, a partir del carácter número N, o del primer carácter si 30121 2121121
se ha omitido N. El resultado que se acumula en A, es un valor
numérico, indicando el número de carácter a partir del que en- El resultado será 500 en el caso de varibles numéricas y 200,
contremos la subcadena C$, comenzando por el primer carác- 300 en el de cadenas. Obsérvese el espacio que precede a cada
ter de la izquierda, tanto si lleva el parámetro N como si no, valor alfanumérico, que corresponde al signo positivo, si el nú-
pues la introducción de este parámetro es a efectos de acelerar mero lo es. Si es un número negativo el primer espacio antes de
el proceso si se conoce la posible ubicación de la subcadena, a los valores numéricos no se quedará en blanco, sino que será re-
buscar dentro de la cadena principal. llenado por el carácter alfanumérico.
Si la subcadena C$ no se encuentra, el valor obtenido es O. Ejemplo
Ejemplo demostrativo
llZJ A=-300 :B=-20121
10 PRINTINSTR (''ABCDEFGHI'',''FG'') 20 A$=STR$(A)
6 3121 B$=STR$(B)
40 LPRINT A+B
5121 LPRINT A$+B$
10 LPRINTINSTR <7, "ABCDEFGHI", "FG") -5121121
-30121-2121121

VAL
10 PRINTINSTR (l,"ABCDEFGHI","AB"l SINTAXIS: A$=VAL(AS$)
l Esta función es la inversa de la anterior y nos da el equiva-

46 47
SPACE$ STR$
SINTAXIS: A$=SPACE$(N) SINTAXIS: A$=STR$(N)
Crea una cadena con N espacios (caracteres en blanco). Sabemos que cuando dos números son almacenados en va-
riables del tipo A,B etc o A% ,B % o bien A! ,B ! o por último
10 .FOR N=l TO 3 A# B#estamos hablando de valores aritméticos y matemáticos,
20 PRINT SPACE$ (N);" TEXTO" pero si esos dos números se almacenan en una variable de cade-
30 NEXT na A$;B$ sólo contará para nosotros su valor gráfico o gramati-
cal, y además de tener que tratarlos entre comillas "200", "300"
TEXTO no podremos, con ellos ejecutar más éfue la operación de conca-
TEXTO
tenación. Esta función transforma úna variable numérica en
TEXTO una de cadena, por ejemplo:
10 PRINT SPACE$ <15l;"TEXTO" 10 A=300 : B=200
TEXTO 20 A$=STR$(A)
30 B$=STR$<Bl
INSTR 40 PRINT A+B
SINTAXIS: A$=INSTR(N,A$,C$) 50 PRINT A$+B$
Esta función busca en una cadena A$, la cadena o subcade- 50121
na C$, a partir del carácter número N, o del primer carácter si 30121 2121121
se ha omitido N. El resultado que se acumula en A, es un valor
numérico, indicando el número de carácter a partir del que en- El resultado será 500 en el caso de varibles numéricas y 200,
contremos la subcadena C$, comenzando por el primer carác- 300 en el de cadenas. Obsérvese el espacio que precede a cada
ter de la izquierda, tanto si lleva el parámetro N como si no, valor alfanumérico, que corresponde al signo positivo, si el nú-
pues la introducción de este parámetro es a efectos de acelerar mero lo es. Si es un número negativo el primer espacio antes de
el proceso si se conoce la posible ubicación de la subcadena, a los valores numéricos no se quedará en blanco, sino que será re-
buscar dentro de la cadena principal. llenado por el carácter alfanumérico.
Si la subcadena C$ no se encuentra, el valor obtenido es O. Ejemplo
Ejemplo demostrativo
llZJ A=-300 :B=-20121
10 PRINTINSTR (''ABCDEFGHI'',''FG'') 20 A$=STR$(A)
6 3121 B$=STR$(B)
40 LPRINT A+B
5121 LPRINT A$+B$
10 LPRINTINSTR <7, "ABCDEFGHI", "FG") -5121121
-30121-2121121

VAL
10 PRINTINSTR (l,"ABCDEFGHI","AB"l SINTAXIS: A$=VAL(AS$)
l Esta función es la inversa de la anterior y nos da el equiva-

46 47
···--·--····---------------------------~

lente numérico de una cadena de caracteres. Sin embargo esta


CAPITULO V
conversión es más compleja.
Si el contenido de A$ es un número, el transporte a la varia-
ble A es sencillo, se archiva el número, con el espacio reservado
para el signo, pero si A$ contiene números y caracteres, la fun-
ción sólo archivará en A el número que se encuentre en primera
posición de la cadena. Si el contenido de A$ no puede ser eva-
luado por empezar la cadena con un carácter alfabético, el valor
archivado será O. Para finalizar diremos que para la función
VAL los espacios no tienen sentido, no los aprecia. Los prefijos
de conexión entre bases &B, &O, &H son perfectamente inter-
pretados por VAL.
Naturalmente, vistas de esta forma las instrucciones se pre-
sentan claras, pero, poco útiles. Nada más lejos de la realidad.
Bastará entremezclarlas y operar con ellas dentro de series de
operaciones complejas que impliquen varias de estas operacio- Grabación de programas
nes unidas, para darnos cuenta de la dificultad q_ue representa
trabajar con este tipo de operaciones: por ejemplo analicemos Lo primero que hay que hacer para efectuar una grabación
la siguiente expresión: es verificar que las conexion.es estén realizadas correctamente.
Con cada MSX. se facilita un cable éspecial para conectar al
magnetófono y este cable tiene en uno de sus extremos una cla-
10 A$=" 300" vija DIN, que debe insertarse en la entrada TAPE de la parte
20 A=VAL(A$l trasera del ordenador. En el otro extremo del cable hay tres cla-
40 PRINT A/2 vijas; una blanca, que debe insertarse en la toma AUDIO
RUN (EAR) del cassette, una roja, que debe conectarse en MIC y
150 una más pequeña negra que debe conectarse en REMOTE. En
10 A$="3 CORDEROS " el caso de que el magnetófono no disponga de REMOTE esta
20 A=VAL(A$) clavija cuya función es poner en marcha o detener el mag;etó-
40 PRINT A fono manipulándolo desde el ordenador, puede dejarse sin co-
RUN nectar.
3 Una vez realizados estos pasos previos, el cassette y el orde-
nador ya están en situación de dialogar. De todos modos es
preci~o tener en cuenta otra serie de detalles que pasam~s a
Sobre su utilidad hay que señalar, especialmente si usted mencionar.
está interesado en programar para la gestión, que analice los - Utilice siempre un cassete monoaural. Con un estéreo
programas del libro en que aparecen operaciones con variables sólo grabará parte de la información.
de cadena, y se convencerá no tan sólo de su utilidad sino tam- - El volumen del cassette debe estar alto.
bién de su necesidad. - El tono debe estar situado en agudo.
- El cabezal del cassette debe estar limpio y en perfectas '
condiciónes.

49
48
1
···--·--····---------------------------~

lente numérico de una cadena de caracteres. Sin embargo esta


CAPITULO V
conversión es más compleja.
Si el contenido de A$ es un número, el transporte a la varia-
ble A es sencillo, se archiva el número, con el espacio reservado
para el signo, pero si A$ contiene números y caracteres, la fun-
ción sólo archivará en A el número que se encuentre en primera
posición de la cadena. Si el contenido de A$ no puede ser eva-
luado por empezar la cadena con un carácter alfabético, el valor
archivado será O. Para finalizar diremos que para la función
VAL los espacios no tienen sentido, no los aprecia. Los prefijos
de conexión entre bases &B, &O, &H son perfectamente inter-
pretados por VAL.
Naturalmente, vistas de esta forma las instrucciones se pre-
sentan claras, pero, poco útiles. Nada más lejos de la realidad.
Bastará entremezclarlas y operar con ellas dentro de series de
operaciones complejas que impliquen varias de estas operacio- Grabación de programas
nes unidas, para darnos cuenta de la dificultad q_ue representa
trabajar con este tipo de operaciones: por ejemplo analicemos Lo primero que hay que hacer para efectuar una grabación
la siguiente expresión: es verificar que las conexion.es estén realizadas correctamente.
Con cada MSX. se facilita un cable éspecial para conectar al
magnetófono y este cable tiene en uno de sus extremos una cla-
10 A$=" 300" vija DIN, que debe insertarse en la entrada TAPE de la parte
20 A=VAL(A$l trasera del ordenador. En el otro extremo del cable hay tres cla-
40 PRINT A/2 vijas; una blanca, que debe insertarse en la toma AUDIO
RUN (EAR) del cassette, una roja, que debe conectarse en MIC y
150 una más pequeña negra que debe conectarse en REMOTE. En
10 A$="3 CORDEROS " el caso de que el magnetófono no disponga de REMOTE esta
20 A=VAL(A$) clavija cuya función es poner en marcha o detener el mag;etó-
40 PRINT A fono manipulándolo desde el ordenador, puede dejarse sin co-
RUN nectar.
3 Una vez realizados estos pasos previos, el cassette y el orde-
nador ya están en situación de dialogar. De todos modos es
preci~o tener en cuenta otra serie de detalles que pasam~s a
Sobre su utilidad hay que señalar, especialmente si usted mencionar.
está interesado en programar para la gestión, que analice los - Utilice siempre un cassete monoaural. Con un estéreo
programas del libro en que aparecen operaciones con variables sólo grabará parte de la información.
de cadena, y se convencerá no tan sólo de su utilidad sino tam- - El volumen del cassette debe estar alto.
bién de su necesidad. - El tono debe estar situado en agudo.
- El cabezal del cassette debe estar limpio y en perfectas '
condiciónes.

49
48
1
- Azimut correcto. El azimut o grado de inclinación del ca- tecleamos MOTOR y el cassette está funcionando se parará y si
bezal de lectura, debe ser siempre paralelo a la cinta del está parado comenzará a funcionar.
cassette. La calidad de reproducción depende en gran Otra_posible utilidad de la orden MOTOR es -una vez des-
medida de la correcta posición del azimut. Caso de no es- conectada la clavija de audio(EAR)- conectar la puesta en mar-
tar bien regulado podemos encontrarnos con que no lea cha y la para.d~ ~e una grabación AUDIO mientras se va oyen-
exactamente la cara correspondiente de la cinta sino que do. Esta P<?s1bili~a.d, tal vez un poco peregrina, la comentamos
lea parte de la otra cara. También ocasiona problemas de P?! su posible utilidad para mecanografiado de textos, 0 tain-
f
carga debido a que lee en sentido inverso arte de logra-
bado en la cara opuesta. Para graduar e azimut de un
b1en para su uso en programas educativos que utilicen voz mez-
clada con programa.
cassette basta con regular con un destornillador el peque- Tras poner el cassette en :i:'.LAY escriba CLOAD?, pulse
ño tornillo que hay detrás del cabezal de lectura. De to- RETURN y el ordenador verificara que la grabación se haya
dos modos, si no te atreves a hurgar en tu cassette, otra efectuado correctamente mostrando un OK en la pantalla.
solución más cara pero igualmente válida es grabar las . Cargar un programa ~n el ordenador también es muy senci-
cintas por una sola cara. llo. Una vez colocada la cmta deseada en el cassette se introduce
Las grabaciones efectuadas en un magnetófono y reprodu- CLOAD <<nomprograma» y el ordenador va leyendo la cinta
cidas en otro también pueden dar problemas. Entre uno y otro hasta llegar al programa deseado. Caso de no especificar el
aparato suele haber pequeñas diferencias de velocidad que nombre del programa, el ordenador cargará por defecto el pri-
afectan considerablemente la grabación y reproducción de pro- mer programa que enclientre en la cinta. Si tenemos una duda
gramas. Lo ideal es utilizar siempre el mismo cassette. con respecto .ª.los programas que hay grabados en una cinta,
Para la transmisión de datos del ordenador al cassette dis- podemos verificarla t?t~ente con CLOAD si ponemos un
ponemos de varias alternativas: CSAVE, SAVE y BSAVE las nombre de programa ficticio, ya que CLOAD nos irá informan-
que veremos más detalladamente en el capítulo de gestión de do ~e los n?mbres d<: los programas que va encontrando en su
archivos. Bástenos saber de momento CSAVE es la orden más cammo... S1 se produ¡era alguna anomalía durante las operacio-
usual para grabar programas en cassette. Se utiliza de la siguien- nes de grabación o carga del programa, la máquina nos infor-
te manera: maría de ello con el mensaje «Device I/O error».

CSA VE «nomprog» ·
El nombre del programa no debe sobrepasar los seis carac-
teres y el primero de ellos debe ser preceptivamente una letra.
Una vez puesto el magnetófono en grabación se pulsa RE-
TURN y se espera a que el ordenádor nos muestre OK en la
pantalla, cosa que sigrí.lficará que ha efectuado la grabación.
A pesar de que nos haya aparecido OK en pantalla, es con-
veniente efectuar una comprobación de la grabación. Para ello
-si tiene el REMOTE conectado- teclee MOTOR ON o tan
sólo MOTOR y rebobine la cinta hasta la posición donde ha ini-
ciado la grabación.
Si conectamos la clavija REMOTE al magnetófono y pone-
mos éste en marcha, con la orden MOTOR ON comenzará a
funcionar el cassette y con MOTOR OFF se parará. Si tan sólo

50 51
- Azimut correcto. El azimut o grado de inclinación del ca- tecleamos MOTOR y el cassette está funcionando se parará y si
bezal de lectura, debe ser siempre paralelo a la cinta del está parado comenzará a funcionar.
cassette. La calidad de reproducción depende en gran Otra_posible utilidad de la orden MOTOR es -una vez des-
medida de la correcta posición del azimut. Caso de no es- conectada la clavija de audio(EAR)- conectar la puesta en mar-
tar bien regulado podemos encontrarnos con que no lea cha y la para.d~ ~e una grabación AUDIO mientras se va oyen-
exactamente la cara correspondiente de la cinta sino que do. Esta P<?s1bili~a.d, tal vez un poco peregrina, la comentamos
lea parte de la otra cara. También ocasiona problemas de P?! su posible utilidad para mecanografiado de textos, 0 tain-
f
carga debido a que lee en sentido inverso arte de logra-
bado en la cara opuesta. Para graduar e azimut de un
b1en para su uso en programas educativos que utilicen voz mez-
clada con programa.
cassette basta con regular con un destornillador el peque- Tras poner el cassette en :i:'.LAY escriba CLOAD?, pulse
ño tornillo que hay detrás del cabezal de lectura. De to- RETURN y el ordenador verificara que la grabación se haya
dos modos, si no te atreves a hurgar en tu cassette, otra efectuado correctamente mostrando un OK en la pantalla.
solución más cara pero igualmente válida es grabar las . Cargar un programa ~n el ordenador también es muy senci-
cintas por una sola cara. llo. Una vez colocada la cmta deseada en el cassette se introduce
Las grabaciones efectuadas en un magnetófono y reprodu- CLOAD <<nomprograma» y el ordenador va leyendo la cinta
cidas en otro también pueden dar problemas. Entre uno y otro hasta llegar al programa deseado. Caso de no especificar el
aparato suele haber pequeñas diferencias de velocidad que nombre del programa, el ordenador cargará por defecto el pri-
afectan considerablemente la grabación y reproducción de pro- mer programa que enclientre en la cinta. Si tenemos una duda
gramas. Lo ideal es utilizar siempre el mismo cassette. con respecto .ª.los programas que hay grabados en una cinta,
Para la transmisión de datos del ordenador al cassette dis- podemos verificarla t?t~ente con CLOAD si ponemos un
ponemos de varias alternativas: CSAVE, SAVE y BSAVE las nombre de programa ficticio, ya que CLOAD nos irá informan-
que veremos más detalladamente en el capítulo de gestión de do ~e los n?mbres d<: los programas que va encontrando en su
archivos. Bástenos saber de momento CSAVE es la orden más cammo... S1 se produ¡era alguna anomalía durante las operacio-
usual para grabar programas en cassette. Se utiliza de la siguien- nes de grabación o carga del programa, la máquina nos infor-
te manera: maría de ello con el mensaje «Device I/O error».

CSA VE «nomprog» ·
El nombre del programa no debe sobrepasar los seis carac-
teres y el primero de ellos debe ser preceptivamente una letra.
Una vez puesto el magnetófono en grabación se pulsa RE-
TURN y se espera a que el ordenádor nos muestre OK en la
pantalla, cosa que sigrí.lficará que ha efectuado la grabación.
A pesar de que nos haya aparecido OK en pantalla, es con-
veniente efectuar una comprobación de la grabación. Para ello
-si tiene el REMOTE conectado- teclee MOTOR ON o tan
sólo MOTOR y rebobine la cinta hasta la posición donde ha ini-
ciado la grabación.
Si conectamos la clavija REMOTE al magnetófono y pone-
mos éste en marcha, con la orden MOTOR ON comenzará a
funcionar el cassette y con MOTOR OFF se parará. Si tan sólo

50 51
CAPITULO VI
CSAVE es distinto del que utiliza mediante SAVE"CAS: (nom-
bre de archivo)." En el primer caso se almacena la información
en un sistema intermedio, sólo útil para leer o cargar progra-
mas. En el segundo se graba en ASCII puro, lo que resulta muy
útil para trabajar con textos y datos.
Una de las peculiaridades de CSAVE y CLOAD es que no
necesitan parámetros, como SAVE o LOAD, y por tanto son
más sencillos de utilizar, pero el inconveniente es 9~e no permi-
ten efectuar MERGE de programas, pues para utihzar esta sen-
tencia es necesario que los archivos de carga se hallen grabados
en ASCII.
Con la instrucción MERGE "CAS": (nombre programa)"
unimos dos archivos, el llamado desde la instrucción que se car-
ga de cassette y el residente en memoria viva (RAM), es decir,
Gestión de archivo y grabación de datos que sólo se podrán fusionar programas grabados mediante
SAVE.
El sistema MSX para su gestión intensa considera la exis- El programa residente seguirá tal cual y el miembro de car-
tencia de cuatro dispositivos de archivo periféricos con los cua- ga se fusionará con él, sin embargo si se repiten números de lí-
les intercambia información. neas éstos serán modificados en el ordenador, prevaleciendo
. 1 PANTALLA EN MODO DE TEXTO (sólo de salida) las líneas del programa que se ha leído mediante MERGE. Si se
2 PANTALLA EN MODO GRAFICO (sólo de salida) omite el nombre de archivo el ordenador intentará fusionar el
3 MAGNETOFONO A CASSETTE (entrada/salida) primer archivo que encuentre.
4 IMPRESORA (sólo salida) Otras instrucciones especiales que pueden ser utilizadas
Los nombres que reciben estos dispositivos con respectiva- con el dispositivo cassette (CAS) son:
mente: CRT, GRP, CAS, LPT. Todas las salidas de informa- BSAVE, que graba datos en formato binario.
ción se realizan a través de estos dispositivos. BLOAD, que los carga en binario (B de binario delante de
SAVE o LOAD).
Dispositivo cassette Estas dos órdenes están diseñadas de cara a la grabación de
programas en lenguaje máquina, por lo que disponen de algún
Recordemos que para almacenar un programa en cassette parámetro del que no disponían CSAVE y CLOAD. La ins-
ejecutábamos en modo directo, CSAVE «PROGRA» (Donde trucción completa queda como sigue:
PROGRA es el nombre del archivo que contiene el programa). BLOAD "nombre de dispositivo: (nombre de archivo)", R,
Esta instrucción se complementaba con CLOAD (para carga (dirección de memoria)
de programas, recuerde que el cassette es de entrada/salida). Si deseamos omitir (incluso los dos puntos), nos cargará lo
Pues bien, estas instrucciones pueden ser sustituidas por SAVE primero que encuentre. Los siguientes dos parámetros también
«CAS:PROGRA» y LOAD«CAS:PROGRA», que sería la for- son optativos. Con la R a continuación, el programa se ejecuta
ma general para tratar la entrada o salida por los dispositivos ar- automáticamente tras la carga, lo cual es muy útil, pues, nos eVi-
chivadores. ta trabajar con las áteas de memoria -condición necesaria para
Sin embargo, el formato en que graba los datos la orden ejecutar un programa en lenguaje máquina mediante las ordec
nes USR y DEFUSR. .
52
53
CAPITULO VI
CSAVE es distinto del que utiliza mediante SAVE"CAS: (nom-
bre de archivo)." En el primer caso se almacena la información
en un sistema intermedio, sólo útil para leer o cargar progra-
mas. En el segundo se graba en ASCII puro, lo que resulta muy
útil para trabajar con textos y datos.
Una de las peculiaridades de CSAVE y CLOAD es que no
necesitan parámetros, como SAVE o LOAD, y por tanto son
más sencillos de utilizar, pero el inconveniente es 9~e no permi-
ten efectuar MERGE de programas, pues para utihzar esta sen-
tencia es necesario que los archivos de carga se hallen grabados
en ASCII.
Con la instrucción MERGE "CAS": (nombre programa)"
unimos dos archivos, el llamado desde la instrucción que se car-
ga de cassette y el residente en memoria viva (RAM), es decir,
Gestión de archivo y grabación de datos que sólo se podrán fusionar programas grabados mediante
SAVE.
El sistema MSX para su gestión intensa considera la exis- El programa residente seguirá tal cual y el miembro de car-
tencia de cuatro dispositivos de archivo periféricos con los cua- ga se fusionará con él, sin embargo si se repiten números de lí-
les intercambia información. neas éstos serán modificados en el ordenador, prevaleciendo
. 1 PANTALLA EN MODO DE TEXTO (sólo de salida) las líneas del programa que se ha leído mediante MERGE. Si se
2 PANTALLA EN MODO GRAFICO (sólo de salida) omite el nombre de archivo el ordenador intentará fusionar el
3 MAGNETOFONO A CASSETTE (entrada/salida) primer archivo que encuentre.
4 IMPRESORA (sólo salida) Otras instrucciones especiales que pueden ser utilizadas
Los nombres que reciben estos dispositivos con respectiva- con el dispositivo cassette (CAS) son:
mente: CRT, GRP, CAS, LPT. Todas las salidas de informa- BSAVE, que graba datos en formato binario.
ción se realizan a través de estos dispositivos. BLOAD, que los carga en binario (B de binario delante de
SAVE o LOAD).
Dispositivo cassette Estas dos órdenes están diseñadas de cara a la grabación de
programas en lenguaje máquina, por lo que disponen de algún
Recordemos que para almacenar un programa en cassette parámetro del que no disponían CSAVE y CLOAD. La ins-
ejecutábamos en modo directo, CSAVE «PROGRA» (Donde trucción completa queda como sigue:
PROGRA es el nombre del archivo que contiene el programa). BLOAD "nombre de dispositivo: (nombre de archivo)", R,
Esta instrucción se complementaba con CLOAD (para carga (dirección de memoria)
de programas, recuerde que el cassette es de entrada/salida). Si deseamos omitir (incluso los dos puntos), nos cargará lo
Pues bien, estas instrucciones pueden ser sustituidas por SAVE primero que encuentre. Los siguientes dos parámetros también
«CAS:PROGRA» y LOAD«CAS:PROGRA», que sería la for- son optativos. Con la R a continuación, el programa se ejecuta
ma general para tratar la entrada o salida por los dispositivos ar- automáticamente tras la carga, lo cual es muy útil, pues, nos eVi-
chivadores. ta trabajar con las áteas de memoria -condición necesaria para
Sin embargo, el formato en que graba los datos la orden ejecutar un programa en lenguaje máquina mediante las ordec
nes USR y DEFUSR. .
52
53
Por fin el último parámetro también opcional, nos permite grama en modo directo sino en modo diferido, esto es dentro
introducir un valor de partida que es añadido a las direcciones de un programa previo a la grabación de datos .. ?ería inútil. te-
inicial, final y de ejecución, que se indicaron en la orden CSA- ner encendido el cassette gastando cmta y tambien tener abier-
VE, para posicionar en otro sitio la rutina que se carga. Por to el comando de datos del ordenador al cassette en caso de no
ejemplo: BSAVE "CAS:(nombre de archivo)", (dirección ini- tener remote.
cial), (dirección final), (dirección de ejecución). Es evidente por otra parte que no siempre grabaremos to-
En este sistema de almacenamiento, después de introducir dos los archivos. En ocasiones podemos hacerlo pero lo más
el nombre del archivo, se deberán introducir las direcciones de frecuente es grabar los datos según los obtengamos a medida
memoria, inicial y final (las áreas de memoria) entre las que se que avanza el proceso. Por tar;to, ya pode:nos im~ginarr;os q_ue
encuentra la rutina en código máquina, para que sólo guarde la la grabación de datos. en un ~chero es mas trab~J?Sª e rmplica
información contenida en estas áreas. El último, parámetro op- un mayor número de mstrucciones que la grabacion de un pro-
tativo nos indica la sección del programa en máquina, en que grama. Por ello es necesario '.l todos ~os niveles 4e prograr;ia-
empezará la ejecución si se carga con R en la sentencia BLOAD. ción, que se hay~n dispuest~ mstrucciones especiales que sim-
Si se omite este parámetro, empezará la ejecución en la direc- plifiquen al máximo el trabaJO. .
ción inicial, lo cual resulta ser lo más común. . La primera instrucción ~ue vamos a es~udi~ es OPEN, que
Igualmente se puede omitir el nombre del archivo. Si así se prepara la apertura de un fichero y cuya smtaxis es:.
hiciera la instrucción grabaría una cadena nula. OPEN"(nombre dispositivo): (nombre de archivo)":
LOAD sólo puede asignarse a cassette pero SAVE puede
utilizar los cuatro.dispositivos. OUTPUT A$# (número de archivo)
La sentencia SAVE aplicada a .un dispositivo CRT produce FOR INPUT
el efecto de LIST. Si se ejecuta sobreLPT nos dará un LLIST.
Antes de seguir adelante recomendaremos a los lectores Sabemos que los disposit~vos posibles son 4 y que a .cual-
que guarden en <;listintas cintas los programas grabados me- quiera de ellos le podemos asignar la apertura de un archivo.
diante CSAVE/CLOAD, los grabados con SAVE/LOAD y los De esta manera podemos abrir uno o más archivos .de cas-
que utilizan BSAVE/BLOAD, pues puede ser que intentemos sette, impresora, pantalla y p~n~alla de tex~os. Lo hab1tl'.al es
cargar con BSAVE un programa cargado con CSAVE o SAVE, asignar la apertura de como maxrmo un archivo por cada dispo-

l
1 ~
pues dada la disparidad de códigos que emplea cada instruc-
ción para guardar los programas en cassette si se leyera un ar-
chivo de forma equívoca daría lugar a graves errores dentro de
un proceso de aplicación.
sitivo.
El nombre del archivo es optativo, pero recomendamos po-
ner siempre un nombre, pues sino, es muy difícil op~rar poste-
riormente con él. Si optamos por ponerle nombre, e?te, COf'.1-0
siempre, no debe tener más de 6 caracteres pues el sistema ig-
nora a los demás. El número de canal debe ser un entero entre
¡; Grabación de datos en cinta O y 15, que es el mayor número po~ible de arc~ivos con que
¡ puede trabajar el MSX. Si se abre mas de un archivo es necesa-
1 Hasta ahora hemos visto cómo se guarda en cinta los pro- rio dar números diferentes a cada uno de ellos. Pero esto nos
gramas que de hecho son archivos con un contenido muy espe- obliga a utilizar previamente una sentencia MAXFILES = (n)
w cial, pero para poder grabar y leer datos resultantes de un pro-
grama, es decir, para organizar un archivo de datos o fichero, es
en la que como hemos dicho N puede ser un número de O a 15
o cualquier variable numéric:i que contenga un valc;r entre OY
necesario un poco más de preparación. 15. Esta sentencia es necesana ~n cuanto se abr~ mas ,de un ar-
1 En primer lugar, no trabajaremos como para grabar un pro- chivo simultaneamente (en realidad no lo hace srmultanemente
1
55
1 54
Por fin el último parámetro también opcional, nos permite grama en modo directo sino en modo diferido, esto es dentro
introducir un valor de partida que es añadido a las direcciones de un programa previo a la grabación de datos .. ?ería inútil. te-
inicial, final y de ejecución, que se indicaron en la orden CSA- ner encendido el cassette gastando cmta y tambien tener abier-
VE, para posicionar en otro sitio la rutina que se carga. Por to el comando de datos del ordenador al cassette en caso de no
ejemplo: BSAVE "CAS:(nombre de archivo)", (dirección ini- tener remote.
cial), (dirección final), (dirección de ejecución). Es evidente por otra parte que no siempre grabaremos to-
En este sistema de almacenamiento, después de introducir dos los archivos. En ocasiones podemos hacerlo pero lo más
el nombre del archivo, se deberán introducir las direcciones de frecuente es grabar los datos según los obtengamos a medida
memoria, inicial y final (las áreas de memoria) entre las que se que avanza el proceso. Por tar;to, ya pode:nos im~ginarr;os q_ue
encuentra la rutina en código máquina, para que sólo guarde la la grabación de datos. en un ~chero es mas trab~J?Sª e rmplica
información contenida en estas áreas. El último, parámetro op- un mayor número de mstrucciones que la grabacion de un pro-
tativo nos indica la sección del programa en máquina, en que grama. Por ello es necesario '.l todos ~os niveles 4e prograr;ia-
empezará la ejecución si se carga con R en la sentencia BLOAD. ción, que se hay~n dispuest~ mstrucciones especiales que sim-
Si se omite este parámetro, empezará la ejecución en la direc- plifiquen al máximo el trabaJO. .
ción inicial, lo cual resulta ser lo más común. . La primera instrucción ~ue vamos a es~udi~ es OPEN, que
Igualmente se puede omitir el nombre del archivo. Si así se prepara la apertura de un fichero y cuya smtaxis es:.
hiciera la instrucción grabaría una cadena nula. OPEN"(nombre dispositivo): (nombre de archivo)":
LOAD sólo puede asignarse a cassette pero SAVE puede
utilizar los cuatro.dispositivos. OUTPUT A$# (número de archivo)
La sentencia SAVE aplicada a .un dispositivo CRT produce FOR INPUT
el efecto de LIST. Si se ejecuta sobreLPT nos dará un LLIST.
Antes de seguir adelante recomendaremos a los lectores Sabemos que los disposit~vos posibles son 4 y que a .cual-
que guarden en <;listintas cintas los programas grabados me- quiera de ellos le podemos asignar la apertura de un archivo.
diante CSAVE/CLOAD, los grabados con SAVE/LOAD y los De esta manera podemos abrir uno o más archivos .de cas-
que utilizan BSAVE/BLOAD, pues puede ser que intentemos sette, impresora, pantalla y p~n~alla de tex~os. Lo hab1tl'.al es
cargar con BSAVE un programa cargado con CSAVE o SAVE, asignar la apertura de como maxrmo un archivo por cada dispo-

l
1 ~
pues dada la disparidad de códigos que emplea cada instruc-
ción para guardar los programas en cassette si se leyera un ar-
chivo de forma equívoca daría lugar a graves errores dentro de
un proceso de aplicación.
sitivo.
El nombre del archivo es optativo, pero recomendamos po-
ner siempre un nombre, pues sino, es muy difícil op~rar poste-
riormente con él. Si optamos por ponerle nombre, e?te, COf'.1-0
siempre, no debe tener más de 6 caracteres pues el sistema ig-
nora a los demás. El número de canal debe ser un entero entre
¡; Grabación de datos en cinta O y 15, que es el mayor número po~ible de arc~ivos con que
¡ puede trabajar el MSX. Si se abre mas de un archivo es necesa-
1 Hasta ahora hemos visto cómo se guarda en cinta los pro- rio dar números diferentes a cada uno de ellos. Pero esto nos
gramas que de hecho son archivos con un contenido muy espe- obliga a utilizar previamente una sentencia MAXFILES = (n)
w cial, pero para poder grabar y leer datos resultantes de un pro-
grama, es decir, para organizar un archivo de datos o fichero, es
en la que como hemos dicho N puede ser un número de O a 15
o cualquier variable numéric:i que contenga un valc;r entre OY
necesario un poco más de preparación. 15. Esta sentencia es necesana ~n cuanto se abr~ mas ,de un ar-
1 En primer lugar, no trabajaremos como para grabar un pro- chivo simultaneamente (en realidad no lo hace srmultanemente
1
55
1 54
[1
¡j
¡-'!

sino uno tras otro). Sin embargo, hay dos puntos muy necesa- 10 MA>:FILES=2
rios a tener en cuenta cuando se utiliza esta sentencia. 20 OPEN"CAS:DATA"FOR INPUT AS #2
En primer lugar, cada archivo preparado para abrirse en un 30 INPUT #2,>:%
f programa ocupa un área de memoria de la parte de usuario, por 1 40 PRINT"X% ES":>:%

·~
lo que una apertura innecesaria o mal planificada de ficheros 50 CLOSE
puede reducir considerablemente la memoria de que dispone-
mos para introducir nuestros programas. Ahora ya sabemos decirle al ordenador el número de cana-
En segundo lugar, esta instrucción siempre debe aparecer les que debe reservar para entradas/salidas de ficheros (MAX-
en primer lugar en un programa. Más aún, en las primeras lí- FILES) y también, asignar dispositivos y canales a ficheros, así
neas tras los REM de títulos y propiedad,pues tras su ejecución como especificar si son de entrada o de salida (FOR INPUT;
se remodela toda el área de usuario (por el motivo antes expues- 1 FOR OUTPUT). Todo esto lo hacemos mediante la instruc-
to) y borra todo lo que hubiéramos almacenado en estas direc- • ción OPEN pero para decirle que grabe o lea un dato concreta-
ciones con anterioridad, especialmente las matrices que haya- mente ¡ahora! es necesario utilizar aún más instrucciones:
mos creado con DIM, o los DEFINT, e incluso los valores que INPUT#, (N canal), expresión para leer datos
se hayan asignado a las variables, antes de la instrucción MAX- PRINT #, (N canal), expresión para grabar datos
FILES. Por otra parte con MAXFILES=O sólo prodremos eje- El número de canal naturalmente será el especificado en la
cutar CSAVE, CLOAD, SAVE y LOAD pues el canal Oestá re- sentencia OPEN correspondiente y la expresión será lo que
servado para ellas. grabaremos o leeremos al ejecutar la orden, es decir el dato.
Así pues, tras una sentencia MAXFILES = (n) deberemos Para no tener que escribir tantas instrucciones INPUT # y
ejecutar una sentencia OPEN; si la instrucción OPEN utiliza el PRINT # como datos haya que grabar, es necesario organizar
dispositivo cassette, tras ejecutarse y si disponemos de control algiín tipo de bucle o contador. A continuación dos ejemplos
de «remote», veremos como el motor del magnetófono se pone de grabación de un archivo.
en marcha y en la cinta se graba el nom .. bre del fichero si es un
OPEN FOR OUTPUT. Si el OPEN es FOR INPUT -todavía 10 SCREEN. ,, 2
con dispositivo cassette- cuando se ejecuta esta instrucción el 20 CLS:PRINT"Este programa graba datos e
cassette se pone en marcha y lee la cinta hasta encontrar el nom- n cinta..,ponga una cinta en el masnetofon
bre de fichero que se le introdujo en el OPEN. Ejemplo de lo
dicho hasta ahora: 30 PRINT:PRINT''pulse la ~ecla -S- para f
inaliza.r el procesan
MAXFILES=2 40 PRINT:PRINT"pulse REC-rPLRY s a cont in
OPEN "CAS" FORINPUT uac ion la barra de espac ¡os"
OPEN "CAS" FOR OUTPUT 50 IF INKEY$ <>" " THEN 50
60 PRINT "ESPERE"
70 OPEN ''CAS:OATO'' FOR OUTPUT AS 61
80 H4==H-4i-l
Desde luego antes de empezar ninguna grabación o lectura 30.PRINT "DATO" :H.?<:" •':INPUT HH$
es necesario controlar que la cinta esté en lugar correcto. De no 35 PRINT #1,HH$
hacerlo es muy fácil que al grabar borremos lo anteriormente 100 IF HH$<>"S" THEN 80
grabado. Leer una buena colocación de la cinta nos evitará mu- 110 CLOSE
chos ratos de tediosa espera pues los cassettes de audio suelen 120 PRINT "PLSE STOP CEN EL CASSETTEJ"
ser muy lentos. 130 SCREEN ••• l:END

56 1 57
[1
¡j
¡-'!

sino uno tras otro). Sin embargo, hay dos puntos muy necesa- 10 MA>:FILES=2
rios a tener en cuenta cuando se utiliza esta sentencia. 20 OPEN"CAS:DATA"FOR INPUT AS #2
En primer lugar, cada archivo preparado para abrirse en un 30 INPUT #2,>:%
f programa ocupa un área de memoria de la parte de usuario, por 1 40 PRINT"X% ES":>:%

·~
lo que una apertura innecesaria o mal planificada de ficheros 50 CLOSE
puede reducir considerablemente la memoria de que dispone-
mos para introducir nuestros programas. Ahora ya sabemos decirle al ordenador el número de cana-
En segundo lugar, esta instrucción siempre debe aparecer les que debe reservar para entradas/salidas de ficheros (MAX-
en primer lugar en un programa. Más aún, en las primeras lí- FILES) y también, asignar dispositivos y canales a ficheros, así
neas tras los REM de títulos y propiedad,pues tras su ejecución como especificar si son de entrada o de salida (FOR INPUT;
se remodela toda el área de usuario (por el motivo antes expues- 1 FOR OUTPUT). Todo esto lo hacemos mediante la instruc-
to) y borra todo lo que hubiéramos almacenado en estas direc- • ción OPEN pero para decirle que grabe o lea un dato concreta-
ciones con anterioridad, especialmente las matrices que haya- mente ¡ahora! es necesario utilizar aún más instrucciones:
mos creado con DIM, o los DEFINT, e incluso los valores que INPUT#, (N canal), expresión para leer datos
se hayan asignado a las variables, antes de la instrucción MAX- PRINT #, (N canal), expresión para grabar datos
FILES. Por otra parte con MAXFILES=O sólo prodremos eje- El número de canal naturalmente será el especificado en la
cutar CSAVE, CLOAD, SAVE y LOAD pues el canal Oestá re- sentencia OPEN correspondiente y la expresión será lo que
servado para ellas. grabaremos o leeremos al ejecutar la orden, es decir el dato.
Así pues, tras una sentencia MAXFILES = (n) deberemos Para no tener que escribir tantas instrucciones INPUT # y
ejecutar una sentencia OPEN; si la instrucción OPEN utiliza el PRINT # como datos haya que grabar, es necesario organizar
dispositivo cassette, tras ejecutarse y si disponemos de control algiín tipo de bucle o contador. A continuación dos ejemplos
de «remote», veremos como el motor del magnetófono se pone de grabación de un archivo.
en marcha y en la cinta se graba el nom .. bre del fichero si es un
OPEN FOR OUTPUT. Si el OPEN es FOR INPUT -todavía 10 SCREEN. ,, 2
con dispositivo cassette- cuando se ejecuta esta instrucción el 20 CLS:PRINT"Este programa graba datos e
cassette se pone en marcha y lee la cinta hasta encontrar el nom- n cinta..,ponga una cinta en el masnetofon
bre de fichero que se le introdujo en el OPEN. Ejemplo de lo
dicho hasta ahora: 30 PRINT:PRINT''pulse la ~ecla -S- para f
inaliza.r el procesan
MAXFILES=2 40 PRINT:PRINT"pulse REC-rPLRY s a cont in
OPEN "CAS" FORINPUT uac ion la barra de espac ¡os"
OPEN "CAS" FOR OUTPUT 50 IF INKEY$ <>" " THEN 50
60 PRINT "ESPERE"
70 OPEN ''CAS:OATO'' FOR OUTPUT AS 61
80 H4==H-4i-l
Desde luego antes de empezar ninguna grabación o lectura 30.PRINT "DATO" :H.?<:" •':INPUT HH$
es necesario controlar que la cinta esté en lugar correcto. De no 35 PRINT #1,HH$
hacerlo es muy fácil que al grabar borremos lo anteriormente 100 IF HH$<>"S" THEN 80
grabado. Leer una buena colocación de la cinta nos evitará mu- 110 CLOSE
chos ratos de tediosa espera pues los cassettes de audio suelen 120 PRINT "PLSE STOP CEN EL CASSETTEJ"
ser muy lentos. 130 SCREEN ••• l:END

56 1 57
10 DIM A$C1,2J aunque aparentemente graba los datos uno a uno, el motor del
20 OPEN ''CAS:OATA'' FOR OUTPUT AS #1 cassette se acciona sólo a intervalos regulares, y luego se desco-
30 FOR A=0 TO 1 necta. Esto es debido a que en la memoria que se reserva el sis-
40 FOR 8=0 TO 2 tema para cada canal, con la sentencia MAXFILES, se guardan
50 READ A$CA,BJ los datos, hasta que la memoria reservada al canal de salida se
60 PRINT #LA$CA,BJ ;","; llena, en cuyo caso graba los datos seguidos y espera que vuelva
70 NEXT B a llenarse de nuevo, si eso no ocurre, transmitirá todos los datos
80 NEXT A restantes que tenga en la memoria reservada cuando el archivo
30 CLOSE #1 se cierre mediante la sentencia CLOSE.
100 END Otra peculiaridad interna del sistema, que nosotros no po-
110 DATA JOSe,Antonío,Javíer
120 DATA Pepe,Toni,Javí demos observar, es que cada vez que sacamos datos a un archi-
vo con la sentencia PRINT # el sistema escribe automática-
mente despues de cada dato, un código de retorno y un código
Como puede observarse hemos introducido una nueva sen- de avance de línea (&HOD) decimal 13 (&HOA) decimal 10, es-
tencia CLOSE cuya sintaxis es: CLOSE (#)(número de canal) tos dos códigos, nos indican la separación entre datos (véase ta-
(número de canal) (número de canal). El número de canal es el bla 3 código ASCII).
número de archivo que se cierra, (por omisión con sólo CLOSE Cuando los datos son alfanuméricos (cadenas) tenemos la
se cierran todos los archivos). Con esta sentencia tras cerrar un opción de sacar varios datos con una sola sentencia PRINT#,
archivo, el canal por el que recibía? envi'.1ba datos ~ueda libre insertando"," entre cada uno de los datos, PRINT#l,A$;",'';B$,
y podemos utilizarlo para otro archivo, e mcluso asignarle otro la coma indica la separación entre los datos A$ y B$ que se ma-
dispositivo, lo cual resulta muy interesante, pues de esJ;a forma nejan como dos datos diferentes cuando se introducen desde el
no necesitamos reservar espacio para estos nuevos archivos me- archivo. Esto es especialmente útil paí:a grabar datos asociados
diante MAXFILES por lo que ahorramos memoria de usi.:ario. de dos tipos diferentes como por ejemplo Nombre N$ y T eléfo-
Ejemplo de cierre de un archivo y apertura posterior de nos T$:
otro con el mismo numero. PRINT#l N$; ","; T$
Aquí grabará primero el nombre y luego el teléfono asocia-
10 OPEN''CAS:PARES'' FOR OUTPUT AS #1 do.
20 CLS:FOR N%=0 TO 50 STEP 2 Cuando los datos son de tipo numérico y se utiliza a INPU-
30 PRINT#l,N% T# para leerlos, cada uno de los datos se separa automática-
40 PRINT N%; 11
n; mente con sólo encontrar un ";" entre ellos.
50 NEXT Un caso muy frecuente cuando trabajamos con ficheros es
60 CLOSE #1 encontrarnos con que no conocemos cuántos registros (series
70 OPEN" CAS: IMPARES" FO.R OUTPUT AS # 1 de datos) tenemos archivados. En consecuencia no podemos
80 CLS:FOR H%=0 TO 50 STEP 3 utilizar un bucle FOR/NEXT por lo que debemos emplear la
30 PRINT#l,H% función EOF con _la que identificamos el final del archivo.
!00PRINTH%;" "; EOF (End of file) o sea en inglés «fin de archivo» es una
110 NEXT función del BASIC que, cuando es interrogada de la siguiente
forma PRINT EOF (número de archivo) nos ofrece un valor O
Si cambiamos el programa anterior para introducir un ma- si no se han acabado los datos o de -1 si no hay más datos a leer.
yor número de datos y lo ejecutamos, podremos observar que Ello es debido a que el sistema graba una marca (&HlA) al final

58 59
10 DIM A$C1,2J aunque aparentemente graba los datos uno a uno, el motor del
20 OPEN ''CAS:OATA'' FOR OUTPUT AS #1 cassette se acciona sólo a intervalos regulares, y luego se desco-
30 FOR A=0 TO 1 necta. Esto es debido a que en la memoria que se reserva el sis-
40 FOR 8=0 TO 2 tema para cada canal, con la sentencia MAXFILES, se guardan
50 READ A$CA,BJ los datos, hasta que la memoria reservada al canal de salida se
60 PRINT #LA$CA,BJ ;","; llena, en cuyo caso graba los datos seguidos y espera que vuelva
70 NEXT B a llenarse de nuevo, si eso no ocurre, transmitirá todos los datos
80 NEXT A restantes que tenga en la memoria reservada cuando el archivo
30 CLOSE #1 se cierre mediante la sentencia CLOSE.
100 END Otra peculiaridad interna del sistema, que nosotros no po-
110 DATA JOSe,Antonío,Javíer
120 DATA Pepe,Toni,Javí demos observar, es que cada vez que sacamos datos a un archi-
vo con la sentencia PRINT # el sistema escribe automática-
mente despues de cada dato, un código de retorno y un código
Como puede observarse hemos introducido una nueva sen- de avance de línea (&HOD) decimal 13 (&HOA) decimal 10, es-
tencia CLOSE cuya sintaxis es: CLOSE (#)(número de canal) tos dos códigos, nos indican la separación entre datos (véase ta-
(número de canal) (número de canal). El número de canal es el bla 3 código ASCII).
número de archivo que se cierra, (por omisión con sólo CLOSE Cuando los datos son alfanuméricos (cadenas) tenemos la
se cierran todos los archivos). Con esta sentencia tras cerrar un opción de sacar varios datos con una sola sentencia PRINT#,
archivo, el canal por el que recibía? envi'.1ba datos ~ueda libre insertando"," entre cada uno de los datos, PRINT#l,A$;",'';B$,
y podemos utilizarlo para otro archivo, e mcluso asignarle otro la coma indica la separación entre los datos A$ y B$ que se ma-
dispositivo, lo cual resulta muy interesante, pues de esJ;a forma nejan como dos datos diferentes cuando se introducen desde el
no necesitamos reservar espacio para estos nuevos archivos me- archivo. Esto es especialmente útil paí:a grabar datos asociados
diante MAXFILES por lo que ahorramos memoria de usi.:ario. de dos tipos diferentes como por ejemplo Nombre N$ y T eléfo-
Ejemplo de cierre de un archivo y apertura posterior de nos T$:
otro con el mismo numero. PRINT#l N$; ","; T$
Aquí grabará primero el nombre y luego el teléfono asocia-
10 OPEN''CAS:PARES'' FOR OUTPUT AS #1 do.
20 CLS:FOR N%=0 TO 50 STEP 2 Cuando los datos son de tipo numérico y se utiliza a INPU-
30 PRINT#l,N% T# para leerlos, cada uno de los datos se separa automática-
40 PRINT N%; 11
n; mente con sólo encontrar un ";" entre ellos.
50 NEXT Un caso muy frecuente cuando trabajamos con ficheros es
60 CLOSE #1 encontrarnos con que no conocemos cuántos registros (series
70 OPEN" CAS: IMPARES" FO.R OUTPUT AS # 1 de datos) tenemos archivados. En consecuencia no podemos
80 CLS:FOR H%=0 TO 50 STEP 3 utilizar un bucle FOR/NEXT por lo que debemos emplear la
30 PRINT#l,H% función EOF con _la que identificamos el final del archivo.
!00PRINTH%;" "; EOF (End of file) o sea en inglés «fin de archivo» es una
110 NEXT función del BASIC que, cuando es interrogada de la siguiente
forma PRINT EOF (número de archivo) nos ofrece un valor O
Si cambiamos el programa anterior para introducir un ma- si no se han acabado los datos o de -1 si no hay más datos a leer.
yor número de datos y lo ejecutamos, podremos observar que Ello es debido a que el sistema graba una marca (&HlA) al final

58 59
------------------------------------~

r
r

En la línea 10 determinamos la pantalla, mientras que en la


de cada archivo. Si utilizamos esta función es necesario estar se- 20 abrimos el archivo en pantalla. La instrucción de la línea 30
guros de que el dispo~itivo por el que _Preguntamos ha sido es de posicionado del texto en pantalla mediante PRESET y sus
abierto de entrada mediante una sentencia OPEN INPUT o de correspondientes coordenadas. Los caracteres a-ver en pantalla
lo contrario los resultados pueden ser catastróf~cos. Quizá la de los datos de archivo se especifican en la línea 40. Si hubiése-
mejor manera de utilizar la función EOF sea mediante una pre-
mos dibujado entre esta línea y la 20 también aparecería junto
gunta del siguiente tipo: con el texto en SCREEN 2.
IFEOF(núm. archivo)= OTHEN 100ELSEGOT0200
En la línea 100 insertaremos la rutina para tratamiento de
registros y en la línea 200 tendremos la rutina de fin de lectura. Como organizar sus programas de gestión desde cassette

Toda aplicación de gestión, por modesta que sea, abarcará


10 CLS:PRINT TABC12)"BUSCALO":PRINT una serie de programas interrelacionados (programas para g:a-
20 PRINT :PRINT".Este pros rama busca datos bar datos, para modificarlos, leerlos y rea~zar con ellos func1~­
p o r 1 a" -, PR I NT" i n i c 'i a 1 en e 1 f i ch e ro da t nes, etc. etc.). Esta serie de programas recibe el nombre de apli-
os.. !l
cación y su utilización, según unas normas predefinidas (l. 0 eje-
30 PRINT; PRINT"Pulse PLAY en sy cassett cutar el programa de lectura, 2. 0 modificar los datos con el 2. 0
e 8 a cont1nuacion la barra de espacios'' programa, etc. etc) se d\'!nomina proceso de datos. Analicemos
esto más a fondo. -
40 IF INKEY$Ó" "THEN 40
50 INPUT"Escriba la inicial del nombre:
¡I ;Q$ Proceso de datos
60 OPEN"CAS:NOMBRE"FOR INPUT AS ltl
70 INPUT#J,N$ Datos son los elementos usados-como base de decisión, cál-
80 IF EOFC1)=0 ANO 0$<>LEFT$CN$.JJ THEN culo o medida en un proceso. Los datos por sí mismos no dicen
70 nada por lo que deben ser procesados y convertidos er: infor-
80 PRINT :PRINT"El nombre es ":N$ mación. Este proceso consiste en la selección, tratamiento y
100 CLOSE:P.RINT"Pulse STOP en el masneto combinación de los datos, con objeto de obtener un mensaje
fono .. " significativo para alguien.
A tal efecto el sistema MSX dispone de varias posibilidades
profesionales que le permiten crear ficheros en discos (puede
controlar de forma sencilla dos controladores de disco) de va-
Otra de las aplicaciones mmediatas de testión de dispositi- rios formatos, asimismo; puede almacenar datos en cartuchos
vos de archivo del MSX es la posibilidad de escribir textos en ROM de memoria viva, intercambiar datos con otros aparatos
pantallas gráficas-SCREEN 2ySCREEN 3-, dado que en ellas por medio de su salida RS232 y grabar datos en un formato AS-
es posible emplear la orden PRINT # 1, según se puede apre- CII puro, que puede hacer que intercambie datos con aparatos
ciar en el siguiente programita: de la norma IBM PC (el hermano mayor de MSX por parte de
Microsoft) y un sinfín de posibilidades más que sólo tienen por (¡
10SCREEN2 techo el megabyte de capacidad máxima que se obtiene me- il
20 OPEN "GRP:" FOR OUT PUT AS#l
diante un complejo sistema de paginación, todo lo cual e.s mate-
30 PRESET (100,50) ria para muchos más libros, y por lo tanto no será estudiado en
40PRINT#1, "Nombre de archivo" éste.
50GOT050
61
60
------------------------------------~

r
r

En la línea 10 determinamos la pantalla, mientras que en la


de cada archivo. Si utilizamos esta función es necesario estar se- 20 abrimos el archivo en pantalla. La instrucción de la línea 30
guros de que el dispo~itivo por el que _Preguntamos ha sido es de posicionado del texto en pantalla mediante PRESET y sus
abierto de entrada mediante una sentencia OPEN INPUT o de correspondientes coordenadas. Los caracteres a-ver en pantalla
lo contrario los resultados pueden ser catastróf~cos. Quizá la de los datos de archivo se especifican en la línea 40. Si hubiése-
mejor manera de utilizar la función EOF sea mediante una pre-
mos dibujado entre esta línea y la 20 también aparecería junto
gunta del siguiente tipo: con el texto en SCREEN 2.
IFEOF(núm. archivo)= OTHEN 100ELSEGOT0200
En la línea 100 insertaremos la rutina para tratamiento de
registros y en la línea 200 tendremos la rutina de fin de lectura. Como organizar sus programas de gestión desde cassette

Toda aplicación de gestión, por modesta que sea, abarcará


10 CLS:PRINT TABC12)"BUSCALO":PRINT una serie de programas interrelacionados (programas para g:a-
20 PRINT :PRINT".Este pros rama busca datos bar datos, para modificarlos, leerlos y rea~zar con ellos func1~­
p o r 1 a" -, PR I NT" i n i c 'i a 1 en e 1 f i ch e ro da t nes, etc. etc.). Esta serie de programas recibe el nombre de apli-
os.. !l
cación y su utilización, según unas normas predefinidas (l. 0 eje-
30 PRINT; PRINT"Pulse PLAY en sy cassett cutar el programa de lectura, 2. 0 modificar los datos con el 2. 0
e 8 a cont1nuacion la barra de espacios'' programa, etc. etc) se d\'!nomina proceso de datos. Analicemos
esto más a fondo. -
40 IF INKEY$Ó" "THEN 40
50 INPUT"Escriba la inicial del nombre:
¡I ;Q$ Proceso de datos
60 OPEN"CAS:NOMBRE"FOR INPUT AS ltl
70 INPUT#J,N$ Datos son los elementos usados-como base de decisión, cál-
80 IF EOFC1)=0 ANO 0$<>LEFT$CN$.JJ THEN culo o medida en un proceso. Los datos por sí mismos no dicen
70 nada por lo que deben ser procesados y convertidos er: infor-
80 PRINT :PRINT"El nombre es ":N$ mación. Este proceso consiste en la selección, tratamiento y
100 CLOSE:P.RINT"Pulse STOP en el masneto combinación de los datos, con objeto de obtener un mensaje
fono .. " significativo para alguien.
A tal efecto el sistema MSX dispone de varias posibilidades
profesionales que le permiten crear ficheros en discos (puede
controlar de forma sencilla dos controladores de disco) de va-
Otra de las aplicaciones mmediatas de testión de dispositi- rios formatos, asimismo; puede almacenar datos en cartuchos
vos de archivo del MSX es la posibilidad de escribir textos en ROM de memoria viva, intercambiar datos con otros aparatos
pantallas gráficas-SCREEN 2ySCREEN 3-, dado que en ellas por medio de su salida RS232 y grabar datos en un formato AS-
es posible emplear la orden PRINT # 1, según se puede apre- CII puro, que puede hacer que intercambie datos con aparatos
ciar en el siguiente programita: de la norma IBM PC (el hermano mayor de MSX por parte de
Microsoft) y un sinfín de posibilidades más que sólo tienen por (¡
10SCREEN2 techo el megabyte de capacidad máxima que se obtiene me- il
20 OPEN "GRP:" FOR OUT PUT AS#l
diante un complejo sistema de paginación, todo lo cual e.s mate-
30 PRESET (100,50) ria para muchos más libros, y por lo tanto no será estudiado en
40PRINT#1, "Nombre de archivo" éste.
50GOT050
61
60
En los anteriores capítulos he~os dado suficientes elemen- que necesitemos modificar. en el sengundo caso, se
tos, para organizar pequeños programas de gestión familiar, hará imprescindible crear caracteres de fin de registro
con la sola ayuda de un modesto grabador de cassettes, conec- (algo similar a lo que hace el sistema con EOF).
tado a su MSX. Ahora bien, esta modestia en los medios utiliza- 7 - Para evitar problemas, utilice con profusión el trata-
dos, nos _obliga..de. al.gu.namaner.a a plantearnos algunas normas miento de errores y cree sus propios códigos de errores
de trabajo, qu~ serán imprescindibles si queremos que nuestro para aquellos casos más frecuentes que halle.
proceso de datos familiar funcione a la perfección. 8 - Dada la imposibilidad de rebobinar y correr la cinta de
1 - Atomice su análisis al máximo. Es decir, tras un ex- forma inteligente, la interrupción por intervalo puede
haustivo análisis del problema a resolver, redúzcalo a ser útil, combinada con una orden motor, para posicio-
una serie de sencillos y cortos programas y no busque nar el cassette en una vuelta concreta, a partir de la cual
crear grandes y mastodónticos programas, que difícil- leer.
mente podrá controlar .. 9 - Para evitar utilizar las sugerencias esbozadas en el pun-
2 - Tenga muy presente que las funciones básicas de todo to 7, o tener que cambiar de cinta varias veces, para
proceso de aatos (tratamiento de los datos tendente a grabar y leer datos, según el proceso Padre-Hijo co-
lograr una información) son entrada, validación, orde- mentado en el punto 3, será mejor crear varios archivos
nación, operación, salida, y que estas fases de opera- de pequeño tamaño y en cintas diferentes que masto-
ción han de ser reflejadas claramente en su o sus pro- ~ónticos arc~ivo~, más sensibles a los errores y poste-
gramas. riores complicác10nes. HAGA COPIAS DE TODOS
3 - Recuerde siempre, que estos han de ser claros. No es- SUS ARCHIVOS.
catime impresiones por pantalla de las instrucciones 10 - Conscientes del ingenio necesario para organizar con
necesarias para una correcta ejecución. Lo cual, se con- sus reducidos elementos programas ambiciosos, acon-
vierte en imprescindible si nuestra grabadora de cas- sejamos al lector que no dude en acometer la tarea,
sette no disp()ne de control REMOTE (será necesario pues de esta manera deberá utilizar un auténtico con-
entonces constantes mensajes del tipo, «apriete intro y cepto de análisis del problema y las posibilidades, lo
a continµación Play en el cassette» etc. etc.) que en definitiva es la quintaesencia de la programa-
4 - No disponiendo de ficheros dinámicos, es necesario ción.
explotar al máximo las posibilidades del proceso PA-
DRE-HIJO que consiste en leer un fichero de datos, o
parte de él y manipµlarlo (anulando o modificando se-
gún parámetros previos), para crear de salida otro nue-
vo archivp-hijo, que sea reflejo del padre, que leímos
¡ previamente, pero ya modificado o actualizado.
! 5 - Recuerde que los tratamientos de datos alfanuméricos,
carecerán de secretos para usted si domina las opera-
ciones.de cadenas.
6 - Mediante estas operaciones de cadenas, conseguirá
1 c~ear en sus ficheros registros (series de datos interrela-
cionadas dentro de un fichero) de longitud fija o varia-
ble. En el primer caso, una función LEFT$ o similar
nos puede servir para seleccionar los campos de datos

1
i
62 63
.i .-. _¡
En los anteriores capítulos he~os dado suficientes elemen- que necesitemos modificar. en el sengundo caso, se
tos, para organizar pequeños programas de gestión familiar, hará imprescindible crear caracteres de fin de registro
con la sola ayuda de un modesto grabador de cassettes, conec- (algo similar a lo que hace el sistema con EOF).
tado a su MSX. Ahora bien, esta modestia en los medios utiliza- 7 - Para evitar problemas, utilice con profusión el trata-
dos, nos _obliga..de. al.gu.namaner.a a plantearnos algunas normas miento de errores y cree sus propios códigos de errores
de trabajo, qu~ serán imprescindibles si queremos que nuestro para aquellos casos más frecuentes que halle.
proceso de datos familiar funcione a la perfección. 8 - Dada la imposibilidad de rebobinar y correr la cinta de
1 - Atomice su análisis al máximo. Es decir, tras un ex- forma inteligente, la interrupción por intervalo puede
haustivo análisis del problema a resolver, redúzcalo a ser útil, combinada con una orden motor, para posicio-
una serie de sencillos y cortos programas y no busque nar el cassette en una vuelta concreta, a partir de la cual
crear grandes y mastodónticos programas, que difícil- leer.
mente podrá controlar .. 9 - Para evitar utilizar las sugerencias esbozadas en el pun-
2 - Tenga muy presente que las funciones básicas de todo to 7, o tener que cambiar de cinta varias veces, para
proceso de aatos (tratamiento de los datos tendente a grabar y leer datos, según el proceso Padre-Hijo co-
lograr una información) son entrada, validación, orde- mentado en el punto 3, será mejor crear varios archivos
nación, operación, salida, y que estas fases de opera- de pequeño tamaño y en cintas diferentes que masto-
ción han de ser reflejadas claramente en su o sus pro- ~ónticos arc~ivo~, más sensibles a los errores y poste-
gramas. riores complicác10nes. HAGA COPIAS DE TODOS
3 - Recuerde siempre, que estos han de ser claros. No es- SUS ARCHIVOS.
catime impresiones por pantalla de las instrucciones 10 - Conscientes del ingenio necesario para organizar con
necesarias para una correcta ejecución. Lo cual, se con- sus reducidos elementos programas ambiciosos, acon-
vierte en imprescindible si nuestra grabadora de cas- sejamos al lector que no dude en acometer la tarea,
sette no disp()ne de control REMOTE (será necesario pues de esta manera deberá utilizar un auténtico con-
entonces constantes mensajes del tipo, «apriete intro y cepto de análisis del problema y las posibilidades, lo
a continµación Play en el cassette» etc. etc.) que en definitiva es la quintaesencia de la programa-
4 - No disponiendo de ficheros dinámicos, es necesario ción.
explotar al máximo las posibilidades del proceso PA-
DRE-HIJO que consiste en leer un fichero de datos, o
parte de él y manipµlarlo (anulando o modificando se-
gún parámetros previos), para crear de salida otro nue-
vo archivp-hijo, que sea reflejo del padre, que leímos
¡ previamente, pero ya modificado o actualizado.
! 5 - Recuerde que los tratamientos de datos alfanuméricos,
carecerán de secretos para usted si domina las opera-
ciones.de cadenas.
6 - Mediante estas operaciones de cadenas, conseguirá
1 c~ear en sus ficheros registros (series de datos interrela-
cionadas dentro de un fichero) de longitud fija o varia-
ble. En el primer caso, una función LEFT$ o similar
nos puede servir para seleccionar los campos de datos

1
i
62 63
.i .-. _¡
·-----···-------------------------~~-

CAPITULO VII
Los mensajes de error que utiliza el sistema MSX van nume-
rados del 1 al 69. Los errores del 26 al 50, inclusives, son reser-
vados para futuras expansiones del sistema, y del 51 hacia ade-
lante están dirigidos a la gestión de archivos, de los cuales el bo-
cado del león se lo llevan los dispositivos de acceso directo, por
lo que tienen efecto si la unidad básica no utiliza sistema de ais-
kettes.
Por otra parte el sistema reserva los códigos de error del 70
al 255 para utilización del usuario, de la forma que veremos en-
seguida.
El conocimiento de estos mensajes y sus códigos, nos será
muy útil para prevenir bloqueos en nuestros programas. Blo-
queos que pueden ser evitados mediante el potente juego de
instrucciones MSX BASIC para el tratamiento de errores.
Tratamiento de errores El tratamiento de errores esta muy relacionado con el siste-
ma de interrupciones de que dispone el sistema, que tratamos
A poco que haya trabajado con su ordenador habrá obser- en otro capítulo. La primera sentencia por tanto, nos resulta fa-
vado cómo aparecen en pantalla los mensajes correspondientes miliar: ON ERROR GOTO (numlinea).
a los errores generados en el sistema. Estos errores son debidos Esta instrucción produce en caso de detección de error un
a instrucciones mal empleadas, parámetros incorrectos o in- GOTO a la línea especificada, en la sentencia, con inhibición
completos, cálculos imposibles (división por cero), operacio- del mensaje en la pantalla. En este momento el sistema envía
nes ilegales. con cadenas, etc. etc. Estos errores provocan en el para su posterior tratamiento, el número de línea en que se pro-
sistema una interrupción en la ejecución del programa, la apari- auce el error y el código del error a las variables reservadas por
ción en pantalla del tipo y número de error y acto seguido, pa- el sistema ERL y ERR respectivamente.
samos a modo directo. De esta manera podemos seleccionar según el número de
Los errores pueden producirse asimismo, en modo directo, error almacenado en ERR algunos errores determinados, q_ue
obteniendo siempre el mismo tipo de mensaje, su formato es pueden solventarse mediante una subrutina especial o, simple-
mente, traducir los textos, y hacer que aparezcan en castellano.
(MENSAJE DE ERROR) IN (N. º de línea) En este último caso, no será necesario continuar adelante, pero
si hemos solventado el problema causante del error en una ruti-
na de interrupción por error, podemos volver a la ejecución del
El número de línea corresponderá a la línea del programa programa mediante la sentencia: ·
que se ejecutaba en el momento de producirse el error. Pero no
forzosamente, la línea en que se encuentra el error. Es decir que
si en una línea 20 asignamos un valor 240 a una variable X, ello RESUME (numlinea)
es perfectamente legal, pero si en una línea posterior, por ejem-
plo la 50, especificamos la instrucción STRIG (X), al no aceptar
esta instrucción e1valor240, nos dará error en la línea 50, que es En esta sentencia, si omitimos el número de línea o lo hace-
correcta en si misma. mos O, el sistema devuelve el flujo del programa y va a la línea
causahte del error otra vez, e intenta ejecutarla. En cambio si in-
64 i
1 65
.l
·-----···-------------------------~~-

CAPITULO VII
Los mensajes de error que utiliza el sistema MSX van nume-
rados del 1 al 69. Los errores del 26 al 50, inclusives, son reser-
vados para futuras expansiones del sistema, y del 51 hacia ade-
lante están dirigidos a la gestión de archivos, de los cuales el bo-
cado del león se lo llevan los dispositivos de acceso directo, por
lo que tienen efecto si la unidad básica no utiliza sistema de ais-
kettes.
Por otra parte el sistema reserva los códigos de error del 70
al 255 para utilización del usuario, de la forma que veremos en-
seguida.
El conocimiento de estos mensajes y sus códigos, nos será
muy útil para prevenir bloqueos en nuestros programas. Blo-
queos que pueden ser evitados mediante el potente juego de
instrucciones MSX BASIC para el tratamiento de errores.
Tratamiento de errores El tratamiento de errores esta muy relacionado con el siste-
ma de interrupciones de que dispone el sistema, que tratamos
A poco que haya trabajado con su ordenador habrá obser- en otro capítulo. La primera sentencia por tanto, nos resulta fa-
vado cómo aparecen en pantalla los mensajes correspondientes miliar: ON ERROR GOTO (numlinea).
a los errores generados en el sistema. Estos errores son debidos Esta instrucción produce en caso de detección de error un
a instrucciones mal empleadas, parámetros incorrectos o in- GOTO a la línea especificada, en la sentencia, con inhibición
completos, cálculos imposibles (división por cero), operacio- del mensaje en la pantalla. En este momento el sistema envía
nes ilegales. con cadenas, etc. etc. Estos errores provocan en el para su posterior tratamiento, el número de línea en que se pro-
sistema una interrupción en la ejecución del programa, la apari- auce el error y el código del error a las variables reservadas por
ción en pantalla del tipo y número de error y acto seguido, pa- el sistema ERL y ERR respectivamente.
samos a modo directo. De esta manera podemos seleccionar según el número de
Los errores pueden producirse asimismo, en modo directo, error almacenado en ERR algunos errores determinados, q_ue
obteniendo siempre el mismo tipo de mensaje, su formato es pueden solventarse mediante una subrutina especial o, simple-
mente, traducir los textos, y hacer que aparezcan en castellano.
(MENSAJE DE ERROR) IN (N. º de línea) En este último caso, no será necesario continuar adelante, pero
si hemos solventado el problema causante del error en una ruti-
na de interrupción por error, podemos volver a la ejecución del
El número de línea corresponderá a la línea del programa programa mediante la sentencia: ·
que se ejecutaba en el momento de producirse el error. Pero no
forzosamente, la línea en que se encuentra el error. Es decir que
si en una línea 20 asignamos un valor 240 a una variable X, ello RESUME (numlinea)
es perfectamente legal, pero si en una línea posterior, por ejem-
plo la 50, especificamos la instrucción STRIG (X), al no aceptar
esta instrucción e1valor240, nos dará error en la línea 50, que es En esta sentencia, si omitimos el número de línea o lo hace-
correcta en si misma. mos O, el sistema devuelve el flujo del programa y va a la línea
causahte del error otra vez, e intenta ejecutarla. En cambio si in-
64 i
1 65
.l
i Tabla mensajes de error traducimos, tras RESUME un número de línea, la ejecución,
í
continúa en esta línea. Con la opción
i 1 NEXT without FOR : No hay sentencia FOR .
correspondien_te _a su sentencia NEXT. RESUMENEXT
2 Syntax error : Error sintáctico en la sentencia.
3 RETURN without GOSUB : No hay seritencia GOSUB
-correspondiente a su sen_tencia la ejecución se desplaza a la línea siguiente a la que produjo el

!
AETURN.
: No ha más datos para leer.
error.
4 Out of DATA
5 !!legal function ca!I : Especificación ilegal en una funcíón
o un mandato.
: Demasiados o demasiado pocos 10 ON ERROR GOTO 60
6 Overflow
datos. 20 INPUT A
1 7 Out of memory ; No hay más memoria. 30 B=SGIR<Al
8 Undefined Hne number : Se ha especificado un número de
línea no definido. 40 PRINT "sqr<al=";B
: Subindíce de matri_z fuera de! margen
9 Subscript out of range
definido.
50 END
10 Redimensioned array : La matriz de una sentencia D!M ya ha 60 IF ERR=5 ANO ERL=30THEN70
sido especificada.
: Se ha dividido por cero.
70 PRINT ''introduce un numero positivo''
11 Division by zero
: El mandato no puede utilizarse en 80 RESUME 20
1 12 ll!ega! direct

13 Type mismatch
modo directo.
: Error de deletreo de los datos.
: No queda' más área para variables Otra posibilidad es la de definir nuestros propios errores
14 Out of stríng space
alfanuméricas.
1-5 Stríng too long : Cadena demasiado larga.
mediante la instrucción ERROR (num error).
16 String formula too complex: Cadena cteniasiado complicada. Si hemos preparado previamente el programa mediante
17 Carl't CONTlNUE : No es posible continuar la ejecución
del programa.
una instrucción ON ERROR, cuando encuentre la sentencia
18 Undefined user functlon : Se ha utilizado una función no ERROR 71 se creará una interrupción por error, acumulándose
defí,nida mediante una sentencia DEF
FN.
en ERR el número de error que le hemos dado, (en este caso

l 19 Device 110 error : Error en el equipo conectado. 71), y en ERL el número de línea en que encontró la sentencia
: Discordaricia entre er programa del
20 Verify error
casete y el de la memoria.
ERROR 71, a continuación, ejecutará la rutina de error a la que
21 No RESUME : No hay sentencia RESUME le envía la sentencia ON ERROR GOTO. En ella, podemos
correspondiente a su sentencia ON
ERROR.
preguntar por el código 71, pues ya ha sido definido previa-
mente.
1:
h
1 22 RESUME without error : No hay sentencia ON ERROR
correspondiente a su sentencia Estamos pues ante un caso de error provocado por noso-
RESUME.
¡:
[ 23 Unprintable error : Ha ocurrido un error carente de tros, es decir basta decirle a la máquina ERROR24, para provo-
!j mensaje de error.
: Falta un operando.
car un error del tipo MISSING OPERAND (obtendremos el
24 Missing operand
25 Une buffer overflow : E! programa introducido sol,)repasa el mensaje y la interrupción). Lo mismo ocurre con todos los nú-
tamaño de la memoria intermedia. meros de error del 1 al69, que son reservados paraelBASIC, es

¡
~ : El contenido de la memoria o el texto
51 lnternal error
es anormal. decir, forzamos el error correspondiente al número introduci-
52 Bad file number ; Nombre de archivo incorrecto. do en el parámetro de ERROR. Para ello no es necesario que
: El archivo especificado ya esta
54 File already open
abierto. haya una declaración previa de ON ERROR. Si diéramos al pa-
¡' 55 Input past end : Ya se han leído los últimos datos. rámetro un valor mayor de 69 el mensaje que aparece es «UN-
: Especificación incorrecta de archivo.
¡. 56 Bad file name
57 Direct statement in file : Durante la carga de un archivo se ha PRINTABLE ERROR», pues este error no lo tiene definido el
t introducido un mandato en modo sistema, y es necesario tratarlo siempre mediante una subrutina
directo.
59 Finé not OPEN : Hay que abrir el archivo. de error generada por ON ERROR.

66
67
i Tabla mensajes de error traducimos, tras RESUME un número de línea, la ejecución,
í
continúa en esta línea. Con la opción
i 1 NEXT without FOR : No hay sentencia FOR .
correspondien_te _a su sentencia NEXT. RESUMENEXT
2 Syntax error : Error sintáctico en la sentencia.
3 RETURN without GOSUB : No hay seritencia GOSUB
-correspondiente a su sen_tencia la ejecución se desplaza a la línea siguiente a la que produjo el

!
AETURN.
: No ha más datos para leer.
error.
4 Out of DATA
5 !!legal function ca!I : Especificación ilegal en una funcíón
o un mandato.
: Demasiados o demasiado pocos 10 ON ERROR GOTO 60
6 Overflow
datos. 20 INPUT A
1 7 Out of memory ; No hay más memoria. 30 B=SGIR<Al
8 Undefined Hne number : Se ha especificado un número de
línea no definido. 40 PRINT "sqr<al=";B
: Subindíce de matri_z fuera de! margen
9 Subscript out of range
definido.
50 END
10 Redimensioned array : La matriz de una sentencia D!M ya ha 60 IF ERR=5 ANO ERL=30THEN70
sido especificada.
: Se ha dividido por cero.
70 PRINT ''introduce un numero positivo''
11 Division by zero
: El mandato no puede utilizarse en 80 RESUME 20
1 12 ll!ega! direct

13 Type mismatch
modo directo.
: Error de deletreo de los datos.
: No queda' más área para variables Otra posibilidad es la de definir nuestros propios errores
14 Out of stríng space
alfanuméricas.
1-5 Stríng too long : Cadena demasiado larga.
mediante la instrucción ERROR (num error).
16 String formula too complex: Cadena cteniasiado complicada. Si hemos preparado previamente el programa mediante
17 Carl't CONTlNUE : No es posible continuar la ejecución
del programa.
una instrucción ON ERROR, cuando encuentre la sentencia
18 Undefined user functlon : Se ha utilizado una función no ERROR 71 se creará una interrupción por error, acumulándose
defí,nida mediante una sentencia DEF
FN.
en ERR el número de error que le hemos dado, (en este caso

l 19 Device 110 error : Error en el equipo conectado. 71), y en ERL el número de línea en que encontró la sentencia
: Discordaricia entre er programa del
20 Verify error
casete y el de la memoria.
ERROR 71, a continuación, ejecutará la rutina de error a la que
21 No RESUME : No hay sentencia RESUME le envía la sentencia ON ERROR GOTO. En ella, podemos
correspondiente a su sentencia ON
ERROR.
preguntar por el código 71, pues ya ha sido definido previa-
mente.
1:
h
1 22 RESUME without error : No hay sentencia ON ERROR
correspondiente a su sentencia Estamos pues ante un caso de error provocado por noso-
RESUME.
¡:
[ 23 Unprintable error : Ha ocurrido un error carente de tros, es decir basta decirle a la máquina ERROR24, para provo-
!j mensaje de error.
: Falta un operando.
car un error del tipo MISSING OPERAND (obtendremos el
24 Missing operand
25 Une buffer overflow : E! programa introducido sol,)repasa el mensaje y la interrupción). Lo mismo ocurre con todos los nú-
tamaño de la memoria intermedia. meros de error del 1 al69, que son reservados paraelBASIC, es

¡
~ : El contenido de la memoria o el texto
51 lnternal error
es anormal. decir, forzamos el error correspondiente al número introduci-
52 Bad file number ; Nombre de archivo incorrecto. do en el parámetro de ERROR. Para ello no es necesario que
: El archivo especificado ya esta
54 File already open
abierto. haya una declaración previa de ON ERROR. Si diéramos al pa-
¡' 55 Input past end : Ya se han leído los últimos datos. rámetro un valor mayor de 69 el mensaje que aparece es «UN-
: Especificación incorrecta de archivo.
¡. 56 Bad file name
57 Direct statement in file : Durante la carga de un archivo se ha PRINTABLE ERROR», pues este error no lo tiene definido el
t introducido un mandato en modo sistema, y es necesario tratarlo siempre mediante una subrutina
directo.
59 Finé not OPEN : Hay que abrir el archivo. de error generada por ON ERROR.

66
67
-- - - - - - - - - - - - - - - = - - - - - - - - - - - - - - - - - - - - - - - -

10 CLS
La forma más corriente de utilizar ERROR (numerror) es 20 ON ERROR GOTO 80
mediante una disyuntiva, del tipo IF (condición) THEN 30 PRINT:INPUT "INTRODUCIR UN NOMBRE ";N
ERROR (numerror) ELSE (etc) o bien IF (condición) THEN OM$
(sentencia) ELSE ERROR (n.º). 40 PRINT:PRINT NOM$
Es decir que si una determinada condición se cumple o no 50 PRINT:INPUT "SE CONTINUA CSI/NOJ";A$
se considera error con lo cual generamos una interrupción y la 60 IF A$<> "SI" ANO A$<> :'NO"THEN ERROR 2
envi~mos a rutina general de tratamiento de errores, que puede 00
servrr para todos los que consideremos que pueden producirse 70 IF A$=''SI'' THEN GOTO 30 ELSE END
en la ejecución de un. programa. En esta rutina preguntamos 80 REM RUTINA DE OESUIO
30 IF ERR=200 THEN PRINT:PRINT"INTROOUCI
por el valor de ERR y si es el (n. 0 ) número introducido en la sen- R SI O NO'':RESUME 50
tencia ERROR lo tratamos según nos interese. Si por el contra- 100 PRINT:PRINT "ERROR DESCONOCIDO"
rio, se produce una interrupción por error detectado por el sis-
tema, en la misma rutina anterior, podemos darle a éste un tra-
tamiento diferente. '
Existe, la posibilidad de que se produzca un error dentro de
una rutina de interrupción por error, en cuyo caso el error es
tratado normalmente por el sistema mediante el correspon- 10 CLS
~iente mensaje y el bloqueo en la ejecución. No hay, por tanto, 20 ON ERROR GOTO 70
nesgo de entrar en ui;i ~m.:;le infinito, que se formaría, si este se- 30 INPUT ''INTRODUCIR UN NUMERO DISTINTO
gundo error nos remltlera de nuevo esa misma rutina causante DE 0 ";N
del nuevo error. - 40 X=l/N
Con una sentencia del tipo ON ERROR GOTO suprimi- 50 PRINT:PRINT "INUERSO DE ";N:"=":X
mos el efecto de ON ERROR (numJínea), Si aparece durante la 60 PRINT:GOTO 30
70 REM RUTINA DE TRATAMIENTO DE ERRORES
ejecución _de una rutina de error. En este caso el programa pasa
80 IF ERR<>11 THEN END
a modo drrecto y ap~r:=fe e_l_c01;r_es_pon_.diente mensaje de error 30 PRINT :PRINT ''HAY QUE INTRODUCIR UN N
en la pantalla. La om1s1on del,numei:o de línea, por el contrario, UMERO DISTINTO DE 0 ''
sólo produce un error .del tipo «Undefined line number».
100 PRINT
Los ejemplos que damos a continuación clarificarán más lo 110 PRINT "Cod i so de error:" :ERR
visto hasta aquí. 120 PRINT
130 PRINT "Linea de error:":ERL
10 PRINT ''Teclear Cont~ol-STOP Para sali
r" 140 PRINT
20 ON ERROR GOTO 50 150 RESUME 30
30 LIST
40 GOTO 70
50 IF. ERR=13 THEN PRINT "Listado detenid
o"
60 PRINT''En Linea'';ERL::ERROR ERR
70
so
80
ON ERROR GOTO 0' no h a8 des v i o ,
a la normalidad
PRINT "SE ACABO"
re g re
¡
68
l 69
-- - - - - - - - - - - - - - - = - - - - - - - - - - - - - - - - - - - - - - - -

10 CLS
La forma más corriente de utilizar ERROR (numerror) es 20 ON ERROR GOTO 80
mediante una disyuntiva, del tipo IF (condición) THEN 30 PRINT:INPUT "INTRODUCIR UN NOMBRE ";N
ERROR (numerror) ELSE (etc) o bien IF (condición) THEN OM$
(sentencia) ELSE ERROR (n.º). 40 PRINT:PRINT NOM$
Es decir que si una determinada condición se cumple o no 50 PRINT:INPUT "SE CONTINUA CSI/NOJ";A$
se considera error con lo cual generamos una interrupción y la 60 IF A$<> "SI" ANO A$<> :'NO"THEN ERROR 2
envi~mos a rutina general de tratamiento de errores, que puede 00
servrr para todos los que consideremos que pueden producirse 70 IF A$=''SI'' THEN GOTO 30 ELSE END
en la ejecución de un. programa. En esta rutina preguntamos 80 REM RUTINA DE OESUIO
30 IF ERR=200 THEN PRINT:PRINT"INTROOUCI
por el valor de ERR y si es el (n. 0 ) número introducido en la sen- R SI O NO'':RESUME 50
tencia ERROR lo tratamos según nos interese. Si por el contra- 100 PRINT:PRINT "ERROR DESCONOCIDO"
rio, se produce una interrupción por error detectado por el sis-
tema, en la misma rutina anterior, podemos darle a éste un tra-
tamiento diferente. '
Existe, la posibilidad de que se produzca un error dentro de
una rutina de interrupción por error, en cuyo caso el error es
tratado normalmente por el sistema mediante el correspon- 10 CLS
~iente mensaje y el bloqueo en la ejecución. No hay, por tanto, 20 ON ERROR GOTO 70
nesgo de entrar en ui;i ~m.:;le infinito, que se formaría, si este se- 30 INPUT ''INTRODUCIR UN NUMERO DISTINTO
gundo error nos remltlera de nuevo esa misma rutina causante DE 0 ";N
del nuevo error. - 40 X=l/N
Con una sentencia del tipo ON ERROR GOTO suprimi- 50 PRINT:PRINT "INUERSO DE ";N:"=":X
mos el efecto de ON ERROR (numJínea), Si aparece durante la 60 PRINT:GOTO 30
70 REM RUTINA DE TRATAMIENTO DE ERRORES
ejecución _de una rutina de error. En este caso el programa pasa
80 IF ERR<>11 THEN END
a modo drrecto y ap~r:=fe e_l_c01;r_es_pon_.diente mensaje de error 30 PRINT :PRINT ''HAY QUE INTRODUCIR UN N
en la pantalla. La om1s1on del,numei:o de línea, por el contrario, UMERO DISTINTO DE 0 ''
sólo produce un error .del tipo «Undefined line number».
100 PRINT
Los ejemplos que damos a continuación clarificarán más lo 110 PRINT "Cod i so de error:" :ERR
visto hasta aquí. 120 PRINT
130 PRINT "Linea de error:":ERL
10 PRINT ''Teclear Cont~ol-STOP Para sali
r" 140 PRINT
20 ON ERROR GOTO 50 150 RESUME 30
30 LIST
40 GOTO 70
50 IF. ERR=13 THEN PRINT "Listado detenid
o"
60 PRINT''En Linea'';ERL::ERROR ERR
70
so
80
ON ERROR GOTO 0' no h a8 des v i o ,
a la normalidad
PRINT "SE ACABO"
re g re
¡
68
l 69
1 CAPITULO VID Es posible mezclar texto y gráficos abriendo el archivo d_e
1 pantalla mediante la sentencia OPEN «GRP»: AS# (numf1-
1 chero) y fosteriormente con PRINT# (numfichero), «texto»
escribir e texto deseado.
Además de las instrucciones gráficas (PSET, LINE, CIR-
CLE... ), los ordenadores MSX poseen u:ia po~e?tísima instru<;-
ción que utiliza el GML (Macro Lengua¡e Grafico). Nos referi-
mos a la instrucción DRAW que reune características de todas
las demás instrucciones gráficas y posibilita asimismo dibujar
en coordenadas absolutas. Es decir, que dando valores numéri-
cos fijos o relativos (cuando se trate de variables), permite ajus-
tar la escala de una figura controlando sus dimensiones y s01:ie-
terla a rotaciones diversas de izquierda a derecha y de arriba
abajo. ·
Con MSX también es posible la creación de SPRITES, es
decir, definir caracteres propios dándoles ~o_rma y dimensi?nes
Los gráficos en MSX para poderlos introducir dentro de los graf1cos y crear aruma-
ción.
Una de las características en que más hincapié hacen los fa- Todos los comandos gráficos se refieren a una posición del
bricantes de este estándar es su gran versatilidad gráfica. Todos «cursor gráfico» en la pantalla. La c?ordenada hor12ont~l (abs-
los MSX van equipados con un procesador de vídeo (VDP) de cisa) siempre debe estar comprendida entre O y 255, mientras
Texas Instruments -TMS-9924A-, que dispone de una capaci- que la coordenada vertical (ordenada) debe estarlo entre O y
dad propia de 16 K y funciona básicamente en cuatro modos, 191. El punto 0,0 (punto de origen) esta situado en la esquina
que en BASIC corresponden a SCREEN O, 1, 2 y 3. Los modos superior izquierda de la_Pantalla ..
O y 1 son de texto, mientras que el 2 y 3 son gráficos y por los Por lo tanto, la esquma superior derecha es el punto 255,0;
cuales podemos acceder a todos los puntos de la pantalla me- la inferior izquierda el 0,191 y la inferior derecha el 255,191.
diante instrucciones especiales.
En Screen 2 hay 256 pixels (puntos) por 192 líneas a los que 0,0 255,0
se puede acceder individualmente. SCREEN 3 es de 256X 192
puntos, pero están agrupados en bloques de 4X4 es decir,
64X48 blogues de puntos. La selección de modo gráfico tan
sólo es posible en modo diferido. Si se trabaja en modo directo,
tras un breve destello de la pantalla, ésta se borra y vuelve al
modo de texto.
La instrucción COLOR en modo gráfico no modifica ins-
tantáneamente el contenido de la pantalla, sino el color de es-
critura para las instrucciones gráficas. Por lo tanto, parece posi-
ble seleccionar en modo gráfico el color para cada uno de los
puntos de la pantalla, pero en realidad esto sólo pod_emos ha-
cerlo en baja resolución ya que en SCREEN 3 cada pixel es un 0,191 255,Í91 . •
número de color de O a 15. . -- ; ::

70
1 CAPITULO VID Es posible mezclar texto y gráficos abriendo el archivo d_e
1 pantalla mediante la sentencia OPEN «GRP»: AS# (numf1-
1 chero) y fosteriormente con PRINT# (numfichero), «texto»
escribir e texto deseado.
Además de las instrucciones gráficas (PSET, LINE, CIR-
CLE... ), los ordenadores MSX poseen u:ia po~e?tísima instru<;-
ción que utiliza el GML (Macro Lengua¡e Grafico). Nos referi-
mos a la instrucción DRAW que reune características de todas
las demás instrucciones gráficas y posibilita asimismo dibujar
en coordenadas absolutas. Es decir, que dando valores numéri-
cos fijos o relativos (cuando se trate de variables), permite ajus-
tar la escala de una figura controlando sus dimensiones y s01:ie-
terla a rotaciones diversas de izquierda a derecha y de arriba
abajo. ·
Con MSX también es posible la creación de SPRITES, es
decir, definir caracteres propios dándoles ~o_rma y dimensi?nes
Los gráficos en MSX para poderlos introducir dentro de los graf1cos y crear aruma-
ción.
Una de las características en que más hincapié hacen los fa- Todos los comandos gráficos se refieren a una posición del
bricantes de este estándar es su gran versatilidad gráfica. Todos «cursor gráfico» en la pantalla. La c?ordenada hor12ont~l (abs-
los MSX van equipados con un procesador de vídeo (VDP) de cisa) siempre debe estar comprendida entre O y 255, mientras
Texas Instruments -TMS-9924A-, que dispone de una capaci- que la coordenada vertical (ordenada) debe estarlo entre O y
dad propia de 16 K y funciona básicamente en cuatro modos, 191. El punto 0,0 (punto de origen) esta situado en la esquina
que en BASIC corresponden a SCREEN O, 1, 2 y 3. Los modos superior izquierda de la_Pantalla ..
O y 1 son de texto, mientras que el 2 y 3 son gráficos y por los Por lo tanto, la esquma superior derecha es el punto 255,0;
cuales podemos acceder a todos los puntos de la pantalla me- la inferior izquierda el 0,191 y la inferior derecha el 255,191.
diante instrucciones especiales.
En Screen 2 hay 256 pixels (puntos) por 192 líneas a los que 0,0 255,0
se puede acceder individualmente. SCREEN 3 es de 256X 192
puntos, pero están agrupados en bloques de 4X4 es decir,
64X48 blogues de puntos. La selección de modo gráfico tan
sólo es posible en modo diferido. Si se trabaja en modo directo,
tras un breve destello de la pantalla, ésta se borra y vuelve al
modo de texto.
La instrucción COLOR en modo gráfico no modifica ins-
tantáneamente el contenido de la pantalla, sino el color de es-
critura para las instrucciones gráficas. Por lo tanto, parece posi-
ble seleccionar en modo gráfico el color para cada uno de los
puntos de la pantalla, pero en realidad esto sólo pod_emos ha-
cerlo en baja resolución ya que en SCREEN 3 cada pixel es un 0,191 255,Í91 . •
número de color de O a 15. . -- ; ::

70
----------------------------------------~~

Hemos comentado anteriormente que cuando se seleccione Instrucciones gráficas


un modo gráfico debe hacerse un programa, puesto que en el
caso de q_ue se haga en modo directo simplemente se producirá PSET/PRESET -
un destello en pantalla y se regresará al modo de texto. Para evi- SINTAXIS: PSET (o PRESET) (STEP) (X,Y) (COLOR)
tar esto, le sugerimos cuatro opciones:
Sirven respectivamente (si no se especifica COLOR) para
l.- 10SCREEN2 (o3) 2.- 10SCREEN2(o3) situar o borrar un punto en las coordenadas X, Y de la pantalla.
-PROGRAMA- -PROGRAMA- Si no se especifica el valor de STEP el punto se situará en las
lOOOGOTO 1000 1000z$ =INPUT$ (1) coordenadas absolutas; si se especifican las coordenadas me-
diante variables, y se les asigna un valor STEP, X e Y servirán
3.- 10SCREEN2 (o3) 4.- 10 SCREEN2 (o3) para definir un desplazamiento sobre las coordenadas.
-PROGRAMA- -PROGRAMA- Las especificaciones de COLOR, PSET y PRESET cum-
1000IFINKEY$= 1000 IFINKEY$<> "X" plen la misma función es decir, ambas dibujan un punto, si-
""THEN 1000 THENlOOO tuándose el cursor en las coordenadas del punto.

La primera de ellas es la llamada «bucle infinito». Para de- EJEMPLOS:


tener el programa y volver a modo de texto debemos pulsar
conjuntamente CTRL y STOP. La segunda y la tercera son 10SCREEN3: FORA=l TO 100 10SCREEN3
prácticamente la misma. En el momento en que pulsemos cual- 20 PSET (A,A) 20FORA=l TO 100STEP4
quier tecla, se interrumpirá el rrograma y volveremos al modo 30 PRESET (A,A): NEXT 30PSETSTEP(A,A), 15
de texto, no exactamente en e ad:o sino cuando haya finaliza- 40 Z$= INPUT$( 1) 40 PRESET (A,AJ, 1: NEXT
do la ejecución. Esto se debé a que la máquina no realiza la ins- 50 Z$= INPUT$(1)
pección del teclado hasta que ha realizado el programa. La
cuarta opc~Ó!1 no detiene el pro¡¡¡rama a no ser que se pulse tina POINT
tecla especifica (en el caso del e¡emplo la «.X»). SINTAXIS: POINT (X,Y)
Cuando trabajemos en SCREEN 3 debemos tener en cuen- La función POINT nos da el color del punto en las coorde-
ta que las instrucciones gráficas que utilicemos efectúan una nadas X, Y. Si las coordenadas quedan fuera del área de visua-
aproximación sobre las coordenadas dadas. Para saber cuales
son las correspondencias entre los puntos de SCREEN 2 y
lización obtendremos -1. ¡/
SCREEN 3 a la hora de efectuar correcciones entre uno y otro LINE li
modo, debemos tener en cuenta lo siguiente: SINTAXIS: LINE [(STEP) (Xl,Yl)]-(STEP) (X2,Y2), l
!._i

Todos los puntos cuyas abscisas estén comprendidas entre (COLOR), (B o BF) - r,
O + X y 3 + X en SCREEN 2 corresponden a la abscisa O + X
enSCREEN 3.
Todos los puntos cuyas ordenadas estén comprendidas en-
tre O+ Y y 3+ Y en SCREEN 2 corresponden a la ordenada
LINE es una de las sentencias más utilizadas para dibujar.
Tiene una gran versatilidad ya que puede trazar líneas, hacer fi,
guras llenas y perfiles. Si no se especifica un color, se toma el co-
i!
1
ij i
1

ir
O+ Y en SCREEN 3. lor por defecto. La opción B dibuja un contorno cuadrad() yBF
Por lo tanto, X debe ser un entero comprendido entre O y un cuadrado lleno. Las coordenadas del punto pueden ser omi-
250 divisible por 4 e Y también debe ser un entero, comprendi- tidas (no el.guión) en cuyo caso se traza una línea entre la posi 0

do entre Oy 188; divisible por 4. ción del último punto definido y el segundo punto . .Si utiliza-

72
----------------------------------------~~

Hemos comentado anteriormente que cuando se seleccione Instrucciones gráficas


un modo gráfico debe hacerse un programa, puesto que en el
caso de q_ue se haga en modo directo simplemente se producirá PSET/PRESET -
un destello en pantalla y se regresará al modo de texto. Para evi- SINTAXIS: PSET (o PRESET) (STEP) (X,Y) (COLOR)
tar esto, le sugerimos cuatro opciones:
Sirven respectivamente (si no se especifica COLOR) para
l.- 10SCREEN2 (o3) 2.- 10SCREEN2(o3) situar o borrar un punto en las coordenadas X, Y de la pantalla.
-PROGRAMA- -PROGRAMA- Si no se especifica el valor de STEP el punto se situará en las
lOOOGOTO 1000 1000z$ =INPUT$ (1) coordenadas absolutas; si se especifican las coordenadas me-
diante variables, y se les asigna un valor STEP, X e Y servirán
3.- 10SCREEN2 (o3) 4.- 10 SCREEN2 (o3) para definir un desplazamiento sobre las coordenadas.
-PROGRAMA- -PROGRAMA- Las especificaciones de COLOR, PSET y PRESET cum-
1000IFINKEY$= 1000 IFINKEY$<> "X" plen la misma función es decir, ambas dibujan un punto, si-
""THEN 1000 THENlOOO tuándose el cursor en las coordenadas del punto.

La primera de ellas es la llamada «bucle infinito». Para de- EJEMPLOS:


tener el programa y volver a modo de texto debemos pulsar
conjuntamente CTRL y STOP. La segunda y la tercera son 10SCREEN3: FORA=l TO 100 10SCREEN3
prácticamente la misma. En el momento en que pulsemos cual- 20 PSET (A,A) 20FORA=l TO 100STEP4
quier tecla, se interrumpirá el rrograma y volveremos al modo 30 PRESET (A,A): NEXT 30PSETSTEP(A,A), 15
de texto, no exactamente en e ad:o sino cuando haya finaliza- 40 Z$= INPUT$( 1) 40 PRESET (A,AJ, 1: NEXT
do la ejecución. Esto se debé a que la máquina no realiza la ins- 50 Z$= INPUT$(1)
pección del teclado hasta que ha realizado el programa. La
cuarta opc~Ó!1 no detiene el pro¡¡¡rama a no ser que se pulse tina POINT
tecla especifica (en el caso del e¡emplo la «.X»). SINTAXIS: POINT (X,Y)
Cuando trabajemos en SCREEN 3 debemos tener en cuen- La función POINT nos da el color del punto en las coorde-
ta que las instrucciones gráficas que utilicemos efectúan una nadas X, Y. Si las coordenadas quedan fuera del área de visua-
aproximación sobre las coordenadas dadas. Para saber cuales
son las correspondencias entre los puntos de SCREEN 2 y
lización obtendremos -1. ¡/
SCREEN 3 a la hora de efectuar correcciones entre uno y otro LINE li
modo, debemos tener en cuenta lo siguiente: SINTAXIS: LINE [(STEP) (Xl,Yl)]-(STEP) (X2,Y2), l
!._i

Todos los puntos cuyas abscisas estén comprendidas entre (COLOR), (B o BF) - r,
O + X y 3 + X en SCREEN 2 corresponden a la abscisa O + X
enSCREEN 3.
Todos los puntos cuyas ordenadas estén comprendidas en-
tre O+ Y y 3+ Y en SCREEN 2 corresponden a la ordenada
LINE es una de las sentencias más utilizadas para dibujar.
Tiene una gran versatilidad ya que puede trazar líneas, hacer fi,
guras llenas y perfiles. Si no se especifica un color, se toma el co-
i!
1
ij i
1

ir
O+ Y en SCREEN 3. lor por defecto. La opción B dibuja un contorno cuadrad() yBF
Por lo tanto, X debe ser un entero comprendido entre O y un cuadrado lleno. Las coordenadas del punto pueden ser omi-
250 divisible por 4 e Y también debe ser un entero, comprendi- tidas (no el.guión) en cuyo caso se traza una línea entre la posi 0

do entre Oy 188; divisible por 4. ción del último punto definido y el segundo punto . .Si utiliza-

72
mos coordenadas relativas e incrementos mediante STEP po- no es quizá la mejor opción para rellenar un área. Con mucho,
demos (entre otras cosas) dibujar haciendo referencia a coorde- la opción BF es más rápida aunque, bien es verdad que es más
nadas absolutas. Esto permite presentar un dibujo en diferen- complicada de utilizar.
tes posiciones o bien, a distintas escalas. Es posible omitir una o
varias opciones, pero se deben sustituir las opciones no utiliza-
das por comas en el caso de que se desee utilizar una opción 1 'Pf.\IN-f
posterior. 10 SCF.:EEN 2: COLOF.: l , 14 , 12
20 LINE<40,40l-1191Zl,1001
30 .LINE 160, 1701 - ( i 90, 100)
l .' LINE 40 LINEC40,41Zll-160,170l
10 SCREEN 2:DEFINT A-Z:COLOR1!15,11 50 PAINT 1100,100l,l
20 FOF.: A= l TO 255STEP 19: FOF.:B= 1 TO l 9 lSTEP 11 1!110 X$= l NPUT$ ( 1 l
30 FOR C::: A/2TCIBS-rEF'7: Fo¡:;;: D=B*2 -ro is-rEF' 38
40 LINESTEPIA,Cl-<D,BI ,13
50 LINESTEPCD,Cl-<B,A> ,12 CIRCLE
60 LINESTEP<C,A>-<B,DI 1 11 SINTAXIS: CIRCLE (STEP) (X,Y), RADIO (COLOR)
7© LINE STEPCA,C>-CB,D>,10 (ANGULO INICIO) (ANGULO FIN), ASPECTO
8(1) NEXT
90 NEXT CIRCLE representa el único medio de obtener en pantalla
11Zl0 NEXT formas redondeadas sin utilizar funciones trigonométricas, que
110 NEx-r son por otro lado más lentas.
120 Z$=INPUT$(1) Traza un círculo, arco o elipse cuyo centro se sitúa en· las
coordenadas absolutas X,Y o bien, caso de especificar STEP
PAINT las coordenadas sirven para definir un desplazamiento sobre el
SINTAXIS: PAINT (STEP) (X,Y), (COLOR), (COLOR del eje relativo a la posición actual del «cursor gráfico». Los ángu-
borde) los inicial y final pueden omitirse. Caso de especificarse, permi-
ten dibujar un segmento de la circunferencia o elipse.
P AINT rellena una zona de la pantalla o una figura con el Los ángulos son tomados en radianes y representan valores
color elegido o por defecto en caso de no emplear la opción entre Oy 2*Piradianes. El aspecto sirve para definir la relación
COLOR El color del borde se utiliza en SCREEN3 si se Clesea entre los radios horizontal y vertical de una elipse. La relación
bordear el dibujo, pero en SCREEN2 no se usa ya que automá- se divide por la altura para obtener la anchura, convirtiéndose
ticamente toma el mismo valor que COLOR y por lo tanto pue- en radio la menor de estas magnitudes. Si no se especifica, la
de suprimirse. Las coordenadas (X,Y) deben estar dentro de la máquina toma el valor por defecto.
figura y/o de la pantalla, no como en otros comandos gráficos.
Tan sólo actúa en sentido horizontal y vertical, y si no se obser- 10 CLS:PF.:INT"DIBUJO DE UN Al":CO
va escrupulosamente que la figura a rellenar este absolutamente 20 F'f~: r N-r 11
F'ULSA Ut4A TECL161 11
cerrada nos encontramos con la desagradable sorpresa de que 30 Z$=INF'UT$Cll
P AINT huye por la abertura y nos borra la pantalla. STEP sirve 40 SCREEN 2:COLOR 1,14,12
para definir un desplazamiento por el eje de coordenadas rela- 50 CIRCLE!l00,1001 ,40,8 1 1,6,l
tivo a la posición actual del «Cursor gráfico». De todos modos, 60 Z $= I t-~F·UT$ ( 1)

74
t 75
mos coordenadas relativas e incrementos mediante STEP po- no es quizá la mejor opción para rellenar un área. Con mucho,
demos (entre otras cosas) dibujar haciendo referencia a coorde- la opción BF es más rápida aunque, bien es verdad que es más
nadas absolutas. Esto permite presentar un dibujo en diferen- complicada de utilizar.
tes posiciones o bien, a distintas escalas. Es posible omitir una o
varias opciones, pero se deben sustituir las opciones no utiliza-
das por comas en el caso de que se desee utilizar una opción 1 'Pf.\IN-f
posterior. 10 SCF.:EEN 2: COLOF.: l , 14 , 12
20 LINE<40,40l-1191Zl,1001
30 .LINE 160, 1701 - ( i 90, 100)
l .' LINE 40 LINEC40,41Zll-160,170l
10 SCREEN 2:DEFINT A-Z:COLOR1!15,11 50 PAINT 1100,100l,l
20 FOF.: A= l TO 255STEP 19: FOF.:B= 1 TO l 9 lSTEP 11 1!110 X$= l NPUT$ ( 1 l
30 FOR C::: A/2TCIBS-rEF'7: Fo¡:;;: D=B*2 -ro is-rEF' 38
40 LINESTEPIA,Cl-<D,BI ,13
50 LINESTEPCD,Cl-<B,A> ,12 CIRCLE
60 LINESTEP<C,A>-<B,DI 1 11 SINTAXIS: CIRCLE (STEP) (X,Y), RADIO (COLOR)
7© LINE STEPCA,C>-CB,D>,10 (ANGULO INICIO) (ANGULO FIN), ASPECTO
8(1) NEXT
90 NEXT CIRCLE representa el único medio de obtener en pantalla
11Zl0 NEXT formas redondeadas sin utilizar funciones trigonométricas, que
110 NEx-r son por otro lado más lentas.
120 Z$=INPUT$(1) Traza un círculo, arco o elipse cuyo centro se sitúa en· las
coordenadas absolutas X,Y o bien, caso de especificar STEP
PAINT las coordenadas sirven para definir un desplazamiento sobre el
SINTAXIS: PAINT (STEP) (X,Y), (COLOR), (COLOR del eje relativo a la posición actual del «cursor gráfico». Los ángu-
borde) los inicial y final pueden omitirse. Caso de especificarse, permi-
ten dibujar un segmento de la circunferencia o elipse.
P AINT rellena una zona de la pantalla o una figura con el Los ángulos son tomados en radianes y representan valores
color elegido o por defecto en caso de no emplear la opción entre Oy 2*Piradianes. El aspecto sirve para definir la relación
COLOR El color del borde se utiliza en SCREEN3 si se Clesea entre los radios horizontal y vertical de una elipse. La relación
bordear el dibujo, pero en SCREEN2 no se usa ya que automá- se divide por la altura para obtener la anchura, convirtiéndose
ticamente toma el mismo valor que COLOR y por lo tanto pue- en radio la menor de estas magnitudes. Si no se especifica, la
de suprimirse. Las coordenadas (X,Y) deben estar dentro de la máquina toma el valor por defecto.
figura y/o de la pantalla, no como en otros comandos gráficos.
Tan sólo actúa en sentido horizontal y vertical, y si no se obser- 10 CLS:PF.:INT"DIBUJO DE UN Al":CO
va escrupulosamente que la figura a rellenar este absolutamente 20 F'f~: r N-r 11
F'ULSA Ut4A TECL161 11
cerrada nos encontramos con la desagradable sorpresa de que 30 Z$=INF'UT$Cll
P AINT huye por la abertura y nos borra la pantalla. STEP sirve 40 SCREEN 2:COLOR 1,14,12
para definir un desplazamiento por el eje de coordenadas rela- 50 CIRCLE!l00,1001 ,40,8 1 1,6,l
tivo a la posición actual del «Cursor gráfico». De todos modos, 60 Z $= I t-~F·UT$ ( 1)

74
t 75
llZl SCF:EÉN 2: COLOF: 1, 14, 12
15 FOR X= 31ZlT0191ZJ STEF'12 DRAW
21ZJ CI~CLEIX,1©0J,21Zl,S,,,1.2 SINTAXIS: DRAW (cadena alfanumérica
25 NEXT
31Zl :Z:$= I NF'UT$ ( 1) Nos encontramos no ante un comandó
simo macrolenguaje gráfico (GML). El di
pende de una serie de comandos residen\:e~··cir-=·-·-­
caracteres. Al ser posible trabajar con variables dentro de"f:i-ca-
10 SCREEN 2:COLOR 11,l,l dena, podemos variar las escalas, memorizar formas y obtener
20 X= 128:Y=36:R=45:C=15:S=0:E=6.2:A=.4 efectos de Zoom. Cada comando esta formado por una letra ha-
30 PI=ATNC1J*4:Rl=R bitualmente seguida por un parámetro. Podemos dividir los co-
40 FORT#=l T0360 STEP 10 mandos que usa DRAW en dos grupos:
50 W=2*PI*T#/360 -De uso general
60 X=130+Rl*COSCWJ:Y~35+Rl*SINCWJ A(n) determina el ángulo de giro para cada dirección especi-
70 GOSUB 100 ficada. El valor (n) debe estar entre O y 3, correspondiendo O a
80 NEXT T# la orientación habitual, la un giro de 90° en sentido inverso a
30 GOTO 30 las manecillas del reloj, 2 a un giro de 180° y 3 a uno de 270°.
100 CIRCLE CX,YJ,R,C,S,E,A:RETURN Por defecto, se toma O. e
~

C(n) determina el color del trazo. ·si no se especifica se toma


el valor por defecto y afecta a todo aquello que se dibuje sin el
prefijo «B».
S(n) Factor de escala. El argumento (n) puede ir de 1 a 255.
10 'graficos sinusoidales
20 SCREEN2:CLS Este factor se obtiene dividiendo el argumento por 4; es decir,
30 B=RND<l>:B~B*15+1
si n = 2 la escala será 2/4 y significará la división por 2 de todas
40 PI!=4*ATN(l) las longitudes.
50 A=RND<l>:A=A*355
X( n) Este comando sirve, (al iguál que en PLAY, como vere-
60 W=RND<l>:W=W*100+10
mos cuando traemos del MML) para ejecutar una «subcadena»
70 Al=-B*PI!
dentro de una cadena. Debe finalizar preceptivamente con
80 A2=B*PI! punto y coma(;).
90 C=<A2-Al)/A
100 G=2551<A2-Al) -De uso concreto
110 FOR L=Al TO A2 STEP C
120 X=L*G:Y=W*SINIL) Son estos los comandos de movimiento cuya misión es ge-
130 Xl=l30+X:Y1=90+Y nerar un desplazamiento del «cursor gráfico» con trazado de
140 L I NE 1Xl , Y1 l - 1 X1 , X1 J , B una línea a partir de su última posición,esf ecificada. Tras la eje,
150 NEXT L cución de cada orden las coordenadas de cursor se sitúan en el
160 GOTO 30
último punto dibujado, convirtiéndose esta posición en la nue-
va posición del cursor. .
U(n). Genera un desplazamiento hacia arriba.
D(n). Genera un desplazamiento hacia abajo.
L(n). Genera un desplazamiento hacia la izquierda.
76
llZl SCF:EÉN 2: COLOF: 1, 14, 12
15 FOR X= 31ZlT0191ZJ STEF'12 DRAW
21ZJ CI~CLEIX,1©0J,21Zl,S,,,1.2 SINTAXIS: DRAW (cadena alfanumérica
25 NEXT
31Zl :Z:$= I NF'UT$ ( 1) Nos encontramos no ante un comandó
simo macrolenguaje gráfico (GML). El di
pende de una serie de comandos residen\:e~··cir-=·-·-­
caracteres. Al ser posible trabajar con variables dentro de"f:i-ca-
10 SCREEN 2:COLOR 11,l,l dena, podemos variar las escalas, memorizar formas y obtener
20 X= 128:Y=36:R=45:C=15:S=0:E=6.2:A=.4 efectos de Zoom. Cada comando esta formado por una letra ha-
30 PI=ATNC1J*4:Rl=R bitualmente seguida por un parámetro. Podemos dividir los co-
40 FORT#=l T0360 STEP 10 mandos que usa DRAW en dos grupos:
50 W=2*PI*T#/360 -De uso general
60 X=130+Rl*COSCWJ:Y~35+Rl*SINCWJ A(n) determina el ángulo de giro para cada dirección especi-
70 GOSUB 100 ficada. El valor (n) debe estar entre O y 3, correspondiendo O a
80 NEXT T# la orientación habitual, la un giro de 90° en sentido inverso a
30 GOTO 30 las manecillas del reloj, 2 a un giro de 180° y 3 a uno de 270°.
100 CIRCLE CX,YJ,R,C,S,E,A:RETURN Por defecto, se toma O. e
~

C(n) determina el color del trazo. ·si no se especifica se toma


el valor por defecto y afecta a todo aquello que se dibuje sin el
prefijo «B».
S(n) Factor de escala. El argumento (n) puede ir de 1 a 255.
10 'graficos sinusoidales
20 SCREEN2:CLS Este factor se obtiene dividiendo el argumento por 4; es decir,
30 B=RND<l>:B~B*15+1
si n = 2 la escala será 2/4 y significará la división por 2 de todas
40 PI!=4*ATN(l) las longitudes.
50 A=RND<l>:A=A*355
X( n) Este comando sirve, (al iguál que en PLAY, como vere-
60 W=RND<l>:W=W*100+10
mos cuando traemos del MML) para ejecutar una «subcadena»
70 Al=-B*PI!
dentro de una cadena. Debe finalizar preceptivamente con
80 A2=B*PI! punto y coma(;).
90 C=<A2-Al)/A
100 G=2551<A2-Al) -De uso concreto
110 FOR L=Al TO A2 STEP C
120 X=L*G:Y=W*SINIL) Son estos los comandos de movimiento cuya misión es ge-
130 Xl=l30+X:Y1=90+Y nerar un desplazamiento del «cursor gráfico» con trazado de
140 L I NE 1Xl , Y1 l - 1 X1 , X1 J , B una línea a partir de su última posición,esf ecificada. Tras la eje,
150 NEXT L cución de cada orden las coordenadas de cursor se sitúan en el
160 GOTO 30
último punto dibujado, convirtiéndose esta posición en la nue-
va posición del cursor. .
U(n). Genera un desplazamiento hacia arriba.
D(n). Genera un desplazamiento hacia abajo.
L(n). Genera un desplazamiento hacia la izquierda.
76
R(n). Genera un desplazamiento hacia la derecha. 10 REM TERCER EJEMPLO DE DRAW
E(n). Genera un desplazamiento en diagonal hacia arriba a la 20 REM ZOOM
derecha (45). 30 SCREEN 2
F(n). Genera un desplazamiento en diagonal hacia abajo a la 40 PSET C120,100J
derecha (315). 50 FOR W=lO TO 50 STEP 10
G(n). Genera un desplazamiento en diagonal hacia abajo a la iz- 60 G$=''AOC15S=W;U6R401L3D4R2UlllUlR203L4
quierda (225). "
H(n). Genera un desplazamiento en diagonal hacia arriba a la 70 DRAW G$
izquierda (13 5). 80 NEXT
También es pos!ble desplazar el cursor a un punto concreto 90 Z$=INPUT $ ClJ
de la pantalla mediante el comando M(X,Y) que sirve tanto DRAW cuar-to
para coordenadas absolutas como relativas. Para usar estas últi- 10 'puntos car-dinales
mas se debe preceder los argumentos de X e Y de los signos +o 20 SCREEN 2
- en cuyo caso, el cursor se desplaza un número de puntos de- 30 DRAW ''bm120,100''
terminados por los valores de X e Y y no a las coordenadas de 40 DRAW "nu10nel0nr-10nf10nd10ng10nl10nhl0"
X,Y.
50 Z$=INPUT$(1)
Asimismo existen dos prefijos que deben preceder cual-
quier com:ind? d~ movimiento. Se trata de B(n); que desplaza
el cursor sm dibujar y de N (n) que desplaza el cursor dibuja y DRAW cinco
vuelve a la posición previa. ' 10 ·puntos car-dinales zoom
20 DEFINT A-Z
30 SCREEN 2
10 REM PR I,MER EJEMPLO DE DRAW 40 DRAW "bm12QJ,l00"
20 SCREEN 2
30 PSET C100,50) 50 FOR Z=l TO 40 STEP 5
414 G$="c 15s30u6r4d 113d4r2u 11lu1 r2d314" 60 DRAW "s=z; nu 10ne 10nr-10n f 10nd 10ng 10n l 10n h 10"
50 Gl$=''c15s30u6r4dll3d4r2ulllulr2d314'' 70 NEXT
60 DRAW G$ 80 Z$=INPUT$(1J
70 PSET Cl20.100J
80 DRAW Gl$
90 2$=INPUT$C1J Sprites
l0 REM SEGUNDO EJEMPLO DE DRAW El BASIC MSX dispone de un grupo de cuatro instruccio-
20 REM CAMBIO DE ORIENTACION nes destinadas a la creación y control de caracteres gráficos pro-
30. SCREEN 2 gramables (SPRITES). Cambiando _un solo byte de un ?Pru;TE
40 PSET C120,100) podemos modificar su color o su diseño. Se pueden visualizar
50 FOR W=0 TO 3 hasta 32 SPRITES, distinguibles entre ellos por su color, ~iseño
60 G$="A=W;Cl5S30U6R4DlL3D4R2UlL1UlR2D3L y coordenadas y además por su tamaño (norm~ o ampli~do al
4"
.70 DRAW G$ doble) y su longitud (8 bytes cuando sean matrices de .8"8, 32.
80 NEXT bytes cuando sean de 16*16). Las coordenadas y lalongituddf-
90 Z$=INPUT $Cl) ben ser previamente definidas en SCREEN (excepto en
SCREEN O, donde no funcionan los SPRITES).
78
R(n). Genera un desplazamiento hacia la derecha. 10 REM TERCER EJEMPLO DE DRAW
E(n). Genera un desplazamiento en diagonal hacia arriba a la 20 REM ZOOM
derecha (45). 30 SCREEN 2
F(n). Genera un desplazamiento en diagonal hacia abajo a la 40 PSET C120,100J
derecha (315). 50 FOR W=lO TO 50 STEP 10
G(n). Genera un desplazamiento en diagonal hacia abajo a la iz- 60 G$=''AOC15S=W;U6R401L3D4R2UlllUlR203L4
quierda (225). "
H(n). Genera un desplazamiento en diagonal hacia arriba a la 70 DRAW G$
izquierda (13 5). 80 NEXT
También es pos!ble desplazar el cursor a un punto concreto 90 Z$=INPUT $ ClJ
de la pantalla mediante el comando M(X,Y) que sirve tanto DRAW cuar-to
para coordenadas absolutas como relativas. Para usar estas últi- 10 'puntos car-dinales
mas se debe preceder los argumentos de X e Y de los signos +o 20 SCREEN 2
- en cuyo caso, el cursor se desplaza un número de puntos de- 30 DRAW ''bm120,100''
terminados por los valores de X e Y y no a las coordenadas de 40 DRAW "nu10nel0nr-10nf10nd10ng10nl10nhl0"
X,Y.
50 Z$=INPUT$(1)
Asimismo existen dos prefijos que deben preceder cual-
quier com:ind? d~ movimiento. Se trata de B(n); que desplaza
el cursor sm dibujar y de N (n) que desplaza el cursor dibuja y DRAW cinco
vuelve a la posición previa. ' 10 ·puntos car-dinales zoom
20 DEFINT A-Z
30 SCREEN 2
10 REM PR I,MER EJEMPLO DE DRAW 40 DRAW "bm12QJ,l00"
20 SCREEN 2
30 PSET C100,50) 50 FOR Z=l TO 40 STEP 5
414 G$="c 15s30u6r4d 113d4r2u 11lu1 r2d314" 60 DRAW "s=z; nu 10ne 10nr-10n f 10nd 10ng 10n l 10n h 10"
50 Gl$=''c15s30u6r4dll3d4r2ulllulr2d314'' 70 NEXT
60 DRAW G$ 80 Z$=INPUT$(1J
70 PSET Cl20.100J
80 DRAW Gl$
90 2$=INPUT$C1J Sprites
l0 REM SEGUNDO EJEMPLO DE DRAW El BASIC MSX dispone de un grupo de cuatro instruccio-
20 REM CAMBIO DE ORIENTACION nes destinadas a la creación y control de caracteres gráficos pro-
30. SCREEN 2 gramables (SPRITES). Cambiando _un solo byte de un ?Pru;TE
40 PSET C120,100) podemos modificar su color o su diseño. Se pueden visualizar
50 FOR W=0 TO 3 hasta 32 SPRITES, distinguibles entre ellos por su color, ~iseño
60 G$="A=W;Cl5S30U6R4DlL3D4R2UlL1UlR2D3L y coordenadas y además por su tamaño (norm~ o ampli~do al
4"
.70 DRAW G$ doble) y su longitud (8 bytes cuando sean matrices de .8"8, 32.
80 NEXT bytes cuando sean de 16*16). Las coordenadas y lalongituddf-
90 Z$=INPUT $Cl) ben ser previamente definidas en SCREEN (excepto en
SCREEN O, donde no funcionan los SPRITES).
78
Hemos dicho que una de las ventajas de MSX es que permi- 10 screen 2,0
te usar hasta 32 SPRITES. Esto quiere decir que hay hasta 32 20 S$=""
planos posibles de visualización, pero en cada uno de ellos sólo 30 for c=O to 8: read c$
se puede incluir un SPRITE. El SPRITE O corresponde al pri- 40 S$=S+chr$(val("&B"+c$))
mer plano de visualización; es decir, es la figura que tiene prio- 50 nextc
ridad sobre cualquier otra que aparezca detrás suyo. 60 SPRITE$(0)=c$
En SCREEN 1, 2 y 3 se pueden definir SPRITES mediante 70end
la variable de cadena especial SPRITE$ y desplazarlos por toda 80 data 00111100
la pantalla con la orden PUT SPRITE, que borra el antiguo em- 90 data 01000010
plazamiento de la figura dibujándola en el nuevo emplazamien- 100 data 01100110
to asignado. El moao más fácil de dibujar un SPRITE es me- 110 data 00111100
diante líneas DATA de números binarios (p.e., DATA& 120 data 01100110
BOOllllOO). Si desarrollamos los SPRITES mediant<:'. este sis- 130 data 00011000
tema de DATAS veremos en el listado la forma del SPRITE, y a 140 data 00100100
los bits que estén en 1 (los encendidos) nos darán la forma y los 150 data 11100111
que estén a O (los apagados) no se visualizarán. Un sistema muy
útil para diseñar SPRITES consiste en dibujar en un papel una Un SPRITE de 16*16 no es otra cosa que 4 SPRITES de
matriz de tantas filas y columnas como deseemos que tenga el 8*8 situados uno junto a otro formando un cuadrado y defini-
SPRITE y rellenar los espacios que nos interesen para obtener dos de manera idéntica:
la forma deseada. Así podremos codificarlo en binario de una
manera muy simple:

S$ (1) S$ (3)

1 2 3 4 5 6 7 8
X X =&B01110100 S$ (2) S$ (4)
X X
o 1 1 1 o 1 o o
Una vez definidos cada uno de los SPRITES dentro de ca-
denas de caracteres, asignaremos su suma a SPRITE$ de lama-
De todos modos, esta manera de crear SPRITES mediante nera siguiente:
DATAS en binario no es la más adecuada. Si queremos ahorrar SPRITE$(1)=S$(1)+S$(2)+S$(3)+S$(4)
memoria lo más práctico resulta traducir el número binario a La instrucción que nos permitirá mover los SPRITES por
decimal mediante ?&B ... ( ?&B01110100 nos dará 116). Para toda la pantalla es PUT SPRITE, y su sintaxis es:
seleccionar el tamaño de los SPRITES utilizaremos la orden PUT SPRITE numplano(, (STEP), (X,Y))(,COLOR)
SCREEN (1, 2 o 3), (O si son de 8X8 sin ampliar; 1 si son am- (,numSPRITE)
pliados; 2 si son de 16X 16 sin ampliar, 3 si son de 16x 16 am- Para situar un SPRITE en la pantalla en las coordenadas
pliados). X Y previamente debe estar definido mediante SPRITE$ ..La
, '
80 81
Hemos dicho que una de las ventajas de MSX es que permi- 10 screen 2,0
te usar hasta 32 SPRITES. Esto quiere decir que hay hasta 32 20 S$=""
planos posibles de visualización, pero en cada uno de ellos sólo 30 for c=O to 8: read c$
se puede incluir un SPRITE. El SPRITE O corresponde al pri- 40 S$=S+chr$(val("&B"+c$))
mer plano de visualización; es decir, es la figura que tiene prio- 50 nextc
ridad sobre cualquier otra que aparezca detrás suyo. 60 SPRITE$(0)=c$
En SCREEN 1, 2 y 3 se pueden definir SPRITES mediante 70end
la variable de cadena especial SPRITE$ y desplazarlos por toda 80 data 00111100
la pantalla con la orden PUT SPRITE, que borra el antiguo em- 90 data 01000010
plazamiento de la figura dibujándola en el nuevo emplazamien- 100 data 01100110
to asignado. El moao más fácil de dibujar un SPRITE es me- 110 data 00111100
diante líneas DATA de números binarios (p.e., DATA& 120 data 01100110
BOOllllOO). Si desarrollamos los SPRITES mediant<:'. este sis- 130 data 00011000
tema de DATAS veremos en el listado la forma del SPRITE, y a 140 data 00100100
los bits que estén en 1 (los encendidos) nos darán la forma y los 150 data 11100111
que estén a O (los apagados) no se visualizarán. Un sistema muy
útil para diseñar SPRITES consiste en dibujar en un papel una Un SPRITE de 16*16 no es otra cosa que 4 SPRITES de
matriz de tantas filas y columnas como deseemos que tenga el 8*8 situados uno junto a otro formando un cuadrado y defini-
SPRITE y rellenar los espacios que nos interesen para obtener dos de manera idéntica:
la forma deseada. Así podremos codificarlo en binario de una
manera muy simple:

S$ (1) S$ (3)

1 2 3 4 5 6 7 8
X X =&B01110100 S$ (2) S$ (4)
X X
o 1 1 1 o 1 o o
Una vez definidos cada uno de los SPRITES dentro de ca-
denas de caracteres, asignaremos su suma a SPRITE$ de lama-
De todos modos, esta manera de crear SPRITES mediante nera siguiente:
DATAS en binario no es la más adecuada. Si queremos ahorrar SPRITE$(1)=S$(1)+S$(2)+S$(3)+S$(4)
memoria lo más práctico resulta traducir el número binario a La instrucción que nos permitirá mover los SPRITES por
decimal mediante ?&B ... ( ?&B01110100 nos dará 116). Para toda la pantalla es PUT SPRITE, y su sintaxis es:
seleccionar el tamaño de los SPRITES utilizaremos la orden PUT SPRITE numplano(, (STEP), (X,Y))(,COLOR)
SCREEN (1, 2 o 3), (O si son de 8X8 sin ampliar; 1 si son am- (,numSPRITE)
pliados; 2 si son de 16X 16 sin ampliar, 3 si son de 16x 16 am- Para situar un SPRITE en la pantalla en las coordenadas
pliados). X Y previamente debe estar definido mediante SPRITE$ ..La
, '
80 81
. ----------------------------~-

presentanción de SPRITES en pantalla es independiente de su CAPITULO IX


contenido. La abscisa (X) puede tener valores comprendidos
entre -32 y 255 mientras que la ordenada (Y) debe estar entre
-32 y 191. El número de plano representa el plano de visualiza-
ción del SPRITE y debe estar comprendido entre Oy 31. STEP
sirve para trabajar en coordenadas relativas. Si es omitido, la es-
quina superior izquierda del SPRITE se sitúa en las coordena-
~ ~y .
COLOR sirve para definir el color del SPRITE. Caso de ser
omitido, se toma por defecto el color seleccionado para el !?Í~
roer plano. NUMSPRITE es el número asignado al SPRI
con SPRITE$ (n). Debemos tener en cuenta que no se puede vi-
sualizar más de cuatro SPRITES simultáneamente. Caso de in-
tentar visualizar un quinto SPRITE desaparecería el que tuvie- El sonido del MSX
ra el último número de plano.
Si el valor de la ordenada es igual a 208, todos los SPRITES Una importante característica de los ordenadores MSX es
con un número de plano más alto desaparecen de la pantalla su capacidad de gei;iera¡: sonidos. Actualmente esto es algo que
hasta que les sea asignado un nuevo valor. Si en cambio el plano no sorprende a nad1~, puesto que la .mayoría de micros disponi-
asignado es 209, el SPRITE al que le es asignado desaparece. bles en el mercado tienen esa capacidad. Lo importante en este
Esta posibilidad resulta muy interesante ya que facilita la ani- caso no es tan sólo lo que hace MSX sino también lo fácil que lo
mación. Otra regla importante a tener en cuenta si deseamos hace.
trabajar con animación es alternar diferentes formas rápida- Cualquier MSX va equipado con un «chip» de sonido. AY-
mente para que los caracteres parezcan estar moviéndose. 3-8910. de General Inst_rument: Este Generador Programable
Las siguientes instrucciones tratan las bifurcaciones e inte- de Somdo (PSG), permite mediante la instrucción PLAY elac-
rrupciones de los SPRITES y son tratadas también en el capítu- ce~o al Macrolenguaje Musical (MML), de funcionamiento si-
lo destinado a las interrupciones. ~ilar al macrolenguaje gráfico y que permite efectuar composi-
ciones hasta a tres voces en ocho octavas. Otra opción acústica
ON SPRITE GOSUB (numlinea) que tenemos con MSX es el acceso directo al Generador de so-
nido utilizando el comando SOUND. Vamos a hablar del Ma-
Sirve para bifurcar un programa hacia un subprograma. crolenguaje musical.
Debe ser valida por SPRITE ON. Posibilita la desviación del Todas las notas de la escala -hasta 8 octavas como hemos
programa por la colisión de dos SPRITES en la pantalla. visto- han sido incorporadas al MML. Para hacer sonar cual-
quier nota simplemente tiene que introducir la nota en cuestión
SPRITE ON.OFF-STOP con «notación inglesa>~. En notación inglesa, las notas en lugar
de llamarse do, re, mi ... se definen sólo mediante una letra
SPRITE ON valida el desvío para la desviación ON SPRI- como veremos en el ejemplo: '
TE GOSUB. SPRITE OFF hace que se deje de tener en éuenta

_~__,_l_M_E--'-l :__¡_¡_s~_L_ILL_:_..Ll_~_
ON SPRITE GOSUB. SPRITE STOP memoriza la colisión de 0 1 1
dos SPRITES pero no valida el desvío hasta que encuentra l'-D_c__._l -F ...JI (notación inglesa)
SPRITEON.

82 83
. ----------------------------~-

presentanción de SPRITES en pantalla es independiente de su CAPITULO IX


contenido. La abscisa (X) puede tener valores comprendidos
entre -32 y 255 mientras que la ordenada (Y) debe estar entre
-32 y 191. El número de plano representa el plano de visualiza-
ción del SPRITE y debe estar comprendido entre Oy 31. STEP
sirve para trabajar en coordenadas relativas. Si es omitido, la es-
quina superior izquierda del SPRITE se sitúa en las coordena-
~ ~y .
COLOR sirve para definir el color del SPRITE. Caso de ser
omitido, se toma por defecto el color seleccionado para el !?Í~
roer plano. NUMSPRITE es el número asignado al SPRI
con SPRITE$ (n). Debemos tener en cuenta que no se puede vi-
sualizar más de cuatro SPRITES simultáneamente. Caso de in-
tentar visualizar un quinto SPRITE desaparecería el que tuvie- El sonido del MSX
ra el último número de plano.
Si el valor de la ordenada es igual a 208, todos los SPRITES Una importante característica de los ordenadores MSX es
con un número de plano más alto desaparecen de la pantalla su capacidad de gei;iera¡: sonidos. Actualmente esto es algo que
hasta que les sea asignado un nuevo valor. Si en cambio el plano no sorprende a nad1~, puesto que la .mayoría de micros disponi-
asignado es 209, el SPRITE al que le es asignado desaparece. bles en el mercado tienen esa capacidad. Lo importante en este
Esta posibilidad resulta muy interesante ya que facilita la ani- caso no es tan sólo lo que hace MSX sino también lo fácil que lo
mación. Otra regla importante a tener en cuenta si deseamos hace.
trabajar con animación es alternar diferentes formas rápida- Cualquier MSX va equipado con un «chip» de sonido. AY-
mente para que los caracteres parezcan estar moviéndose. 3-8910. de General Inst_rument: Este Generador Programable
Las siguientes instrucciones tratan las bifurcaciones e inte- de Somdo (PSG), permite mediante la instrucción PLAY elac-
rrupciones de los SPRITES y son tratadas también en el capítu- ce~o al Macrolenguaje Musical (MML), de funcionamiento si-
lo destinado a las interrupciones. ~ilar al macrolenguaje gráfico y que permite efectuar composi-
ciones hasta a tres voces en ocho octavas. Otra opción acústica
ON SPRITE GOSUB (numlinea) que tenemos con MSX es el acceso directo al Generador de so-
nido utilizando el comando SOUND. Vamos a hablar del Ma-
Sirve para bifurcar un programa hacia un subprograma. crolenguaje musical.
Debe ser valida por SPRITE ON. Posibilita la desviación del Todas las notas de la escala -hasta 8 octavas como hemos
programa por la colisión de dos SPRITES en la pantalla. visto- han sido incorporadas al MML. Para hacer sonar cual-
quier nota simplemente tiene que introducir la nota en cuestión
SPRITE ON.OFF-STOP con «notación inglesa>~. En notación inglesa, las notas en lugar
de llamarse do, re, mi ... se definen sólo mediante una letra
SPRITE ON valida el desvío para la desviación ON SPRI- como veremos en el ejemplo: '
TE GOSUB. SPRITE OFF hace que se deje de tener en éuenta

_~__,_l_M_E--'-l :__¡_¡_s~_L_ILL_:_..Ll_~_
ON SPRITE GOSUB. SPRITE STOP memoriza la colisión de 0 1 1
dos SPRITES pero no valida el desvío hasta que encuentra l'-D_c__._l -F ...JI (notación inglesa)
SPRITEON.

82 83
1
'
.

De tal m~do, cuando deseemos programar un DO pondre- notas. Por defecto, el ordenador asigna a todas las notas el valor
mos una C, s1 es un MI una E etc. Los semitonos (sostenidos y L4 (negra), pero las lo?gitudes de las notas y silencios, se indi-
bemoles), que son las teclas negras del piano se expresan en can ~l o~denador mediante L y R respectivamente, según la ta-
MML con los signos + o # para los sostenidos y- los bemoles. bla s1gurente:
Hay que tener en cuenta que intervalos como MI-FA o SI-DO
son tan sólo de medio tono, y por lo tanto la máquina no inter- NOTAS SILENCIOS
preta correctamente la nota que pretendemos que suene si in- Ll (redonda) 4 t~empos Rl
11 troducimos por ejemplo un SI sostenido (B#) o un FA bemol 12 (blanca 2 t'.empos R2
li (F-). L4 (negra) 1 t:empos R4
fl
!1
Hemos dicho antes, que la llave del Macrolenguaje musical L8
L16
(corchea) 1/2
(semicorchea) 1/4
~empos
t'.empos
R8
R16
es PLAY, cuya sintaxis es la siguiente:
!l PLAY (cadena alfanum) ((,cadena alfanum)(,cadena alfa- L32 (fusa) 1/8 tiempos R32
L64 (semifusa) 1/16 tiempos
¡¡ num)) R64
¡¡ Las tre~ cadenas alfanuméricas indican que se puede com-
¡j poner música a una, dos o tres voces mediante esa instrucción. , I:os tres~o~ de corchea pueden introducirse con L9, y los
mu~tiplos y divisores de. 9 nos los darán para cualquier otra du-
l ¡
Con lo que hemos visto hasta ahora, podemos atrevernos a
escribir como mínimo una escala en MML. La de DO mayor - racrón. En MML también se pueden indicar las notas en forma
n~érica mediante «N» s~guida de un nú:111ero entre Oy 96, te-
!1· la más sencilla-, es como sigue:
PLAY «CDEFGAB05C» mendo en cuenta que mediante esta notación las notas se cuen-
tan semitono a semitono. De tal modo, N36 es «04C» y N35
,,11
¡j
Habrá notado que en medio de la secuencia hemos incluido
«05». Tiene una explicación muy simple: La distancia entre «04C+». L?s puntos)) en MML cumplen la misma función
I'' que los puntillos en musica, es decir, aumentan la duración de
i¡ DO y el siguiente DO se denomina octava en música. Se trata
l,,
1!1
de la misma nota, pero una vez es más aguda que la otra. MSX la nota en la mitad de su valor.
Podemos también variar el «tempo», es decir la velocidad
toma como valor.de octava por defecto¡ el DO central del piano
(04). En el ejemplo anterior, como no hemos indicado ninguna de ejecución de la melodía, media~te la or?en «T». El tempo
11d por defecto en MML es «T12q» -ciento vemte negras por mi-
octava, la máquina ha comenzado en el DO central; pero para
ji r
cor:ip.letar la escala acabar en DO tenemos que indicarle que nuto-y sus valores pueden oscilar entre 32 y 255. Si se produce
algún error, o por algún otro motivo suena BEEP (chr$) (7)$ se
¡!!1
el último DO es mas agudo, cosa que hemos hecho al incluir
«05», es decir que hemos indicado a la máquina que toque una
serie de notas comenzando en el DO de la octava cuarta y que
vuelve al tempo por defecto.
PLAY «T20004L8C.DE.FG.AB.05C2»
[! termine con el DO de la octava quinta. Los valores de «0» de- (obsérvese que C2 es lo mismo que L2C)
i!
i'
ben estar comprendidos entre 1y8. Si volvemos a ejecutar la lí-
ti ne~ anterior, nos encontraremos con que se inicia en la octava . También P?demos modificar el volumen utilizando (V) se-
!I
;¡ qUIDta esta vez. Para evitar esto, hagamos lo siguiente: guida de un numero entre O y 15. El volumen por omisión es
ií PLAY«04CDEFGAB05C» V8. .
-¡ En los ejemplos que hemos ido viendo hasta ahora hemos
Al no indicarle a la máquina en que octava debe comenzar
toma como valor por defecto la octava en que finaliza. Para evi- utilizado PLAY como instrucción en modo directo pkra una
tar esto, es conveniente indicar siempre en que octava desea- sola voz.
mos comenzar. Evidentemente, también puede usarse en modo diferido y
Con el MML también es posible controlar la duración de las almacenar su contenido en variables de cadena: ·

85
84
1
'
.

De tal m~do, cuando deseemos programar un DO pondre- notas. Por defecto, el ordenador asigna a todas las notas el valor
mos una C, s1 es un MI una E etc. Los semitonos (sostenidos y L4 (negra), pero las lo?gitudes de las notas y silencios, se indi-
bemoles), que son las teclas negras del piano se expresan en can ~l o~denador mediante L y R respectivamente, según la ta-
MML con los signos + o # para los sostenidos y- los bemoles. bla s1gurente:
Hay que tener en cuenta que intervalos como MI-FA o SI-DO
son tan sólo de medio tono, y por lo tanto la máquina no inter- NOTAS SILENCIOS
preta correctamente la nota que pretendemos que suene si in- Ll (redonda) 4 t~empos Rl
11 troducimos por ejemplo un SI sostenido (B#) o un FA bemol 12 (blanca 2 t'.empos R2
li (F-). L4 (negra) 1 t:empos R4
fl
!1
Hemos dicho antes, que la llave del Macrolenguaje musical L8
L16
(corchea) 1/2
(semicorchea) 1/4
~empos
t'.empos
R8
R16
es PLAY, cuya sintaxis es la siguiente:
!l PLAY (cadena alfanum) ((,cadena alfanum)(,cadena alfa- L32 (fusa) 1/8 tiempos R32
L64 (semifusa) 1/16 tiempos
¡¡ num)) R64
¡¡ Las tre~ cadenas alfanuméricas indican que se puede com-
¡j poner música a una, dos o tres voces mediante esa instrucción. , I:os tres~o~ de corchea pueden introducirse con L9, y los
mu~tiplos y divisores de. 9 nos los darán para cualquier otra du-
l ¡
Con lo que hemos visto hasta ahora, podemos atrevernos a
escribir como mínimo una escala en MML. La de DO mayor - racrón. En MML también se pueden indicar las notas en forma
n~érica mediante «N» s~guida de un nú:111ero entre Oy 96, te-
!1· la más sencilla-, es como sigue:
PLAY «CDEFGAB05C» mendo en cuenta que mediante esta notación las notas se cuen-
tan semitono a semitono. De tal modo, N36 es «04C» y N35
,,11
¡j
Habrá notado que en medio de la secuencia hemos incluido
«05». Tiene una explicación muy simple: La distancia entre «04C+». L?s puntos)) en MML cumplen la misma función
I'' que los puntillos en musica, es decir, aumentan la duración de
i¡ DO y el siguiente DO se denomina octava en música. Se trata
l,,
1!1
de la misma nota, pero una vez es más aguda que la otra. MSX la nota en la mitad de su valor.
Podemos también variar el «tempo», es decir la velocidad
toma como valor.de octava por defecto¡ el DO central del piano
(04). En el ejemplo anterior, como no hemos indicado ninguna de ejecución de la melodía, media~te la or?en «T». El tempo
11d por defecto en MML es «T12q» -ciento vemte negras por mi-
octava, la máquina ha comenzado en el DO central; pero para
ji r
cor:ip.letar la escala acabar en DO tenemos que indicarle que nuto-y sus valores pueden oscilar entre 32 y 255. Si se produce
algún error, o por algún otro motivo suena BEEP (chr$) (7)$ se
¡!!1
el último DO es mas agudo, cosa que hemos hecho al incluir
«05», es decir que hemos indicado a la máquina que toque una
serie de notas comenzando en el DO de la octava cuarta y que
vuelve al tempo por defecto.
PLAY «T20004L8C.DE.FG.AB.05C2»
[! termine con el DO de la octava quinta. Los valores de «0» de- (obsérvese que C2 es lo mismo que L2C)
i!
i'
ben estar comprendidos entre 1y8. Si volvemos a ejecutar la lí-
ti ne~ anterior, nos encontraremos con que se inicia en la octava . También P?demos modificar el volumen utilizando (V) se-
!I
;¡ qUIDta esta vez. Para evitar esto, hagamos lo siguiente: guida de un numero entre O y 15. El volumen por omisión es
ií PLAY«04CDEFGAB05C» V8. .
-¡ En los ejemplos que hemos ido viendo hasta ahora hemos
Al no indicarle a la máquina en que octava debe comenzar
toma como valor por defecto la octava en que finaliza. Para evi- utilizado PLAY como instrucción en modo directo pkra una
tar esto, es conveniente indicar siempre en que octava desea- sola voz.
mos comenzar. Evidentemente, también puede usarse en modo diferido y
Con el MML también es posible controlar la duración de las almacenar su contenido en variables de cadena: ·

85
84
10 A$=«T20004L8C.DE.FG.AB.05C2» t0 'BLUES 6/4
20PLAYA$ 20 GOSUB 100
Podemos también definir una subrutina enMML mediante 30 CLEAR1000
«X (nombre de variable);»: 40 A$="t 182v15r2. r414o4sb--o512d. d.
10 A$=«T20004L8C.DE.FG.AB.05C2» l4d.18co4ge-14dcfl2d.d. r214ce-gb--.o
20PLAY «03CDEFGABXA$;». 512d-14d-o412b-.b-o514e-d-o4b-g-12
Como podemos imaginar fácilmente, es posible anidar va- f.fl4e-gl2cc.r418a-fa-fl2a-.r418b-
rias «subcadenas» empleando X, lo cual aumenta infinitamente gb-gl2b-.14o5ce-fg.l8fl4e-c.o418b-
las facilidades de composición. l4gfgb-"
50 8$="t182v15o512d.d.14d.18co4ge-
Si deseamos extender la composición a dos o tres voces, l4dcfl2d.d.r214ce-gb-o512d-l4d-o41
sencillamente tenemos que definir cada una de las que vayamos 2b-.b-o514e-d-o4b-g-l2f.fl4e-gl2cc
a utilizar y ejecutarlas mediante PLAY separadas por una .r418a-fa-fl2a-.r418b-gb-gl2b-.14o
coma: Se e -f g. l 8f l 4e -e. o 4 l 8b-- l 4g f g b ·-"
10 A$ = «T20004L4CDEFGAB05C04GEC2» 60 PLAYAq>
20 V$ = «T20006L16BAGF AGFE GFED FEDC EDC05B 70 PLAYB$
06DC05BA 06C05BAG AGFE GFED L2 G» 80 PLAY"t 182o5.12d ..
30 C$ = «T20003 L2C.E.G.04C.L2E» 90 GOTO 90
100 OPEN "GRP:"AS#l
40 PLAY A$, B$, C$ 110 SCREEN 3
Existen todavía dos instruccion.es que podemos utilizar con 120 PSET C40,70J:PRINT#1,"BLUES":P
PLAY: La selección de forma de onda (Sn), cuyo argumento SET C60,120J:PRINT#l,"6/4"
«n» puede valer de Oa 15 y cuyo valor por defecto es 1 y lamo- 130 RETURN
dulación o período (Mn), cuya «n» esta comprendida entre Oy
65535, siendo su valor por omisión 255. De todos modos, estas
«subinstrucciones» tienen íntima relación con SOUND, que t0 FOR A= 1 TO 2
pasamos a ver ahora. Digamos sim_plemente que si se desea mo- 20 A$"'"s3 m7000 c2.o3g8.b16o4c2.o3
dificar el sonido de PLAY (su timbre), debe hacerse utilizando g8.bl6o4c8c8o3g8b8o4c8c8o3g8b8o4c4
S y M. Por ejemplo: e4g4b4o5c lc+lo4o5d4"
25 8$= "s 3 m7000 e 2. o 39 8. b 160 4c 2. o 3
PLAY «S1M5000CDEFFEDC» g8.bl60Kc8~80898b804c8c8o3g8b8o4c4
Nos interpreta esas notas en «staccatto». e4g4b4o5c lc+2. l 16agfed2"
Una cosa más: 30 PLAY A$:PLAY 8$
Si utilizamos «S», perdemos todo el control sobre el volu- 40 NEXT
men (V).
Aún hay otra utilización de PLAY:
a = PLAY (número voz) 10 'motivo sinfonla JUPITERCW.A. M
Nos indica si hay o no músic:a interpretándose. Número voz OZART)
debe estar comprendido entre Oy 3 siendo 1 la primera voz, 2 la 20 A$=''s3m780Cc4r8o3g18a18b!8c4r8o
segunda y 3 la tercera mientras que Oindica si suena o no músi- 3g18a18b18c4r2r8o5c8c4.b8d4.c8g2f4
ca. La A valdrá O si no se está interpretando música. En caso "
contrario valdrá -1. 30 PLAY A$

86
10 A$=«T20004L8C.DE.FG.AB.05C2» t0 'BLUES 6/4
20PLAYA$ 20 GOSUB 100
Podemos también definir una subrutina enMML mediante 30 CLEAR1000
«X (nombre de variable);»: 40 A$="t 182v15r2. r414o4sb--o512d. d.
10 A$=«T20004L8C.DE.FG.AB.05C2» l4d.18co4ge-14dcfl2d.d. r214ce-gb--.o
20PLAY «03CDEFGABXA$;». 512d-14d-o412b-.b-o514e-d-o4b-g-12
Como podemos imaginar fácilmente, es posible anidar va- f.fl4e-gl2cc.r418a-fa-fl2a-.r418b-
rias «subcadenas» empleando X, lo cual aumenta infinitamente gb-gl2b-.14o5ce-fg.l8fl4e-c.o418b-
las facilidades de composición. l4gfgb-"
50 8$="t182v15o512d.d.14d.18co4ge-
Si deseamos extender la composición a dos o tres voces, l4dcfl2d.d.r214ce-gb-o512d-l4d-o41
sencillamente tenemos que definir cada una de las que vayamos 2b-.b-o514e-d-o4b-g-l2f.fl4e-gl2cc
a utilizar y ejecutarlas mediante PLAY separadas por una .r418a-fa-fl2a-.r418b-gb-gl2b-.14o
coma: Se e -f g. l 8f l 4e -e. o 4 l 8b-- l 4g f g b ·-"
10 A$ = «T20004L4CDEFGAB05C04GEC2» 60 PLAYAq>
20 V$ = «T20006L16BAGF AGFE GFED FEDC EDC05B 70 PLAYB$
06DC05BA 06C05BAG AGFE GFED L2 G» 80 PLAY"t 182o5.12d ..
30 C$ = «T20003 L2C.E.G.04C.L2E» 90 GOTO 90
100 OPEN "GRP:"AS#l
40 PLAY A$, B$, C$ 110 SCREEN 3
Existen todavía dos instruccion.es que podemos utilizar con 120 PSET C40,70J:PRINT#1,"BLUES":P
PLAY: La selección de forma de onda (Sn), cuyo argumento SET C60,120J:PRINT#l,"6/4"
«n» puede valer de Oa 15 y cuyo valor por defecto es 1 y lamo- 130 RETURN
dulación o período (Mn), cuya «n» esta comprendida entre Oy
65535, siendo su valor por omisión 255. De todos modos, estas
«subinstrucciones» tienen íntima relación con SOUND, que t0 FOR A= 1 TO 2
pasamos a ver ahora. Digamos sim_plemente que si se desea mo- 20 A$"'"s3 m7000 c2.o3g8.b16o4c2.o3
dificar el sonido de PLAY (su timbre), debe hacerse utilizando g8.bl6o4c8c8o3g8b8o4c8c8o3g8b8o4c4
S y M. Por ejemplo: e4g4b4o5c lc+lo4o5d4"
25 8$= "s 3 m7000 e 2. o 39 8. b 160 4c 2. o 3
PLAY «S1M5000CDEFFEDC» g8.bl60Kc8~80898b804c8c8o3g8b8o4c4
Nos interpreta esas notas en «staccatto». e4g4b4o5c lc+2. l 16agfed2"
Una cosa más: 30 PLAY A$:PLAY 8$
Si utilizamos «S», perdemos todo el control sobre el volu- 40 NEXT
men (V).
Aún hay otra utilización de PLAY:
a = PLAY (número voz) 10 'motivo sinfonla JUPITERCW.A. M
Nos indica si hay o no músic:a interpretándose. Número voz OZART)
debe estar comprendido entre Oy 3 siendo 1 la primera voz, 2 la 20 A$=''s3m780Cc4r8o3g18a18b!8c4r8o
segunda y 3 la tercera mientras que Oindica si suena o no músi- 3g18a18b18c4r2r8o5c8c4.b8d4.c8g2f4
ca. La A valdrá O si no se está interpretando música. En caso "
contrario valdrá -1. 30 PLAY A$

86
SOUNDYBEEP SOUND registro, datos
Hemos estado viendo hasta ahora el funcionamiento del Como acabamos de ver en PLAY, podemos emitir sonidos
MML y de la potentísima instrucción PLAY que poseen todos por tres canales simultáneamente: Llamemos a cada una de las
los MSX. Veremos ahora cómo también es posible acceder di- voces A, B y C respectivamente. Los catorce registros del PSG
rectamente a cada uno de los registros del Generador Progra- también nos permiten hacer esto. Veamos qué hace cada uno
mable de Sonido (PSG). de los registros.
Este generador dispone de·14 registros o canales, numera-
dos del O al 13 de un byte cada uno y en los que, lógicamente, se Los registros Oy 1 corresponden a la voz A. El registro Oes
pueden almacenar valores comprend.idos entre Oy 25?. Al~ vis- el byte de orden inferior y el 2 el de orden superior. No se utili-
ta de los dicho hasta ahora, es evidente que la smtax1s de zan los 4 bits superiores de estos bytes. Los registros 2 y 3 co-
SOUND es la siguiente: rresponden a la voz B. Corresponden respectivamente a los by-
tes de menor y mayor peso y tampoco se utilizan los 4 bits supe-
Funciones de los regitros del PSG y gama de datos de escritura riores de estos bytes.
Lo dicho hasta ahora resulta igualmente válido para los ,re-
N .ºde registro Función Gama de datos gistros 4 y 5. Es decir, el registro 4 es el byte de menor peso de
o 0-255 la voz e y el 5 el de mayor; y tampoco se utilizan los 4 bits supe-
Frecuencia del canal A riores de estos bytes. Eh los registros 1, 3 y 5 se pueden escribir
1 0-15 valores oscilantes entre O y 15 y en los registros O, 2 y 4 valores
2 0-255 entre O y 255.
Frecuencia del canal B El registro 6 es el generador de ruido y produce «ruido
3 0-15 blanco» con el que se pueden obtener interesantes efectos so-
noros. Almacena valores comprendidos entre Oy 31 que corres-
4 0-255 ponden a las frecuencias de ruido.
Frecuencia del canal C El registro 7 es el mezclador. Selecciona la fuente del sonido
5 0-15
(uno de los tres canales o el generador de ruido) y los conecta o
6 Frecuencia de ruido 0-31 apaga. Los dos bits de orden superior (los dos últimos) no se
Selecciona un canal para genera- usan. Los sexto, quinto y cuarto activan el ruido y los tres últi-
7 0-63 mos los tonos. Puede almacenar datos comprendidos entre O y
ción de tonos y ruido.
63. Para tener una visión más clara del resultado que queremos
8 Volumen del canal A 0-15 obtener con este registro, podemos escribir en el los datos en
La variación del volumen binario, lo que nos ayuda a ver cuales de los canales conectamos
9 Volumen del canal B ocurrirá cuando se o apagamos. Por ejemplo:
10 Volumen del canal C seleccione 16. SOUND 7,&BOOlllOOO
11 0-255
Frecuencia del patrón de varia- Debemos tener en cuei;ita ~:.re ".l orden de las voces es CBA,.·
12 ción .de volumen. 0-255 siendo la voz A la menos s1gniflcat1va. . . . . .. .
Los registros 8, 9 y 10 controlan el volumen.de salida delos
Selección del patrón de varia- sonidos producidos por los tres canales: El registro 8 esta a.sa-
13 0-14
ción de tonos y ruido. ciado al canal A, el 9 al canal By el 10 al canal C. Cada uno de

88 89
SOUNDYBEEP SOUND registro, datos
Hemos estado viendo hasta ahora el funcionamiento del Como acabamos de ver en PLAY, podemos emitir sonidos
MML y de la potentísima instrucción PLAY que poseen todos por tres canales simultáneamente: Llamemos a cada una de las
los MSX. Veremos ahora cómo también es posible acceder di- voces A, B y C respectivamente. Los catorce registros del PSG
rectamente a cada uno de los registros del Generador Progra- también nos permiten hacer esto. Veamos qué hace cada uno
mable de Sonido (PSG). de los registros.
Este generador dispone de·14 registros o canales, numera-
dos del O al 13 de un byte cada uno y en los que, lógicamente, se Los registros Oy 1 corresponden a la voz A. El registro Oes
pueden almacenar valores comprend.idos entre Oy 25?. Al~ vis- el byte de orden inferior y el 2 el de orden superior. No se utili-
ta de los dicho hasta ahora, es evidente que la smtax1s de zan los 4 bits superiores de estos bytes. Los registros 2 y 3 co-
SOUND es la siguiente: rresponden a la voz B. Corresponden respectivamente a los by-
tes de menor y mayor peso y tampoco se utilizan los 4 bits supe-
Funciones de los regitros del PSG y gama de datos de escritura riores de estos bytes.
Lo dicho hasta ahora resulta igualmente válido para los ,re-
N .ºde registro Función Gama de datos gistros 4 y 5. Es decir, el registro 4 es el byte de menor peso de
o 0-255 la voz e y el 5 el de mayor; y tampoco se utilizan los 4 bits supe-
Frecuencia del canal A riores de estos bytes. Eh los registros 1, 3 y 5 se pueden escribir
1 0-15 valores oscilantes entre O y 15 y en los registros O, 2 y 4 valores
2 0-255 entre O y 255.
Frecuencia del canal B El registro 6 es el generador de ruido y produce «ruido
3 0-15 blanco» con el que se pueden obtener interesantes efectos so-
noros. Almacena valores comprendidos entre Oy 31 que corres-
4 0-255 ponden a las frecuencias de ruido.
Frecuencia del canal C El registro 7 es el mezclador. Selecciona la fuente del sonido
5 0-15
(uno de los tres canales o el generador de ruido) y los conecta o
6 Frecuencia de ruido 0-31 apaga. Los dos bits de orden superior (los dos últimos) no se
Selecciona un canal para genera- usan. Los sexto, quinto y cuarto activan el ruido y los tres últi-
7 0-63 mos los tonos. Puede almacenar datos comprendidos entre O y
ción de tonos y ruido.
63. Para tener una visión más clara del resultado que queremos
8 Volumen del canal A 0-15 obtener con este registro, podemos escribir en el los datos en
La variación del volumen binario, lo que nos ayuda a ver cuales de los canales conectamos
9 Volumen del canal B ocurrirá cuando se o apagamos. Por ejemplo:
10 Volumen del canal C seleccione 16. SOUND 7,&BOOlllOOO
11 0-255
Frecuencia del patrón de varia- Debemos tener en cuei;ita ~:.re ".l orden de las voces es CBA,.·
12 ción .de volumen. 0-255 siendo la voz A la menos s1gniflcat1va. . . . . .. .
Los registros 8, 9 y 10 controlan el volumen.de salida delos
Selección del patrón de varia- sonidos producidos por los tres canales: El registro 8 esta a.sa-
13 0-14
ción de tonos y ruido. ciado al canal A, el 9 al canal By el 10 al canal C. Cada uno de

88 89
estos registros puede almacenar valores comprendidos entre O
y 16, correspondiendo el O al silencio y 15 al máximo volumen.
Cuando el valor sea 16 daremos paso a la variación de volumen
para patrones de envolvente.
Los canales 11 y 12 son los que nos permiten regular el pe-
riodo del envolvente, que se determina mediante los datos que
escribamos en los registros 11 y 12. Podemos obtenerlos de
acuerdo con la siguiente fórmula:
+
1.996.750 (Hz) = 256* (datos reg. 12) +(datos reg. 11) 1
periodo (Hz)*256

En ella podemos darnos cuenta de que el registro 11 es el


byte de orden inferior del periodo de envolvente y el registro 12
el de orden superior.
Si por ejemplo deseamos establecer el periodo a 15 Hz de-
beremos escribir 8 en el registro 11y2 en el 12:
1.996.750/(256*15) = 256 * G. + 1i
Tras esto, sólo nos queda establecer 16 como volumen del
canal en el que deseemos utilizar el patrón calculado. El regis-
tro 13 es el que nos posibilita la selección de una de las ocho for-
mas de envolvente disponibles (sólo utiliza los cuatro bits infe-
riores). Puede contener valores entre 1y14. El gráfico de la pá-
gina siguiente muestra las 8 formas de envolvente.
10 'Despegue de helicoptero
20 SOUND 1,12
30 SOUND 4,222
40 SOUND 8,10
50 SOUND 2,33
60 SOUND 9,110
70 SOUND 7,&810001111
80 SOUND 3,255
90 SOUND 7,&810000101
100 FOR Z=0 TO 255:SOUNO 13,Z:NEXT Todavía nos queda otra sentencia para producir son.ido,
110 FOR S= 1 TO 255:SOUND 11,S:NEXT aunque es la más limitada de todas. Se trata de BEEP, que emite
120 FOR C= 1 TO 1000:FOR A~0 TO 254:SOUN una señal f!CÚstica y reinicializa todas las instrucciones sonoras,
O 6,A:NEXT:NEXT es decir, para cualquier sonido que se esté produciendo. Equi-
130 SOUND 11,2 vale a teclear ?chr$(7) o CTRL G y también es producido por
140 SOUND 2,33 cualquier mensaje de error o cuando encuentra STOP duránte
150 SOUND 9,0 la ejecución de un programa. ·

90 ·91
1
estos registros puede almacenar valores comprendidos entre O
y 16, correspondiendo el O al silencio y 15 al máximo volumen.
Cuando el valor sea 16 daremos paso a la variación de volumen
para patrones de envolvente.
Los canales 11 y 12 son los que nos permiten regular el pe-
riodo del envolvente, que se determina mediante los datos que
escribamos en los registros 11 y 12. Podemos obtenerlos de
acuerdo con la siguiente fórmula:
+
1.996.750 (Hz) = 256* (datos reg. 12) +(datos reg. 11) 1
periodo (Hz)*256

En ella podemos darnos cuenta de que el registro 11 es el


byte de orden inferior del periodo de envolvente y el registro 12
el de orden superior.
Si por ejemplo deseamos establecer el periodo a 15 Hz de-
beremos escribir 8 en el registro 11y2 en el 12:
1.996.750/(256*15) = 256 * G. + 1i
Tras esto, sólo nos queda establecer 16 como volumen del
canal en el que deseemos utilizar el patrón calculado. El regis-
tro 13 es el que nos posibilita la selección de una de las ocho for-
mas de envolvente disponibles (sólo utiliza los cuatro bits infe-
riores). Puede contener valores entre 1y14. El gráfico de la pá-
gina siguiente muestra las 8 formas de envolvente.
10 'Despegue de helicoptero
20 SOUND 1,12
30 SOUND 4,222
40 SOUND 8,10
50 SOUND 2,33
60 SOUND 9,110
70 SOUND 7,&810001111
80 SOUND 3,255
90 SOUND 7,&810000101
100 FOR Z=0 TO 255:SOUNO 13,Z:NEXT Todavía nos queda otra sentencia para producir son.ido,
110 FOR S= 1 TO 255:SOUND 11,S:NEXT aunque es la más limitada de todas. Se trata de BEEP, que emite
120 FOR C= 1 TO 1000:FOR A~0 TO 254:SOUN una señal f!CÚstica y reinicializa todas las instrucciones sonoras,
O 6,A:NEXT:NEXT es decir, para cualquier sonido que se esté produciendo. Equi-
130 SOUND 11,2 vale a teclear ?chr$(7) o CTRL G y también es producido por
140 SOUND 2,33 cualquier mensaje de error o cuando encuentra STOP duránte
150 SOUND 9,0 la ejecución de un programa. ·

90 ·91
1
CAPITULO X
ON STRIG GOSUB (n de línea), en este caso la barra espa-
ciadora o el disparador del ioystick accionan la interrupción.
ON INTERVAL GOSUB (n de línea), genera una inte-
rrupción transcurrido un cierto tiempo desde la ejecución de
un RUN, ejecutandose cada fracción de tiempo. Este tiempo es
igual a N*l/50 de segundo, o sea, que para N=50 el intervalo
es de un segundo.
Para que entren en juego estas cinco posibilidades de inte-
rrupción necesitan de una sentencia de salida. Esta instrucción
es similar en los cinco casos y toma la forma siguiente: SPRITE
ON, KEY (número de tecla de función) ON, STOP ON,
STRIG (número de mandos para juegos) ON, INTERVAL (N
intervalo de tiempo) ON, repectivamente. . '
Las Í(!to;itrupc:iones En el caso de KEY (número de tecla) ON es muy importan-
te que no la confundamos con la instrucción KEY ON sin nú-
A menudo resulta f11Uyi~tetesantepod~r ordenar al micro- mero de tecla dé función, pues esta instrucción no tiene ningún
tipo de valor en el capítulo de interrupciones y se limita a visua-
procesador
provecho deque·······.in·
una .tatea .•.·t.er·r·i1·m·p···.
de n:iáyª.·.·.·.·.Sl. . ·. t. ·.ra·b . e...~s.ta efectuando, en
. . . ªj·o· qu lizar o borrar de la pantalla la cadena asignada a las teclas de
0 r prioridad... ·
Hasta ahop:.i las i:lltípas p~.ilit~#l1Pcioµ que incorporaban función.
lo~ or.denado.::es pet$.pnáJ.es,l ~9;19 .erllÍl ·. llc:c<:¡sibles en lenguaje Todas estas sentencias de constatación de interrupción se
maqum8:. El s1st"fl11a MSX, ~i:g.~mba:tgo,J:lo5.posibilita el modo complementan con otras dos instrucciones, cada una de las
de man~¡ar de~cie ~l.B.ASIG/~sta:~·iQ.tei:tüpcicities asíncronas, in- cuales obtienen al sustituir la palabra ON por las palabras
dependientes delc,ü:lo,cid r~loj i;J.térno; ó lo gí,íe es lo mismo, STOP, y OFF, con lo que obtendremos, en el caso de la inte-
que se puedan producrr en qtíaJgu1~rmome;ito a voluntad del rrupción producida por las teclas de control +STOP las si-
program~dor. Las posibilidaciésBe ~9µtt0lai;estas interrupcio- gu.ientes instrucciones: STOP ON, STOP OFF, y STOP
nes son cmco.: .• ··• . ·. · ., ) . > ....•. ··... <· STOP. En el caso de STRIG (mando de juegos) nos da
STRIG (número de mando) ON
habfa~~:i<l~í~fsPRIHs~~~sn;~¡~~:~se~8NªsiWHnJü~ STRIG (número de mando) OFF
STRIG (número de mando) STOP
SU~ (número.?e línea). CpmoVif11qs, estainstrucción produce
una mterrupc1on delprograrr¡,a c:í,íando se solapan (tienen algún y lo mismo para las restantes. En el fondo estas instrucciones
pu:ito de intersección) dos SPRITES, en ese momento la má- cumplen la misma función, aplicada a distintos tipos de inte-
quma produce un salto a la subrutina que comienza en el núme- rrupción.
ro de línea indicado en la instrucción. El funcionamiento de estas instrucciones no es en principio
Las restantes interrupciones son: complicado.
ON KEY 90SUB (n de línea), la interrupción se produce La primera sentencia del tipo ON KEY (n) GOSUB (núme-
cuando se oprrme determinada tecla de función. ro de línea) nos indica que se puede producir una interrupción
ON STOP GOSUB (n de línea), cuando pulsamos la tecla (insistamos que puede producir, no que se vaya a producir) y
de control y la de STOP a la vez, el programa salta a la subrutina que en caso de que se produzca, esa interrupción envía el flujo
indicada. del programa a un número de línea determinada. . . .. y .
La siguiente instrucción del tipo KEY (n) ON confirmala:
92
CAPITULO X
ON STRIG GOSUB (n de línea), en este caso la barra espa-
ciadora o el disparador del ioystick accionan la interrupción.
ON INTERVAL GOSUB (n de línea), genera una inte-
rrupción transcurrido un cierto tiempo desde la ejecución de
un RUN, ejecutandose cada fracción de tiempo. Este tiempo es
igual a N*l/50 de segundo, o sea, que para N=50 el intervalo
es de un segundo.
Para que entren en juego estas cinco posibilidades de inte-
rrupción necesitan de una sentencia de salida. Esta instrucción
es similar en los cinco casos y toma la forma siguiente: SPRITE
ON, KEY (número de tecla de función) ON, STOP ON,
STRIG (número de mandos para juegos) ON, INTERVAL (N
intervalo de tiempo) ON, repectivamente. . '
Las Í(!to;itrupc:iones En el caso de KEY (número de tecla) ON es muy importan-
te que no la confundamos con la instrucción KEY ON sin nú-
A menudo resulta f11Uyi~tetesantepod~r ordenar al micro- mero de tecla dé función, pues esta instrucción no tiene ningún
tipo de valor en el capítulo de interrupciones y se limita a visua-
procesador
provecho deque·······.in·
una .tatea .•.·t.er·r·i1·m·p···.
de n:iáyª.·.·.·.·.Sl. . ·. t. ·.ra·b . e...~s.ta efectuando, en
. . . ªj·o· qu lizar o borrar de la pantalla la cadena asignada a las teclas de
0 r prioridad... ·
Hasta ahop:.i las i:lltípas p~.ilit~#l1Pcioµ que incorporaban función.
lo~ or.denado.::es pet$.pnáJ.es,l ~9;19 .erllÍl ·. llc:c<:¡sibles en lenguaje Todas estas sentencias de constatación de interrupción se
maqum8:. El s1st"fl11a MSX, ~i:g.~mba:tgo,J:lo5.posibilita el modo complementan con otras dos instrucciones, cada una de las
de man~¡ar de~cie ~l.B.ASIG/~sta:~·iQ.tei:tüpcicities asíncronas, in- cuales obtienen al sustituir la palabra ON por las palabras
dependientes delc,ü:lo,cid r~loj i;J.térno; ó lo gí,íe es lo mismo, STOP, y OFF, con lo que obtendremos, en el caso de la inte-
que se puedan producrr en qtíaJgu1~rmome;ito a voluntad del rrupción producida por las teclas de control +STOP las si-
program~dor. Las posibilidaciésBe ~9µtt0lai;estas interrupcio- gu.ientes instrucciones: STOP ON, STOP OFF, y STOP
nes son cmco.: .• ··• . ·. · ., ) . > ....•. ··... <· STOP. En el caso de STRIG (mando de juegos) nos da
STRIG (número de mando) ON
habfa~~:i<l~í~fsPRIHs~~~sn;~¡~~:~se~8NªsiWHnJü~ STRIG (número de mando) OFF
STRIG (número de mando) STOP
SU~ (número.?e línea). CpmoVif11qs, estainstrucción produce
una mterrupc1on delprograrr¡,a c:í,íando se solapan (tienen algún y lo mismo para las restantes. En el fondo estas instrucciones
pu:ito de intersección) dos SPRITES, en ese momento la má- cumplen la misma función, aplicada a distintos tipos de inte-
quma produce un salto a la subrutina que comienza en el núme- rrupción.
ro de línea indicado en la instrucción. El funcionamiento de estas instrucciones no es en principio
Las restantes interrupciones son: complicado.
ON KEY 90SUB (n de línea), la interrupción se produce La primera sentencia del tipo ON KEY (n) GOSUB (núme-
cuando se oprrme determinada tecla de función. ro de línea) nos indica que se puede producir una interrupción
ON STOP GOSUB (n de línea), cuando pulsamos la tecla (insistamos que puede producir, no que se vaya a producir) y
de control y la de STOP a la vez, el programa salta a la subrutina que en caso de que se produzca, esa interrupción envía el flujo
indicada. del programa a un número de línea determinada. . . .. y .
La siguiente instrucción del tipo KEY (n) ON confirmala:
92
anterior orden y es en ese momento, cuando el ordenador em- 10 ON KEY GOSUB 60
pieza a investigar si se cumple la condición de interrupción 20 KEY ClJ ON
(apretar una tecla, la barra de espacios, el disparador de joys- 30 SCREEN 2
tick, etc), y cuando esto se cumple se empieza a ejecutar la su- 40 LINE C30,50J-Cl00,250),,8
brutina cuyo inicie;> está en la líllea definida enla primera ins- 50 GOTO 40
trucción ON KEY GOSUB (n). Por ejemplo, si durante un 60 REM SUBRUTINA DE INTERRUPCION
programa preparamos una interrupción definida mediante ON 70 KEY ClJ ON
KEY GOSUB 1000 y la activamos mediante KEY (1) ON, en 80 BEEP:CLS
cuanto pulsemos la tecla de función número 1 el flujo del pro- 50 FOR I = 10 TO 50 STEP 10
grama salta a la línea 1000 y ejecutan las instrucciones que en- 100 CIRCLE C130,58),l,,,4,.71.
cuentre hasta la instrucción RETURN, que devuelve el control 110 NEXT I
a la línea siguiente a la que se encontraba antes de pulsar la tecla 120 CLS
130 RETURN 40
de función. Si durante la ejecución de la subutina se vuelve a
dar la condición de interrupción, mediante la tecla de función
número 1 (o mediante otro dispositivo de interrupción previa-
mente definido) la subrutina sigue ejecutándose y al regresar Si por el contrario queremos, que una vez ejecutada la pri-
tras el RETURN al programa principal, antes de continuar mera interrupción no sean posibles nuevas interrupciones nos
vuelve a ejecutar la subrutina de interrupción. Es decir que basta con introducir una instrucción del tipo KEY (n) OFF con
identifica la nueva condición de interrupción y se reserva su eje- lo cual el ordenador ignora la condición impuesta. Finalmente,
cución para cuando haya terminado de ejecutar la primera. con las instrucciones del tipo KEY (n) STOP se consigue que
reconozca la condición impuesta, pero no ejecuta la interrup-
10 ON KEY GOSUB 1000 ción hasta que más adelante se le de una orden del tipo KEY (n)
20 KEY Cl) ON ON.
30 SCREEN 2
40 LINE C30,50J-Cl00,250J,,B Dado que exiten 10 teclas de función (incluyendo mayúscu-
50 GOTO 40 las) cinco posibles disparadores de joystick (que van del Oal 4),
1000 REM SUBRUTINA DE INTERRUPCION si añadimos las posibilidades de INTERVAL SPRITE y STOP
1100 CLS nos encontramos con la posibilidad de gestionar 18 subrutinas
1200 FOR !=10 TO 100 STEP 10 de interrupción independientes. Si unimos a éstas la posibili-
1300 CIRCLE C130,58J,I,,,l,.71 dad de produ~ir interrupciones anidadas de.n~r? de otras, po~
1400 NEXT ! condiciones diferentes, veremos que las pos1bihdades son casi
1500 CLS ilimitadas, aunque exigen una programación minuciosa. Los
1 1600 RETURN programll.s de la página siguiente nos ilustran al respecto.
!
~ Evidentemente, se pueden forzar interrupciones dentro de Recuerde que cuando se acepta una interrupción, ésta se
l una rutina de interrupción (interrupción anidada). Para ello
basta con introducir dentro de esta otra instrucción del tipo
produce al terminar la ejecución de la sentencia BASIC en cur-
so y RETURN devuelve el flujo del programa a la siguiente sen-
KEY (n) ON, con lo cual si se produce una nueva condición, la tencia. Además, tenga cuidado si utiliza un valor para «INTER-
rutina se ejecuta otra vez desde el principio sin esperar al final y VAL ON » muy pequeño, pues es posible que nunca llegue asa-
1
¡¡
luego sigue con la primera interrupción de forma similar a la lir de la rutina de interrupción (su valor ·máximo, puede ser
técnica de los bucles anidados. 65535).
1: J

.~ 94 95
anterior orden y es en ese momento, cuando el ordenador em- 10 ON KEY GOSUB 60
pieza a investigar si se cumple la condición de interrupción 20 KEY ClJ ON
(apretar una tecla, la barra de espacios, el disparador de joys- 30 SCREEN 2
tick, etc), y cuando esto se cumple se empieza a ejecutar la su- 40 LINE C30,50J-Cl00,250),,8
brutina cuyo inicie;> está en la líllea definida enla primera ins- 50 GOTO 40
trucción ON KEY GOSUB (n). Por ejemplo, si durante un 60 REM SUBRUTINA DE INTERRUPCION
programa preparamos una interrupción definida mediante ON 70 KEY ClJ ON
KEY GOSUB 1000 y la activamos mediante KEY (1) ON, en 80 BEEP:CLS
cuanto pulsemos la tecla de función número 1 el flujo del pro- 50 FOR I = 10 TO 50 STEP 10
grama salta a la línea 1000 y ejecutan las instrucciones que en- 100 CIRCLE C130,58),l,,,4,.71.
cuentre hasta la instrucción RETURN, que devuelve el control 110 NEXT I
a la línea siguiente a la que se encontraba antes de pulsar la tecla 120 CLS
130 RETURN 40
de función. Si durante la ejecución de la subutina se vuelve a
dar la condición de interrupción, mediante la tecla de función
número 1 (o mediante otro dispositivo de interrupción previa-
mente definido) la subrutina sigue ejecutándose y al regresar Si por el contrario queremos, que una vez ejecutada la pri-
tras el RETURN al programa principal, antes de continuar mera interrupción no sean posibles nuevas interrupciones nos
vuelve a ejecutar la subrutina de interrupción. Es decir que basta con introducir una instrucción del tipo KEY (n) OFF con
identifica la nueva condición de interrupción y se reserva su eje- lo cual el ordenador ignora la condición impuesta. Finalmente,
cución para cuando haya terminado de ejecutar la primera. con las instrucciones del tipo KEY (n) STOP se consigue que
reconozca la condición impuesta, pero no ejecuta la interrup-
10 ON KEY GOSUB 1000 ción hasta que más adelante se le de una orden del tipo KEY (n)
20 KEY Cl) ON ON.
30 SCREEN 2
40 LINE C30,50J-Cl00,250J,,B Dado que exiten 10 teclas de función (incluyendo mayúscu-
50 GOTO 40 las) cinco posibles disparadores de joystick (que van del Oal 4),
1000 REM SUBRUTINA DE INTERRUPCION si añadimos las posibilidades de INTERVAL SPRITE y STOP
1100 CLS nos encontramos con la posibilidad de gestionar 18 subrutinas
1200 FOR !=10 TO 100 STEP 10 de interrupción independientes. Si unimos a éstas la posibili-
1300 CIRCLE C130,58J,I,,,l,.71 dad de produ~ir interrupciones anidadas de.n~r? de otras, po~
1400 NEXT ! condiciones diferentes, veremos que las pos1bihdades son casi
1500 CLS ilimitadas, aunque exigen una programación minuciosa. Los
1 1600 RETURN programll.s de la página siguiente nos ilustran al respecto.
!
~ Evidentemente, se pueden forzar interrupciones dentro de Recuerde que cuando se acepta una interrupción, ésta se
l una rutina de interrupción (interrupción anidada). Para ello
basta con introducir dentro de esta otra instrucción del tipo
produce al terminar la ejecución de la sentencia BASIC en cur-
so y RETURN devuelve el flujo del programa a la siguiente sen-
KEY (n) ON, con lo cual si se produce una nueva condición, la tencia. Además, tenga cuidado si utiliza un valor para «INTER-
rutina se ejecuta otra vez desde el principio sin esperar al final y VAL ON » muy pequeño, pues es posible que nunca llegue asa-
1
¡¡
luego sigue con la primera interrupción de forma similar a la lir de la rutina de interrupción (su valor ·máximo, puede ser
técnica de los bucles anidados. 65535).
1: J

.~ 94 95
170 PRINT "Hola 11
10 esto es un ejemplo 180 GOTO 170
20 de on sprite gosub 191ZJ PRINT "Hola de nuevo"
30 cuando los sprites 21ZJ0 GOTO 190
40 se solapan oiremos \ 210 PRINT "vaya,que pesado"
50 oiremos un beep. 1 220 GOTO 210
60 SCREEN 2
70 A$=CHR$(60l+CHR$<62l+CHR$C71l+CHR$C207l
80 B$=CHR$C63l+CHR$Cl26l+CHR$(124l+CHR$C56J
90 SPRITE$C0l=A$+B$
100 ON SPRITE GOSUB 170 llZJ ON STOP GOSUB 100
110 SPRITE ON 20 STOP ON
120 FOR X=0 TO 255 31ZJ PRINT "programa principal"
130 PUT SPRITE 0,CX,100l,15,0 41ZJ GOTO 40
140 PUT SPRITE 1,(255-X,100) ,10,0 51ZJ PRINT ''ctrl+stop ejecutado''
150 NEXT X 61ZJ RETURN 30
160 END
170 SPRITE OFF
180 BEEP
190 SPRITE ON
200 RETURN llZJ ON INTERVAL=50 GOSUB 101ZJ
21ZJ INTERVAL ON
31ZJ SCREEN 2,1
40 A$= CHR$C&H181+''(''+''~"
51ZJ B$= CHR$<&HFFl+CHR$C&H18l
10 ' ejemplo de on strig gosub 61ZJ C$= CHR$C&H18l+CHR$(&H181
20 ' cuando pulse la barra de 71ZJ 0$= CHR$C&H181
30 'espacios,aparecera hola, SIZJ SPRITE$(ll=A$+B$+C$+D$
40 'al no haberintroducido 91ZJ GOTO 90
50 · ninguna instruccion RETURN 100 X=INT<RND<ll*256J:Y=INT<RNDC11*192l
60 'no podemos salir de esta Íl0 C=INT<RND<11*14l+2
70 'sUbrrutina de interrupcion. 120 PUT SPRITE 1,<X,Yl ,C,1
80 'si pulsamos el disparador 130 RETURN 91ZJ
90 'del primer joistick,aparece 140 LLIST
100 'hola de nuevo, y si es el
110 ' el disparador del segundo
120 'joistick, entonces aparece
130 'otro mensaje.
140. ON STRIG GOSUB 170, 190, 210
150 STRIG<0l ON:STR!G<ll ON:STRIG<2l ON
160 GOTO 150

96
170 PRINT "Hola 11
10 esto es un ejemplo 180 GOTO 170
20 de on sprite gosub 191ZJ PRINT "Hola de nuevo"
30 cuando los sprites 21ZJ0 GOTO 190
40 se solapan oiremos \ 210 PRINT "vaya,que pesado"
50 oiremos un beep. 1 220 GOTO 210
60 SCREEN 2
70 A$=CHR$(60l+CHR$<62l+CHR$C71l+CHR$C207l
80 B$=CHR$C63l+CHR$Cl26l+CHR$(124l+CHR$C56J
90 SPRITE$C0l=A$+B$
100 ON SPRITE GOSUB 170 llZJ ON STOP GOSUB 100
110 SPRITE ON 20 STOP ON
120 FOR X=0 TO 255 31ZJ PRINT "programa principal"
130 PUT SPRITE 0,CX,100l,15,0 41ZJ GOTO 40
140 PUT SPRITE 1,(255-X,100) ,10,0 51ZJ PRINT ''ctrl+stop ejecutado''
150 NEXT X 61ZJ RETURN 30
160 END
170 SPRITE OFF
180 BEEP
190 SPRITE ON
200 RETURN llZJ ON INTERVAL=50 GOSUB 101ZJ
21ZJ INTERVAL ON
31ZJ SCREEN 2,1
40 A$= CHR$C&H181+''(''+''~"
51ZJ B$= CHR$<&HFFl+CHR$C&H18l
10 ' ejemplo de on strig gosub 61ZJ C$= CHR$C&H18l+CHR$(&H181
20 ' cuando pulse la barra de 71ZJ 0$= CHR$C&H181
30 'espacios,aparecera hola, SIZJ SPRITE$(ll=A$+B$+C$+D$
40 'al no haberintroducido 91ZJ GOTO 90
50 · ninguna instruccion RETURN 100 X=INT<RND<ll*256J:Y=INT<RNDC11*192l
60 'no podemos salir de esta Íl0 C=INT<RND<11*14l+2
70 'sUbrrutina de interrupcion. 120 PUT SPRITE 1,<X,Yl ,C,1
80 'si pulsamos el disparador 130 RETURN 91ZJ
90 'del primer joistick,aparece 140 LLIST
100 'hola de nuevo, y si es el
110 ' el disparador del segundo
120 'joistick, entonces aparece
130 'otro mensaje.
140. ON STRIG GOSUB 170, 190, 210
150 STRIG<0l ON:STR!G<ll ON:STRIG<2l ON
160 GOTO 150

96
1
1
CAPITULO XI dores MSX es el Z80. Este procesador es uno de los chips más
versátiles de su género.
Cuando programamos un micro MSX en BASIC sigue ne-
cesitando recibir sus instrucciones en su propio código de má-
quina, que es único para los Z80 e ininteligible para cualquier
otro microprocesador.
¿Cómo sabe el ordenador cómo reaccionar a las instruccio-
nes BASIC que le damos? De la misma manera que intentaría-
mos entender a alguien que nos hablara en arameo a través de
un intérprete.
!1' En términos del ordenador, un intérprete es un programa
¡:.
.'..i''.'.!' que convierte las instrucciones del lenguaje que usamos al códi-
1:·
go de máquina que emplea el procesador. Como esta cuestión
es bastante complicada y tiene que ser llevada al cabo con un
Introducción al lenguaje máquina máximo de eficacia tanto en términos de velocidad como en
términos del uso de memoria, el intérprete está generahnente
En esencia lo único que puede hacer un ordenador es mo- escrito en el propio código máquina. Un intérprete BASIC exa-
v~r números d_e _un lugar a otro y efec_tuar las más básicas opera- mina cada instrucción en particular que tecleamos y después
ciones matematlcas (suma y resta). Visto asi parece sorprenden- ejecuta un conjunto predeterminado de instrucciones en códi-
t~ que se los describa como aparatos potentes y capaces de rea- go de máquina para llevar a cabo la función deseada.
lizar un gran número de misiones. Un intérprete no es muy inteligente y es de hecho incapaz
U na de las razones que lo hace posible es que los micros do- de recordar la mayoría de las cosas que ha examinado anterior-
n:-ésticos son suministrados con un sistema que nos permite de- mente, tanto es así que tiene que hacer exactamente la misma
cirles qué tienen que hacer en un lenguaje que se aproxima mu- cosa una y otra vez.
cho más al inglés que al idioma que habla el propio aparato. Esto hace que la interpretación sea muy lenta. Aunque un
Programamos los aparatos en BASIC, un lengúaje de ordena- programa que escribimos parece funcionar a una velocidad tre-
dor diseñado para hacer la programación general bastante sim- menda, en términos de lo que es capaz el aparato, va muy lenta-
ple. · mente. Así que ¿qué significa esto? Simplemente que si quiere
Efectivamente, el lenguaje BASIC es el medio para llegar a escribir un programa muy rápido, BASIC no le servirá. Em-
un final y el final es la producción de un código que el ordena- pleando el BASIC significa también que muy a menudo muchas
dor entiende y que le hace reaccionar de la manera que quería- de las posibilidades de «bajo nivel» del aparato no están dispo'
mos originahnente. Pero el ordenador no sabe nada de BASIC nibles para nosotros a través del intérprete.
nada de variables y muy poco de cualquier cosa que pudiéra'. Un ejemplo ideal para ilustrar esto es un_programa de juego
mos considerar útil. Habla un lenguaje completamente diferen- donde estamos intentado mover un objeto fácil y velozmente a
te, extremadamente simple, llamado código de máquina. través de cierta área de la pantalla. La velocidad no puede ser
El código de máquina consiste en una corriente de números bi- realizada en BASIC y no hay instrucciones en BASIC que nos
narios (O y 1) que el aparato examina y que después le hacen permitan llevar a cabo este tipo de operación. En este tipo de si-
reaccionar en una manera que depende del diseño de uno de los tuaciones estamos invariablemente forzados a programar en el
chips que están en el interior del ordenador. mismo código de máquina.
Este chip es el microprocesador, que en todos los ordena- Acabamos de ver que el código de máquina no es otra cosa

98 99
1
1
CAPITULO XI dores MSX es el Z80. Este procesador es uno de los chips más
versátiles de su género.
Cuando programamos un micro MSX en BASIC sigue ne-
cesitando recibir sus instrucciones en su propio código de má-
quina, que es único para los Z80 e ininteligible para cualquier
otro microprocesador.
¿Cómo sabe el ordenador cómo reaccionar a las instruccio-
nes BASIC que le damos? De la misma manera que intentaría-
mos entender a alguien que nos hablara en arameo a través de
un intérprete.
!1' En términos del ordenador, un intérprete es un programa
¡:.
.'..i''.'.!' que convierte las instrucciones del lenguaje que usamos al códi-
1:·
go de máquina que emplea el procesador. Como esta cuestión
es bastante complicada y tiene que ser llevada al cabo con un
Introducción al lenguaje máquina máximo de eficacia tanto en términos de velocidad como en
términos del uso de memoria, el intérprete está generahnente
En esencia lo único que puede hacer un ordenador es mo- escrito en el propio código máquina. Un intérprete BASIC exa-
v~r números d_e _un lugar a otro y efec_tuar las más básicas opera- mina cada instrucción en particular que tecleamos y después
ciones matematlcas (suma y resta). Visto asi parece sorprenden- ejecuta un conjunto predeterminado de instrucciones en códi-
t~ que se los describa como aparatos potentes y capaces de rea- go de máquina para llevar a cabo la función deseada.
lizar un gran número de misiones. Un intérprete no es muy inteligente y es de hecho incapaz
U na de las razones que lo hace posible es que los micros do- de recordar la mayoría de las cosas que ha examinado anterior-
n:-ésticos son suministrados con un sistema que nos permite de- mente, tanto es así que tiene que hacer exactamente la misma
cirles qué tienen que hacer en un lenguaje que se aproxima mu- cosa una y otra vez.
cho más al inglés que al idioma que habla el propio aparato. Esto hace que la interpretación sea muy lenta. Aunque un
Programamos los aparatos en BASIC, un lengúaje de ordena- programa que escribimos parece funcionar a una velocidad tre-
dor diseñado para hacer la programación general bastante sim- menda, en términos de lo que es capaz el aparato, va muy lenta-
ple. · mente. Así que ¿qué significa esto? Simplemente que si quiere
Efectivamente, el lenguaje BASIC es el medio para llegar a escribir un programa muy rápido, BASIC no le servirá. Em-
un final y el final es la producción de un código que el ordena- pleando el BASIC significa también que muy a menudo muchas
dor entiende y que le hace reaccionar de la manera que quería- de las posibilidades de «bajo nivel» del aparato no están dispo'
mos originahnente. Pero el ordenador no sabe nada de BASIC nibles para nosotros a través del intérprete.
nada de variables y muy poco de cualquier cosa que pudiéra'. Un ejemplo ideal para ilustrar esto es un_programa de juego
mos considerar útil. Habla un lenguaje completamente diferen- donde estamos intentado mover un objeto fácil y velozmente a
te, extremadamente simple, llamado código de máquina. través de cierta área de la pantalla. La velocidad no puede ser
El código de máquina consiste en una corriente de números bi- realizada en BASIC y no hay instrucciones en BASIC que nos
narios (O y 1) que el aparato examina y que después le hacen permitan llevar a cabo este tipo de operación. En este tipo de si-
reaccionar en una manera que depende del diseño de uno de los tuaciones estamos invariablemente forzados a programar en el
chips que están en el interior del ordenador. mismo código de máquina.
Este chip es el microprocesador, que en todos los ordena- Acabamos de ver que el código de máquina no es otra cosa

98 99
De la sigl,lien~e manera traducimos Hexadecimal o binaria;
que una serie de números, así que a primera vista puede parecer los números decunales 0,32 Y 100
que la programación en código de máquina no va a ser una ocu-
pación muy divertida. Lo cual no deja de ser cierto, pues, una
auténtica programación en código de máquina, nos exige cono- &H20 &H64
&HOO~
~o ~o
cer a fondo el funcionamiento delmicroprocesador, que es má,s
de lo que se propone este libro. Sin embargo el BASIC MSX &Boo/o 0000 &Boofo &Bo1/o
dispone de un gran número de instrucciones tendentes a facili-
tar esta labor, así como otras, que nos permiten, con los conoci- y234 &HEA
mientos necesarios, manipular directamente en las áreas de me-
moria donde están ubica<los, datos e incluso instrucciones del
/ \
&B 1110 1010
programa. Efectivamente, la memoria de un ordenador se re-
parte entre dos grandes bloques, la RAM y la ROM. Tanto uno
como otro están compuestos por celdillas perfectamente nume- Con la notación decimal el número 65535 no nos salta a la
radas y ordenadas que el microprocesador controla. Estas cel- vista ni se nos presenta como important.e dentro.d.e la estHctu-
dillas están direccionadas por un número exclusivo para cada ra del microprocesador. Sin embargo, silo traducunos a exa-
una y suele utilizarse notación HEXADECIMAL para numerar decimal nos encontramos con
estas direcciones.
El principal interés de la notación HEXADECIMAL reside &H FFFF = 65535
en la facilidad para transformarla en binaria de un vistazo, sin
necesidad de cruculos aritméticos, mientras es evidente la difi- e es el to e máximo de memoria que puede direccionar el
cultad que entraña pasar de decimal a binario. La traducción de q~ p dor Z80A El kilo de los informáticos, la celebre
mrcroprocesa · d · al ( ·
HEXA a binario es directa según la siguiente tabla de conver- K se nos convierte en &H400 o sea 1024 en ec1m P.rec1sa-
sión:
m'ente es 1024 pára que sea redondo en HEXA; es n;uy un:J.')or-
o 00000000 00 tante no pensar que el. Kb)_'te es &HIOOO lo cual ser~an 4 . _
1 00000001 01 Mediante el programa mserto al final de este c~p1tulo J:ode
2 00000010 02 mos observar el contenido de l'.l~ área~ 4e.memona que. esee-
3 00000011 03 mos (introduciendo una direcc1on de m1c10 en Hexaaec1mal).
4 00000100 04 Así pues la memoria de un ordenador MSX se numera por
5 00000101 05 áreas desde &Hoooo (Hexadecimal O) hasta &HFFFF, e;~ un
6 00000110 06 aparato de 64Ky se reparte de la siguiente manera (ver gráfico)
7 00000111 07
8 00001000 08
9 00001001 .
09
10 00001010 OA
11 00001011 OB
12 00001100 ot
13 00001101 OD
14 00001110 OE
15 00001111 OF
101
100
De la sigl,lien~e manera traducimos Hexadecimal o binaria;
que una serie de números, así que a primera vista puede parecer los números decunales 0,32 Y 100
que la programación en código de máquina no va a ser una ocu-
pación muy divertida. Lo cual no deja de ser cierto, pues, una
auténtica programación en código de máquina, nos exige cono- &H20 &H64
&HOO~
~o ~o
cer a fondo el funcionamiento delmicroprocesador, que es má,s
de lo que se propone este libro. Sin embargo el BASIC MSX &Boo/o 0000 &Boofo &Bo1/o
dispone de un gran número de instrucciones tendentes a facili-
tar esta labor, así como otras, que nos permiten, con los conoci- y234 &HEA
mientos necesarios, manipular directamente en las áreas de me-
moria donde están ubica<los, datos e incluso instrucciones del
/ \
&B 1110 1010
programa. Efectivamente, la memoria de un ordenador se re-
parte entre dos grandes bloques, la RAM y la ROM. Tanto uno
como otro están compuestos por celdillas perfectamente nume- Con la notación decimal el número 65535 no nos salta a la
radas y ordenadas que el microprocesador controla. Estas cel- vista ni se nos presenta como important.e dentro.d.e la estHctu-
dillas están direccionadas por un número exclusivo para cada ra del microprocesador. Sin embargo, silo traducunos a exa-
una y suele utilizarse notación HEXADECIMAL para numerar decimal nos encontramos con
estas direcciones.
El principal interés de la notación HEXADECIMAL reside &H FFFF = 65535
en la facilidad para transformarla en binaria de un vistazo, sin
necesidad de cruculos aritméticos, mientras es evidente la difi- e es el to e máximo de memoria que puede direccionar el
cultad que entraña pasar de decimal a binario. La traducción de q~ p dor Z80A El kilo de los informáticos, la celebre
mrcroprocesa · d · al ( ·
HEXA a binario es directa según la siguiente tabla de conver- K se nos convierte en &H400 o sea 1024 en ec1m P.rec1sa-
sión:
m'ente es 1024 pára que sea redondo en HEXA; es n;uy un:J.')or-
o 00000000 00 tante no pensar que el. Kb)_'te es &HIOOO lo cual ser~an 4 . _
1 00000001 01 Mediante el programa mserto al final de este c~p1tulo J:ode
2 00000010 02 mos observar el contenido de l'.l~ área~ 4e.memona que. esee-
3 00000011 03 mos (introduciendo una direcc1on de m1c10 en Hexaaec1mal).
4 00000100 04 Así pues la memoria de un ordenador MSX se numera por
5 00000101 05 áreas desde &Hoooo (Hexadecimal O) hasta &HFFFF, e;~ un
6 00000110 06 aparato de 64Ky se reparte de la siguiente manera (ver gráfico)
7 00000111 07
8 00001000 08
9 00001001 .
09
10 00001010 OA
11 00001011 OB
12 00001100 ot
13 00001101 OD
14 00001110 OE
15 00001111 OF
101
100
11
MAPA DE MEMORIA 1 Aree de programa ,
CON FIGURACION Almacena un programa con sus nu-
&HFFFF
&HF380
AREA DE TRABAJO SISTEMATICO
BLOQUE DE CONTROL DE ARCHIVO
AREA DE CADENAS
'
1
DELAREA
meres de linea.

Area de variables
Almacena datos numéricos y los
1 punteros para los datos alfanuméri-
f¡,'l
li
AREADEAPILADO
AREALIBRE
DEL USUARIO cos.

Area de variables de matriz


1¡..·. Almacena los datos de las variables
VARIABLE de matriz. También almacena el
i:1:
\),i
puntero para el área de cadenas si
:¡¡ &HSOOO AREADE PROGRAMA BASIC los datos son alfanuméricos.
&HCOOO
lili para16KMSX Area libre
Ji¡'1
1 &H8000 No utilizada. El tamaño podrá cono-
1 : cerse utilizando la función FRE.
¡:¡ &HOOOO ROM DEMSX BASIC (&HCOOO)
Área de programa
1
l¡l Area de la plla
'•...\ Utilizada para guardar direcciones
Área de variables de retorno.
111 &HOOOO

111
MAPA Área de variables de matriz

Area libre
Area de cadenas
Almacena cadenas inciuyendo las
variables y variables de matriz alfa-
DELA
.

numéricas.
'l.'li ROM del BASIC MSX
Area de la pila El tamaño podrá especificarse con
una sentencia CLEAR.
I!
¡! •.
l :Í
!
MEMORIA Area de cadenas

Bloque de control de archivos


Bloque de control de archivos
Utilizado durante la entrada/salida
¡,1'I' &HF37F
de archivos.

&H8000
'!
i!'"·!:
! ' Area 2 de usuario
de &HOOOO a &80000 se encuentra la ROM o memoria de solo
lectura, pues no podemos alterar su contenido (esta memoria
&HCOOO Cuando la AAM
instalada sea de
no desaparece al desenchufar el ordenador). Es en esta memo-
Area 1 de usuano
64K bytes. l ria ROM donde se encuentra el traductor de BASIC a lenguaje
Cuando la RAM
máquina y las rutinas necesarias para el funcionamiento del sis-
&HF380
instalada sea de
16K bytes. 1 tema, rutinas de I/O, gestión de periféricos, etc, etc, De la
Area del sistema &H80000 a la &HF380 (siempre en el caso de un aparato con
&HFFFF 64K), disponemos de _espacio para introducir programas en

103
102
11
MAPA DE MEMORIA 1 Aree de programa ,
CON FIGURACION Almacena un programa con sus nu-
&HFFFF
&HF380
AREA DE TRABAJO SISTEMATICO
BLOQUE DE CONTROL DE ARCHIVO
AREA DE CADENAS
'
1
DELAREA
meres de linea.

Area de variables
Almacena datos numéricos y los
1 punteros para los datos alfanuméri-
f¡,'l
li
AREADEAPILADO
AREALIBRE
DEL USUARIO cos.

Area de variables de matriz


1¡..·. Almacena los datos de las variables
VARIABLE de matriz. También almacena el
i:1:
\),i
puntero para el área de cadenas si
:¡¡ &HSOOO AREADE PROGRAMA BASIC los datos son alfanuméricos.
&HCOOO
lili para16KMSX Area libre
Ji¡'1
1 &H8000 No utilizada. El tamaño podrá cono-
1 : cerse utilizando la función FRE.
¡:¡ &HOOOO ROM DEMSX BASIC (&HCOOO)
Área de programa
1
l¡l Area de la plla
'•...\ Utilizada para guardar direcciones
Área de variables de retorno.
111 &HOOOO

111
MAPA Área de variables de matriz

Area libre
Area de cadenas
Almacena cadenas inciuyendo las
variables y variables de matriz alfa-
DELA
.

numéricas.
'l.'li ROM del BASIC MSX
Area de la pila El tamaño podrá especificarse con
una sentencia CLEAR.
I!
¡! •.
l :Í
!
MEMORIA Area de cadenas

Bloque de control de archivos


Bloque de control de archivos
Utilizado durante la entrada/salida
¡,1'I' &HF37F
de archivos.

&H8000
'!
i!'"·!:
! ' Area 2 de usuario
de &HOOOO a &80000 se encuentra la ROM o memoria de solo
lectura, pues no podemos alterar su contenido (esta memoria
&HCOOO Cuando la AAM
instalada sea de
no desaparece al desenchufar el ordenador). Es en esta memo-
Area 1 de usuano
64K bytes. l ria ROM donde se encuentra el traductor de BASIC a lenguaje
Cuando la RAM
máquina y las rutinas necesarias para el funcionamiento del sis-
&HF380
instalada sea de
16K bytes. 1 tema, rutinas de I/O, gestión de periféricos, etc, etc, De la
Area del sistema &H80000 a la &HF380 (siempre en el caso de un aparato con
&HFFFF 64K), disponemos de _espacio para introducir programas en

103
102
BASIC, y desde allí a la &HFFFF, es la zona del sistema en que Ejemplos:
se ahnacenan los valores de las variables, las cadenas y tablas CLEAR limpia el área de variables, borrándolo todo.
así como los espacios para dispositivos de archivo que creamo~ CLEAR 255 aumenta el área de trabajo de cadena a 255
con la instrucción MAXFILES, y es llamada área de trabajo del bytes. 'd.
sistema; Este espacio se puede modificar con la instrucción CLEAR, &HF 300 crea espacio para el programa en co igo
CLEAR. Estas dos últimas divisiones de la memoria reciben el de máquina del usuario entre &HF300 y &HF380.
nombre de RAM (Random Acces Memory) memoria de acceso Existen en el BASIC MSX una serie de instrucciones que
aleatorio, pues en ellas podemos grabar y leer, aunque por ello nos facilitan la labor de introducir programas en lenguaje má-
también su contenido desaparece al desconéctar el aparato quina y su posterior .:;jecu~iói;i, asimism~>, es posible, el introdu-
(RESET). cir rutinas en lengua¡e maquma y ser e¡ecuta?.as des~e ~m pr~­
Mediante la instrucción CLEAR podemos reservar en la grama en BASIC, sin emba~go. la programac101! en codi¡i;o ma-
RAM un espacio para rutinas en código máquina. quina, requiere unos conoc1m1entos de la arquitectur:i mt.erna
Ya vimos la instrucción CLEAR en el capítulo sobre series_y del ordenador, y sus registros, así como alguna exl?eriencia en
tablas, a1:1nque aquí nos interese su segundo parámetro, que allí lenguaje ensamblador, po.r lo que c:omentaremos sm entrar en
no estudiamos. pormenores estas senten~ias Y. funciones. . .,
Con CLEAR se puede reservar espacio de memoria para va- Mediante DEFUSR smtax1s DEFUSR (A) = (drreccion me-
r~ables de cadena y código de máquina en el área de trabajo de moria) ' d · d
sistema. Podemos introducir en la dirección expresa a una serie e
Se puede reservar espacio de memoria cambiando el área de las rutinas en lenguaje máquina que irán numeradas de Oa 9 [el
memoria más alto disponible para el uso de BASIC. El área de número lo colocaremos en (A)] la dirección es, n:ituralment~, la
memoria más alta por defecto es &HF380 pero puedes bajarla dirección de inicio de la subrutina, pues ésta tiene ya el fmal
usando CLEAR,(men-alt). El espacio de memoria creado pue- marcado mediante un código END o de final de programa.
de ser usado para almacenar programas en código de máquina Como nada nos prohibe introducir una dirección de memoria
y datos. de la ROM con el suficiente conocimiento, del FIRMWARE
El área de memoria entre &HFFFF y &HF380 es usado por podemos u~ilizar las rutinas del sistema operativo, en nuestro
el ROM de BASIC como espacio de trabajo de sistema. provecho, durante la ejecución de nuestros programas en BA-
Recuerda que CLEAR (espacio de cadena) decide el tama- SIC.
ño del espacio para cadenas. Para llamar a la ejecución a cualquier su~;utina d~finid.a
j por DEFUSR, necesitaremos utilizar una funcion USR smtaxis
SYNTAXIS x = USR (A) (expresión) en la que A es el número gue le he~os
CLEAR 1 dado a la subrutina en la instruccióf'. DEFUSR? y la expresion,
(espacio de cadena) Decide el tamaño del espacio para 1 es la evaluada mediante esta subrutma, es dec1!, el valo~ d.:; la
las cadenas expresión, pasa a ser argumento del la su~~utma en maq1:1mª.
CLEAR, (mem-alt) Decide el lugar de memoria más alto (dicho de otra manera, el valor de la expresion, sera el mampu-
disponible paraBASIC (la coma, anula lado, mediante la subrutina definida).
el l.°' parámetro)
CLEAR Ejemplo si mediante una sentencia DEFUSR preparamos
(espacio de cadena) Decide el tamaño del esf acio de la entrada a ia subrutina del sistema operativ:o que se encuei:tra
CLEAR, (mem-alt) cadena como también e lugar más alto alojada en la dirección &H003E y lue_go la eJecutamos median-
de memoria disponible para BASIC te un USR repondremos todos los valores de las teclas de func.

104
BASIC, y desde allí a la &HFFFF, es la zona del sistema en que Ejemplos:
se ahnacenan los valores de las variables, las cadenas y tablas CLEAR limpia el área de variables, borrándolo todo.
así como los espacios para dispositivos de archivo que creamo~ CLEAR 255 aumenta el área de trabajo de cadena a 255
con la instrucción MAXFILES, y es llamada área de trabajo del bytes. 'd.
sistema; Este espacio se puede modificar con la instrucción CLEAR, &HF 300 crea espacio para el programa en co igo
CLEAR. Estas dos últimas divisiones de la memoria reciben el de máquina del usuario entre &HF300 y &HF380.
nombre de RAM (Random Acces Memory) memoria de acceso Existen en el BASIC MSX una serie de instrucciones que
aleatorio, pues en ellas podemos grabar y leer, aunque por ello nos facilitan la labor de introducir programas en lenguaje má-
también su contenido desaparece al desconéctar el aparato quina y su posterior .:;jecu~iói;i, asimism~>, es posible, el introdu-
(RESET). cir rutinas en lengua¡e maquma y ser e¡ecuta?.as des~e ~m pr~­
Mediante la instrucción CLEAR podemos reservar en la grama en BASIC, sin emba~go. la programac101! en codi¡i;o ma-
RAM un espacio para rutinas en código máquina. quina, requiere unos conoc1m1entos de la arquitectur:i mt.erna
Ya vimos la instrucción CLEAR en el capítulo sobre series_y del ordenador, y sus registros, así como alguna exl?eriencia en
tablas, a1:1nque aquí nos interese su segundo parámetro, que allí lenguaje ensamblador, po.r lo que c:omentaremos sm entrar en
no estudiamos. pormenores estas senten~ias Y. funciones. . .,
Con CLEAR se puede reservar espacio de memoria para va- Mediante DEFUSR smtax1s DEFUSR (A) = (drreccion me-
r~ables de cadena y código de máquina en el área de trabajo de moria) ' d · d
sistema. Podemos introducir en la dirección expresa a una serie e
Se puede reservar espacio de memoria cambiando el área de las rutinas en lenguaje máquina que irán numeradas de Oa 9 [el
memoria más alto disponible para el uso de BASIC. El área de número lo colocaremos en (A)] la dirección es, n:ituralment~, la
memoria más alta por defecto es &HF380 pero puedes bajarla dirección de inicio de la subrutina, pues ésta tiene ya el fmal
usando CLEAR,(men-alt). El espacio de memoria creado pue- marcado mediante un código END o de final de programa.
de ser usado para almacenar programas en código de máquina Como nada nos prohibe introducir una dirección de memoria
y datos. de la ROM con el suficiente conocimiento, del FIRMWARE
El área de memoria entre &HFFFF y &HF380 es usado por podemos u~ilizar las rutinas del sistema operativo, en nuestro
el ROM de BASIC como espacio de trabajo de sistema. provecho, durante la ejecución de nuestros programas en BA-
Recuerda que CLEAR (espacio de cadena) decide el tama- SIC.
ño del espacio para cadenas. Para llamar a la ejecución a cualquier su~;utina d~finid.a
j por DEFUSR, necesitaremos utilizar una funcion USR smtaxis
SYNTAXIS x = USR (A) (expresión) en la que A es el número gue le he~os
CLEAR 1 dado a la subrutina en la instruccióf'. DEFUSR? y la expresion,
(espacio de cadena) Decide el tamaño del espacio para 1 es la evaluada mediante esta subrutma, es dec1!, el valo~ d.:; la
las cadenas expresión, pasa a ser argumento del la su~~utma en maq1:1mª.
CLEAR, (mem-alt) Decide el lugar de memoria más alto (dicho de otra manera, el valor de la expresion, sera el mampu-
disponible paraBASIC (la coma, anula lado, mediante la subrutina definida).
el l.°' parámetro)
CLEAR Ejemplo si mediante una sentencia DEFUSR preparamos
(espacio de cadena) Decide el tamaño del esf acio de la entrada a ia subrutina del sistema operativ:o que se encuei:tra
CLEAR, (mem-alt) cadena como también e lugar más alto alojada en la dirección &H003E y lue_go la eJecutamos median-
de memoria disponible para BASIC te un USR repondremos todos los valores de las teclas de func.

104
ción a sus valores por defecto (los de la puesta en marcha). Para o 1 2 3 4 5 6 7
c?_mprobarl~, prin;i~ro ~odifica los valores de las tedas de fun-
cion y a contmuacion ejecuta estas líneas de programa. 1 2 4 8 16 32 64 J 12s J

10 DEFSR3 = &H003E 2º 21 22 23 24 25 26 27
20 x = USR3(x)
Por lo tanto, si hacemos un poke a una dirección de memo-
En este caso la expresión x sólo tiene una valor sintáctico ria cualquiera, y ponemos como contenido de esa dirección 1,
p_ues en la s:ibr:itin_a ejec;.itada no intervienen cakulos ni opera~ querrá decir que hemos encendido el primer bit de ese byte, de
\iones de nmgun tipo. Sm embargo, obsérvese la forma de uti- tal mlmera· si sabemos qué bits de cada byte queremos encen-
lizar USR,. quepo~ otro lado .es típica de una función. der o apag~r), simplemente debemos calcular la potencia a que
~s. decir en la h~ea 20 decimos que X es igual al resultado de debe ser elevado 2, y en su caso (si deseamos encender o apagar
mod!fi~ar el ~on~erudo p~iI?ario mediante la subrutina 3 escrita varios) realizar las sumas pertinentes. Si por error diéramos un
en codigo maquma y definida en la línea 10. Para volver al BA- valor mayor que 255 obtendríamos «Ille~al functioi;i call:~·
SIC se utiliza una sentencia RET. La función PEEK nos da el contemdo de la direcc1on de
. Las,do~ instrucc~ones más.importantes para trabajar en có- memoria que especifiquemos entre paréntesis. Por ejemplo
digo maquma. s<;>n, sm en;bargo PEEK y POKE, con las cuales PEEK(65535). En esencia, es la herramienta que nos permite
podemos e;scnbir y leer directamente, los contenidos de un área ver el contenido de cualquier posición de memoria deseada.
de memona, me<;Iiante su dirección y de esta forma escribir los ¡Cuidado conPOKE!. Si toca un área del sistema o se intro-
programas que ejectutaremos con USR. duce un contenido incorr_ecto er;. una direcc_ión puede bloquear
el programa, y sólo podra solucionarlo haciendo RESET.
POKE (dirección de memoria) (VALOR)

f'.OKE y PEEK son dos sentencias del BASIC íntimamente VPEEK y VPOKE
relacionadas c<;>n el lenguaje máquina.
La sentencia POKE, como hemos visto en su sintaxis está Corresponden exactamente a PEEK y POKE, pero afectan
formada po~ dos.~alores separ~dos por una coma(,). El primer a la RAM de Vídeo o VRAM que dispone de 16 K. indepen-
valor es la direccion de memona que deseemos modificar y tie- dientes para gestión de pantalla. .
ne que ser un valor numérico comprendido entre O y 65535. Gracias al chip de vídeo TMS-9924A podemos realizar ui;ia
El ~egundo v~or r~presenta el contenido que deseemos in- gran cantidad de operaciones sin ocupar memoria RAM del sis-
~ro_ducir en esa dirección. Naturalmente, cada dirección es un tema.
uruco. byte que_ puede tomar 256 (2 8) valores diferentes que
const~tuye la um~ad de aln;acenamiento de datos más pequeña La sintaxis es similar a PEEK o POKE
accesibl~ al usu31no. ¿De donde surgen estas 256 posibilidades? X = VPEEK (dirección)
Nada mas sencillo:
VPOKE (dirección), (VALOR)
Sabemos que cada byte está compuesto por 8 bits. Imagine-
mos que estos bits están orde;nados de menor a mayor (de Oa 7) y los datos máximos que podemos dar a dirección y valor
Yque cada !:!no de <;!Stos o:dma}es corresponde a una potencia son 16385 y 255 respectivamen!e, pues sólo disp'?nemos de 16
de 2. Es 1decir, el primer bit sera 20, por lo tanto igual a 1 el se- K.(16383 bits), y de una capacidad de almacenaje de un byte
gundo 2 (2); el tercero 22 (4)... '
(valor máximo contenido en un byte = 255) ..
106
107
ción a sus valores por defecto (los de la puesta en marcha). Para o 1 2 3 4 5 6 7
c?_mprobarl~, prin;i~ro ~odifica los valores de las tedas de fun-
cion y a contmuacion ejecuta estas líneas de programa. 1 2 4 8 16 32 64 J 12s J

10 DEFSR3 = &H003E 2º 21 22 23 24 25 26 27
20 x = USR3(x)
Por lo tanto, si hacemos un poke a una dirección de memo-
En este caso la expresión x sólo tiene una valor sintáctico ria cualquiera, y ponemos como contenido de esa dirección 1,
p_ues en la s:ibr:itin_a ejec;.itada no intervienen cakulos ni opera~ querrá decir que hemos encendido el primer bit de ese byte, de
\iones de nmgun tipo. Sm embargo, obsérvese la forma de uti- tal mlmera· si sabemos qué bits de cada byte queremos encen-
lizar USR,. quepo~ otro lado .es típica de una función. der o apag~r), simplemente debemos calcular la potencia a que
~s. decir en la h~ea 20 decimos que X es igual al resultado de debe ser elevado 2, y en su caso (si deseamos encender o apagar
mod!fi~ar el ~on~erudo p~iI?ario mediante la subrutina 3 escrita varios) realizar las sumas pertinentes. Si por error diéramos un
en codigo maquma y definida en la línea 10. Para volver al BA- valor mayor que 255 obtendríamos «Ille~al functioi;i call:~·
SIC se utiliza una sentencia RET. La función PEEK nos da el contemdo de la direcc1on de
. Las,do~ instrucc~ones más.importantes para trabajar en có- memoria que especifiquemos entre paréntesis. Por ejemplo
digo maquma. s<;>n, sm en;bargo PEEK y POKE, con las cuales PEEK(65535). En esencia, es la herramienta que nos permite
podemos e;scnbir y leer directamente, los contenidos de un área ver el contenido de cualquier posición de memoria deseada.
de memona, me<;Iiante su dirección y de esta forma escribir los ¡Cuidado conPOKE!. Si toca un área del sistema o se intro-
programas que ejectutaremos con USR. duce un contenido incorr_ecto er;. una direcc_ión puede bloquear
el programa, y sólo podra solucionarlo haciendo RESET.
POKE (dirección de memoria) (VALOR)

f'.OKE y PEEK son dos sentencias del BASIC íntimamente VPEEK y VPOKE
relacionadas c<;>n el lenguaje máquina.
La sentencia POKE, como hemos visto en su sintaxis está Corresponden exactamente a PEEK y POKE, pero afectan
formada po~ dos.~alores separ~dos por una coma(,). El primer a la RAM de Vídeo o VRAM que dispone de 16 K. indepen-
valor es la direccion de memona que deseemos modificar y tie- dientes para gestión de pantalla. .
ne que ser un valor numérico comprendido entre O y 65535. Gracias al chip de vídeo TMS-9924A podemos realizar ui;ia
El ~egundo v~or r~presenta el contenido que deseemos in- gran cantidad de operaciones sin ocupar memoria RAM del sis-
~ro_ducir en esa dirección. Naturalmente, cada dirección es un tema.
uruco. byte que_ puede tomar 256 (2 8) valores diferentes que
const~tuye la um~ad de aln;acenamiento de datos más pequeña La sintaxis es similar a PEEK o POKE
accesibl~ al usu31no. ¿De donde surgen estas 256 posibilidades? X = VPEEK (dirección)
Nada mas sencillo:
VPOKE (dirección), (VALOR)
Sabemos que cada byte está compuesto por 8 bits. Imagine-
mos que estos bits están orde;nados de menor a mayor (de Oa 7) y los datos máximos que podemos dar a dirección y valor
Yque cada !:!no de <;!Stos o:dma}es corresponde a una potencia son 16385 y 255 respectivamen!e, pues sólo disp'?nemos de 16
de 2. Es 1decir, el primer bit sera 20, por lo tanto igual a 1 el se- K.(16383 bits), y de una capacidad de almacenaje de un byte
gundo 2 (2); el tercero 22 (4)... '
(valor máximo contenido en un byte = 255) ..
106
107
La instrucción BASE y la VDP (que no estudiaremos), com-
pletan las utilidades de VPEEK y VPOKE.
Podemos ver sencillos ejemplos de estas instrucciones en
las carteleras de presentación de algunos de los programas de
música que damos a título de ejemplo.

1 'MSX PROGRAMAS
5 REM si se desea parar la pantalla opri
mlr stop, son otro stop la eJecucion con
tinu6..
10 SCREENJ!COLOR 1,14:KEY OFF
20 WIOTH 35
30 INPUT "Dirección inicial (en decimal)
n ;O
40 IF 0<0 OR 0>65535!THEN GOSUB 240
50 0$=STRING$(4-LENCHEX$COJJ,"0"J+HEX$CO
)
60 PRINT 0$:" ";
70 FOR I=0 T07 1
80 II=PEEKCD+IJ:II$=STRING$C2-LENCHEX$CI
Ill,''0'')+HEX$CIIJ
80 PRINT II$;" ";
100 NEXTI
110 FORI=0 TO 7
120 II=D+I
130 I I =PEEK CI IJ
140 IFII<32 THEN II=45
150 IF II>l26 THEN II=46
160 PRINT CHR$CIIJ:
170 NEXT I
180 PRINT
180 0=0+8
200 0$=INKEY$
210 IF 0$=" " THEN 30
220 GOTO 50
230 ENO
240 PRINT!PRINTTABC8l''*'';''Introducci6n e
250 GOSUB 260:RETURN
260 PRINT:PRINTTABC10)"Pulsa una tecla"
270 Z$=INKEY$:IF 2$="" THEN 270
280 RETURN

108
La instrucción BASE y la VDP (que no estudiaremos), com-
pletan las utilidades de VPEEK y VPOKE.
Podemos ver sencillos ejemplos de estas instrucciones en
las carteleras de presentación de algunos de los programas de
música que damos a título de ejemplo.

1 'MSX PROGRAMAS
5 REM si se desea parar la pantalla opri
mlr stop, son otro stop la eJecucion con
tinu6..
10 SCREENJ!COLOR 1,14:KEY OFF
20 WIOTH 35
30 INPUT "Dirección inicial (en decimal)
n ;O
40 IF 0<0 OR 0>65535!THEN GOSUB 240
50 0$=STRING$(4-LENCHEX$COJJ,"0"J+HEX$CO
)
60 PRINT 0$:" ";
70 FOR I=0 T07 1
80 II=PEEKCD+IJ:II$=STRING$C2-LENCHEX$CI
Ill,''0'')+HEX$CIIJ
80 PRINT II$;" ";
100 NEXTI
110 FORI=0 TO 7
120 II=D+I
130 I I =PEEK CI IJ
140 IFII<32 THEN II=45
150 IF II>l26 THEN II=46
160 PRINT CHR$CIIJ:
170 NEXT I
180 PRINT
180 0=0+8
200 0$=INKEY$
210 IF 0$=" " THEN 30
220 GOTO 50
230 ENO
240 PRINT!PRINTTABC8l''*'';''Introducci6n e
250 GOSUB 260:RETURN
260 PRINT:PRINTTABC10)"Pulsa una tecla"
270 Z$=INKEY$:IF 2$="" THEN 270
280 RETURN

108
150 LOCATE 7,16:PRINT"PULSA UNA LETRA"
160 Z$=INPUT$C1J:CLS
180 CLS:INPUT"entra un '<U<nero:":W
190 FORI=1TOW:Y=RNOC1J:NEXT
200 SCREENl:COLOR15,13,1l:~EYQcc:CLS
210 A$=""
220 FORI=1T010
ALFABETICO 230 U$=CHR$CINTCRNOC1J*10+65JJ
240 FOR.J=lTOI-1
250 IFU$=Ml0$CA$,.J,1JTHEN230
260 NEXT.J
270 A$=A$+U$
280 NEXTI
290 S=l
10 SCREEN0:CLS:COLOR 1,14,14 300 LOCATE0,4:PRINT"resultado:";A$
20 LOCATE 5,l:PRINT"Este Juego consiste 310 PRINTTABC10J:"0123456788"
en ll 320 LOCATE0, 9 :PRINT" intento numero" :s
30 LOCATE 5,2:PRINT''ordenar alfabeticame 330 LOCATE33,12:PRINT" "
n te 11
:
340 IFA$="abcdef9hij"THENPRINT"encontrad
0 en 11
;S: 11
intentos 11
:PLAY
11
a.bc~
1
:END
40 LOCATE 5,3:PRINT"la serie de letras q
ue aparece .. ¡¡
350 LOCATE0, 12: INPUT" i nve rs i º" Cfo rma a,
bJ:";R$
50 LOCATE 5,4:PRINT''Para ello te servira 360 I=ASCCLEFT$CU$,1JJ-47
s de u

60 LOCATE 5,5:PRINT"los 370 .J=ASCCRIGHT$CU$,1JJ-47


nume ros que ha8 380 GOSUB440
debajo 11

70 LOCATE 5,6 :PRINT"de cada letra.Debes 390 IFLEFT$CU$,1)="0"0RLEFT$(U$,1J="8"TH


i nt roduc i rl! EN410
400 I=I-1:.J=I+2
80 LOCATE 5,7 :PRINT"un numero de 2 c ifr
as : 11 410 GOSUB440
420 S=S+l
90 LOCATE 5,8 :PRINT"La primera debe ser 430 GOT0300
la de debajo"
440 8$=""
100 LOCATE 5,9 :PRINT''de la letra que va
s a su s t i t u i r 11 450 FORT=1TOLENCA$J
460 IFT=ITHENN$=Ml0$CA$,T,1J
110 LOCATE 5,10:PRINT''la segunda, la de
la. letra. que n
470 IFT=.JTHENM$=Ml0$CA$,T,1J
115 LOCATE 5, 11 :PRINT"sust itu;Jes." 480 NEXTT
120 LOCATE 5,12:PRINT''La partida finaliz 490 FORT=1TOLENCA$J
a " 500 IFT=ITHENB$=8$+M$:GOT0530
510 IFT=.JTHENB$=8$+N$:GOT0530
130 LOCATE 5,13:PRINT''cuando las has ord 520 B$=8$+Ml0$CA$,T,1J
en a.don
530 NEXTT
140 LOCATE 5.14:PRINT''correctamente toda 540 A$=B$
s .. !l

550 RETURN
110
111
150 LOCATE 7,16:PRINT"PULSA UNA LETRA"
160 Z$=INPUT$C1J:CLS
180 CLS:INPUT"entra un '<U<nero:":W
190 FORI=1TOW:Y=RNOC1J:NEXT
200 SCREENl:COLOR15,13,1l:~EYQcc:CLS
210 A$=""
220 FORI=1T010
ALFABETICO 230 U$=CHR$CINTCRNOC1J*10+65JJ
240 FOR.J=lTOI-1
250 IFU$=Ml0$CA$,.J,1JTHEN230
260 NEXT.J
270 A$=A$+U$
280 NEXTI
290 S=l
10 SCREEN0:CLS:COLOR 1,14,14 300 LOCATE0,4:PRINT"resultado:";A$
20 LOCATE 5,l:PRINT"Este Juego consiste 310 PRINTTABC10J:"0123456788"
en ll 320 LOCATE0, 9 :PRINT" intento numero" :s
30 LOCATE 5,2:PRINT''ordenar alfabeticame 330 LOCATE33,12:PRINT" "
n te 11
:
340 IFA$="abcdef9hij"THENPRINT"encontrad
0 en 11
;S: 11
intentos 11
:PLAY
11
a.bc~
1
:END
40 LOCATE 5,3:PRINT"la serie de letras q
ue aparece .. ¡¡
350 LOCATE0, 12: INPUT" i nve rs i º" Cfo rma a,
bJ:";R$
50 LOCATE 5,4:PRINT''Para ello te servira 360 I=ASCCLEFT$CU$,1JJ-47
s de u

60 LOCATE 5,5:PRINT"los 370 .J=ASCCRIGHT$CU$,1JJ-47


nume ros que ha8 380 GOSUB440
debajo 11

70 LOCATE 5,6 :PRINT"de cada letra.Debes 390 IFLEFT$CU$,1)="0"0RLEFT$(U$,1J="8"TH


i nt roduc i rl! EN410
400 I=I-1:.J=I+2
80 LOCATE 5,7 :PRINT"un numero de 2 c ifr
as : 11 410 GOSUB440
420 S=S+l
90 LOCATE 5,8 :PRINT"La primera debe ser 430 GOT0300
la de debajo"
440 8$=""
100 LOCATE 5,9 :PRINT''de la letra que va
s a su s t i t u i r 11 450 FORT=1TOLENCA$J
460 IFT=ITHENN$=Ml0$CA$,T,1J
110 LOCATE 5,10:PRINT''la segunda, la de
la. letra. que n
470 IFT=.JTHENM$=Ml0$CA$,T,1J
115 LOCATE 5, 11 :PRINT"sust itu;Jes." 480 NEXTT
120 LOCATE 5,12:PRINT''La partida finaliz 490 FORT=1TOLENCA$J
a " 500 IFT=ITHENB$=8$+M$:GOT0530
510 IFT=.JTHENB$=8$+N$:GOT0530
130 LOCATE 5,13:PRINT''cuando las has ord 520 B$=8$+Ml0$CA$,T,1J
en a.don
530 NEXTT
140 LOCATE 5.14:PRINT''correctamente toda 540 A$=B$
s .. !l

550 RETURN
110
111
CANON A TRES VOCES MOONGERMS

10 '********************************
20
30
'*
'* MOON GERMS **
40
50
'*
'* JOE FARRELL **
60 '* *
70 '********************************
80 GOSUB 180
90 PLAY "04"
100 A$="T200R2R8L8C#F#A#A05C#L4C#L8C05EL
10 ·~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 4ER4C#04A#.L8G#L1G#R2R805L8F#D#C#C#04A#O
20 ·~ ~ 5L2C#.L4C#.04L8A#L2A#L405C#L2E.L4A.L8F#L
30 '~ CANON A TRES UOCES ~ 4F#F,O.C#L804G#A#L2A#L405C#L404A#L1A#''
40 ·~ ~ 110 8$="T200R2R8L8C#F#A#AG#L4G#05CCR404G
50 ·~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ #F#.L8D#L10# R2R805L8F#0#04G#L4G#L2G#.L4
60 CLS G#.L8F#L2F#L4G#05L2C.L4E.C#.C.04A#.G#L80
100 A$=''12o4al4o5co4ag#bo5el8edl2c.18cdl #F#L2F#L4G#F#L1F#''
4eo4bg#el2f.14feg#bo5el2d#l4d#d#llo5el2o 120 C$=''T200R2R8L8C#F#A#AD#L40#L805C04GL
4al4o5co4ag#bo5el8edl2c.18cdl4eo4bg#el2f 4GR40#C#.03L8A#L1A#R2R805L8F#0#04D#L40#L
.14feg#bo5el2d#l4d#d#llo5•'' 20#.L40#.L8C#L2C#L40#L2G.L48.L8G#L4G#GL8
110 8$=''rlrll2o4al4o5co4ag#bo5el8edl2c.l GL4F.003L8A#04C#L2C#L40#C#LlC#''
8cdl4eo4bg#el2f.14feg#bo5el2d#l4d#d#llo5 1 130 PLAY"S3M8000","SlM20000","Ul2"
el2o4al4o5co4ag#bo5el8edl2c.18cdl4eo4bg# 140 FOR A= l TO 2
e12f.14feg#bo5e12d#l4d#d#llo5e" 1
150 PLAY A•.s•.c•
120 c•=''rlrlrlr112o4al4o5co4ag#bo5el8edl 160 NEXT
2c.18cdl4eo4bg#e12f.14feg#bo5el2d#l4d#d# 170 GOTO 170
11o5e12o4a14o5co4ag#bo5e18edl2c.18cdl4eo 180 SCREEN 3:FOR A=50S TO 1022
4bg#e 12f. 14feg#bo5e 12ditl4d#d#l 1o5e" 190 VPOKE A,CRNOClJ~lllTl)
130 PLAY A$,8$,C$ 200 NEXT
140 PLAY 8$,C$,A$ 210 RETURN

112
CANON A TRES VOCES MOONGERMS

10 '********************************
20
30
'*
'* MOON GERMS **
40
50
'*
'* JOE FARRELL **
60 '* *
70 '********************************
80 GOSUB 180
90 PLAY "04"
100 A$="T200R2R8L8C#F#A#A05C#L4C#L8C05EL
10 ·~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 4ER4C#04A#.L8G#L1G#R2R805L8F#D#C#C#04A#O
20 ·~ ~ 5L2C#.L4C#.04L8A#L2A#L405C#L2E.L4A.L8F#L
30 '~ CANON A TRES UOCES ~ 4F#F,O.C#L804G#A#L2A#L405C#L404A#L1A#''
40 ·~ ~ 110 8$="T200R2R8L8C#F#A#AG#L4G#05CCR404G
50 ·~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ #F#.L8D#L10# R2R805L8F#0#04G#L4G#L2G#.L4
60 CLS G#.L8F#L2F#L4G#05L2C.L4E.C#.C.04A#.G#L80
100 A$=''12o4al4o5co4ag#bo5el8edl2c.18cdl #F#L2F#L4G#F#L1F#''
4eo4bg#el2f.14feg#bo5el2d#l4d#d#llo5el2o 120 C$=''T200R2R8L8C#F#A#AD#L40#L805C04GL
4al4o5co4ag#bo5el8edl2c.18cdl4eo4bg#el2f 4GR40#C#.03L8A#L1A#R2R805L8F#0#04D#L40#L
.14feg#bo5el2d#l4d#d#llo5•'' 20#.L40#.L8C#L2C#L40#L2G.L48.L8G#L4G#GL8
110 8$=''rlrll2o4al4o5co4ag#bo5el8edl2c.l GL4F.003L8A#04C#L2C#L40#C#LlC#''
8cdl4eo4bg#el2f.14feg#bo5el2d#l4d#d#llo5 1 130 PLAY"S3M8000","SlM20000","Ul2"
el2o4al4o5co4ag#bo5el8edl2c.18cdl4eo4bg# 140 FOR A= l TO 2
e12f.14feg#bo5e12d#l4d#d#llo5e" 1
150 PLAY A•.s•.c•
120 c•=''rlrlrlr112o4al4o5co4ag#bo5el8edl 160 NEXT
2c.18cdl4eo4bg#e12f.14feg#bo5el2d#l4d#d# 170 GOTO 170
11o5e12o4a14o5co4ag#bo5e18edl2c.18cdl4eo 180 SCREEN 3:FOR A=50S TO 1022
4bg#e 12f. 14feg#bo5e 12ditl4d#d#l 1o5e" 190 VPOKE A,CRNOClJ~lllTl)
130 PLAY A$,8$,C$ 200 NEXT
140 PLAY 8$,C$,A$ 210 RETURN

112
BOSSANOVA BLUEBOSSA

10 GOSU8170
20 8$=''slm7000t160r2.aoSed8e2 .. r4d
eco4b-8oSc2 •• r4o4b-oSco4ag8a2 .. r4g
a"
30 C$="s lm7000t 160f+2. r8a2.;"
40 Cl$=''slm7000t160f+2 .. "
S0 0$=''slm7000t1606Sed8e2 •• r4deco4
b-8oSc2 .. r4o4b-oSco4aé8a2 •• r4ga'' 10 '%%%%%%%%BLUE BOSSA%%%%%%%%%%
60 01$=''slm7000t160oSed8e2 .• r4deco 20 , % %
o
4b -80 Se 2; . r4o 4b -'o Se 4ag 8a2 .. r49 a" 30 '% Kenn~ Durha.m %
70 E$=''slm6000t160f+l'' · 40 '% %
80 F$=''slmSS00t200r112agf+foSco4ag 50 '%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+f+agef+dlr2.14a.'' 60 GOSUB 130
90 PLAY 8$ 70 S$="t2S5r2."
100 PLAY C$ 80 A$=" t 2S5s 3m3S000o 49 o 59. f 8e -8d 4c 2 .. o 4b
110 PLAY 0$ -4a-2o5g4.f8flf4.e-8d8c4o4b-2 .. a-4e2o5f4
120 PLAY E$ .e-le-8e-4.d-8c8o4b-8a-2 .. g-4g-4f8b-4f8a
130 PLAY F$ -4a-la-4g8b-4.a-4g8b-2a-8gl .. ''
140 PLAY 01$ 90 PLAY S$
1S0 PLAY C1$ 100 FOR O= 1 TO 2• PLAY .A$:NEXT
160 GOTO 160 110 GOTO 110
170 OPEN ''grp:''AS#l 120 DEFINT A·-Z
180 SCREEN 3:COLOR 12,7,2 130 2=1535
190 LINE C0,1S0J-C2SS,1S0J 140 SCREEN 3
200 PAINTC0,191J 150 FOR A=l TO Z
210 PSETC4S,30J:PRINT#l,"BOSSA" 160 C=C+77:IF C>255 THEN C=0
220 PSET C60,70J:PRINT#l,"N0lJA" 170 lJPOKE A,C:NEXT
230 RETURN 180 RETURN

114 115
BOSSANOVA BLUEBOSSA

10 GOSU8170
20 8$=''slm7000t160r2.aoSed8e2 .. r4d
eco4b-8oSc2 •• r4o4b-oSco4ag8a2 .. r4g
a"
30 C$="s lm7000t 160f+2. r8a2.;"
40 Cl$=''slm7000t160f+2 .. "
S0 0$=''slm7000t1606Sed8e2 •• r4deco4
b-8oSc2 .. r4o4b-oSco4aé8a2 •• r4ga'' 10 '%%%%%%%%BLUE BOSSA%%%%%%%%%%
60 01$=''slm7000t160oSed8e2 .• r4deco 20 , % %
o
4b -80 Se 2; . r4o 4b -'o Se 4ag 8a2 .. r49 a" 30 '% Kenn~ Durha.m %
70 E$=''slm6000t160f+l'' · 40 '% %
80 F$=''slmSS00t200r112agf+foSco4ag 50 '%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+f+agef+dlr2.14a.'' 60 GOSUB 130
90 PLAY 8$ 70 S$="t2S5r2."
100 PLAY C$ 80 A$=" t 2S5s 3m3S000o 49 o 59. f 8e -8d 4c 2 .. o 4b
110 PLAY 0$ -4a-2o5g4.f8flf4.e-8d8c4o4b-2 .. a-4e2o5f4
120 PLAY E$ .e-le-8e-4.d-8c8o4b-8a-2 .. g-4g-4f8b-4f8a
130 PLAY F$ -4a-la-4g8b-4.a-4g8b-2a-8gl .. ''
140 PLAY 01$ 90 PLAY S$
1S0 PLAY C1$ 100 FOR O= 1 TO 2• PLAY .A$:NEXT
160 GOTO 160 110 GOTO 110
170 OPEN ''grp:''AS#l 120 DEFINT A·-Z
180 SCREEN 3:COLOR 12,7,2 130 2=1535
190 LINE C0,1S0J-C2SS,1S0J 140 SCREEN 3
200 PAINTC0,191J 150 FOR A=l TO Z
210 PSETC4S,30J:PRINT#l,"BOSSA" 160 C=C+77:IF C>255 THEN C=0
220 PSET C60,70J:PRINT#l,"N0lJA" 170 lJPOKE A,C:NEXT
230 RETURN 180 RETURN

114 115
d 4d 4d 8d8c +4d 4o 3a.4a.8a.8o 4d4 r4"
220 A2$=" t80s 3m27800o4a.4a.8a.8a.4a.4a.4a.8a.8a.4
a.4a.4a.8b8o5c4c4c4c8c8c2''
230 B2$=''t80s3m37800o4f4f8f8e4e4el6f16g4
f16el6e8f8f4f4.f16g16g+8a.8a.4g15a.16b-4a.15
g16g8a.8a.4"
240 C2$=''t80s3m27800o4d4d8d8c+4c+4o3a.4a.8
TEMA DE iA SEPTIMA SINFONIA, a.8o4d4d4d4d8d8c4c4c4c8c8fi''
DE BEETHOVEN 250 A3$=" t§0s.3m27800o 5c 4c8d8e 4e 4o 4b 4b8o 5
c+8d4d4o4a.4a.8a.8a.4a.4a.4b8o5c+8d4r4''
260 83$="t80s3m37800o4a.4a.8a.8g+4g4g8e16f+
l698a.l6gl698f~8f4f4f8f8e4f4e16f16g4f16e!
6d4r4"
270 C3$=''t80s3m27800o4f4f8f8e4e4e4o3a.8a.8
o4d4d4d4d8d8c+4d4o3a.4a.8a.8o4d4r4''
280 PLAY A$,8$,C$
10 • J> J> J>J> J>J> }' J>J> ;' J>J> J>J>J> J> J>J>J>J>J> J>J> J>J>J> J> J>J> J> 290 FOR A=l TO 2:PLAY A1$,Bl$,Cl$:NEXT A
20 • J> J>
30 •J> Tema de la 7a. Sinfonía. J> 300 PLAY A2$,82$,C2$
40 • J> J> 310 FOR B=l TO 2:PLAY A3$,83$,C3$:NEXT B
50 •J> Ludwig Ua.n Beethoven J>
50 • J> J> 320 Z$=INPUT$C1J
70 •J>J>J>J>J>J>J>J>J>J>J>J>J>J>J>J>J>J>J>J>J>J>J>J>J>J>J>J>J>J>
80 OEFINT A-Z
90 Z=1535:IF W=2 THEN Z= 2*4
100 R=INTCW*CRNDC1)*7)+1)
110 IF W= 2 THEN COLOR R,R+l:IF R+1>15 T
HEN R+1=14
120 SCREEN 3
130 FOR A=l TO Z
140 C=C+l:IF C>255 THEN C=0
150 UPOKE A,C:NEXT
160 A$="t80s3m27800o4a.4a.8a.8a.4a.4a.4a.8a.8a.4a.
4a.4a.8b8o5c4c4c4c8c8c4r4''
170 8$=''t80s3m27800o4f4f8f8e4e4e4e8e8f4f
4f4f8g8a.4a.4e4f8g8a.4r4''
180 C$="t80s3m27800o4d4d8d8c+4c+4c+4c+8c 1

+8d4d4d4d8d8c4c4c4c8c8f4r4" i',¡
190 A1$="t80s3m27800o5c4c8d8e4e4o4b4b8o5
e +8d 4d 4o 4a.4a.8a.8a.4a.4a.4b 80 5c +8d 4 r4" i
200 81$=''t80s3m27800o4a.4a.8a.8g+4g+4g4g8g8
f+4f4f4f8f8e4f4e4e8e8d4r4''
210 Cl$=''t80s3m27800o4f4f8f8e4e4e4e8e8d4


116
d 4d 4d 8d8c +4d 4o 3a.4a.8a.8o 4d4 r4"
220 A2$=" t80s 3m27800o4a.4a.8a.8a.4a.4a.4a.8a.8a.4
a.4a.4a.8b8o5c4c4c4c8c8c2''
230 B2$=''t80s3m37800o4f4f8f8e4e4el6f16g4
f16el6e8f8f4f4.f16g16g+8a.8a.4g15a.16b-4a.15
g16g8a.8a.4"
240 C2$=''t80s3m27800o4d4d8d8c+4c+4o3a.4a.8
TEMA DE iA SEPTIMA SINFONIA, a.8o4d4d4d4d8d8c4c4c4c8c8fi''
DE BEETHOVEN 250 A3$=" t§0s.3m27800o 5c 4c8d8e 4e 4o 4b 4b8o 5
c+8d4d4o4a.4a.8a.8a.4a.4a.4b8o5c+8d4r4''
260 83$="t80s3m37800o4a.4a.8a.8g+4g4g8e16f+
l698a.l6gl698f~8f4f4f8f8e4f4e16f16g4f16e!
6d4r4"
270 C3$=''t80s3m27800o4f4f8f8e4e4e4o3a.8a.8
o4d4d4d4d8d8c+4d4o3a.4a.8a.8o4d4r4''
280 PLAY A$,8$,C$
10 • J> J> J>J> J>J> }' J>J> ;' J>J> J>J>J> J> J>J>J>J>J> J>J> J>J>J> J> J>J> J> 290 FOR A=l TO 2:PLAY A1$,Bl$,Cl$:NEXT A
20 • J> J>
30 •J> Tema de la 7a. Sinfonía. J> 300 PLAY A2$,82$,C2$
40 • J> J> 310 FOR B=l TO 2:PLAY A3$,83$,C3$:NEXT B
50 •J> Ludwig Ua.n Beethoven J>
50 • J> J> 320 Z$=INPUT$C1J
70 •J>J>J>J>J>J>J>J>J>J>J>J>J>J>J>J>J>J>J>J>J>J>J>J>J>J>J>J>J>J>
80 OEFINT A-Z
90 Z=1535:IF W=2 THEN Z= 2*4
100 R=INTCW*CRNDC1)*7)+1)
110 IF W= 2 THEN COLOR R,R+l:IF R+1>15 T
HEN R+1=14
120 SCREEN 3
130 FOR A=l TO Z
140 C=C+l:IF C>255 THEN C=0
150 UPOKE A,C:NEXT
160 A$="t80s3m27800o4a.4a.8a.8a.4a.4a.4a.8a.8a.4a.
4a.4a.8b8o5c4c4c4c8c8c4r4''
170 8$=''t80s3m27800o4f4f8f8e4e4e4e8e8f4f
4f4f8g8a.4a.4e4f8g8a.4r4''
180 C$="t80s3m27800o4d4d8d8c+4c+4c+4c+8c 1

+8d4d4d4d8d8c4c4c4c8c8f4r4" i',¡
190 A1$="t80s3m27800o5c4c8d8e4e4o4b4b8o5
e +8d 4d 4o 4a.4a.8a.8a.4a.4a.4b 80 5c +8d 4 r4" i
200 81$=''t80s3m27800o4a.4a.8a.8g+4g+4g4g8g8
f+4f4f4f8f8e4f4e4e8e8d4r4''
210 Cl$=''t80s3m27800o4f4f8f8e4e4e4e8e8d4


116
5dl6c4o4b4r4oSc4o4a8.b16o5c8.d16c4o4b4oS
f2. d4e8. o4b 16oSc8. d 16c4o4b4oSc2r4"
160 B2$=''slm28000o4d4e4.f8g8.e16f8.f16e4
d4r4g4f8.f16g8.a16g4g4g2.g4g8.f16e8.fl6e
4d4o2r4"
170 C2$=''s3m28000o3b4o4c4.d8e8.cl6f8.d16
g2r4e4f8.d16e8.f16e4d4o3b2.o4f4e8.dl6c8.
TERCETO DE LA FLAUTA MAGICA, a 16g4o3g4o3c2r4."
DE W. A. MOZART 180 PLAY" t 150", "t 1 S0", "t 1 S0"
190 PLAY A$,8$,C$
200 PLAY A1$,81$,C1$
210 PLAY A2$,82$,C2$
220 GOTO 220
230 DEFINT A-Z
240 Z=153S
2S0 SCREEN 3
10 •.¡¡.¡¡.¡¡~.¡¡.¡¡.¡¡.¡¡.¡¡.¡¡.¡¡.¡¡.¡¡~.¡¡.¡¡~.¡¡.¡¡.¡¡.¡¡~.¡¡.¡¡~~~~~~~~ 260 FOR A=l TO Z
20 •.¡¡ ~
270 C=C+34:IF C>2S5 THEN C=0
30 '.!I Terceto de "La f·lauta mó.9 ica".!I 280 UPOKE A,C:NEXT
40 •.¡¡ .¡¡
290 RETURI~
S0 '.!I W. A. Mozart .!I
00 ·.¡¡ .¡¡
70 •.¡¡.¡¡.¡¡.¡¡.¡¡.¡¡.¡¡.¡¡.¡¡.¡¡.¡¡.¡¡.¡¡.¡¡.¡¡.¡¡.¡¡.¡¡.¡¡.¡¡.¡¡.¡¡.¡¡.¡¡.¡¡.¡¡.¡¡.¡¡.¡¡.¡¡.¡¡.¡¡
80 GOSUB 230
30 A$=" vlS o4r2.g4g4.b8o5c8.o4b16a8.
o Sd 16cf,+o 4b 4 r't9 Se 4c 4o 4a8o Sd8d8c Se 80 4b 8b 4o
Se 4r4c4c4. o4a8b8. al 6b8. o Se 160 4b 4a4 r4"
100 B$=''slm28000o4r2.e4e4.f8g8.g16f8.f16
e4d4r4g4a4.a894f4f4e4r4e4f+4.f+8g8.f+16g
8. a16g4f+4r4"
110 C$=''slm28000o4r2.c4c4.d8e8.c16f8.d16
g4o3g4~4o4e~f4.f8e4d4d4c4r4o3a4o4d4.d8d8
.d16d8.d16d4d4r4''
120 A1$="s1m30000oSd4d8c8e8c8c8o4b8oSc8o
4a8a4g4r4g4g4.a8b8o5c8d8c8c8o4b8b4.oSc16
o4b 16a8989\40Scl80491898f8f8e898. e 16d4',/
~130 B1$="slm28000o4b4b8a8o5c8o4a8a898a8f
+8f+4g4r494g4.18999999fl4f.18fffl4e.18ee
ddce: e 16o3b4"
J140"C1$=''slm28000o4d4e4e4d4.c8c4o3b4r4g4.
g4.f+8f8e8f8e8e8d8d4.d8c8o3b8c4~c8o3b4o4
c4o3g4g4r4"
1S0 A2$=''slm30000o4g4g4.b8o5c8.o4b16a8.o

118 l:r9·.
5dl6c4o4b4r4oSc4o4a8.b16o5c8.d16c4o4b4oS
f2. d4e8. o4b 16oSc8. d 16c4o4b4oSc2r4"
160 B2$=''slm28000o4d4e4.f8g8.e16f8.f16e4
d4r4g4f8.f16g8.a16g4g4g2.g4g8.f16e8.fl6e
4d4o2r4"
170 C2$=''s3m28000o3b4o4c4.d8e8.cl6f8.d16
g2r4e4f8.d16e8.f16e4d4o3b2.o4f4e8.dl6c8.
TERCETO DE LA FLAUTA MAGICA, a 16g4o3g4o3c2r4."
DE W. A. MOZART 180 PLAY" t 150", "t 1 S0", "t 1 S0"
190 PLAY A$,8$,C$
200 PLAY A1$,81$,C1$
210 PLAY A2$,82$,C2$
220 GOTO 220
230 DEFINT A-Z
240 Z=153S
2S0 SCREEN 3
10 •.¡¡.¡¡.¡¡~.¡¡.¡¡.¡¡.¡¡.¡¡.¡¡.¡¡.¡¡.¡¡~.¡¡.¡¡~.¡¡.¡¡.¡¡.¡¡~.¡¡.¡¡~~~~~~~~ 260 FOR A=l TO Z
20 •.¡¡ ~
270 C=C+34:IF C>2S5 THEN C=0
30 '.!I Terceto de "La f·lauta mó.9 ica".!I 280 UPOKE A,C:NEXT
40 •.¡¡ .¡¡
290 RETURI~
S0 '.!I W. A. Mozart .!I
00 ·.¡¡ .¡¡
70 •.¡¡.¡¡.¡¡.¡¡.¡¡.¡¡.¡¡.¡¡.¡¡.¡¡.¡¡.¡¡.¡¡.¡¡.¡¡.¡¡.¡¡.¡¡.¡¡.¡¡.¡¡.¡¡.¡¡.¡¡.¡¡.¡¡.¡¡.¡¡.¡¡.¡¡.¡¡.¡¡
80 GOSUB 230
30 A$=" vlS o4r2.g4g4.b8o5c8.o4b16a8.
o Sd 16cf,+o 4b 4 r't9 Se 4c 4o 4a8o Sd8d8c Se 80 4b 8b 4o
Se 4r4c4c4. o4a8b8. al 6b8. o Se 160 4b 4a4 r4"
100 B$=''slm28000o4r2.e4e4.f8g8.g16f8.f16
e4d4r4g4a4.a894f4f4e4r4e4f+4.f+8g8.f+16g
8. a16g4f+4r4"
110 C$=''slm28000o4r2.c4c4.d8e8.c16f8.d16
g4o3g4~4o4e~f4.f8e4d4d4c4r4o3a4o4d4.d8d8
.d16d8.d16d4d4r4''
120 A1$="s1m30000oSd4d8c8e8c8c8o4b8oSc8o
4a8a4g4r4g4g4.a8b8o5c8d8c8c8o4b8b4.oSc16
o4b 16a8989\40Scl80491898f8f8e898. e 16d4',/
~130 B1$="slm28000o4b4b8a8o5c8o4a8a898a8f
+8f+4g4r494g4.18999999fl4f.18fffl4e.18ee
ddce: e 16o3b4"
J140"C1$=''slm28000o4d4e4e4d4.c8c4o3b4r4g4.
g4.f+8f8e8f8e8e8d8d4.d8c8o3b8c4~c8o3b4o4
c4o3g4g4r4"
1S0 A2$=''slm30000o4g4g4.b8o5c8.o4b16a8.o

118 l:r9·.
1140 W$=''t230o6r4.l4ell6del8dd-co5b-asf+
o4ao5cdl9e-fe-l8dco4bo5cfaedr4.14d-o4~8b
o5co4f+gb-o5dfao6co5b-dfaa-d-co4b-ao5ces
14fl8cde-9b-06dd-0Sar412o6cl8co5b-ago6co
5b-r4o6e-d-co5b-aab-bo6co5b-agf+ao6cd!9e
-fe-18dco5baa-f+gfo4ao5cl9ee-dc+''
1150 2$=''r218o6co5b-dfagdfegb-g!9o6c+d+c
+ l Bc o Sb l 4a r4o 61'.:)efe18dd-co Sb ·-ag f +o"'ªº Sed
SCRAPPLE FROM THE APPLE & DONNA LEE 19e -fe -1Bdeo4b o Sd f ae d r2e de +de f +g f +e d l 3b -
o6co 5b ·-18ae l 9f efe e+ l 4d r4 r2 r8"
1160 Y$=''18o5eag+aa+ba+bo6cd-cd-co5bb-ag
fll69fl8efgfedo4g+bo5df9+06edd-c0Sb-a9f+
e-deo 4b -o Sd fas f ed l 4f r4. "
1170 PLAYW$:PLAYZ$:PLAY Y$
1180 Z$=!NPUT$C1)
10 '$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
20 '$ $
30 '$ Scrapple from the apple $
40 '$ $
50 '$ &Don na Lee $
60 ~$ $ ¡:
70 '$ Charlie Parker $
80 '$ $
90 '$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
1000 DEFINT A-Z
1010 2=1535 1
!
1020 SCREEN 3 !

i
1030 FOR A=l TO Z
1040 C=C+37:JF C>255 THEN C=0
1050 VPOKE A,C:NEXT
1060 PLAY "v15" !1
1070 A$=''t200o518r8d+egf+edo4bo5ear4r814 "I
1
el8f+g.o6116do519bgel8f+o4bo5eo4b-r4.14o
5f+gl8f+a.116f+l9edel4er8o618do514br8o6c
+o518b 19f+gg+"
1080 8$=''t20014ar818f+gf+ff +af +gar2''
1090 C$=''t20014ar818f+gf+ff+do4ao5c+dr2''
1100 PLAY A$
1110 PLAY 8$
1120 PLAY A$
1130 PLAY C$

120
1140 W$=''t230o6r4.l4ell6del8dd-co5b-asf+
o4ao5cdl9e-fe-l8dco4bo5cfaedr4.14d-o4~8b
o5co4f+gb-o5dfao6co5b-dfaa-d-co4b-ao5ces
14fl8cde-9b-06dd-0Sar412o6cl8co5b-ago6co
5b-r4o6e-d-co5b-aab-bo6co5b-agf+ao6cd!9e
-fe-18dco5baa-f+gfo4ao5cl9ee-dc+''
1150 2$=''r218o6co5b-dfagdfegb-g!9o6c+d+c
+ l Bc o Sb l 4a r4o 61'.:)efe18dd-co Sb ·-ag f +o"'ªº Sed
SCRAPPLE FROM THE APPLE & DONNA LEE 19e -fe -1Bdeo4b o Sd f ae d r2e de +de f +g f +e d l 3b -
o6co 5b ·-18ae l 9f efe e+ l 4d r4 r2 r8"
1160 Y$=''18o5eag+aa+ba+bo6cd-cd-co5bb-ag
fll69fl8efgfedo4g+bo5df9+06edd-c0Sb-a9f+
e-deo 4b -o Sd fas f ed l 4f r4. "
1170 PLAYW$:PLAYZ$:PLAY Y$
1180 Z$=!NPUT$C1)
10 '$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
20 '$ $
30 '$ Scrapple from the apple $
40 '$ $
50 '$ &Don na Lee $
60 ~$ $ ¡:
70 '$ Charlie Parker $
80 '$ $
90 '$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
1000 DEFINT A-Z
1010 2=1535 1
!
1020 SCREEN 3 !

i
1030 FOR A=l TO Z
1040 C=C+37:JF C>255 THEN C=0
1050 VPOKE A,C:NEXT
1060 PLAY "v15" !1
1070 A$=''t200o518r8d+egf+edo4bo5ear4r814 "I
1
el8f+g.o6116do519bgel8f+o4bo5eo4b-r4.14o
5f+gl8f+a.116f+l9edel4er8o618do514br8o6c
+o518b 19f+gg+"
1080 8$=''t20014ar818f+gf+ff +af +gar2''
1090 C$=''t20014ar818f+gf+ff+do4ao5c+dr2''
1100 PLAY A$
1110 PLAY 8$
1120 PLAY A$
1130 PLAY C$

120
200 82$=''o3r4b4r4d4r4c4r4d4r4b4r4c4r4b4b
8r4."
210 C2$=" o 3g4 r4d4 r4c4r4o 2b 4r4o 3d4r4d4 r4o
2g4r2."
220 A3$="o518bgal4b 18eagbgal4b 189agb9al4
bf·r8a4g2g8r4."
230 83$=" o 3 r4d 4 c-4b 4 r4g 4 r4c 4 r4b 4 r4c 4 r4d 4b
8r4. H
THE ENTERTAINER 240 C3$=''o2g4r4f4r4e4r4e-4r4d4r4d4r4g4d4
o lg8r4."
250 A4$=''o5d4e8d4o4b8o5c8c+8d4e8d4.g4e8f
+898a8b8a898a892g8r8o4b8o5c8''
260 84$="o3r4g4r8g8a8a·•8b4g4r4d r4e4r4g-4
r818b cd e db a"
270 C4$=" o 29 4r4o 3d4 r4g 4r4d4 t'4c 4 r4c4 r4o 2b
4r4o3d4r4" ·
10 '@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 280 A5$=''o5d4e8d4o4b8o5c8c+Bd4e8d4.e4f+8
20 '@ @ f+4f+4e8c+8o4a8o5d2d8r8o4b8o5c8''
30 '@ SCOTT JOPLIN @ 290 85$=''o3g4r8g8a8a+8b4d4r4g4r4f+4r4a4f
40 '@ @ +4r2. 11

50 '@ THE ENTERTAINER @ 300 C5$=''o2gr4o3dr4g4r4o2b4b-4a4r4a4r4o3


60 '@ @ d 4c -4o 2b 4a4"
70 '@Adaptación MSX F.J.Guerrero@ 310 A6$=''o5d4e8d4o4b8o5c8c+8d4e8d4.g4e8f
80 '@ @ +8g8a8b8a8g8a8g2g8r8d4''
90 '@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 320.86$="o3r4d4r8g8a8a+8b4g4r4d4r4c4r4g-
100 GOSU8 550 4r4d4r4g-4"
110 CLEAR 5000 330 C6$=''o2g4r4o3d4r4g4r4d4r4c4r4c4r4o2b
120 Z$="t130s3m1000018o4a+a" 4 r4g4 r'4"
130 A$=" o4b8o5g4o4b8o5g4o4b8 340 A7$="o5d4e8g4e898e8d898b806d4o5b898d
~5g2.r8g8a+8a+8b8g8a8b4f+8a4g2g8r8o4a8a+ 8e4g4b8a4e2.r8o4a8a+8"
350 87$=" o 3e 4c4b ·-4b-4g 4b4d4b 4c +4e 4f +4d4b
140 8$=" o3r4d4r4f4r4e4r4d4r4 4d4d8r4."
d4r4f+r4f4f8r4." 360 C7$="o2c4o3c4c+4c+4d4d4o2d4d4o3a4a4o
150 C$=" o2g4r4o3d4r4c4r4o2b4r4o3dr 2d4d4o3e4d4o2e8r4." 11
4d r4o 2g r2o 3d" 370 PLAY 11 s3m10000u .. Hs3m30000 11 ,. ºv13
160 A1$=''o4b8o5g4o4b8o5g4o4b8o5c2.r8e8d8 380 PLAY 11 t130º .. ºt1301!,.:•t130u
c+8e8g8b4a8g8e8a2a8r8o4a8a+8'' 390 PLAY Z$
170 81$=''o3r4b4r4d4r4cr4d4r4a4r4c+r4c4c4 400 PLAY A$,8$,C$
r4 11 •
410 PLAY.Al$,81$,C1$
180 C1$="o2g4r4o3d4r4c4r4o2b4b-4a4r4o3a4 420 PLAY A2$,82$,C2$
r4o4d4o3d4e4f+4" · · 430 PLAY A3$,83$,C3$
190 A2$=''o4b8o5g4o4b8o5g4o4b8o59892r8g8a 440
8a+8b8g8a8b4f+8a4g298r898a8'' 450 PLAY A4$~84$,C4$

122 123
~I
200 82$=''o3r4b4r4d4r4c4r4d4r4b4r4c4r4b4b
8r4."
210 C2$=" o 3g4 r4d4 r4c4r4o 2b 4r4o 3d4r4d4 r4o
2g4r2."
220 A3$="o518bgal4b 18eagbgal4b 189agb9al4
bf·r8a4g2g8r4."
230 83$=" o 3 r4d 4 c-4b 4 r4g 4 r4c 4 r4b 4 r4c 4 r4d 4b
8r4. H
THE ENTERTAINER 240 C3$=''o2g4r4f4r4e4r4e-4r4d4r4d4r4g4d4
o lg8r4."
250 A4$=''o5d4e8d4o4b8o5c8c+8d4e8d4.g4e8f
+898a8b8a898a892g8r8o4b8o5c8''
260 84$="o3r4g4r8g8a8a·•8b4g4r4d r4e4r4g-4
r818b cd e db a"
270 C4$=" o 29 4r4o 3d4 r4g 4r4d4 t'4c 4 r4c4 r4o 2b
4r4o3d4r4" ·
10 '@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 280 A5$=''o5d4e8d4o4b8o5c8c+Bd4e8d4.e4f+8
20 '@ @ f+4f+4e8c+8o4a8o5d2d8r8o4b8o5c8''
30 '@ SCOTT JOPLIN @ 290 85$=''o3g4r8g8a8a+8b4d4r4g4r4f+4r4a4f
40 '@ @ +4r2. 11

50 '@ THE ENTERTAINER @ 300 C5$=''o2gr4o3dr4g4r4o2b4b-4a4r4a4r4o3


60 '@ @ d 4c -4o 2b 4a4"
70 '@Adaptación MSX F.J.Guerrero@ 310 A6$=''o5d4e8d4o4b8o5c8c+8d4e8d4.g4e8f
80 '@ @ +8g8a8b8a8g8a8g2g8r8d4''
90 '@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 320.86$="o3r4d4r8g8a8a+8b4g4r4d4r4c4r4g-
100 GOSU8 550 4r4d4r4g-4"
110 CLEAR 5000 330 C6$=''o2g4r4o3d4r4g4r4d4r4c4r4c4r4o2b
120 Z$="t130s3m1000018o4a+a" 4 r4g4 r'4"
130 A$=" o4b8o5g4o4b8o5g4o4b8 340 A7$="o5d4e8g4e898e8d898b806d4o5b898d
~5g2.r8g8a+8a+8b8g8a8b4f+8a4g2g8r8o4a8a+ 8e4g4b8a4e2.r8o4a8a+8"
350 87$=" o 3e 4c4b ·-4b-4g 4b4d4b 4c +4e 4f +4d4b
140 8$=" o3r4d4r4f4r4e4r4d4r4 4d4d8r4."
d4r4f+r4f4f8r4." 360 C7$="o2c4o3c4c+4c+4d4d4o2d4d4o3a4a4o
150 C$=" o2g4r4o3d4r4c4r4o2b4r4o3dr 2d4d4o3e4d4o2e8r4." 11
4d r4o 2g r2o 3d" 370 PLAY 11 s3m10000u .. Hs3m30000 11 ,. ºv13
160 A1$=''o4b8o5g4o4b8o5g4o4b8o5c2.r8e8d8 380 PLAY 11 t130º .. ºt1301!,.:•t130u
c+8e8g8b4a8g8e8a2a8r8o4a8a+8'' 390 PLAY Z$
170 81$=''o3r4b4r4d4r4cr4d4r4a4r4c+r4c4c4 400 PLAY A$,8$,C$
r4 11 •
410 PLAY.Al$,81$,C1$
180 C1$="o2g4r4o3d4r4c4r4o2b4b-4a4r4o3a4 420 PLAY A2$,82$,C2$
r4o4d4o3d4e4f+4" · · 430 PLAY A3$,83$,C3$
190 A2$=''o4b8o5g4o4b8o5g4o4b8o59892r8g8a 440
8a+8b8g8a8b4f+8a4g298r898a8'' 450 PLAY A4$~84$,C4$

122 123
~I
460 PLAY A5$,B5$,C5$
470 PLAY A6$,B6$,C6$
480 PLAY A7$,87$,C7$
480
500 PLAY A$,B$,C$
510 PLAY A1$,B1$,C1$
520 PLAY A2$,82$,C2$
530 PLAY A3$,B3$,C3$
540 GOTO 540
TECLEE UN NUMERO
5.50 DEF I NT' A-Z
560 2=1535
570 SCREEN 3
580 FOR A=l TO z
580 C=C+57:IF C>255 THEN C=0
600 UPOKE A,C:NEXT
610 RETURN

20 CLS:INPUT"TECLEE UN NUMERO :";F


30 FOR I=l TO F:Y=RNDClJ:NEXT
40 SCREEN 1:COLOR 10,1,l:KEY OFF:CLS
50 X=INTCRNOC 1 J*16+5J :PLAY"L.32N70"
60 PRINT''NUMERO INICIAL:'';X 1

l
70 PRINT:PRINT"TECLEE 5 OPERACIONES"
80 PRINT :PRINT"DE LA FORMA -t-5, /2, ;j(4.;."
90 F=X
100 DIM R$C5J
110 FOR I=l TO 5
r20 LOCATE0,8:INPUT"TU OPERACION:";R$CIJ

130 LOCATE16,9!PRINT" "


140 A=ASCCLEFT$CR$CIJ,1JJ-41 A>6THEN 12 1
150 IF A<=0 OR A=3 OR A=5 OR
0
160 IF A>3 THEN A=(A/2)+1
170 ON A GOSUB 1000,2000,3000,4000
180 LOCATE14,11:PRINT" "
190 LOCATE0.11 :PRINT"NUMERO OBTENIDO:" ;F

200 NEXT I
210 PRINT:PRINT"OPERACIONES:";R$C4);" "; 11
11
R$(1J:" 11
:R$C5): 11 º;R$(3): :R$C2)

124
460 PLAY A5$,B5$,C5$
470 PLAY A6$,B6$,C6$
480 PLAY A7$,87$,C7$
480
500 PLAY A$,B$,C$
510 PLAY A1$,B1$,C1$
520 PLAY A2$,82$,C2$
530 PLAY A3$,B3$,C3$
540 GOTO 540
TECLEE UN NUMERO
5.50 DEF I NT' A-Z
560 2=1535
570 SCREEN 3
580 FOR A=l TO z
580 C=C+57:IF C>255 THEN C=0
600 UPOKE A,C:NEXT
610 RETURN

20 CLS:INPUT"TECLEE UN NUMERO :";F


30 FOR I=l TO F:Y=RNDClJ:NEXT
40 SCREEN 1:COLOR 10,1,l:KEY OFF:CLS
50 X=INTCRNOC 1 J*16+5J :PLAY"L.32N70"
60 PRINT''NUMERO INICIAL:'';X 1

l
70 PRINT:PRINT"TECLEE 5 OPERACIONES"
80 PRINT :PRINT"DE LA FORMA -t-5, /2, ;j(4.;."
90 F=X
100 DIM R$C5J
110 FOR I=l TO 5
r20 LOCATE0,8:INPUT"TU OPERACION:";R$CIJ

130 LOCATE16,9!PRINT" "


140 A=ASCCLEFT$CR$CIJ,1JJ-41 A>6THEN 12 1
150 IF A<=0 OR A=3 OR A=5 OR
0
160 IF A>3 THEN A=(A/2)+1
170 ON A GOSUB 1000,2000,3000,4000
180 LOCATE14,11:PRINT" "
190 LOCATE0.11 :PRINT"NUMERO OBTENIDO:" ;F

200 NEXT I
210 PRINT:PRINT"OPERACIONES:";R$C4);" "; 11
11
R$(1J:" 11
:R$C5): 11 º;R$(3): :R$C2)

124
:220 PRINT:PRINT"ANIM0111 "
230 PLAY"CCCDEDCEODC";ÉNÓ .•
·1000 F=~*UALCRIGHT$CR$Cil.LENCR$CilJ-llJ
1010 RETURN
2000 F=F+UALCRIGHT$CR$CIJ.LENCR$CilJ-lll
2010 RETURN
3000 F=F-UALCRIGHT$CR$C!l,LENCR$Cill-lJJ
CALENDARIO PERPETUO

3010 RETURN
4000 F=F/UALCRIGHT$CR$CIJ,LENCR$CilJ-lll
4010 RETURN

1 'Calendario Perpétuo
10 SCREEN0:COLOR 15,4:KEY OFF:CLS
20 INPUT''OIA::~.;;;;~.·::'';J
30 IF J=0 THEN END
40 PR I NT : INPUT" MES ... , , .· : . ; ; ~ ! : " ; M
50 PR I NT : INPUT" AÑO . . . . . . . . . . . : " ; A
60 B=A
70 S=INTCA/l00l-INTCA/400l
80 IF A<=1582 THEN S=2
30 M$=''ENERFEBRMARZABRIMAY JUNIJULI~GOSS
EPTOCTUNOUIDlCI"
100 M$=MIO$CM$,4*M-3,4l
110 IF M<3 THEN M=M+l2:A=A-l
120 S=J-1+INTC13* CM+l )/5 l+ INT C~•i':v4l-S
130 S=S-7*INTCS/7) .
140 J$="0DMINGO LUNES MARTES MIERC
OLESJUEUES VIERNES SABADO "
150 J$=MIO$CJ$,3*S+l,9l
160 LOCATE0.15 :PRINT"EL." ;J ;" ";M$ ;B;"FUE
UN " ; J$ :PLAY "C.GE"
170 PRINT:PRINT:PRINT"PULSE UNA TEQLA":R
$=INPUT$Cll
180 RUN

126 '127
:220 PRINT:PRINT"ANIM0111 "
230 PLAY"CCCDEDCEODC";ÉNÓ .•
·1000 F=~*UALCRIGHT$CR$Cil.LENCR$CilJ-llJ
1010 RETURN
2000 F=F+UALCRIGHT$CR$CIJ.LENCR$CilJ-lll
2010 RETURN
3000 F=F-UALCRIGHT$CR$C!l,LENCR$Cill-lJJ
CALENDARIO PERPETUO

3010 RETURN
4000 F=F/UALCRIGHT$CR$CIJ,LENCR$CilJ-lll
4010 RETURN

1 'Calendario Perpétuo
10 SCREEN0:COLOR 15,4:KEY OFF:CLS
20 INPUT''OIA::~.;;;;~.·::'';J
30 IF J=0 THEN END
40 PR I NT : INPUT" MES ... , , .· : . ; ; ~ ! : " ; M
50 PR I NT : INPUT" AÑO . . . . . . . . . . . : " ; A
60 B=A
70 S=INTCA/l00l-INTCA/400l
80 IF A<=1582 THEN S=2
30 M$=''ENERFEBRMARZABRIMAY JUNIJULI~GOSS
EPTOCTUNOUIDlCI"
100 M$=MIO$CM$,4*M-3,4l
110 IF M<3 THEN M=M+l2:A=A-l
120 S=J-1+INTC13* CM+l )/5 l+ INT C~•i':v4l-S
130 S=S-7*INTCS/7) .
140 J$="0DMINGO LUNES MARTES MIERC
OLESJUEUES VIERNES SABADO "
150 J$=MIO$CJ$,3*S+l,9l
160 LOCATE0.15 :PRINT"EL." ;J ;" ";M$ ;B;"FUE
UN " ; J$ :PLAY "C.GE"
170 PRINT:PRINT:PRINT"PULSE UNA TEQLA":R
$=INPUT$Cll
180 RUN

126 '127
MODIFICACION TABLA DE COLORES SCREEN 1 RECTANGULOS EN 3-D

10 PRINT:PR!NT:PRINT''Puedes convertir el
modo de texto l"
20 PRINT:PRINT''en multicolor utlilizan 10 - J A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A
do este programa 11
20 'AAAAAAARECTANGULOS E.N 3 - D A A A A A A A A
30 PRINT :PRINT''Ejecutalo. cuando en cu e
n t res 1 a e o mb ¡ n ac 1o n 11 100 SCREEN 2:COLOR ,l.8
40 PRINT :PRINT"de tu gusto. teclea ser 110 FX=RNDC1J*255:FY=RNDC1J*191
een 0 w despues ? a'' 120 DIM PXC3J,PYC3J,OXC3J,QYC3J
50 PRINT :PRINT"El valor de a. sera e 1 co 130 PXC0J=RNDC1J*C.9*255J:PYC0J=RNDC1J*C
nten ido " . 9*255)
60 PRINT:PRINT"de la d.i rece ion &HF3BF. q 140 B=RNDCC1J*255-PXC0JJ/2+50
11
ue es 1 a que 150 H=RNDCC1J*191-PYC0JJ/2+38
70 PR!NT :PRINT"has modificado hasta obte 160 Q!=RNDCC1)*.2J+.2
ne r e 1 r.esu 1 tado deseado" 170 PXC1J=PXC0J+B:PYC1J=PYC0J:PXC2J=PXC1
80 PRINT:PRINT:PRINT'' PULSA UNA TEC J:PYC2J=PYC0J+H:PXC3J= PXC0J:PYC3J=PYC2J
LA":Z$=INPUT$C1J
100 'se re en 1 mu 1 t i e o 1 o r 180 FOR I= O TO 3:QXCIJ=PXCIJ*Cl-O!J+.F.X*
110 SCREEN 1:C=C+1:IF C>15 THEN C=0 Q
120 A= A+l:IF A>255 THEN A=0 190 QYCIJ=PYCIJ*Cl-O!J+FY*Q!
130 POKE&HF3BF.A:FOR O= 1 TO 300:COLOR.C 200 NEXT
:NEXT:PRINTA:PRINT''ABCOEFGHI~KLMNOPQRSTU 210 FOR I=0 TO 3:LINE CQXCIJ,QYCIJJ-COXC
UWXYZ" : PR I NT" abe de f 9 h i jk 1 mno p q rs tu vwx;i z:" CI+lJMOD4J.QYCCI+lJMOD4JJ,15:NEXT
:FOR U= 1 TO 500:NEXT 220 FOR I=0 TO 3:LINECPXCIJ.PYCIJJ-CQXCI
140 PR I NT" 1 234567890:\íJ.t%:fll(. r.J" o:i • 0-:t~ 'I' r" : PR J • QY CI J J • 11 : NEXT
rN1J¡.rn.......,J>·H1m1
"
••••"'*X"' l..Ud's.:<.1itt.
.01.r'.llf1H" :FOR U= 1 TO 500 :NEXT
230 FOR I=0 TO 3:LINE CPXCIJ.PYCIJJ-CPXC
CI+lJMOD4J.PYCCI+lJMOD4JJ,12:NEXT
150 GOTO 110 240 GOT0130

128
MODIFICACION TABLA DE COLORES SCREEN 1 RECTANGULOS EN 3-D

10 PRINT:PR!NT:PRINT''Puedes convertir el
modo de texto l"
20 PRINT:PRINT''en multicolor utlilizan 10 - J A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A
do este programa 11
20 'AAAAAAARECTANGULOS E.N 3 - D A A A A A A A A
30 PRINT :PRINT''Ejecutalo. cuando en cu e
n t res 1 a e o mb ¡ n ac 1o n 11 100 SCREEN 2:COLOR ,l.8
40 PRINT :PRINT"de tu gusto. teclea ser 110 FX=RNDC1J*255:FY=RNDC1J*191
een 0 w despues ? a'' 120 DIM PXC3J,PYC3J,OXC3J,QYC3J
50 PRINT :PRINT"El valor de a. sera e 1 co 130 PXC0J=RNDC1J*C.9*255J:PYC0J=RNDC1J*C
nten ido " . 9*255)
60 PRINT:PRINT"de la d.i rece ion &HF3BF. q 140 B=RNDCC1J*255-PXC0JJ/2+50
11
ue es 1 a que 150 H=RNDCC1J*191-PYC0JJ/2+38
70 PR!NT :PRINT"has modificado hasta obte 160 Q!=RNDCC1)*.2J+.2
ne r e 1 r.esu 1 tado deseado" 170 PXC1J=PXC0J+B:PYC1J=PYC0J:PXC2J=PXC1
80 PRINT:PRINT:PRINT'' PULSA UNA TEC J:PYC2J=PYC0J+H:PXC3J= PXC0J:PYC3J=PYC2J
LA":Z$=INPUT$C1J
100 'se re en 1 mu 1 t i e o 1 o r 180 FOR I= O TO 3:QXCIJ=PXCIJ*Cl-O!J+.F.X*
110 SCREEN 1:C=C+1:IF C>15 THEN C=0 Q
120 A= A+l:IF A>255 THEN A=0 190 QYCIJ=PYCIJ*Cl-O!J+FY*Q!
130 POKE&HF3BF.A:FOR O= 1 TO 300:COLOR.C 200 NEXT
:NEXT:PRINTA:PRINT''ABCOEFGHI~KLMNOPQRSTU 210 FOR I=0 TO 3:LINE CQXCIJ,QYCIJJ-COXC
UWXYZ" : PR I NT" abe de f 9 h i jk 1 mno p q rs tu vwx;i z:" CI+lJMOD4J.QYCCI+lJMOD4JJ,15:NEXT
:FOR U= 1 TO 500:NEXT 220 FOR I=0 TO 3:LINECPXCIJ.PYCIJJ-CQXCI
140 PR I NT" 1 234567890:\íJ.t%:fll(. r.J" o:i • 0-:t~ 'I' r" : PR J • QY CI J J • 11 : NEXT
rN1J¡.rn.......,J>·H1m1
"
••••"'*X"' l..Ud's.:<.1itt.
.01.r'.llf1H" :FOR U= 1 TO 500 :NEXT
230 FOR I=0 TO 3:LINE CPXCIJ.PYCIJJ-CPXC
CI+lJMOD4J.PYCCI+lJMOD4JJ,12:NEXT
150 GOTO 110 240 GOT0130

128
10 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA

20 JAAAAAAARECTANGULOS EN 3-DAAAAAAAA

30 >AAAAACON EFECTO DE DESTELLOAAAAAA


40 'AAAAAAAAAAAAAAAAA~AAAAAAAAAAAAAAA

100 SCREEN 2:COLOR .1.8


110 FX=RNOC1J*255:FY=RNDC1J*191
120 DIM PXC3J,PYC3l,QXC3l,QYC3l
130 PXC0l=RNDC1J*C.9*255J:PYC0l=RNDC1J*C JUEGO DE CARACTERES ALFABETICOS
.9*255) EN TODOS LOS MODOS
140 B=RNDCC1l*255-PXC0Jl/2+50
150 H=RNDCC1l*l91-PYC0Jl/2+38
160 Q!=RNOCC1J*.2J+.2
170 PXC1l=PXC0l+B:PYC1J=PYC0J:PXC2J=PXC1
J:PYC2J=PYC0J+H:PXC3l= PXC0J:PYC3l=PYC2J
180 FOR I= O TO 3:QXCil=PXCIJ*Cl-Q!J+FX*
Q
190 QYCll=PYCIJ*Cl-Q!l+FY*Q!+Ql/10
200 NEXT
210 FOR 1=0 TO 3:LlNE CQXCll,QYCIJJ-CQXC
CI+llM004l,QYCCl+llM004ll,15:NEXT
220 FOR 1=0 TO 3:LINECPXCIJ,PYCIJJ-CQXCI
l. QY_C I l l, 11 : NEXT
230 FOR I=0 TO 3:LlNE CPXCIJ,PYCIJJ-CPXC 200 COLOR l,14,10
Cl+llM004l.PYCCI+llM004Jl,12:NEXT 210 S=0:SCREEN 0
240 GOT0170 220 GOSUB 330
230 S=l:SCREEN 1
240 GOSUB 330
250 OPEN "GRP: "AS#l
260 COLOR l,14,7
270 S=2:SCREEN 2
280 GOSUB 340
290 COLOR 1,14,9
300 S=3:SCREEN 3
310 GOSUB 340
320 END
330 FOR 1=65 TO 90:LOCATE 5,5:PR1NT"SCN"
S:CHR$Cll:CHR$CI+32J:GOSUB 350:CLS:NEXT:
RETURN
340 FOR 1=65 TO 90:PRESETC10.50l:PRINT#l
, "SCN"S :G:HR$C 1 l :CHR$C I+32J :GOSUB 350 :CLS
:NEXT:RETURN
350 FOR O= 1 TO 500:NEXT:RETURN

130 131
10 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA

20 JAAAAAAARECTANGULOS EN 3-DAAAAAAAA

30 >AAAAACON EFECTO DE DESTELLOAAAAAA


40 'AAAAAAAAAAAAAAAAA~AAAAAAAAAAAAAAA

100 SCREEN 2:COLOR .1.8


110 FX=RNOC1J*255:FY=RNDC1J*191
120 DIM PXC3J,PYC3l,QXC3l,QYC3l
130 PXC0l=RNDC1J*C.9*255J:PYC0l=RNDC1J*C JUEGO DE CARACTERES ALFABETICOS
.9*255) EN TODOS LOS MODOS
140 B=RNDCC1l*255-PXC0Jl/2+50
150 H=RNDCC1l*l91-PYC0Jl/2+38
160 Q!=RNOCC1J*.2J+.2
170 PXC1l=PXC0l+B:PYC1J=PYC0J:PXC2J=PXC1
J:PYC2J=PYC0J+H:PXC3l= PXC0J:PYC3l=PYC2J
180 FOR I= O TO 3:QXCil=PXCIJ*Cl-Q!J+FX*
Q
190 QYCll=PYCIJ*Cl-Q!l+FY*Q!+Ql/10
200 NEXT
210 FOR 1=0 TO 3:LlNE CQXCll,QYCIJJ-CQXC
CI+llM004l,QYCCl+llM004ll,15:NEXT
220 FOR 1=0 TO 3:LINECPXCIJ,PYCIJJ-CQXCI
l. QY_C I l l, 11 : NEXT
230 FOR I=0 TO 3:LlNE CPXCIJ,PYCIJJ-CPXC 200 COLOR l,14,10
Cl+llM004l.PYCCI+llM004Jl,12:NEXT 210 S=0:SCREEN 0
240 GOT0170 220 GOSUB 330
230 S=l:SCREEN 1
240 GOSUB 330
250 OPEN "GRP: "AS#l
260 COLOR l,14,7
270 S=2:SCREEN 2
280 GOSUB 340
290 COLOR 1,14,9
300 S=3:SCREEN 3
310 GOSUB 340
320 END
330 FOR 1=65 TO 90:LOCATE 5,5:PR1NT"SCN"
S:CHR$Cll:CHR$CI+32J:GOSUB 350:CLS:NEXT:
RETURN
340 FOR 1=65 TO 90:PRESETC10.50l:PRINT#l
, "SCN"S :G:HR$C 1 l :CHR$C I+32J :GOSUB 350 :CLS
:NEXT:RETURN
350 FOR O= 1 TO 500:NEXT:RETURN

130 131
JUEGO MATEMATICO (SUMA DE LOS
ELEMENTOS DE LAS DIAGONALES) MAS GRANDE MAS PEQUEÑO

10 DIMA<5,5>
20 INPUTM 1
0 REM***MAS GRANDE / MAS PEQUE~D***
30 IFM=0THEN250 15 CLS
40 LETD=l 16 COLOR 1,12
50 FORI=lTOM 20 PRINT ''Este senc!llo Juego,. se inspl
60 FORJ=lTOM ra en el celebre MASTER-MINO solo oue co
70 READA<I,J> p l ¡cado por la escasez: de pistas~ el Jueg
80 PRINT A<I,J>; o nos pide un numero de cifras de 1 a 7
90 NEXTJ que compondran el numero a ad!v1nar:'
100 PRINT 30 PRINT "Para que acertemos el numero e
110 LETD=D+A<I,I>+A<I,M+l-I> l o rd en ad o r nos da dos p i s tas " L.a p r i me r
120 NEXTI a es el numero de c¡fras ma8ores que en
e 1 nurne ro a adivinar~ 8 la segunda el nu
130 PRINT mero de cifras menores~ 11

140 IFM/2=INT<Mt2>THEN170 40 PRINT" eJerr:plo :, si el numero a ad.iv


150 LETN=INT(M/2)+1 inar es el 2031,.8 nosotros escribirnos 31
160 LETD=D-A<N,N> 40> la maqu ¡na nos ¡ nd i ca 3 mas 9 rancies e
170 PRINT"suma de elementos de las 1 3 el 1 w el 4, w uno mas pequeno.el 0.
diagonales=";D e 1 Ju e 9 o Puede ser mu 8 d ¡ f 1e i 1
11

180 PRINT 50 PRINT:PRINT" >>>>>PULSA UNA TECL.A


190 PRINT <<<<<"
200 RESTORE 60 Z$=1NPUT$Cl)
210 GOT020 70 CLS: INPUT" TECLEE UN NUMERO : " ;F
220 DATA10,ll,12,13,14,15,16,17,18,19 80 FOR I=l TO F:Y=RNDC1J:NEXT
230 DATA20,21,22,23,24,25,26,27,28,29 30 CLS:INPUT"NUMERO DE CIFRAS:":C
240 DATA30,31,32,33,34 100 IF C>8 THEN 30
250 END 110 SCREEN0:COL.OR 15.12:KEY OFF:CLS
120 E=l:F=l
132
133.
JUEGO MATEMATICO (SUMA DE LOS
ELEMENTOS DE LAS DIAGONALES) MAS GRANDE MAS PEQUEÑO

10 DIMA<5,5>
20 INPUTM 1
0 REM***MAS GRANDE / MAS PEQUE~D***
30 IFM=0THEN250 15 CLS
40 LETD=l 16 COLOR 1,12
50 FORI=lTOM 20 PRINT ''Este senc!llo Juego,. se inspl
60 FORJ=lTOM ra en el celebre MASTER-MINO solo oue co
70 READA<I,J> p l ¡cado por la escasez: de pistas~ el Jueg
80 PRINT A<I,J>; o nos pide un numero de cifras de 1 a 7
90 NEXTJ que compondran el numero a ad!v1nar:'
100 PRINT 30 PRINT "Para que acertemos el numero e
110 LETD=D+A<I,I>+A<I,M+l-I> l o rd en ad o r nos da dos p i s tas " L.a p r i me r
120 NEXTI a es el numero de c¡fras ma8ores que en
e 1 nurne ro a adivinar~ 8 la segunda el nu
130 PRINT mero de cifras menores~ 11

140 IFM/2=INT<Mt2>THEN170 40 PRINT" eJerr:plo :, si el numero a ad.iv


150 LETN=INT(M/2)+1 inar es el 2031,.8 nosotros escribirnos 31
160 LETD=D-A<N,N> 40> la maqu ¡na nos ¡ nd i ca 3 mas 9 rancies e
170 PRINT"suma de elementos de las 1 3 el 1 w el 4, w uno mas pequeno.el 0.
diagonales=";D e 1 Ju e 9 o Puede ser mu 8 d ¡ f 1e i 1
11

180 PRINT 50 PRINT:PRINT" >>>>>PULSA UNA TECL.A


190 PRINT <<<<<"
200 RESTORE 60 Z$=1NPUT$Cl)
210 GOT020 70 CLS: INPUT" TECLEE UN NUMERO : " ;F
220 DATA10,ll,12,13,14,15,16,17,18,19 80 FOR I=l TO F:Y=RNDC1J:NEXT
230 DATA20,21,22,23,24,25,26,27,28,29 30 CLS:INPUT"NUMERO DE CIFRAS:":C
240 DATA30,31,32,33,34 100 IF C>8 THEN 30
250 END 110 SCREEN0:COL.OR 15.12:KEY OFF:CLS
120 E=l:F=l
132
133.
130 X$=STR$C INTCRNOC 1 )'1<'.YC·•l0~CC--EJ JJ
140 X$=RIGHT$CX$,LENCX$)-1)
150 LOCATE0,3:PRINT"PRUEBA NO. NRO PRU".:'3
A > < "
160 LOCATE0,4:FOR J=l TO 38:PRINT CHR$C2
23);:NEXT
170 LOCATE0.F+4:PRINTTABC4);[:TABC10):!N
PUT P$ POKER
180 IF P$=X$ THEN 270
190 A=0:8=0
200 FOR I=l TO C
210 IF Ml0$CP$, ! , l J>M!0$CX$, ! , 1 J THEN A=
A·rl
220 IF Ml0$CP$, ! , 1 J <M!0$CX$, ! , l j THEN B=
B+l
230 NEXT !
240 LOCATE26,F+4;PR!NT A;TA8C3ll:B
t0 CLS:PRINT:PRINT:PRINT''En este póker J
250 E=E+l:F=F•l•!F F=l8 THEN F=l
uegas contra tu MSX''
260 GOTO 170 20 PRINT :PRINT"Tras e 1 reparto de cartas
270 pR 1 NT : PR l NT" HAS ENCONTRADO " ; X$;•' E
puedes des-" :PRINT"cartarte una vez."
N ";[;'' PRUEBAS" :PLAY"Ce9" 30 PRINT:PRINT" Después la máquina temo
280 PRINT:PRINT"OTRA PARTIDA (S/N)":R$=I
strará su"
NPUT$Cl) 40 PRINT :PRINT"Jugada ;; tu m; smo ve rá.s e
290 IF R$="S" OR R$="s" THEN 90
1 resultado." :PRINTTAB 10''Sue rte"
50 PRINT:PRINT:PRINT:PRINT"PULSA UNA TEC
LA":Z$=INPUT$(1)
60 CLS: INPUT" i nt reduce un numero : ":F
70 FORI=lTOF:Y=RNOClJ:NEXT
80 DIMLC16J
90 U$="7 8 9 10J Q K A "
1 00 C$ C0 l ="fo"
110 C$Cll="$"
120 C$C2l="lll"
130 C$C3J="$"
140 SCREEN0:COLOR9,15:KEYOFF:CLS
150 FORI=1T016
160 LCIJ=INTCRNOC1)*32J
170 IF1=1THEN210
180 FORJ=lTOI-1
190 IFLCI)=LCJ)THEN160
200 NEXTJ
210 NEXTI

134
130 X$=STR$C INTCRNOC 1 )'1<'.YC·•l0~CC--EJ JJ
140 X$=RIGHT$CX$,LENCX$)-1)
150 LOCATE0,3:PRINT"PRUEBA NO. NRO PRU".:'3
A > < "
160 LOCATE0,4:FOR J=l TO 38:PRINT CHR$C2
23);:NEXT
170 LOCATE0.F+4:PRINTTABC4);[:TABC10):!N
PUT P$ POKER
180 IF P$=X$ THEN 270
190 A=0:8=0
200 FOR I=l TO C
210 IF Ml0$CP$, ! , l J>M!0$CX$, ! , 1 J THEN A=
A·rl
220 IF Ml0$CP$, ! , 1 J <M!0$CX$, ! , l j THEN B=
B+l
230 NEXT !
240 LOCATE26,F+4;PR!NT A;TA8C3ll:B
t0 CLS:PRINT:PRINT:PRINT''En este póker J
250 E=E+l:F=F•l•!F F=l8 THEN F=l
uegas contra tu MSX''
260 GOTO 170 20 PRINT :PRINT"Tras e 1 reparto de cartas
270 pR 1 NT : PR l NT" HAS ENCONTRADO " ; X$;•' E
puedes des-" :PRINT"cartarte una vez."
N ";[;'' PRUEBAS" :PLAY"Ce9" 30 PRINT:PRINT" Después la máquina temo
280 PRINT:PRINT"OTRA PARTIDA (S/N)":R$=I
strará su"
NPUT$Cl) 40 PRINT :PRINT"Jugada ;; tu m; smo ve rá.s e
290 IF R$="S" OR R$="s" THEN 90
1 resultado." :PRINTTAB 10''Sue rte"
50 PRINT:PRINT:PRINT:PRINT"PULSA UNA TEC
LA":Z$=INPUT$(1)
60 CLS: INPUT" i nt reduce un numero : ":F
70 FORI=lTOF:Y=RNOClJ:NEXT
80 DIMLC16J
90 U$="7 8 9 10J Q K A "
1 00 C$ C0 l ="fo"
110 C$Cll="$"
120 C$C2l="lll"
130 C$C3J="$"
140 SCREEN0:COLOR9,15:KEYOFF:CLS
150 FORI=1T016
160 LCIJ=INTCRNOC1)*32J
170 IF1=1THEN210
180 FORJ=lTOI-1
190 IFLCI)=LCJ)THEN160
200 NEXTJ
210 NEXTI

134
220 K=0:P=0
230 LOCATE0. 12: PRINT "cartas re e haz ad as"
240 GOSUB330
250 IFR$="0"THENPLAY"cde":END
260 FORI=1TOLENCR$)
270 LCUALCMID$CR$.I,1J))=LCI+5)
280 NEXTI
290 CLS BREAKOUT
300 P=l
310 GOSUB330
320 K=K+10
330 FORI=1T05
340 J=INTCLCI+K)/8)
350 F=2*CLCI+K)-8*INTCLCI+K)/8Jl+l
360 R$=MID$CU$,F.2l
370 LOCATE7*I-4.K:PRINTI:PLAY"l64n70"
¡
380 LOCATE7*I-5.K+2:PRINTR$:": '' ;C$CJl l
1
390 LOCATE7*I-5.K+3:PRINT"-----" ¡
400 NEXTI !
410 IFP=1THENP=0:RETURN .5 REM *********************
420 IFK=10THENPRINT:PRINT"p•Jlsa una tecl 15 REM * MSX-EXTRA t
a":R$=INPUT$C1J:GOT0140 25 REM t BREAKOUT
430 LOCATE!8.l2!INPUTR$ 35 REM t 1385
t
* 1
440 RETURN 45 REM t Cc)TOMAS SOLE t
55 REM *********************
1
65 OPEN "GRP:" AS #1
75 U=5
85 LF=6
35 BR=0
105 SCR=0
115 SCREEN 2.0
125 COLOR 15,l,7
135 CLS
145 GOSUB 1065
155 GOSUB 855
165 GOSUB 355
175 BX=120
185 X=l00
135 Y=80
205 HlJ=4
215 l)IJ=4
225 REM BUCLE PRINCIPAL
235 T=STICKC0l:IF T<>0 THEN GOSUB 405

136
220 K=0:P=0
230 LOCATE0. 12: PRINT "cartas re e haz ad as"
240 GOSUB330
250 IFR$="0"THENPLAY"cde":END
260 FORI=1TOLENCR$)
270 LCUALCMID$CR$.I,1J))=LCI+5)
280 NEXTI
290 CLS BREAKOUT
300 P=l
310 GOSUB330
320 K=K+10
330 FORI=1T05
340 J=INTCLCI+K)/8)
350 F=2*CLCI+K)-8*INTCLCI+K)/8Jl+l
360 R$=MID$CU$,F.2l
370 LOCATE7*I-4.K:PRINTI:PLAY"l64n70"
¡
380 LOCATE7*I-5.K+2:PRINTR$:": '' ;C$CJl l
1
390 LOCATE7*I-5.K+3:PRINT"-----" ¡
400 NEXTI !
410 IFP=1THENP=0:RETURN .5 REM *********************
420 IFK=10THENPRINT:PRINT"p•Jlsa una tecl 15 REM * MSX-EXTRA t
a":R$=INPUT$C1J:GOT0140 25 REM t BREAKOUT
430 LOCATE!8.l2!INPUTR$ 35 REM t 1385
t
* 1
440 RETURN 45 REM t Cc)TOMAS SOLE t
55 REM *********************
1
65 OPEN "GRP:" AS #1
75 U=5
85 LF=6
35 BR=0
105 SCR=0
115 SCREEN 2.0
125 COLOR 15,l,7
135 CLS
145 GOSUB 1065
155 GOSUB 855
165 GOSUB 355
175 BX=120
185 X=l00
135 Y=80
205 HlJ=4
215 l)IJ=4
225 REM BUCLE PRINCIPAL
235 T=STICKC0l:IF T<>0 THEN GOSUB 405

136
245 HV=HV*2*C.5+CX<=l8 OR X>=233JJ 645 HV=4:1JV=4
255 IF Y<=8 THEN VV=-VV 655 PUT SPRITE 0,CX,YJ,11,0
265 IF 176=Y ANO X+4>=BX ANO X<=BX+l2 TH 665 RETURN
EN GOSUB 355 675 REM PERDIDA DE UNA VIDA
275 IF Y>l84 THEN 685 685 ORAW "BM173,0"
285 Y=Y+VV 635 LINE -STEP C66,8J,11,BF
235 X=X+HV 705 DRAW "BM173,0"
305 PUT SPRITE 0,CX,YJ,15,0 715 COLOR 1
315 C=POINT CX+3,Y+3J 725 V=IJ-1
325 IF C>=2 THEN GOSUB 475 735 PRINT#l,"IJIDAS ";IJ
335 GOTO 225 745 BX=120
345 REM BATE 755 PUT SPRITE 1,CBX,181J,ll,l
765 PUT SPRITE 2,CBX+8,181J,ll,l
355 VV=·-IJV
365 IF ABSCHIJJ=4 ANO RNOClJ<.5 THEN HIJ=S 775 IF V<>0 THEN 175
GNCHIJJ*2 785 ORAW "BM100,100"
375 !F ABSCHVJ=2 ANO RNDClJ<.5 THEN HIJ=S 735 COLOR 13
805 PR!NT#l, "FIN DEL .JUEGO"
GNCHIJJ*4
385 RETURN 815 ORAW ''BM100,ll0''
335 REM MOVIMIENTO DE BATE 825 PRINT#l,"PULSE BARRA ESPACIO"
835 IF INKEY$=" " THEN RUN ELSE 835
405 BX=BX+6*CCT=7J-CT=3JJ
415 IF BX<=l4 THEN BX=14 845 REM FUERA DEL MURO
425 IF BX>=235 THEN BX=235 855 LINE C0,0J-STEPC18,131J,ll,BF
435 PUT SPRITE l,CBX,181J,ll,l 865 LINE Cl4,0J-STEP C236,8),ll,BF
445 PUT SPR!TE 2,CBX+8,l81J,ll,l 875 LINE C248,0J-C255,131J,ll,BF
455 RETURN 885 ORAW "BM173,0"
465 REM DESTRUCC!ON DE LADRILLOS 835 COLOR 1
475 1)1)=·-IJV 305 PRINT#l, "VIDAS" ;V
485 SCR=SCR+C 315 DRAW "BM23,0"
435 BR=BR+l 325 PRINT#l,"PUNTOS";SCR
505 BEEP 335 RETURN
515 TY=INTCCY-3J/8J*8+6 345 REM LADRILLOS
525 TX=INT CCX-12J/l0J.*10+14 355 RESTORE 365
965 DATA 7, 5,. 4,. 12,. 2,. 3,. 11,. 10,. 3,. 8,. 6,. 13~
535 LINE CTX,TYJ-STEP C8,6J,l,BF
545 DRAW ''BM80,0'' 4,5,7,14,15
555 LINE -STEP C48,8J,ll,BF 375 FOR A=lTO LF
565 ORAW "BM80. 0 '' 385 READ C
575 PRINT#l,SCR 335 FOR B=l TO 22
585 !F BR=LF*22 THEN GOSUB 615 1005 X=B*l0+14
535 RETURN 1015 Y=A*8+6
605 REM MAS LADRILLOS 1025 LINE CX,Y)-STEPC8,6J,C,BF
615 LF=LF+l 1035 ~1EXT B, A
625 GOSUB 355 1045 RETURN
635 X=l00:Y=80 1055 REM SPRITE BOLA
139
138
245 HV=HV*2*C.5+CX<=l8 OR X>=233JJ 645 HV=4:1JV=4
255 IF Y<=8 THEN VV=-VV 655 PUT SPRITE 0,CX,YJ,11,0
265 IF 176=Y ANO X+4>=BX ANO X<=BX+l2 TH 665 RETURN
EN GOSUB 355 675 REM PERDIDA DE UNA VIDA
275 IF Y>l84 THEN 685 685 ORAW "BM173,0"
285 Y=Y+VV 635 LINE -STEP C66,8J,11,BF
235 X=X+HV 705 DRAW "BM173,0"
305 PUT SPRITE 0,CX,YJ,15,0 715 COLOR 1
315 C=POINT CX+3,Y+3J 725 V=IJ-1
325 IF C>=2 THEN GOSUB 475 735 PRINT#l,"IJIDAS ";IJ
335 GOTO 225 745 BX=120
345 REM BATE 755 PUT SPRITE 1,CBX,181J,ll,l
765 PUT SPRITE 2,CBX+8,181J,ll,l
355 VV=·-IJV
365 IF ABSCHIJJ=4 ANO RNOClJ<.5 THEN HIJ=S 775 IF V<>0 THEN 175
GNCHIJJ*2 785 ORAW "BM100,100"
375 !F ABSCHVJ=2 ANO RNDClJ<.5 THEN HIJ=S 735 COLOR 13
805 PR!NT#l, "FIN DEL .JUEGO"
GNCHIJJ*4
385 RETURN 815 ORAW ''BM100,ll0''
335 REM MOVIMIENTO DE BATE 825 PRINT#l,"PULSE BARRA ESPACIO"
835 IF INKEY$=" " THEN RUN ELSE 835
405 BX=BX+6*CCT=7J-CT=3JJ
415 IF BX<=l4 THEN BX=14 845 REM FUERA DEL MURO
425 IF BX>=235 THEN BX=235 855 LINE C0,0J-STEPC18,131J,ll,BF
435 PUT SPRITE l,CBX,181J,ll,l 865 LINE Cl4,0J-STEP C236,8),ll,BF
445 PUT SPR!TE 2,CBX+8,l81J,ll,l 875 LINE C248,0J-C255,131J,ll,BF
455 RETURN 885 ORAW "BM173,0"
465 REM DESTRUCC!ON DE LADRILLOS 835 COLOR 1
475 1)1)=·-IJV 305 PRINT#l, "VIDAS" ;V
485 SCR=SCR+C 315 DRAW "BM23,0"
435 BR=BR+l 325 PRINT#l,"PUNTOS";SCR
505 BEEP 335 RETURN
515 TY=INTCCY-3J/8J*8+6 345 REM LADRILLOS
525 TX=INT CCX-12J/l0J.*10+14 355 RESTORE 365
965 DATA 7, 5,. 4,. 12,. 2,. 3,. 11,. 10,. 3,. 8,. 6,. 13~
535 LINE CTX,TYJ-STEP C8,6J,l,BF
545 DRAW ''BM80,0'' 4,5,7,14,15
555 LINE -STEP C48,8J,ll,BF 375 FOR A=lTO LF
565 ORAW "BM80. 0 '' 385 READ C
575 PRINT#l,SCR 335 FOR B=l TO 22
585 !F BR=LF*22 THEN GOSUB 615 1005 X=B*l0+14
535 RETURN 1015 Y=A*8+6
605 REM MAS LADRILLOS 1025 LINE CX,Y)-STEPC8,6J,C,BF
615 LF=LF+l 1035 ~1EXT B, A
625 GOSUB 355 1045 RETURN
635 X=l00:Y=80 1055 REM SPRITE BOLA
139
138
1065 RESTORE 1135
1075 FOR I=l TO 8
1085 REAO A$
1035 S$=S$+CHR$CUALCA$))
1105 NEXT
1115 SPRITE$ C0J=S$
1125 R=RNOC-TIME)
1135 DATA 0,0,24,60,60,24,0,0 APOCALYPSE NOW
1145 REM SPRITE BATE
1155 SPRITE$C1J=CHR$C255J+CHR$C255J+STRI
NG$C0,CHR$C0JJ
1165 RETURN

10 '*******APOCALYPSE NOW ******


20 '*
30 '* F.J. GUERRERO&J.C.GONZALEZ* *
40 '*
50 '*****************************
*
60 '&&&PANTALLA Y VARIABLES&&&
70 FC=4:SC=12:WQ=5:QQ=5:KEY OFF
80 OPEN"GRP:"AS#l
30 COLOR 15,7,l
100 SCREEN2,l:GOSUB950:COLOR 15,1.
1
110 PRESETC10,10):PRINT#l,"APOCALY
PSE NOW '':PRINT#l,''Este juego est&
pensado para 2 Jugadores"
120 PRINT#l,"uno con teclado iJ otr
o con Jo8St i ck. "•PRINT#l, "El Jugad
o r de 1 tac lado mueve"
130 PRINT#l, "con las teclas de cu
rsor ~ d fspa.rau
140 PRINT#l., "con la barra de aspa
11
cios.
150 PRESETC 110, 160) :PRINT#l, "•"
160 PRESETC110,172J:PRINT#l,"m"
170 FOR Q=lTO 255:READOA:LINECQ-1.

141
140
1065 RESTORE 1135
1075 FOR I=l TO 8
1085 REAO A$
1035 S$=S$+CHR$CUALCA$))
1105 NEXT
1115 SPRITE$ C0J=S$
1125 R=RNOC-TIME)
1135 DATA 0,0,24,60,60,24,0,0 APOCALYPSE NOW
1145 REM SPRITE BATE
1155 SPRITE$C1J=CHR$C255J+CHR$C255J+STRI
NG$C0,CHR$C0JJ
1165 RETURN

10 '*******APOCALYPSE NOW ******


20 '*
30 '* F.J. GUERRERO&J.C.GONZALEZ* *
40 '*
50 '*****************************
*
60 '&&&PANTALLA Y VARIABLES&&&
70 FC=4:SC=12:WQ=5:QQ=5:KEY OFF
80 OPEN"GRP:"AS#l
30 COLOR 15,7,l
100 SCREEN2,l:GOSUB950:COLOR 15,1.
1
110 PRESETC10,10):PRINT#l,"APOCALY
PSE NOW '':PRINT#l,''Este juego est&
pensado para 2 Jugadores"
120 PRINT#l,"uno con teclado iJ otr
o con Jo8St i ck. "•PRINT#l, "El Jugad
o r de 1 tac lado mueve"
130 PRINT#l, "con las teclas de cu
rsor ~ d fspa.rau
140 PRINT#l., "con la barra de aspa
11
cios.
150 PRESETC 110, 160) :PRINT#l, "•"
160 PRESETC110,172J:PRINT#l,"m"
170 FOR Q=lTO 255:READOA:LINECQ-1.

141
140

EJ-CQ.DAJ,l:E=OA:NEXT Q:PRESETC60. 430 IF SH=0 THEN SC=15
90J :PR.INT#l, "COMIENZA EL ATAQUE" :p 440 A1%=A1%+CH1%/2):81%=81%+CV1%l
AINTC10,10J,l:CLOSE1 450 A2%=A2%+CH2%/2J:B2%=82%+CU2%l
180 A2%=15:82%=182:A1%=181:B1%=183 460 IF 81=1 ANO S1=0 THEN Ml=-9:81
:FH=4<SH=4
190 ON SPRITE GOSUB 1500 =0
470 IF 82=1 ANO S2=2 THEN M2=-9:82
200 '&&LECTURA DE JOYSTICK Y TECLA =0
DO&& 480 IF 81=1 ANO Sl=l THEN M1=+9:BJ
210 SPRITE ON:T2=3:GOSUB1800 =0
220 Tl=STICKC1J:T2=STICKC0J 490 IF 82=1 ANO S2=3 THEN M2=+9:82
230 IF Tl=l THEN U1%=U1%+1 =0
240 IF T1=2 THEN U1%=Ul%+1:H1%=Hl% 500 IF T1=0 THEN GOSUB 1880
+] 510 IF T2=0 THEN GOSUB 1900
250 IF T1=3 THEN H1%=H1%+1 520 JF Fl+G1<0 OR Fl+G1>255 THEN Y
260 IF Tl=4 THEN Ul%=U1%-1:~11%=Hl% Y=0:HJ=0
+l 530 IF F3+G2<0 OR F3+G2>255 THEN X
270 IF T1=5 THEN U1%=U1%-1 X=0:H2=0
280 IF T1=6 THEN U1%=U1%-1:~11%=Hl% 540 G1=Gl+Ml:G2=G2+M2
-1 550 IF YY=l THEN PUT SPRITE5,CF1+G
290 IF T1=7 THEN H1%=H1%-1 l,F2l-,15:IF POINTCF1+G1,F2+3J=7 TH
300 IF T1=8 THEN U1%=U1%+l:H1%=Hl% EN YY=0:GOTO 570
-1
310 IF T2=1 THEN U2%=U2%+1 560 IF YY=0 THEN PUT SPRITE5.C-20,
1 -20),15
320 IF T2=2 THEN U2%=U2%+1:H2%=H2% 570 IF XX=l THEN PUT SPRITE6,CF3+G
·t- 1
\ll:l
330 IF T2=3 THEN H2%=H2%+1 2 ,F 4 J,l5:JF POINTCF3+G2,F4+3J=7 TH
ii EN XX=0:GOTO 600
340 IF T2=4 THEN U2%=U2%-1:~12%=H2% 580 , .

'
+1
350 IF T2=5 THEN U2%=U2%-l 590 IF XX=0 THEN PUT SPRITE6,C-12,
-13).15 .
360 IF T2=6 THEN U2%=U2%-J:H2%=H2% 600 IF H2 %< 0 THEN S2=2:PUT SPRITE3
-1
370 IF T2=7 THEN H2%=H2%-1 , C-21,-22)
610 IF. H1%(0 THEN Sl =0:PUT SPRITEl
380 IF T2=8 THEN U2%=U2%+11H2%=H2% .C-30,-30) 0
-1 620 IF HI%>0 THEN S1=1:PUT SPRITE
390 IF STRIGClJ=~l ANO FH>0 ~HEN B • (-30.-30) 2
l=l:Fl=A1%:F2=81%+9:Gl=0:YY=l!FH=F 630 IF H2%>0 THEN S2=3:PUT SPRITE
H-1 : GOSUB 1760 (-21 -22) .
400 IF STRIGC0)=-1 ANO SH>0 THEN B ~40 P~T SPRITE Sl,CA1%,B1%J,FC:PUT
2=1:F3=A2%:F4=82%+9:G2=0:XX=l:SH=S SPRITE S2,CA2%,82%J,SC
H-l:GOSUB 1760 650 Ol=F2:02=F4
410 '&&&& DISPARO DE MISIL S&&& 660 ' ~
420 IF FH=0 THEN FC=15 67 0 IF F2<82%+3 THEN F2=F2+~.5

142 143

EJ-CQ.DAJ,l:E=OA:NEXT Q:PRESETC60. 430 IF SH=0 THEN SC=15
90J :PR.INT#l, "COMIENZA EL ATAQUE" :p 440 A1%=A1%+CH1%/2):81%=81%+CV1%l
AINTC10,10J,l:CLOSE1 450 A2%=A2%+CH2%/2J:B2%=82%+CU2%l
180 A2%=15:82%=182:A1%=181:B1%=183 460 IF 81=1 ANO S1=0 THEN Ml=-9:81
:FH=4<SH=4
190 ON SPRITE GOSUB 1500 =0
470 IF 82=1 ANO S2=2 THEN M2=-9:82
200 '&&LECTURA DE JOYSTICK Y TECLA =0
DO&& 480 IF 81=1 ANO Sl=l THEN M1=+9:BJ
210 SPRITE ON:T2=3:GOSUB1800 =0
220 Tl=STICKC1J:T2=STICKC0J 490 IF 82=1 ANO S2=3 THEN M2=+9:82
230 IF Tl=l THEN U1%=U1%+1 =0
240 IF T1=2 THEN U1%=Ul%+1:H1%=Hl% 500 IF T1=0 THEN GOSUB 1880
+] 510 IF T2=0 THEN GOSUB 1900
250 IF T1=3 THEN H1%=H1%+1 520 JF Fl+G1<0 OR Fl+G1>255 THEN Y
260 IF Tl=4 THEN Ul%=U1%-1:~11%=Hl% Y=0:HJ=0
+l 530 IF F3+G2<0 OR F3+G2>255 THEN X
270 IF T1=5 THEN U1%=U1%-1 X=0:H2=0
280 IF T1=6 THEN U1%=U1%-1:~11%=Hl% 540 G1=Gl+Ml:G2=G2+M2
-1 550 IF YY=l THEN PUT SPRITE5,CF1+G
290 IF T1=7 THEN H1%=H1%-1 l,F2l-,15:IF POINTCF1+G1,F2+3J=7 TH
300 IF T1=8 THEN U1%=U1%+l:H1%=Hl% EN YY=0:GOTO 570
-1
310 IF T2=1 THEN U2%=U2%+1 560 IF YY=0 THEN PUT SPRITE5.C-20,
1 -20),15
320 IF T2=2 THEN U2%=U2%+1:H2%=H2% 570 IF XX=l THEN PUT SPRITE6,CF3+G
·t- 1
\ll:l
330 IF T2=3 THEN H2%=H2%+1 2 ,F 4 J,l5:JF POINTCF3+G2,F4+3J=7 TH
ii EN XX=0:GOTO 600
340 IF T2=4 THEN U2%=U2%-1:~12%=H2% 580 , .

'
+1
350 IF T2=5 THEN U2%=U2%-l 590 IF XX=0 THEN PUT SPRITE6,C-12,
-13).15 .
360 IF T2=6 THEN U2%=U2%-J:H2%=H2% 600 IF H2 %< 0 THEN S2=2:PUT SPRITE3
-1
370 IF T2=7 THEN H2%=H2%-1 , C-21,-22)
610 IF. H1%(0 THEN Sl =0:PUT SPRITEl
380 IF T2=8 THEN U2%=U2%+11H2%=H2% .C-30,-30) 0
-1 620 IF HI%>0 THEN S1=1:PUT SPRITE
390 IF STRIGClJ=~l ANO FH>0 ~HEN B • (-30.-30) 2
l=l:Fl=A1%:F2=81%+9:Gl=0:YY=l!FH=F 630 IF H2%>0 THEN S2=3:PUT SPRITE
H-1 : GOSUB 1760 (-21 -22) .
400 IF STRIGC0)=-1 ANO SH>0 THEN B ~40 P~T SPRITE Sl,CA1%,B1%J,FC:PUT
2=1:F3=A2%:F4=82%+9:G2=0:XX=l:SH=S SPRITE S2,CA2%,82%J,SC
H-l:GOSUB 1760 650 Ol=F2:02=F4
410 '&&&& DISPARO DE MISIL S&&& 660 ' ~
420 IF FH=0 THEN FC=15 67 0 IF F2<82%+3 THEN F2=F2+~.5

142 143
rn
680 IF F2>827.+3 THEN F2=F2-3.5 1 ¡1
630 IF F4<81%+3 THEN F4=F4+3.5 1020 A8$=CHR$C112J •1
700 IF F4>817.+3 THEN F4=F4-3.5 1030 A$=A1$+A2$+A3$+A4$+A5$+A6$+A6
710 '&&&&MUESTRA DEL HELICOPTEROLL $+A7$+A8$:SPRITE$C0J=A$
& 1040 A1$=CHR$C0J
720 IF A17.<1 THEN A17.=246 1050 A2$=CHR$C0l
730 IF A17.>246 THEN Al7.=1 1060 A3$=CHR$C0J
740 IF A27.<1 . THEN A27.=246 1070 A4$=CHR$ C0 l.
750 !F A27.>246 THEN A27.=1 1080 A5$=CHR$C63J
760 IF 817.<1 THEN 817.=l:U17.=0 1090 A6$=CHR$C132)
770 IF U17.>183 THEN 817.=183:U17.=0 1100 A7$=CHR$Cl26)
780 IF 827.<1 THEN 827.=l:U27.=0 1110 A8$=CHR$Cl4J
790 IF 827.)183 THEN 827.=183:V27.=0 1120 A$=A1$+A2$+A3$+A4$+A5$+A6$+A7
800 IF H17.>2S THEN H17.=25 $+A8$:SPRITE$Cll=A$
810 IF H17.<-25 THEN H17.=-25 1130 A1$=CHR$C0J
820 IF H27.>25 THEN H27.=25 1140 A2$=CHR$C0J
830 IF H27.<-25 THEN H27.=-25 1150 A3$=CHR$C0J
840 1160 A4$=CHR$C252J
850 IF POINTCA17.,817.)<>1 OR POINTC 1170 A5$=CHR$C33J ·
Al7.,81%+8)<>1 OR POINT CA17.+8,81%) 1180 A6$=CHR$C126J
<>1 OR POINTCA1%+8,817.+8)<>1 THEN 1190 A7$=CHR$C248)
GOSU8 1920 1200 A8$=CHR$C72l
860 IF POINTCA27.,82%)()1 OR POINTC 1210 A$=Al$+A2$+A3$+A4$+A5$+A6$+A7
A27.,827.+8)<)1 OR POINTCA2%+8,82%)< $+A8$:SPRITE$Cll=A$
>1 OR POINTCA27.+8,827.+8l<>l THEN G 1220 A1$=CHR$C0J
OSU8 1930 1230 A2$=CHR$C0J
870 IF S0<>0 THEN SO=S0-1 1240 A3$=CHR$C0l
880 IF S0=0 THEN SPRITE ON 1250 A4$=CHR$C63J
830 . 1260 A~$=CHR$Cl32J
900 IF 817.>180 THEN FH=4:FC=4 1270 A6$=CHR.$ C126 J
310 IF 827.>180 THEN SH=4:SC=12
320 IF WQ=0 OR QQ=0 THEN GOSUB 136 1280 A7$=CHR$C31l
0 1230 A8$=CHR$C18l
330 GOSU81800:GOTO 220 1300 A$=Al$+A2$+A3$+A4$+A5$+A6$+A7
340 '&LL $+A8$:SPRITE$C3l=A$
350 A1$=CHR$C0l 1310 A1$=CHR$C137l
360 A2$=CHR$C0l 1320 A2$=CHR$C74J
970 A3$=CHR$C0l 1330 A3$=CHR$C46l
380 A4$=CHR$C0) 1340 A4$=CHR$Cl8)
930 A5$=CHR.$C252l 1350 A5$=CHR$C245J
1000 A6$=CHR$C33l 1360 A6$=CHR$C20)
1010 A7$=CHR$Cl26) 1370 A7$=CHR$Cl70)
1380 A8$=CHR$C68)

144 145
1
rn
680 IF F2>827.+3 THEN F2=F2-3.5 1 ¡1
630 IF F4<81%+3 THEN F4=F4+3.5 1020 A8$=CHR$C112J •1
700 IF F4>817.+3 THEN F4=F4-3.5 1030 A$=A1$+A2$+A3$+A4$+A5$+A6$+A6
710 '&&&&MUESTRA DEL HELICOPTEROLL $+A7$+A8$:SPRITE$C0J=A$
& 1040 A1$=CHR$C0J
720 IF A17.<1 THEN A17.=246 1050 A2$=CHR$C0l
730 IF A17.>246 THEN Al7.=1 1060 A3$=CHR$C0J
740 IF A27.<1 . THEN A27.=246 1070 A4$=CHR$ C0 l.
750 !F A27.>246 THEN A27.=1 1080 A5$=CHR$C63J
760 IF 817.<1 THEN 817.=l:U17.=0 1090 A6$=CHR$C132)
770 IF U17.>183 THEN 817.=183:U17.=0 1100 A7$=CHR$Cl26)
780 IF 827.<1 THEN 827.=l:U27.=0 1110 A8$=CHR$Cl4J
790 IF 827.)183 THEN 827.=183:V27.=0 1120 A$=A1$+A2$+A3$+A4$+A5$+A6$+A7
800 IF H17.>2S THEN H17.=25 $+A8$:SPRITE$Cll=A$
810 IF H17.<-25 THEN H17.=-25 1130 A1$=CHR$C0J
820 IF H27.>25 THEN H27.=25 1140 A2$=CHR$C0J
830 IF H27.<-25 THEN H27.=-25 1150 A3$=CHR$C0J
840 1160 A4$=CHR$C252J
850 IF POINTCA17.,817.)<>1 OR POINTC 1170 A5$=CHR$C33J ·
Al7.,81%+8)<>1 OR POINT CA17.+8,81%) 1180 A6$=CHR$C126J
<>1 OR POINTCA1%+8,817.+8)<>1 THEN 1190 A7$=CHR$C248)
GOSU8 1920 1200 A8$=CHR$C72l
860 IF POINTCA27.,82%)()1 OR POINTC 1210 A$=Al$+A2$+A3$+A4$+A5$+A6$+A7
A27.,827.+8)<)1 OR POINTCA2%+8,82%)< $+A8$:SPRITE$Cll=A$
>1 OR POINTCA27.+8,827.+8l<>l THEN G 1220 A1$=CHR$C0J
OSU8 1930 1230 A2$=CHR$C0J
870 IF S0<>0 THEN SO=S0-1 1240 A3$=CHR$C0l
880 IF S0=0 THEN SPRITE ON 1250 A4$=CHR$C63J
830 . 1260 A~$=CHR$Cl32J
900 IF 817.>180 THEN FH=4:FC=4 1270 A6$=CHR.$ C126 J
310 IF 827.>180 THEN SH=4:SC=12
320 IF WQ=0 OR QQ=0 THEN GOSUB 136 1280 A7$=CHR$C31l
0 1230 A8$=CHR$C18l
330 GOSU81800:GOTO 220 1300 A$=Al$+A2$+A3$+A4$+A5$+A6$+A7
340 '&LL $+A8$:SPRITE$C3l=A$
350 A1$=CHR$C0l 1310 A1$=CHR$C137l
360 A2$=CHR$C0l 1320 A2$=CHR$C74J
970 A3$=CHR$C0l 1330 A3$=CHR$C46l
380 A4$=CHR$C0) 1340 A4$=CHR$Cl8)
930 A5$=CHR.$C252l 1350 A5$=CHR$C245J
1000 A6$=CHR$C33l 1360 A6$=CHR$C20)
1010 A7$=CHR$Cl26) 1370 A7$=CHR$Cl70)
1380 A8$=CHR$C68)

144 145
1
1390 A$=A1$+A2$+A3$+A4$+A5$+A6$+A7 1600 SOUN02,0:SOUN03,13
$+A8$:SPRITE$C4J=A$ 1610 SOUN04,255:SOUN05,15
1400 A1$=CHR$C0) 1620 SOUN06,30:SOUN07,0
1410 A2$=CHR$C0J 1630 SOUN08,16:SOUND9,16
1420 A3$=CHR$C0J 1640 SOUNDl0,16:SOUND13,0
1430 A4$=CHR$C32J 1650 FOR X=OTO 30:NEXT X
1440 A5$=CHR$C248) 1660 SOUN012,56:SOUND13,0
1450 A6$=CHR$C32J 1670 RETURN
1460 A7$=CHR$COJ
1470 A8$=CHR$COJ 1680 '&&&DATAS PARA LAS MONTA~AS&&
1480 A$=A1$+A2~+A3$+A4$+A5$+A6$+A7 L
•tA8$:SPRITE$C5J=A$:SPRITE$C6J=A$ 1690 DATA120,200,ll,120,143,140,14
1490 RETURN 0,130,120,100,100,200,200,200,200,
1500 ' 200.200,200,200,200,200,200,200,20
1510 0,200,200,200,200,190,150,120,120,
1520 110,110,100,200,200
1530 1700 DATA125,250,111,231,125,116,l
1540 IFINTCA1%/l0l=INTCA2%/l0JANO 37, 128, 139, 120, 115, 120, 125, 134, 143
INTCBl%/lOJ=INTCB2%/10JTHEN PUT SP , 153, 153, 182, 131, 180, 255, 137, 138, 1
i 1550 IFINTCCFl+Gl)/lOJ=INTCA2%/l0J
89, 197, 173, 138, 127, 128, 137, 157, 167
,1 . ANO INTCF2/lOJ=INTCB2%/lOlTHEN PUT 1710 OATA100,200,100,100,200,100,3
SPRITES2,C-21,-22l:PUT SPRITE5,C-2 o, 120, 150, 130, 180, 170, 170, 165, 174,
0,-20J:PUTSPRITE4,CA2%,B2%),15•GOS 137, 182, 181, 180, 176, 177,220, 100, 12
UB1590:FOR T=0T01000:NEXTT:PUT SPR o, 125, 130, 135, 150, 175, 150, 155, 150,
ITE4,C-l,-30J:A2%=15:82%=182:U2%=0 155, 170, 175, 177, 178, 179, 180, 181; 18
:H2%=0:WQ=WQ-l:RETURN 2,183.184,184,183,182,182,181,180,
1560 IFINTCCF3+G2J/10J=INTCA1%/10J 179, 178, 177, 171, 175, 166, 170, 180, 18
ANDINTCF4/lOJ=INTCBl%/l0JTHEN PUTS 0,180,180,180
PRITES1,C-30,30J:PUTSPRITE6,C-20,4 1720 DATA210,210,200,190,185,186,l
0J:PUTSPRITE4,CA1%,81%J,15:GOSUB15 87, 188, 189, 180, 175, 170, 165, 164, 163
90:FORT=OT01000:NEXTT:PUT SPRITE4, , 163, 163, 162, 161, 160, 155, 157, 158, 1
C-4,-20J!Al%=181:B1%=183:U1%=0:H1% 59,147,133,128,187,188,187,187,187
=O:QQ=QQ-l:RETURN
1570 IFINTCCFl+Gll/lOJ=INTCCF3+G2J 1730 DATAl00,100,110,120,143,140,1
/l0JAND INTCF2/l0l=INTCF4/l0JTHEN 40,130,120,100,100,200,200,200,200
PUT SPRITE5,C-20,-20J:PUT SPRITE6, ,200,200.200.200,200.200,200,200,2
C-20,40J:PUT SPRITE4,CFl+Gl,F2l,15 oo,200.200.200,200,190,1so,120,120
:GOSUB1590:FORT=0T01000:NEXTT:PUT .110,110,100,200.200
SPRITE4,C-4,-20J:XX=0:YY=0:F4=-22:
F2=-12:RETURN
1580 SPRITE OFF:SO=l 1740 OATA200,200,200,200,200,200,1
1590 'LLLEXPLOSION&&& 90,190,190,190,190,200,130,185.184

146 147
1390 A$=A1$+A2$+A3$+A4$+A5$+A6$+A7 1600 SOUN02,0:SOUN03,13
$+A8$:SPRITE$C4J=A$ 1610 SOUN04,255:SOUN05,15
1400 A1$=CHR$C0) 1620 SOUN06,30:SOUN07,0
1410 A2$=CHR$C0J 1630 SOUN08,16:SOUND9,16
1420 A3$=CHR$C0J 1640 SOUNDl0,16:SOUND13,0
1430 A4$=CHR$C32J 1650 FOR X=OTO 30:NEXT X
1440 A5$=CHR$C248) 1660 SOUN012,56:SOUND13,0
1450 A6$=CHR$C32J 1670 RETURN
1460 A7$=CHR$COJ
1470 A8$=CHR$COJ 1680 '&&&DATAS PARA LAS MONTA~AS&&
1480 A$=A1$+A2~+A3$+A4$+A5$+A6$+A7 L
•tA8$:SPRITE$C5J=A$:SPRITE$C6J=A$ 1690 DATA120,200,ll,120,143,140,14
1490 RETURN 0,130,120,100,100,200,200,200,200,
1500 ' 200.200,200,200,200,200,200,200,20
1510 0,200,200,200,200,190,150,120,120,
1520 110,110,100,200,200
1530 1700 DATA125,250,111,231,125,116,l
1540 IFINTCA1%/l0l=INTCA2%/l0JANO 37, 128, 139, 120, 115, 120, 125, 134, 143
INTCBl%/lOJ=INTCB2%/10JTHEN PUT SP , 153, 153, 182, 131, 180, 255, 137, 138, 1
i 1550 IFINTCCFl+Gl)/lOJ=INTCA2%/l0J
89, 197, 173, 138, 127, 128, 137, 157, 167
,1 . ANO INTCF2/lOJ=INTCB2%/lOlTHEN PUT 1710 OATA100,200,100,100,200,100,3
SPRITES2,C-21,-22l:PUT SPRITE5,C-2 o, 120, 150, 130, 180, 170, 170, 165, 174,
0,-20J:PUTSPRITE4,CA2%,B2%),15•GOS 137, 182, 181, 180, 176, 177,220, 100, 12
UB1590:FOR T=0T01000:NEXTT:PUT SPR o, 125, 130, 135, 150, 175, 150, 155, 150,
ITE4,C-l,-30J:A2%=15:82%=182:U2%=0 155, 170, 175, 177, 178, 179, 180, 181; 18
:H2%=0:WQ=WQ-l:RETURN 2,183.184,184,183,182,182,181,180,
1560 IFINTCCF3+G2J/10J=INTCA1%/10J 179, 178, 177, 171, 175, 166, 170, 180, 18
ANDINTCF4/lOJ=INTCBl%/l0JTHEN PUTS 0,180,180,180
PRITES1,C-30,30J:PUTSPRITE6,C-20,4 1720 DATA210,210,200,190,185,186,l
0J:PUTSPRITE4,CA1%,81%J,15:GOSUB15 87, 188, 189, 180, 175, 170, 165, 164, 163
90:FORT=OT01000:NEXTT:PUT SPRITE4, , 163, 163, 162, 161, 160, 155, 157, 158, 1
C-4,-20J!Al%=181:B1%=183:U1%=0:H1% 59,147,133,128,187,188,187,187,187
=O:QQ=QQ-l:RETURN
1570 IFINTCCFl+Gll/lOJ=INTCCF3+G2J 1730 DATAl00,100,110,120,143,140,1
/l0JAND INTCF2/l0l=INTCF4/l0JTHEN 40,130,120,100,100,200,200,200,200
PUT SPRITE5,C-20,-20J:PUT SPRITE6, ,200,200.200.200,200.200,200,200,2
C-20,40J:PUT SPRITE4,CFl+Gl,F2l,15 oo,200.200.200,200,190,1so,120,120
:GOSUB1590:FORT=0T01000:NEXTT:PUT .110,110,100,200.200
SPRITE4,C-4,-20J:XX=0:YY=0:F4=-22:
F2=-12:RETURN
1580 SPRITE OFF:SO=l 1740 OATA200,200,200,200,200,200,1
1590 'LLLEXPLOSION&&& 90,190,190,190,190,200,130,185.184

146 147
RITE4,CA2%,B2%J,15:GOSU81590:FOR T
, 183. 182, 181. 180, 176, 177, 100, 100, 1 =0TO 1000:NEXT T:A2%=15:82%=182:PU
20,125,130,135,140.145,150,155,160 T SPRITE4,C-10,-4J:U2%=0:H2%=0:QQ=
, 165, 170, 175, 177, 178, 179, 180, 181, 1 QQ-l:RETURN
82.183,184,184,183,182,182,181,180 1940 ,
, 179, 178, 177, 171, 175, 166, 170, 180, 1 1950 ,
80,180,180,180 1960 BEEP :CLS :PLAY"", ""."o 2<;15ACEG
1750 DATA200,200,200,203,200,200,l +2ECA"
90,190,190,190,190,220,190,185,184 1970 SCREEN0
• 183, 182, 181, 185, 178, 137, 103, 150, 1 1980 IFQQ=WQ THENPRINT"EMPATE"
20,195,130,135,140,145,150,155,160 1990 I F QQ) WQ THENPR I NT" GANADOR EL.
• 165, 170, 175, 177, 178, 179, 180, 181, 1 JUGADOR DEL TECLADO''
82,183,184,184,183,182,182,181,180 2000 IF QQ(WQ THENPRINT''GANADOR EL
, 179, 178, 197, 171, 175, 196, 180, 190, 1 JUGADOR DEL JOYSTICK"
80,190,170,180 2010 LOCATE10,7:PRINT''OTRA PARTIDA
1760 SOUN06,15:SOUND7.7:soUND8,16: CS/NJ"
SOUN09,16:SOUND10,16:SOUND11,0:SOU 2020 INPUT T$
N011,0:SQUN012,16:SOUND13,0:RETURN 2030 IF T$="S"THEN RUN
2040 IFT$0 "S" THEN 2050 •PRINT"HAS
1770 •
1780
1790 2040 I FT$ <> "S" THEN 2050 :PRI NT" HAS
1800 SOUN06,15 TA OTRA CAMPEONES"
1810 SOUND7,135 2050 ENO
1820 SOUN08,31
1830 SOUND9,31
1840 SOUND10,31
1850 SOUND11,0:SOUND12,1
1860 SOUND13,12
1870 RETURN

1880 IF H1%<0 THEN H1%=H1%+.5ELSEI


F H1%>0THEN Hl%=H1%-.5
1890 U1%=U1%+.8:RETURN
1900 IF H2%<0 THENH2%=H2%+.5ELSE I
F H2%>0 THEN H2%=H2%-.8 .
1910 U2%=U2%+.5:RETURN
1920 PUT SPRITES1,C-20,0J:PUT SPRI
TE4,CA1%,81%J,15:GOSUB1590~FOR T=0
T01000:NEXT T:A1%=181:81%=183:PUT
SPRITE4,C-20,-0J:U1%=0:H1%=0:WQ=WQ
-1 :RETURN
1930 PUT SPRITE S2,C-10,-4J:PUT SP 1

1 149
148 1·
1
RITE4,CA2%,B2%J,15:GOSU81590:FOR T
, 183. 182, 181. 180, 176, 177, 100, 100, 1 =0TO 1000:NEXT T:A2%=15:82%=182:PU
20,125,130,135,140.145,150,155,160 T SPRITE4,C-10,-4J:U2%=0:H2%=0:QQ=
, 165, 170, 175, 177, 178, 179, 180, 181, 1 QQ-l:RETURN
82.183,184,184,183,182,182,181,180 1940 ,
, 179, 178, 177, 171, 175, 166, 170, 180, 1 1950 ,
80,180,180,180 1960 BEEP :CLS :PLAY"", ""."o 2<;15ACEG
1750 DATA200,200,200,203,200,200,l +2ECA"
90,190,190,190,190,220,190,185,184 1970 SCREEN0
• 183, 182, 181, 185, 178, 137, 103, 150, 1 1980 IFQQ=WQ THENPRINT"EMPATE"
20,195,130,135,140,145,150,155,160 1990 I F QQ) WQ THENPR I NT" GANADOR EL.
• 165, 170, 175, 177, 178, 179, 180, 181, 1 JUGADOR DEL TECLADO''
82,183,184,184,183,182,182,181,180 2000 IF QQ(WQ THENPRINT''GANADOR EL
, 179, 178, 197, 171, 175, 196, 180, 190, 1 JUGADOR DEL JOYSTICK"
80,190,170,180 2010 LOCATE10,7:PRINT''OTRA PARTIDA
1760 SOUN06,15:SOUND7.7:soUND8,16: CS/NJ"
SOUN09,16:SOUND10,16:SOUND11,0:SOU 2020 INPUT T$
N011,0:SQUN012,16:SOUND13,0:RETURN 2030 IF T$="S"THEN RUN
2040 IFT$0 "S" THEN 2050 •PRINT"HAS
1770 •
1780
1790 2040 I FT$ <> "S" THEN 2050 :PRI NT" HAS
1800 SOUN06,15 TA OTRA CAMPEONES"
1810 SOUND7,135 2050 ENO
1820 SOUN08,31
1830 SOUND9,31
1840 SOUND10,31
1850 SOUND11,0:SOUND12,1
1860 SOUND13,12
1870 RETURN

1880 IF H1%<0 THEN H1%=H1%+.5ELSEI


F H1%>0THEN Hl%=H1%-.5
1890 U1%=U1%+.8:RETURN
1900 IF H2%<0 THENH2%=H2%+.5ELSE I
F H2%>0 THEN H2%=H2%-.8 .
1910 U2%=U2%+.5:RETURN
1920 PUT SPRITES1,C-20,0J:PUT SPRI
TE4,CA1%,81%J,15:GOSUB1590~FOR T=0
T01000:NEXT T:A1%=181:81%=183:PUT
SPRITE4,C-20,-0J:U1%=0:H1%=0:WQ=WQ
-1 :RETURN
1930 PUT SPRITE S2,C-10,-4J:PUT SP 1

1 149
148 1·
1
ue ha8 bonos invisibles que cuando consi
gues una flecha se suman a tu puntuac¡o
' n., pero ·si llesan a 0~acabaras la partid
¡' - .
a- " ~
150 PRINT''Al principio cuentas con 3000
bonos~ cuando lleguen a 1000~ en el an
9ulo superior derecho se visualiz:ara u
EL ROBOT SALTARIN na campana naranja,. 8 cuando ! leguen a
500 una roJa~ que te avisara dsl pel
i 9 ro~ "
160 PRINT:PRINT"Cada vez: que consisas un
a flecha,, los bonos se repond ran :::¡ e 1 ni
ve l de dificultad aurnentara.PuedQS sa
ltar hacia adelante 8 hacia detras.
BUENA SUERTE"
170 PRINT:PRINT:PRINT" PULSA --A-- PAR
A CONTINUAR"
t0 ' ********************** 180 IF INKEY$="A" OR INKEY$="a" THEN 130
20 *EL ROBOT SALTARIN * ELSE 180
30 * POR F.~OSE SALAZAR * 130 PLAY "SFCF"
40 * INSTRUCCIONES * * 200 MN=l:GOTO 210
50 ********************** 210 J=170:B=0:L=30:P=162:K=6:HH=40:F=l62
60 CLS:SCREEN 0 :II=5:I0=5:Y0=3:PP=162:PT=l35:Q=l48:W=16
70 PRINT:PR!NT" EL ROBOT SALTARIN 2:FL=3:PE=55:TQ=5:S=0:FH=0:CE=3000:RT=10
:L0=7:LU=7
80 PRINT:PRINT 220 ON SPRITE GOSUB 1730
90 PR I NT 1' E 1 o b jet i vo de 1 Ju e 8 o es e o ns: e 8 230 COLOR 10. 1. 1
u ir e 1 ma!:::Jo r numero de flechas pos¡ bles_ 240 SCREEN 2.2
Para ello debes coser las llaves que 250
se encuentran en el 1 piso 8 2 piso 8 11 260 ' ~ DATAS DE SPRITES ~
esar hasta la puerta. 11
270
100 PRINT:PRINT"Tienes 5 robots:lo9raras 280 DATA 0.0.0.0.0.0.0.0
uno extra cada vez que consigas alsun 230 DATA 1.3.1.0.0.0.0.0
a flecha.~ 10000 puntos 8 3 robots mas c 300 DATA 0,0,0,0.0.0,0.204
a.da vez que pases la ultima flecha_ 11
310 DATA 254,183.254,252,252,48,72,48
110 PRINT''Al principio posees 5 robots. 320 DATA 3,7.2,3.3,1,3,5
cuando te quede uno~ en el angulo superi 330 DATA 11.13,1,3,6,12.28.0
o r de re cho aparece ra un 1. '' 340 DATA 132,224,64,132,132,128,!32.160
120 PRINT:PRINT:PRINT" PULSA --A-- PAR 350 DATA 208,200,128,132,36.48,56,0
A CONTINUAR" 360 DATA 0,0,3,0,0,0.0,0
130 IF INKEY$="A" OR INKEY$="a" THEN 140 370 DATA 0.0.0,0.0,0.0,0
ELSE 130 380 DATA 0,135,254,135,0,0,0,0
140 PRINT:PRINT''Debes tener cuidado porq 330 DATA 0,0.0,0,0,0,0,0

150 151
ue ha8 bonos invisibles que cuando consi
gues una flecha se suman a tu puntuac¡o
' n., pero ·si llesan a 0~acabaras la partid
¡' - .
a- " ~
150 PRINT''Al principio cuentas con 3000
bonos~ cuando lleguen a 1000~ en el an
9ulo superior derecho se visualiz:ara u
EL ROBOT SALTARIN na campana naranja,. 8 cuando ! leguen a
500 una roJa~ que te avisara dsl pel
i 9 ro~ "
160 PRINT:PRINT"Cada vez: que consisas un
a flecha,, los bonos se repond ran :::¡ e 1 ni
ve l de dificultad aurnentara.PuedQS sa
ltar hacia adelante 8 hacia detras.
BUENA SUERTE"
170 PRINT:PRINT:PRINT" PULSA --A-- PAR
A CONTINUAR"
t0 ' ********************** 180 IF INKEY$="A" OR INKEY$="a" THEN 130
20 *EL ROBOT SALTARIN * ELSE 180
30 * POR F.~OSE SALAZAR * 130 PLAY "SFCF"
40 * INSTRUCCIONES * * 200 MN=l:GOTO 210
50 ********************** 210 J=170:B=0:L=30:P=162:K=6:HH=40:F=l62
60 CLS:SCREEN 0 :II=5:I0=5:Y0=3:PP=162:PT=l35:Q=l48:W=16
70 PRINT:PR!NT" EL ROBOT SALTARIN 2:FL=3:PE=55:TQ=5:S=0:FH=0:CE=3000:RT=10
:L0=7:LU=7
80 PRINT:PRINT 220 ON SPRITE GOSUB 1730
90 PR I NT 1' E 1 o b jet i vo de 1 Ju e 8 o es e o ns: e 8 230 COLOR 10. 1. 1
u ir e 1 ma!:::Jo r numero de flechas pos¡ bles_ 240 SCREEN 2.2
Para ello debes coser las llaves que 250
se encuentran en el 1 piso 8 2 piso 8 11 260 ' ~ DATAS DE SPRITES ~
esar hasta la puerta. 11
270
100 PRINT:PRINT"Tienes 5 robots:lo9raras 280 DATA 0.0.0.0.0.0.0.0
uno extra cada vez que consigas alsun 230 DATA 1.3.1.0.0.0.0.0
a flecha.~ 10000 puntos 8 3 robots mas c 300 DATA 0,0,0,0.0.0,0.204
a.da vez que pases la ultima flecha_ 11
310 DATA 254,183.254,252,252,48,72,48
110 PRINT''Al principio posees 5 robots. 320 DATA 3,7.2,3.3,1,3,5
cuando te quede uno~ en el angulo superi 330 DATA 11.13,1,3,6,12.28.0
o r de re cho aparece ra un 1. '' 340 DATA 132,224,64,132,132,128,!32.160
120 PRINT:PRINT:PRINT" PULSA --A-- PAR 350 DATA 208,200,128,132,36.48,56,0
A CONTINUAR" 360 DATA 0,0,3,0,0,0.0,0
130 IF INKEY$="A" OR INKEY$="a" THEN 140 370 DATA 0.0.0,0.0,0.0,0
ELSE 130 380 DATA 0,135,254,135,0,0,0,0
140 PRINT:PRINT''Debes tener cuidado porq 330 DATA 0,0.0,0,0,0,0,0

150 151
400 DATA 1,59,46.56,0,0,0,0 800 •
810
* U!SUALIZACION DE SPRITES *
íl
''
l ¡
l ¡
¡
410 DATA 0,0,0,0,0,0,0,0
420 DATA 4,142.219,112,32,0.0,0 820 PUT SPRITE 0,Cl80,162),3,1 l
l
1
i

430 DATA 0,0,0,0,0,0,0,0 830 PUT SPRITE 7,C60,162),3,1 ~ 1

440 DATA 0,0,0,0,0,0,0,0 840 PUT SPRITE 8.Cl40,136J,7,4


450 DATA 0,0,0.0,0,0,0,0 850 PUT SPRITE 1,CL,Pl,11,2
460 DATA 0.0.0,0.0~0.31,17 860 PUT SPRITE 2,Cl00,136),7,q
470 DATA 31,4.4,4,4,28,12,28 870 PUT SPR I TE 1 l, C215, 85), 3, I I
480 DATA 0,1,3,7,7,7,7,7 880 PUT SPRITE 4,C215,lq0),3,IO
490 DATA 5,5,7,7.7,7,7,7 890 PUT SPRITE 12;Cl80,107l,3,l
500 DATA 232.244,250.253,253,253,253,253 300 PUT SPRITE 13,C125,107l,3,l
910 PUT SPRITE 14,C55,107l,2,l
510 DATA 253,253,253,253,253,253,253,253 320 PUT SPRITE 5,C215,30),15,6
330 PUT SPRITE 15,C75,80J,7,4
520 DATA 0,0,0,1,0,0,0,1 940 PUT SPRITE 16,Cl60,80J,7,4
530 DATA 1,0,0,0,0,0,0.0 350 PUT SPRITE 6,CHH,Fl,FL,3
540 DATA 3,29,126.254,254,124,124,152 960 PUT SPRITE 17,C60,52J,3,1
550 DATA 136,0,0,0.0,0,0,0 370 PUT SPR!TE 18,C90,52l,3,1
560 DATA 0,0,0,0,0,0,0,0 980 PUT SPRITE 19:c140,52J.2.l
570 DATA 0,0,0,0,0,0,0,0 990 PUT SPRITE 20,C40,24l,7,4
580 DATA 7,7,3,3,3,3,3,3 1000 PUT SPR!TE 21,Cll0,24J,7,4
590 DATA 0,0,0,0,0,0,0,0 1010 PUT SPRITE 22.C170,2q),7,4
600 FOR Y=l TO 8 1020 GOTO 1070
610 A$="":FOR X=l TO 32:READ D:A$=A$-rCHR 1030 W=162!Q=lq8:P=P+110:L0=7•LU=7
$CDJ:NEXT X:SPRITE$CYl=A$ 1040
620 NEXT Y 1050 •
1060 ,
*
MOUIMIENTO DEL ROBOT*
630 LINE C0,0J-C19,195J.l,BF
640 LINE C235,0J-C255,132l,l,BF 1070 D=STICKC0J:SPRITE ON
650 LINE C50,0)-C200,10l,7,B 1080 HH=HH-YO:IF HH<5 THEN GOTO 1260
660 FOR JK=50 TO 200 STEP 30 1090 IF D=3 THEN BEEP•L=L+2:P=P+2
670 LINE CJK,0)-CJK,10),7 1100 IF 0=7 THEN BEEP•L=L-2:P=P+2
680 NEXT JK 1110 IF D=l THEN BEEP•L=L+5:P=P-K:L=L-5:
630 IF P<PT THEN K=-K+2
700 • *
CREACION DEL SUELO * 1120 IF D=2 THEN BEEP:L=L+3:P=P-K:IF P<P
T THEN K=-K+2
710
720 OPEN "GRP•" AS#l 1130 IF 0=8 THEN BEEP•L=L-3:P=f-~:lf P<P
730 FOR F=20 TO 235 STEP 8 T THEN K=-K+2
740 FOR D=15 TO 190 STEP 55 1140 IF D=0 THEN PUT SPRITE l,CL,FJ,15,Z
750 PSET CF,DJ:PRINT#l,CHR$C215l :P=P+2
760 NEXT D,F:GOTO 820 1150 IF D=5 THEN P=P+2
770 K=-K+2:GOTO 820 1160 IF D=4 THEN P=P+2
780 L=30:P=P 1170 IF D=6 THEN P=P+2 ¡ :
1180 IF L<20 THEN L~20 ' '
790

153
152
400 DATA 1,59,46.56,0,0,0,0 800 •
810
* U!SUALIZACION DE SPRITES *
íl
''
l ¡
l ¡
¡
410 DATA 0,0,0,0,0,0,0,0
420 DATA 4,142.219,112,32,0.0,0 820 PUT SPRITE 0,Cl80,162),3,1 l
l
1
i

430 DATA 0,0,0,0,0,0,0,0 830 PUT SPRITE 7,C60,162),3,1 ~ 1

440 DATA 0,0,0,0,0,0,0,0 840 PUT SPRITE 8.Cl40,136J,7,4


450 DATA 0,0,0.0,0,0,0,0 850 PUT SPRITE 1,CL,Pl,11,2
460 DATA 0.0.0,0.0~0.31,17 860 PUT SPRITE 2,Cl00,136),7,q
470 DATA 31,4.4,4,4,28,12,28 870 PUT SPR I TE 1 l, C215, 85), 3, I I
480 DATA 0,1,3,7,7,7,7,7 880 PUT SPRITE 4,C215,lq0),3,IO
490 DATA 5,5,7,7.7,7,7,7 890 PUT SPRITE 12;Cl80,107l,3,l
500 DATA 232.244,250.253,253,253,253,253 300 PUT SPRITE 13,C125,107l,3,l
910 PUT SPRITE 14,C55,107l,2,l
510 DATA 253,253,253,253,253,253,253,253 320 PUT SPRITE 5,C215,30),15,6
330 PUT SPRITE 15,C75,80J,7,4
520 DATA 0,0,0,1,0,0,0,1 940 PUT SPRITE 16,Cl60,80J,7,4
530 DATA 1,0,0,0,0,0,0.0 350 PUT SPRITE 6,CHH,Fl,FL,3
540 DATA 3,29,126.254,254,124,124,152 960 PUT SPRITE 17,C60,52J,3,1
550 DATA 136,0,0,0.0,0,0,0 370 PUT SPR!TE 18,C90,52l,3,1
560 DATA 0,0,0,0,0,0,0,0 980 PUT SPRITE 19:c140,52J.2.l
570 DATA 0,0,0,0,0,0,0,0 990 PUT SPRITE 20,C40,24l,7,4
580 DATA 7,7,3,3,3,3,3,3 1000 PUT SPR!TE 21,Cll0,24J,7,4
590 DATA 0,0,0,0,0,0,0,0 1010 PUT SPRITE 22.C170,2q),7,4
600 FOR Y=l TO 8 1020 GOTO 1070
610 A$="":FOR X=l TO 32:READ D:A$=A$-rCHR 1030 W=162!Q=lq8:P=P+110:L0=7•LU=7
$CDJ:NEXT X:SPRITE$CYl=A$ 1040
620 NEXT Y 1050 •
1060 ,
*
MOUIMIENTO DEL ROBOT*
630 LINE C0,0J-C19,195J.l,BF
640 LINE C235,0J-C255,132l,l,BF 1070 D=STICKC0J:SPRITE ON
650 LINE C50,0)-C200,10l,7,B 1080 HH=HH-YO:IF HH<5 THEN GOTO 1260
660 FOR JK=50 TO 200 STEP 30 1090 IF D=3 THEN BEEP•L=L+2:P=P+2
670 LINE CJK,0)-CJK,10),7 1100 IF 0=7 THEN BEEP•L=L-2:P=P+2
680 NEXT JK 1110 IF D=l THEN BEEP•L=L+5:P=P-K:L=L-5:
630 IF P<PT THEN K=-K+2
700 • *
CREACION DEL SUELO * 1120 IF D=2 THEN BEEP:L=L+3:P=P-K:IF P<P
T THEN K=-K+2
710
720 OPEN "GRP•" AS#l 1130 IF 0=8 THEN BEEP•L=L-3:P=f-~:lf P<P
730 FOR F=20 TO 235 STEP 8 T THEN K=-K+2
740 FOR D=15 TO 190 STEP 55 1140 IF D=0 THEN PUT SPRITE l,CL,FJ,15,Z
750 PSET CF,DJ:PRINT#l,CHR$C215l :P=P+2
760 NEXT D,F:GOTO 820 1150 IF D=5 THEN P=P+2
770 K=-K+2:GOTO 820 1160 IF D=4 THEN P=P+2
780 L=30:P=P 1170 IF D=6 THEN P=P+2 ¡ :
1180 IF L<20 THEN L~20 ' '
790

153
152
r
1
1150 IF P<20 THEN P=20 1580 SOUNO ll,0:SOUNO 12,S:SOUNO 13.0
1200 IF L>200 ANO P>70 ANO P<l30 THEN GO 1530 FOR T=l TO 20•NEXT T
TO 1530 1600 SOUNO 12,56:SOUNO 13,0
1210 IF L>200 ANO P>l40 THEN GOTO 1540 1610 S=S+100•10=10:L=20:P=P-55•PP=PP-55:
1220 IF L>200 ANO P<70 ANO P>l0 THEN 167 PT=PT-55
0 1620 0=0-55:W=W-55
1230 IF P>PP THEN P=PP:GOTO 770 1630 GOTO 770
1240 GOTO 820 1640
1250 BEEP•GOTO 770 1650 ' ;;< CONSECUCION DE LA FLECHA ;;<
1260 PLAY"SB" :HH=200:A=INTCRNOC1 );;<ZJ·rl 1660
1270 B=INTCRNOC1J;;<7J 1670 LO=l0:PUT SPRITE 24.C15,0J.5.LO:LU=
1280 CE=CE-100:JF CE<=0 THEN 1550 10:PUT SPRITE 25,C30,0),8,LU:S=S+CE:CE=3
1230 IF CE<=1000 THEN PUT SPRITE 24,Cl5. 000:FH=FH+l:S=S+300:IF PE>=205 THEN 2050
0),3.LO
1300 IF CE<=500 THEN PUT SPRITE 25, 1680 PUT SPRITE Z7.CPE,3J.5,3
C30,0),8,LO 1630 PE=PE+30
1310 1700 PUT SPRITE 26.Cl00,80),7,4
1320 " ;;< VELOCIDAD.COLOR Y ALTURA ;;< 1710 MN=MN+l•IF MN>=7 THEN MN=7
1330 ;;< DE LAS FLECHAS ;;< 1720 TQ=TQ+l:RT=lO:PUT SPRITE Z3.CZ10.0)
1340 GG=INTCRNDC1J;;<5) . 15, RT
1350 IF GG=O THEN FL=3 1730 L=30:PP=l6Z:PT=135
1360 IF GG=l THEN FL=7 1740 II=5:I0=5
1370 IF GG=2 THEN FL=3 1750 GOTO 1030
1380 IF GG=3 THEN FL=10 1760
1350 IF GG=4 THEN FL=ll *
1770 ' ;;< SOLAPAMIENTO DE FIGURAS
1400 IF GG=5 THEN FL=15 1780
1410 IF B=0 THEN YO=B+MN 1750 SPRITE OFF
1420 IF B=l OR B=2 THEN Y0=2+MN 1800 SOUNO O,O:SOUNO 1,5
1430 IF B=2 OR B=3 THEN Y0=3+MN 1810 SOUNO 2.0:SOUNO 3,13
1440 IF B=4 OR B=5 THEN Y0=4+MN 1820 SOUND 4,255:SOUNO 5.15
1450 IF B=B THEN Y0=5+MN 1830 SOUNO 6,30•SOUNO 7,0
1460 IF B=7 THEN Y0=7+MN 1840 SOUNO 8.16:SOUNO 3,16:SOUNO 10,16
1470 IF A=l THEN F=Q 1850 SOUNO ll,0:SOUNO 12,5•SOUNO 13.0
1480 IF A=2 THEN F=W 1860 FOR GH=l TO 45•NEXT GH:SOUNO 12,56:
1430 GOTO 1030 SOUNO 13,0
1500 1870 FOR E=l TO 150:NEXT E
1510 ' ;;< LLAVE COGIDA ;;< 1880 HH=200:TQ=TQ-l:IF TQ=0 THEN 1550
1520 1830 IF TO=l THEN RT=B 1
1530 II=10:S=S+l00
1540 SOUND 0,0:SOUNO 1,5:SOUND 2,0 l 1300 PUT SPRITE 23,CZ10.0J.15,RT
1310 RETURN 780
1320 ,
1550 SOUND 3,13:SOUND 4,255:SOUNO 5,15 \
1560 SOUND 6,30:SOUND 7,0 1330 *
;;< FINAL PARTIDA
1570 SOUNO 8,16•SOUNO 5,16:SOUND 10.16 1340 ,

155 1
154
1 1
r
1
1150 IF P<20 THEN P=20 1580 SOUNO ll,0:SOUNO 12,S:SOUNO 13.0
1200 IF L>200 ANO P>70 ANO P<l30 THEN GO 1530 FOR T=l TO 20•NEXT T
TO 1530 1600 SOUNO 12,56:SOUNO 13,0
1210 IF L>200 ANO P>l40 THEN GOTO 1540 1610 S=S+100•10=10:L=20:P=P-55•PP=PP-55:
1220 IF L>200 ANO P<70 ANO P>l0 THEN 167 PT=PT-55
0 1620 0=0-55:W=W-55
1230 IF P>PP THEN P=PP:GOTO 770 1630 GOTO 770
1240 GOTO 820 1640
1250 BEEP•GOTO 770 1650 ' ;;< CONSECUCION DE LA FLECHA ;;<
1260 PLAY"SB" :HH=200:A=INTCRNOC1 );;<ZJ·rl 1660
1270 B=INTCRNOC1J;;<7J 1670 LO=l0:PUT SPRITE 24.C15,0J.5.LO:LU=
1280 CE=CE-100:JF CE<=0 THEN 1550 10:PUT SPRITE 25,C30,0),8,LU:S=S+CE:CE=3
1230 IF CE<=1000 THEN PUT SPRITE 24,Cl5. 000:FH=FH+l:S=S+300:IF PE>=205 THEN 2050
0),3.LO
1300 IF CE<=500 THEN PUT SPRITE 25, 1680 PUT SPRITE Z7.CPE,3J.5,3
C30,0),8,LO 1630 PE=PE+30
1310 1700 PUT SPRITE 26.Cl00,80),7,4
1320 " ;;< VELOCIDAD.COLOR Y ALTURA ;;< 1710 MN=MN+l•IF MN>=7 THEN MN=7
1330 ;;< DE LAS FLECHAS ;;< 1720 TQ=TQ+l:RT=lO:PUT SPRITE Z3.CZ10.0)
1340 GG=INTCRNDC1J;;<5) . 15, RT
1350 IF GG=O THEN FL=3 1730 L=30:PP=l6Z:PT=135
1360 IF GG=l THEN FL=7 1740 II=5:I0=5
1370 IF GG=2 THEN FL=3 1750 GOTO 1030
1380 IF GG=3 THEN FL=10 1760
1350 IF GG=4 THEN FL=ll *
1770 ' ;;< SOLAPAMIENTO DE FIGURAS
1400 IF GG=5 THEN FL=15 1780
1410 IF B=0 THEN YO=B+MN 1750 SPRITE OFF
1420 IF B=l OR B=2 THEN Y0=2+MN 1800 SOUNO O,O:SOUNO 1,5
1430 IF B=2 OR B=3 THEN Y0=3+MN 1810 SOUNO 2.0:SOUNO 3,13
1440 IF B=4 OR B=5 THEN Y0=4+MN 1820 SOUND 4,255:SOUNO 5.15
1450 IF B=B THEN Y0=5+MN 1830 SOUNO 6,30•SOUNO 7,0
1460 IF B=7 THEN Y0=7+MN 1840 SOUNO 8.16:SOUNO 3,16:SOUNO 10,16
1470 IF A=l THEN F=Q 1850 SOUNO ll,0:SOUNO 12,5•SOUNO 13.0
1480 IF A=2 THEN F=W 1860 FOR GH=l TO 45•NEXT GH:SOUNO 12,56:
1430 GOTO 1030 SOUNO 13,0
1500 1870 FOR E=l TO 150:NEXT E
1510 ' ;;< LLAVE COGIDA ;;< 1880 HH=200:TQ=TQ-l:IF TQ=0 THEN 1550
1520 1830 IF TO=l THEN RT=B 1
1530 II=10:S=S+l00
1540 SOUND 0,0:SOUNO 1,5:SOUND 2,0 l 1300 PUT SPRITE 23,CZ10.0J.15,RT
1310 RETURN 780
1320 ,
1550 SOUND 3,13:SOUND 4,255:SOUNO 5,15 \
1560 SOUND 6,30:SOUND 7,0 1330 *
;;< FINAL PARTIDA
1570 SOUNO 8,16•SOUNO 5,16:SOUND 10.16 1340 ,

155 1
154
1 1
1350 CLS:SCREEN 0
1360 LOCATE ll,3:COLOR 3:PRINT"SCORE"
1970 LOCATE 1I.5:COLOR 3:PRINT:S:
1380 LOCATE 7.7:COLOR 3:PRINT "HRS LOGR,o¡
OO":FH;:IF FH=l THEN PRINT"FLECHl'.l" ELSE
PRINT"FLECHAS"
1390 IF S<4000 THEN LOCATE 11.S:PRINT"IQ
UE MAL!"
2000 IF S>4000 ANO S<8000 THEN LOCATE 11 EL ARCHIVO EN CASA
,3!PRINT "!BIEN!"
2010 IF S>8000 ANO 5<17000 THEN LOCATE l
1.9:PRINT "!MUY BIEN!"
2020 IF 5>17000 THEN LOCATE ll,3:PRINT "
!YA TE UALE!"
2030 LOCATE 5.14:COLOR 15:PRINT''PULSA LA
BARRA PARA EMPEZAR"
2040 FOR J=l TO 400:NEXT J
_2050 IF INKEY$=" " THEN RUN ELSE 2050
2060 ..10 SCREEN 3 :COLOR 15. 4. 11
2070 "
2080
* PASE DE FLECHA * 15 LINE Cl0.10)-C250.182),9,8
17 LINE Cl5.15)-C245.177).9,8
2030 PLAY"ABOBOBA":PE=55:S=S+l0000:TQ=TQ 19 PAINT Cll,11).9,9
+2:RT=l0:PUT SPRITE 23,C210.0J.15.RT 20 OPEN "GRP:" AS #1
2100 GOTO 1680 30.PRESET C25.80J
40 PRINT #1, "ARCHIVO"
50 PLAY "ABCDEFFEDC"
55 GLOSE
50 FOR V=l TO 4000 :NEXT
70 GOTO 155
100 REM
110 REM
**********************
* *
EL ARCHIVO EN CASA
120 REM* SUPER ~UEGOS *
130 REM* EXTRA *
140 REM
150 REM
**********************
155 CLS :scREEN 0 :COLOR 1.7
150 CLEAR 3000
170 REM DIMENSIONA SERIES PARA CARGAR
REGISTROS Y NOMBRES DE REGISTRO
¡ 180 DIM R$C500).N$C500)
190 COLOR 1,7
1 200 CLS
210 REM IMPRIME MENU
220 LOCATE 9,1
156
157
1350 CLS:SCREEN 0
1360 LOCATE ll,3:COLOR 3:PRINT"SCORE"
1970 LOCATE 1I.5:COLOR 3:PRINT:S:
1380 LOCATE 7.7:COLOR 3:PRINT "HRS LOGR,o¡
OO":FH;:IF FH=l THEN PRINT"FLECHl'.l" ELSE
PRINT"FLECHAS"
1390 IF S<4000 THEN LOCATE 11.S:PRINT"IQ
UE MAL!"
2000 IF S>4000 ANO S<8000 THEN LOCATE 11 EL ARCHIVO EN CASA
,3!PRINT "!BIEN!"
2010 IF S>8000 ANO 5<17000 THEN LOCATE l
1.9:PRINT "!MUY BIEN!"
2020 IF 5>17000 THEN LOCATE ll,3:PRINT "
!YA TE UALE!"
2030 LOCATE 5.14:COLOR 15:PRINT''PULSA LA
BARRA PARA EMPEZAR"
2040 FOR J=l TO 400:NEXT J
_2050 IF INKEY$=" " THEN RUN ELSE 2050
2060 ..10 SCREEN 3 :COLOR 15. 4. 11
2070 "
2080
* PASE DE FLECHA * 15 LINE Cl0.10)-C250.182),9,8
17 LINE Cl5.15)-C245.177).9,8
2030 PLAY"ABOBOBA":PE=55:S=S+l0000:TQ=TQ 19 PAINT Cll,11).9,9
+2:RT=l0:PUT SPRITE 23,C210.0J.15.RT 20 OPEN "GRP:" AS #1
2100 GOTO 1680 30.PRESET C25.80J
40 PRINT #1, "ARCHIVO"
50 PLAY "ABCDEFFEDC"
55 GLOSE
50 FOR V=l TO 4000 :NEXT
70 GOTO 155
100 REM
110 REM
**********************
* *
EL ARCHIVO EN CASA
120 REM* SUPER ~UEGOS *
130 REM* EXTRA *
140 REM
150 REM
**********************
155 CLS :scREEN 0 :COLOR 1.7
150 CLEAR 3000
170 REM DIMENSIONA SERIES PARA CARGAR
REGISTROS Y NOMBRES DE REGISTRO
¡ 180 DIM R$C500).N$C500)
190 COLOR 1,7
1 200 CLS
210 REM IMPRIME MENU
220 LOCATE 9,1
156
157
230 PRINT "MENU DEL ARCHIIJO" 80
240 LOCATE 0.4 550 PRINT:PRINT
250 PRINT "1. Introducir nuevos datos o , iÜ 560 J=J+l
iníciacion de un archivo": PRINT /')
':''
570 GOTO 500
260 PRINT "2. Corregir datos" :PRINT 'j 580 J=J-1
270 PRINT ''3 •. IJisualizacion de datos en 590 GOTO 200
la pantalla":PRINT 600 REM MODIFICACION DE REGISTROS
280 PRINT ''4. Listado de datos en la imp 610 CLS
res ora" :PRINT 620 N=0
290 PRINT "5. Busqueda de datos":PRINT 630 LOCATE 0.3
300 PRINT "6. Clasificar datos" :PRINT 640 INPUT 11 Nombr-e de la ficha";T$
310 PRINT "7. Cargar datos de la cinta": 650 PRINT:PRINT
PRINT 660 M=l
320 PRINT "8. Grabar en la cinta'':PRINT 670 IF T$=N$CM) THEN N=M:GOTO 740
330 LOCATE 0,23 680 M=M+l
340 PRINT ''Seleccione la opcion numero .. 690 IF M<>J THEN 670
" 700 IF N<>0 THEN 720
350 REM IJALIDA LA RESPUESTA 710 PRINT 11 Esta f.icha. u :T$; n no ha si do
360 A$=INKEY$ cargad a11

370 IF A$="" THEN 360 720 GOSUB 2290


380 BEEP 730 GOTO 200
390 IF A$<''1'' OR A$)''8'' THEN 370 740 PRINT N$CNl:PRINT
400 ON IJALCA$) GOTO 420,610,1210.1330.14 750 PRINT R$CNl:PRINT
40,1860,1980,2120 760 INPUT ''Esta ficha.";Q$
410 REM NUEVO REGISTRO 770 IF LEFT$CQ$, ll="S" OR LEFT$CQ$, ll="s
420 CLS " THEN 800
430 LOCATE 0,6 780 GOTO 680
440 INPUT "Es esta una nueva ficha" ;Q$ 790 REM MODIFICAR MENU
450 IF LEFT$CQ$,ll=''s'' OR LEFT$CQ$,1l=''S 800 CLS
'' THEN J=l ELSE J=J+l 810 LOCATE 0,4
460 CLS 820 PRINT ''l. Borrar datos'':PRINT
470 LOCATE 0,3 830 PRINT ''2. Corregir nombre de la fich
480 PRINT " Introducir todos los datos d a" :PRINT
e la ficha-indique FIN para finalizar 840 PRINT "3. Corregir informacion" :PRI
" NT
490 PRINT:PRINT 850 PRINT ''4. Aftadir informa.cion'':PRINT
500 LINE INPUT ''Nombre de la ficha? '';N$ 860 LOCATE 0,14
(j) 870 PRINT ''Seleccionar la opcion •.. '':PRI
510 IF N$CJl=''FIN'' OR N$CJ)=''fin" THEN 5 NT
80 880 A$=INKEY$
520 PRINT 890 IF A$=''" THEN 880
530 LINE INPUT "Informacion? ";R$CJl 900 BEEP
540 IF R$CJl=''FIN'' OR R$CJl=''fin'' THEN 5 910 IF A$<"1" OR A$>"4" THEN 880

158 159
230 PRINT "MENU DEL ARCHIIJO" 80
240 LOCATE 0.4 550 PRINT:PRINT
250 PRINT "1. Introducir nuevos datos o , iÜ 560 J=J+l
iníciacion de un archivo": PRINT /')
':''
570 GOTO 500
260 PRINT "2. Corregir datos" :PRINT 'j 580 J=J-1
270 PRINT ''3 •. IJisualizacion de datos en 590 GOTO 200
la pantalla":PRINT 600 REM MODIFICACION DE REGISTROS
280 PRINT ''4. Listado de datos en la imp 610 CLS
res ora" :PRINT 620 N=0
290 PRINT "5. Busqueda de datos":PRINT 630 LOCATE 0.3
300 PRINT "6. Clasificar datos" :PRINT 640 INPUT 11 Nombr-e de la ficha";T$
310 PRINT "7. Cargar datos de la cinta": 650 PRINT:PRINT
PRINT 660 M=l
320 PRINT "8. Grabar en la cinta'':PRINT 670 IF T$=N$CM) THEN N=M:GOTO 740
330 LOCATE 0,23 680 M=M+l
340 PRINT ''Seleccione la opcion numero .. 690 IF M<>J THEN 670
" 700 IF N<>0 THEN 720
350 REM IJALIDA LA RESPUESTA 710 PRINT 11 Esta f.icha. u :T$; n no ha si do
360 A$=INKEY$ cargad a11

370 IF A$="" THEN 360 720 GOSUB 2290


380 BEEP 730 GOTO 200
390 IF A$<''1'' OR A$)''8'' THEN 370 740 PRINT N$CNl:PRINT
400 ON IJALCA$) GOTO 420,610,1210.1330.14 750 PRINT R$CNl:PRINT
40,1860,1980,2120 760 INPUT ''Esta ficha.";Q$
410 REM NUEVO REGISTRO 770 IF LEFT$CQ$, ll="S" OR LEFT$CQ$, ll="s
420 CLS " THEN 800
430 LOCATE 0,6 780 GOTO 680
440 INPUT "Es esta una nueva ficha" ;Q$ 790 REM MODIFICAR MENU
450 IF LEFT$CQ$,ll=''s'' OR LEFT$CQ$,1l=''S 800 CLS
'' THEN J=l ELSE J=J+l 810 LOCATE 0,4
460 CLS 820 PRINT ''l. Borrar datos'':PRINT
470 LOCATE 0,3 830 PRINT ''2. Corregir nombre de la fich
480 PRINT " Introducir todos los datos d a" :PRINT
e la ficha-indique FIN para finalizar 840 PRINT "3. Corregir informacion" :PRI
" NT
490 PRINT:PRINT 850 PRINT ''4. Aftadir informa.cion'':PRINT
500 LINE INPUT ''Nombre de la ficha? '';N$ 860 LOCATE 0,14
(j) 870 PRINT ''Seleccionar la opcion •.. '':PRI
510 IF N$CJl=''FIN'' OR N$CJ)=''fin" THEN 5 NT
80 880 A$=INKEY$
520 PRINT 890 IF A$=''" THEN 880
530 LINE INPUT "Informacion? ";R$CJl 900 BEEP
540 IF R$CJl=''FIN'' OR R$CJl=''fin'' THEN 5 910 IF A$<"1" OR A$>"4" THEN 880

158 159
920 ON VAL CA$) GOTO 940,1050,1100,1150 1330 CLS
930 REM BORRAR REGISTROS 1340 LOCATE 0,6
940 FOR M=N TO J 1350 LINE INPUT ''Entrar con la. impresora.
950 N$CMJ=N$CM+l) prepara.da." ;NU$
960 R$CMJ=R$CM+1) 1360 FOR M=l TO J
970 NEXT M 1370 LPRINT
980 N$CJ)="" 1380 LPRINT "Nombre de la. ficha.:" ;N$CMJ
990 R$CJJ="" 1330 LPRINT
1000 J=J-1 1400 LPRINT R$CMJ
1010 PRINT "Graba.e ion borra.da." 1410 LPRINT
1020 GOSUB 2290 1420 NEXT M
1030 GOTO 200 1430 GOTO 200
1040 REM MODIFICAR NOMBRE 1440 REM BUSCA REGISTROS
1050 INPUT ''Ficha. nueva.'';N$CNJ 1450 CLS
1060 PRINT:PRINT''Nombre cambia.do'' 1460 LOCATE 0,6
1070 GOSUB 2290 1470 PRINT "l. Nombre de la. fícha.":PRINT
1080 GOTO 200
1090 REM MODIFICAR INFORMACION 1480 PRINT "2. Menu" : PRINT
1100 INPUT ''Nueva. informa.cion'';R$CN) 1490 LOCATE 0,12
1110 PRINT: PRINT" In fo rma.c i ón ca.mb i a.da." 1500 PRINT "Se lec e í ona.r opc ion.,." :PRINT
1120 GOSUB 2290
1130 GOTO 200 1510 A$=INKEY$
1140 REM AÑADIR INFORMACION 1520 lF A$='''' THEN 1510
1150 INPUT ''Nueva. .informa.cion'';T$ 1530 BEEP
1160 R$CN)=R$CNJ+'' - ''+T$ 1540 IF A$<"1" OR A$>"2" THEN 1510
1170 PRINT: PRINT "Nueva. informa.cien a.ñ 1550 ON VALCA$) GOTO 1560,1700
ad¡ da 11 1560 1 NPUT "No mb re de la. f i eh a." : T$
1180 GOSUB 2290 1570 PRINT
1190 GOTO 200 1580 F=0
1200 REM DISPLAYA REGISTROS 1590 FOR M=l TO J
1210 CLS 1600 IF N$CMJ<>T$ THEN 1640
1220 D$=STRING$C36,213) 1610 PRINT "Nombre de la. ficha.:'';N$CMJ
1230 FOR M=l TO J 1620 PRINT:PRINT R$CMJ
1240 PRINT :PRINT"F i cha. carga.da.: "N$(MJ 1630 F=l
1250 PRINT:PRINT R$CMJ 1640 NEXT M
1260 PRINT:PRINT D$ 1650 IF F=l THEN 1670
1270 FOR DE=l TO 100:NEXT DE 1660 PRINT :PRINT"Gra.ba.c ion no ca.rga.da."K
1280 GOSUB 2320 1670 GOSUB 2290
1230 NEXT M 1680 GOTO 200
1300 GOSUB 2230 1690 REM CADENAS
1310 GOTO 200 1700 INPUT "Busqueda. de un da.to" :T$
1320 REM LISTADO DE REGISTROS POR IMPRES 1710 F=0
ORA 1720 FOR M=l TO J

160 161
920 ON VAL CA$) GOTO 940,1050,1100,1150 1330 CLS
930 REM BORRAR REGISTROS 1340 LOCATE 0,6
940 FOR M=N TO J 1350 LINE INPUT ''Entrar con la. impresora.
950 N$CMJ=N$CM+l) prepara.da." ;NU$
960 R$CMJ=R$CM+1) 1360 FOR M=l TO J
970 NEXT M 1370 LPRINT
980 N$CJ)="" 1380 LPRINT "Nombre de la. ficha.:" ;N$CMJ
990 R$CJJ="" 1330 LPRINT
1000 J=J-1 1400 LPRINT R$CMJ
1010 PRINT "Graba.e ion borra.da." 1410 LPRINT
1020 GOSUB 2290 1420 NEXT M
1030 GOTO 200 1430 GOTO 200
1040 REM MODIFICAR NOMBRE 1440 REM BUSCA REGISTROS
1050 INPUT ''Ficha. nueva.'';N$CNJ 1450 CLS
1060 PRINT:PRINT''Nombre cambia.do'' 1460 LOCATE 0,6
1070 GOSUB 2290 1470 PRINT "l. Nombre de la. fícha.":PRINT
1080 GOTO 200
1090 REM MODIFICAR INFORMACION 1480 PRINT "2. Menu" : PRINT
1100 INPUT ''Nueva. informa.cion'';R$CN) 1490 LOCATE 0,12
1110 PRINT: PRINT" In fo rma.c i ón ca.mb i a.da." 1500 PRINT "Se lec e í ona.r opc ion.,." :PRINT
1120 GOSUB 2290
1130 GOTO 200 1510 A$=INKEY$
1140 REM AÑADIR INFORMACION 1520 lF A$='''' THEN 1510
1150 INPUT ''Nueva. .informa.cion'';T$ 1530 BEEP
1160 R$CN)=R$CNJ+'' - ''+T$ 1540 IF A$<"1" OR A$>"2" THEN 1510
1170 PRINT: PRINT "Nueva. informa.cien a.ñ 1550 ON VALCA$) GOTO 1560,1700
ad¡ da 11 1560 1 NPUT "No mb re de la. f i eh a." : T$
1180 GOSUB 2290 1570 PRINT
1190 GOTO 200 1580 F=0
1200 REM DISPLAYA REGISTROS 1590 FOR M=l TO J
1210 CLS 1600 IF N$CMJ<>T$ THEN 1640
1220 D$=STRING$C36,213) 1610 PRINT "Nombre de la. ficha.:'';N$CMJ
1230 FOR M=l TO J 1620 PRINT:PRINT R$CMJ
1240 PRINT :PRINT"F i cha. carga.da.: "N$(MJ 1630 F=l
1250 PRINT:PRINT R$CMJ 1640 NEXT M
1260 PRINT:PRINT D$ 1650 IF F=l THEN 1670
1270 FOR DE=l TO 100:NEXT DE 1660 PRINT :PRINT"Gra.ba.c ion no ca.rga.da."K
1280 GOSUB 2320 1670 GOSUB 2290
1230 NEXT M 1680 GOTO 200
1300 GOSUB 2230 1690 REM CADENAS
1310 GOTO 200 1700 INPUT "Busqueda. de un da.to" :T$
1320 REM LISTADO DE REGISTROS POR IMPRES 1710 F=0
ORA 1720 FOR M=l TO J

160 161
1730 X=INSTRCN$CM).T$) 2090 CLOSE
1740 IF X<>0 THEN 1770 2100 GOTO 200
1750 X=INSTRCR$CM).T$) 2110 REM GRABA EN CASSETTE
1760 IF X=0 THEN 1800 2120 CLS

1770 PRINT:PRINT"Nombre de la f ícha:" ;N$ 2130 LOCATE 0,6
¡¡ CM) 2140 PRINT "Grabar en el cassette" :PRINT
;¡ 1780 PRINT:PRÍNTR$CM):PRINT
;¡ 1790 F=l 2150 LINE INPUT ''Presione REC+PLAY w
1800 NEXT M RETURN para grabar en e 1 cassette" :NU$
1810 IF F=l THEN 1830 2160 PRINT :PRINT"Grabando ... "
1820 PRINT:PRINT"Gra,ba.c ion no carga.da" 2170 MOTOR ON
1830 GOSUB 2290 2180 GOSUB 2290
1840 GOTO 200 2190 MOTOR OFF
1850 REM CLASIFICA REGISTROS,OBSERUESE E 2200 OPEN "CAS:FILE" FOR OUTPUT AS 1
L USO DE LA SENTENCIA SWAP QUE INTERCAMB 2210 PRINT#l.J
IA EL VALOR DE DOS VARIABLES.EN ESTE CAS 2220 FOR M=l TO J
O ENTRE UNA SERIE DE SUBINDICE M,Y OTRA 2230 PRINT#l,N$CM)
DE SUBINDICE M+l 2240 PRINT#l,R$CMJ
1860 CLS 2250 NEXT M
1870 LOCATE 0,6 2260 CLOSE
1880 PRINT "Sorting ... " 2270 GOTO 200
1890 M=l 2290 FOR DE=l TO 2500:NEXT DE
1900 IF N$CM)(N$CM+l) THEN 1940 2296 REM RETARDO PARA SALIDA A SUBRUTINA
1910 SWAP N$CM).N$CM+1)
1920 SWAP R$CM),R$CM+l) 2290 FOR DE=l TO 2500:NEXT DE
1930 GOTO 1890 2300 RETURN
1940 M=,M+l 2310 REM APRETAR TECLA PARA SUBRUTINA
1950 IF M<>J THEN 1900 2320 2$=INKEY$
1960 GOTO 200 2330 IF 2$='''' THEN 2360
1970 REM CARGA DESDE EL CASSETTE 2340 2$=INKEY$
1980 CLS 2350 IF 2$='''' THEN 2340
1990 LOCATE 0.6 2360 RETURN
2000 PRINT "Cargando desde e 1 cassette"
:PRINT
2010 LINE INPUT ''Presione PLAY W RETU
RN para cargar desde el cassette'':NU$
2020 PRINT:PRINT ''Cargando ... ''
2030 OPEN "CAS:FILE" FOR INPUT AS 1
2040 INPUT #1,J
2050 FOR M=l TO J
2060 INPUT#l.N$CM)
2070 INPUT #l,R$CMJ
2080 NEXT M

162 163
1730 X=INSTRCN$CM).T$) 2090 CLOSE
1740 IF X<>0 THEN 1770 2100 GOTO 200
1750 X=INSTRCR$CM).T$) 2110 REM GRABA EN CASSETTE
1760 IF X=0 THEN 1800 2120 CLS

1770 PRINT:PRINT"Nombre de la f ícha:" ;N$ 2130 LOCATE 0,6
¡¡ CM) 2140 PRINT "Grabar en el cassette" :PRINT
;¡ 1780 PRINT:PRÍNTR$CM):PRINT
;¡ 1790 F=l 2150 LINE INPUT ''Presione REC+PLAY w
1800 NEXT M RETURN para grabar en e 1 cassette" :NU$
1810 IF F=l THEN 1830 2160 PRINT :PRINT"Grabando ... "
1820 PRINT:PRINT"Gra,ba.c ion no carga.da" 2170 MOTOR ON
1830 GOSUB 2290 2180 GOSUB 2290
1840 GOTO 200 2190 MOTOR OFF
1850 REM CLASIFICA REGISTROS,OBSERUESE E 2200 OPEN "CAS:FILE" FOR OUTPUT AS 1
L USO DE LA SENTENCIA SWAP QUE INTERCAMB 2210 PRINT#l.J
IA EL VALOR DE DOS VARIABLES.EN ESTE CAS 2220 FOR M=l TO J
O ENTRE UNA SERIE DE SUBINDICE M,Y OTRA 2230 PRINT#l,N$CM)
DE SUBINDICE M+l 2240 PRINT#l,R$CMJ
1860 CLS 2250 NEXT M
1870 LOCATE 0,6 2260 CLOSE
1880 PRINT "Sorting ... " 2270 GOTO 200
1890 M=l 2290 FOR DE=l TO 2500:NEXT DE
1900 IF N$CM)(N$CM+l) THEN 1940 2296 REM RETARDO PARA SALIDA A SUBRUTINA
1910 SWAP N$CM).N$CM+1)
1920 SWAP R$CM),R$CM+l) 2290 FOR DE=l TO 2500:NEXT DE
1930 GOTO 1890 2300 RETURN
1940 M=,M+l 2310 REM APRETAR TECLA PARA SUBRUTINA
1950 IF M<>J THEN 1900 2320 2$=INKEY$
1960 GOTO 200 2330 IF 2$='''' THEN 2360
1970 REM CARGA DESDE EL CASSETTE 2340 2$=INKEY$
1980 CLS 2350 IF 2$='''' THEN 2340
1990 LOCATE 0.6 2360 RETURN
2000 PRINT "Cargando desde e 1 cassette"
:PRINT
2010 LINE INPUT ''Presione PLAY W RETU
RN para cargar desde el cassette'':NU$
2020 PRINT:PRINT ''Cargando ... ''
2030 OPEN "CAS:FILE" FOR INPUT AS 1
2040 INPUT #1,J
2050 FOR M=l TO J
2060 INPUT#l.N$CM)
2070 INPUT #l,R$CMJ
2080 NEXT M

162 163
INDICE

Pág.
Introducción ....................,..................................................................... 5
Del ordenador personal al ordenador doméstico ................ 7
Así concibió Microsoft su Basic Extended ............................ 10
El ordenador MSX .. ........................................................................ . . 12
Capítulo I: Construcción de programas .................................... 17
Capítulo II: El potente editor «todo pantalla» ...................... 23
Capítulo III: Constantes numéricas ............................................ 29
Capítulo IV: Series, tablas y cadenas .......................................... 39
Capítulo V: Grabación de programas ........................................ 49
Capítulo VI: Gestión de archivo y grabación de datos 52
Capítulo VII: Tratamiento de errores ................................. 64
Capítulo VIII: Los gráficos en MSX ........................................... 70
Capítulo IX: Los sonidos del MSX ............................................ 83
Capítulo X: Las interrupciones ................................................... 92
Capítulo XI: Introducción al lenguaje máquina ................... 98

PROGRAMAS
Alfabético ....................... ............................................................................ 110
Canon a tres voces .................................................................................. 112
Moon Germs .............................................................................................. 113
Bossa Nova ................................................................................................. 114
Blue Bossa .................................................................................................... 115

164 165
INDICE

Pág.
Introducción ....................,..................................................................... 5
Del ordenador personal al ordenador doméstico ................ 7
Así concibió Microsoft su Basic Extended ............................ 10
El ordenador MSX .. ........................................................................ . . 12
Capítulo I: Construcción de programas .................................... 17
Capítulo II: El potente editor «todo pantalla» ...................... 23
Capítulo III: Constantes numéricas ............................................ 29
Capítulo IV: Series, tablas y cadenas .......................................... 39
Capítulo V: Grabación de programas ........................................ 49
Capítulo VI: Gestión de archivo y grabación de datos 52
Capítulo VII: Tratamiento de errores ................................. 64
Capítulo VIII: Los gráficos en MSX ........................................... 70
Capítulo IX: Los sonidos del MSX ............................................ 83
Capítulo X: Las interrupciones ................................................... 92
Capítulo XI: Introducción al lenguaje máquina ................... 98

PROGRAMAS
Alfabético ....................... ............................................................................ 110
Canon a tres voces .................................................................................. 112
Moon Germs .............................................................................................. 113
Bossa Nova ................................................................................................. 114
Blue Bossa .................................................................................................... 115

164 165
Pág.
~ Tema de la Séptima Sinfonía de Beethoven ....... :................... . 116

Terceto de la Flauta Mágica, de W. A. Mozart .................... . 118
Scrapple from de apple & Donna Lee ....................................... . 120
1 The Entertainer ....................................................................................... . 122
! Teclee un número ·.................................................................................. . 125
¡! Calendario perpetuo .......................................................................... . 127
Modificación Tabla de Colores SCREEN 1 ........................... . 128
l
1 fue~;~nJ~~~~:~:;;; aif;béti~¿;;·~~·t¿¿¿~·¡¿;~·~¿¿¿~···::::::::·:· 129
131
Juego matemático (Suma de los elementos de las
diagonales) ................................................................................................ .
132
Más grande más pequeño ............................................................. . 133
Poker .............................................................................................................. .
135
Breakout ....................................................................................................... .
137 LOS SECRETOS DEL MSX
se acabó de imprimir en los
~f~~b~~~lt~~; .:: :: : : : : ::: : : : : : : : : : :::::
141
150 talleres de Megrasa en
El archivo en casa ................................................................................... . 157 Barcelona la
segunda quincena de Julio de
MCMLXXXV

,,
1

l
166
1
Pág.
~ Tema de la Séptima Sinfonía de Beethoven ....... :................... . 116

Terceto de la Flauta Mágica, de W. A. Mozart .................... . 118
Scrapple from de apple & Donna Lee ....................................... . 120
1 The Entertainer ....................................................................................... . 122
! Teclee un número ·.................................................................................. . 125
¡! Calendario perpetuo .......................................................................... . 127
Modificación Tabla de Colores SCREEN 1 ........................... . 128
l
1 fue~;~nJ~~~~:~:;;; aif;béti~¿;;·~~·t¿¿¿~·¡¿;~·~¿¿¿~···::::::::·:· 129
131
Juego matemático (Suma de los elementos de las
diagonales) ................................................................................................ .
132
Más grande más pequeño ............................................................. . 133
Poker .............................................................................................................. .
135
Breakout ....................................................................................................... .
137 LOS SECRETOS DEL MSX
se acabó de imprimir en los
~f~~b~~~lt~~; .:: :: : : : : ::: : : : : : : : : : :::::
141
150 talleres de Megrasa en
El archivo en casa ................................................................................... . 157 Barcelona la
segunda quincena de Julio de
MCMLXXXV

,,
1

l
166
1

También podría gustarte