Los Secretos Del MSX PDF
Los Secretos Del MSX PDF
Los Secretos Del MSX PDF
,,
."'
,1'.,..
."'
,1'.,..
6 7
GENERALIDADES
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} ;.. ..::
..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·~
O·
¡:.;; "" 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
de llevar a término el proyecto. Nisbi, excelente ingeniero y :;i >< >< >< >< ¡:¡: ><
EE ~ g~ g~
}(
i¡
'
,,;¡
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
¡,,:¡ "" -
.,,-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} ;.. ..::
..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·~
O·
¡:.;; "" 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
de llevar a término el proyecto. Nisbi, excelente ingeniero y :;i >< >< >< >< ¡:¡: ><
EE ~ g~ g~
}(
i¡
'
,,;¡
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
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
14 15
···-···---------------------e
ESQUEMA2 CAPITULO!
16 17
···-···---------------------e
ESQUEMA2 CAPITULO!
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
- -".:_,_, __ -_>/--;_ :·._ --.
24 25
....-----------------=::::;::;;;;~íiíiiiiiiiiil
- -".:_,_, __ -_>/--;_ :·._ --.
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
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 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
... • • - . •- - • • --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/) ~
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
... • • - . •- - • • --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/) ~
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
39
38
CAPITULO IV
TABLA3
¡~
l Código Código
decimal hexa.
1
2
3
1
2
3
Concepto
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á.
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á.
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
···--·--····---------------------------~
49
48
1
···--·--····---------------------------~
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
r
r
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
----------------------------------------~~
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
----------------------------------------~~
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
~
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
. ----------------------------~-
_~__,_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
. ----------------------------~-
_~__,_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
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
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.
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
&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.
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
&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
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
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
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
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
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
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
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
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
130 131
10 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
20 JAAAAAAARECTANGULOS EN 3-DAAAAAAAA
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
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
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
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
141
140
r¡
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
r¡
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
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
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
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
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
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
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
i¡
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
i¡
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