You are on page 1of 84

uperpotente

;jü/ u tijE

y .1 *\v&Ig t y
M OVIM IENTO Y

TECLADO^ >t r \

afusMís 3Lijj&f
’Ju y Ju unanación da figura

TECNICAS DE MAPEADO
(/U ÜÜjJJJ/UJf

DETECCIÓN i
1DE CHOQU ES

amrifa cu/nuran

irania; ílu úhbíju gráfica


i JACK ATACA DE NUEVO!
1.200Ptas.
(v e r s i ó n cassette )

DISPONIBLE EN
Spectrum
Com m odore
A m strad
A m strad D isk

i \s

4
V *
__ 9)
z a fir o so ftw ar e DIVISION Paseo ae la Castellana 141 28046 M a aria
Tel 459 50 04 Tel Barna 209 55 65 Tele* 22690 ZAFIR (
POCO RUIDO, MUCHAS NUECES
Director Editorial
José I Gómez-Centurión

Director
Gabriel Nieto

Director de Microhobby
Domingo Gómez

Diseño
José Mana Oreia.

Redactores
Cristina Fernández.
Pedro Pérez

Secretaría Redacción
Carmen Santamaría

Colaboradores
Pablo Ariza. Ralael Márquez.
Enrique López. David López

Fotograba
Carlos Candel.
Chema Sacristán

Dibujos
F L Frontán. J. Igual.
M López Moreno. A Luis González Romero
Vital Gana. José Manuel Barco

Edita
HOBBY PRESS. SA
CONTROL DE SPRITES. Por fin uno
potente ru tin a que mueve g r á fi­
Presidente
María Andrino
cos, crea anim ación y te pe rm ite
desplazar p o r p a n ta lla s im u ltá ­
Consejero Delegado
José I Gómez-Centurión
neamente distintos tipos de fig u ­
ras.
Jefe de Publicidad
Mar Lumbreras

Publicidad Barcelona
José Galán Cortés
Tels 303 10 22 -3 1 3 7176

MOVIMIENTO Y TECLADO. Todo lo


Secretaría de Dirección que necesitas saber pa ra poder
______ Pilar Anstizábal______
u tiliz a r el joystick o cua lq uie r t i ­
Suscripciones
M * Rosa González po de combinación de teclas en
M * del Mar Calzada tus juegos. Y, además, con la po­
Redacción. Administración s ib ilid a d adicional de crear dis­
y Publicidad tin ta s secuencias de anim ación
Ctra de Irún
km 12.400 (Fuencarral)
para tus personajes.
Tei 634 70 12
Telcx 49460 HOPR
Dto. Circulación
Carlos Peropadre
Distribución
Coedis. S A Valencia. 245 DETECCIÓN DE CHOQUES. A hora
Barcelona puedes d e fin ir de un modo senci­
Imprime llo todos los obstáculos y elemen­
Rotedic. S A Ctra de Irún. tos hostiles de tus juegos, me­
km 12.450 (MADRID)
diante una rutina capaz de detec­
Fotocomposición ta r cualquier tip o de choque o
Novocomp. S A disparo.
Nicolás Morales. 38-40

Fotomecánica
Grof
C/ Ezequiei Solana. 16

Depósito Legal:
M-36.598-1984 TÉCNICAS DE MAPEADO. Crear los
mapas y decorados de tus juegos
Representante para Argentina.
Chile. Uruguay y Paraguay. Cía será a p a r tir de ahora una ta re a
Americana de ediciones. S R L casi ru tin a ria .
Sud América 1 532 Tel 21 24 64
1209 BUENOS AIRES (Argentina)
MICROHOBBY no se hace
necesariamente solidaria de las
opiniones vertidas por sus
colaboradores en los artículos
firmados Reservados todos los GUÍA DE UTILIDADES GRÁFICAS.
___________derechos___________ Una com pleta guía de h e rra ­
Solicitado control m ientas de p rogram ación para
OJD
tr a b a ja r con los g rá fico s del
Spectrum.

M ICRO H O BBY E SP EC IA L
TODO
SOBRE LOS
Los UDG o gráficos
definidos por el
usario, son unos
caracteres similares a
los del alfabeto al
conectar el
ordenador. Gracias a
unas pequeñas
operaciones podemos
llegar a crear
cualquier carácter o
gráfico que nos sea
de utilidad. Para
i NT
conocer esta
interesante
posibilidad de
nuestro ordenador, os
lizar PRINT USR " A " , obte­
explicamos con niendo distintas cantidades
ejemplos cómo se ya sea nuestro Spectrum de
realiza paso a paso. un 16 ó 48 k. También es im­
portante que podemos po-
kear utilizando esta misma
fórmula, por lo que para in­
CÓMO SE CREA UN UDG primer cuadro de arriba a troducir nuestro gráfico, uti­
ia izquierda. Apuntaremos lizaremos POKE USR " A " ,
Un carácter del ordena­ un 1 cuando el cuadro en y después de la coma con el
dor es una cuadrícula de cuestión este pintado y con comando BIN colocaremos
ocho por ocho pixels o pun­ un 0 cuando el cuadro esté los ocho números que he­
tos. Para diseñar el gráfico en blanco, siguiendo cua­ mos apuntado en la prime­
necesitamos unas cuadrícu­ dro a cuadro hasta acabar ra línea; quedará de la for­
las como la que se muestra la línea. Cuando hayamos ma que sigue POKE USR
en la figura 1. completado la línea empe­ " A ” ,BIN 0011100. Así he­
Sobre esta cuadrícula zaremos una nueva serie de mos procedido a introducir
procederemos a rellenar los números con la siguiente y el primer dato del carácter,
cuadros con un lápiz hasta repetiremos la operación pero necesitamos introducir
obtener la forma deseada. hasta completar las ocho lí­ el resto; por eso tenemos
En la figura 2 hemos crea­ neas. Como se muestra en que sumar después de las
do una figura que simula un el ejemplo 1, los números 1 comillas de la A y antes de
pequeño muñeco. forman el gráfico que he­ la coma, un 1 (POKE USR
Cuando el gráfico esté mos creado. "A "+ 1 ,B IN 00111000), y
terminado, podemos intro­ Una vez realizada esta en el binario colocar los da­
ducirlo en el ordenador de operación y con los datos tos de la segunda línea y re­
varias formas. La más sen­ que hemos apuntado, utili­ petir la operación sumando
cilla y aconsejable si se está zaremos el comando POKE luego 2, 3, 4, 5, 6 y 7 y las
empezando, es la utilización para introducir en memoria siguientes líneas; como po­
de la función binaria de los distintos datos, teniendo déis observar en el listado 1.
nuestro ordenador. Para en cuenta lo siguiente; pa­ Esta fórmula es sencilla
ello en un papel apuntare­ ra averiguar cuál es la di­ pero además de lenta, ocu­
mos los datos de la siguien­ rección donde empieza un pa demasiada cantidad de
te forma, empezando por el UDG, lo más sencillo es uti­ memoria, por lo que existen ■ ■ ■ ■
otras fórmulas que realizan ciremos esta cantidad en la
la misma operación, como dirección 23676, luego con
podréis apreciar en el lista­ PRINT 6 0 0 0 0 —((INT
do 2. En él hemos sustituido 60000/256)*256) pokea-
los números en binario por remos el resultado en la di­
sus homólogos en decimal; rección 23675 y cualquiera
en el listado 3, donde he­ de los métodos anterior­
mos creado un bucle que mente explicados para in­
realiza la lectura de los da­ troducir el gráfico.
tos, se introducen en su di­ Para evitar esta limitación
rección correspondiente. Es­ en su uso, una de las opcio­
te último listado nos sirve nes por las que podemos
además para introducir optar es la de disponer va­
cuantos gráficos deseemos rios bloques de UDG en la
de una manera muy sen­ memoria, y usuarios según
cilla, basta con sustituir el la conveniencia.
carácter segundo del
bucle FOR-NEXT, que
es una a por el carác­ MAS DE 21 UDG
ter del último gráfico
que vayamos a reali­ Además de los UDG, po­
zar e incluir en DATAS demos definir los 92 carac­
los datos correspon­ teres del ordenador, si­
dientes al resto de grá­ guiendo las mismas pautas
ficos. que para los gráficos defini­
Por último para utili­ dos y posicionarlos en una
zar dicho gráfico rea­ dirección determinada de la
lizamos las mismas ope­ memoria, y utilizando la va­
raciones que con PRINT riable del sistema llamada
pero al introducirlo pon­ CHARS cuya dirección es la
dremos el cursor en mo­ 23606 y la 23607, usare­
do gráfico y pulsaremos la mos la misma fórmula que
letra en la que hemos intro­ con los UDG pero con estas
ducido el gráfico, y que en dos direcciones. En el lista­
el caso que estamos expli­ do 3 encontraremos un
cando es la A. ejemplo práctico de cómo
obtener un set de caracteres
alternativo; en este progra­
CUÁNTOS GRÁFICOS ma se utiliza una fórmula
PODEMOS CREAR distinta a las anteriormente
explicadas, que consiste en
Es importante saber que que con ayuda de la función
los UDG, pueden ser posi- RANDOMIZE un número,
cionados en cualquier direc­ este número se descompone
ción de la memoria RAM, automáticamente en el byte
ya que en las variables del menos y más significativo, y
sistema se encuentran dos se archiva en la dirección
direcciones que a su vez 23670 y 23671 respectiva­
contienen la dirección de mente, por lo que luego só­
memoria donde se encuen­ lo nos queda actualizar la
variable del sistema CHARS,
+ 14 1 -,X.
tran los UDG. Esta variable
es la denominada la UDG, con el contenido de estas di­
y su dirección es la 23675 y recciones. Es importante re­
p wL £ la 23676. cordar a la hora de utilizar
l
4
I k
Cuando la dirección esté
decidida, por ejemplo la
un nuevo set de caracteres
que los primeros 256 bytes
6 0 0 0 0 , calcularemos las no se pueden emplear por
p X 0 cantidades que hay que po- lo que debemos restar a la
V. >■ 3■
- kear, para ello utilizaremos dirección donde hayamos
la siguiente fórmula, PRINT archivado los gráficos esta
INT 60000/256, e introdu­ cantidad. Es también impor-
tante recordar cuál es el con otro ya en pantalla; así
contenido de la variable si imprimimos en OVER 1 un
CHARS ya que si deseamos gráfico igual que esté será
volver a utilizarlo debere­ borrado.
mos teclear los siguientes Evitar que el gráfico par­
pokes: POKE 23606,0 y padee se consigue colocan­
POKE 23607,60. do una línea que detecte si
Los gráficos que obtene­ se ha pulsado una de las te­
mos con el listado 3, son los clas correspondientes al mo­
que se muestran en la figu­ vimiento, actuando como si
ra. de un filtro se tratase.
Con todas estas técnicas
con ayuda del comando
CÓMO UTILIZAR OVER conseguimos que lo
que anteriormente estaba
LOS UDG en la pantalla no se bo­
PARA UN JUEGO rre totalmente. Con PLOT,
DRAW y CIRCLE, dibuja­
Como habréis podido mos algo en pantalla y al
comprobar, no es nada com­ pasar por encima de las lí­
plicado realizar un UDG. neas, el dibujo sólo se borra
Moverlo por la pantalla en­ cuando el gráfico está super­
traña algo más de dificul­ puesto pero al desplazarlo
tad. En principio debemos el dibujo se restablece.
tener en cuenta algunas de
las características del Spec-
trum.
La pantalla está compues­ UTILIZACIÓN
ta por 32 columnas y 24 lí­ DE CÓDIGOS
neas, aunque no es fácil ASC CON PRINT
mover desde el Basic un
gráfico por las dos líneas in­ El uso de los códigos ASC
feriores de pantalla. Cual­ con PRINT nos ayuda a con­
quier desplazamiento por seguir efectos difíciles como
pantalla de un gráfico pare­ los que vamos a explicaros
cerá que va dando saltos, a continuación.
ya que no existe una posi­ Por ejemplo, utilizando
ción intermedia donde im­ CHR $ 8, conseguimos que
primir el gráfico entre la co­ el puntero de pantalla, se
lumna 1 y la 2, o la línea 1 desplace hacia atrás una
y 2. Con los atributos ocu­ posición. Para obtener, por
rre lo mismo, por lo que lo ejemplo, el gráfico de una
normal desde el basic es mina en lugar de diseñarla
mover los gráficos sin atri­ podemos utilizar lo siguien­
butos, dejando el color del te:
papel y la tinta como están. PRINT AT 1O ,1O ;"0";
Con el ejemplo 4, obtene­ OVERl;CHR $ 8 ;" X "
mos el gráfico de un muñe­ Existen teóricamente otros
co y con las teclas Q, A, O ASC, que realizan la opera­
y P desplazaremos el mismo ción de cursor arriba, aba­
por la pantalla. jo y a la derecha, pero por
Para actualizar el gráfico errores del sistema no fun­
en la posición correspon­ cionan correctamente y al
diente es necesario, prime­ utilizarlos aparece en pan­
ro, borrar la posición ante­ talla una interrogación al
rior, de cuya misión se en­ igual que ocurre con el de­
carga la línea 80, borrando dicado al DELETE y EDIT,
el gráfico antes de actuali­ ASC 12 y 7 respectivamen­
zar. Para ello usamos el co­ te.
mando OVER que imprime Los ASC al utilizarse des-
invirtiendo los pixels de ca­
da carácter que coinciden
de el Código Máquina, de­ operaciones que realizan
sempeñan un papel igual son las siguientes:
que desde el Basic y los más AND sirve para compa­ 1
utilizados son los siguientes: rar variables desde el Basic, OR, al igual que el AND,
pero su utilización desde el en el Basic se dedica exclu­
Código Máquina es mucho sivamente a los condiciona­
ASC CARÁCTER más completa, ya que rea­
6 PRINT coma les, pero en Código Máqui­
liza la operación bit a bit, na realiza la operación ló­
8 Cursor izquierda entre el parámetro S y el re­
13 ENTER gica del operando y el con­
gistro A, en el cual se alma­ tenido del registro A, utili­
16 INK control cena el resultado. Para com­
17 PAPER control zando las pautas que se
probar mejor su funciona­ muestran en la tabla de ver-
18 FLASH control miento observar la opera­
19 BRIGHT control dad:
ción en la tabla de verdad
20 INVERSE control de la función AND: A OR S = A
21 OVER control 0 0 0
A AND S = A 0
22 AT control 1 1
23 TAB control
0 0 0 1 0 1
0 1 0 1 1 1
1 0 0
1 1 1
AND, OR y XOR XOR, desde el Basic tiene
un funcionamiento análogo OTROS COMANDOS
Los operadores lógicos al OVER 1, y en C/M, reali­ ÚTILES
son de gran utilidad al ma­ za la operación lógica entre PARA LOS GRÁFICOS
nejar gráficos, pero por el operando S y el conteni­
desgracia desde el Basic só­ do ael registro A; la tabla de ATTR (x,y), esta función
lo es posible la utilización Verdad de la función XOR devuelve el valor de los atri­
del AND y el OR para los queda así: butos de las coordenadas
condicionantes, y el XOR A XOR S = A de x e y de pantalla; es im­
para utilizar en el OVER, las 0 0 0 prescindible que los valores

FIG. 3
ciftURA 2
l is t a d o 1
lililí* *
i 't - i r a H % 1 !
V.5V.^'f! i N 011®1100

L IS T A D O
E USR .. q " + 1 , 5

F \G V J R a

l is t a d o
-a ” TO

LISTADO 3a
9; LORD ' ^
E J |® ° 4I?EK 23670
P O ^^-S E T<
íiíiS e a F
p^ xnt ' chR*
® ® H i© 0 © NEXT 3
0 ® U Í0 0 0

de x e y estén cerrados en­ sexto bit nos expresa el es­ lizables los comprendidos una coordenada de la pan­
tre paréntesis ya que sino tado del brillo, siguiendo las entre 0 y 5 ó 24 y 31. talla y el carácter que se en­
produciremos un error de mismas pautas del flash; del PEEK n, con este coman­ cuentra en esta dirección. Al
sintaxis. Para utilizarlo pro­ uinto al tercero son los de- do podemos averiguar el realizar esta operación si el
bar a imprimir en pantalla icados al color del papel, contenido de una celdilla de resultado no es 0 no es que
con papel azul y tinta blan­ y del segundo al cero, el co­ memoria, siendo este núme­ no exista en esa posición un
ca un carácter (PRINT PA­ lor de la tinta. Es aconseja­ ro entre 0 y 65535. carácter, sino que no es re­
PER 1; IN K 7;AT 10,10; ble utilizar la fórmula si­ POINT (x,y), si el resulta­ conocido como tal por el or­
"R "), y después usando guiente para saber qué nú­ do de esta operación es 1, denador.
ATTR preguntar qué colores mero corresponde a un es­ es que ese pixel está activa­ USR $, muy útil a la hora
están en esas coordenadas tado de atributos. do de color de tinta, y si es de averiguar la dirección de
(PRINT ATTR(10,10)), el va­ N Ú M . TINTA-i- N Ú M . 0 no lo está. Este comando comienzo de cualquiera de
lor devuelto por el ordena­ PAPEL*8 + NÚM. BRILLO está limitado a la parte supe­ los caracteres definidos por
dor será el resultado del co­ *64+ NUM. FLASH*128 rior de la pantalla, siendo el usuario.
lor (15). Este número en bi­ CHR $n, introduciendo en imposible con su uso com­ BORDER n, sirve para dar
nario nos dará el dato de n un número entre 32 y 255, probar el estado de una color al borde siendo éste
color del papel y tinta, y el obtendremos cualquiera de coordenada dentro de la un número comprendido
estado del brillo y flash. El los caracteres ASCII del zona de pantalla destinada entre 0 y 7.
7 bit por la derecha es el Spectrum y si el número es a los mensajes. BRIGHT n, este comando
que indica el estado del el comprendido entre 6 y el SCREEN $ (x,y), del mis­ sólo puede ser utilizado ac­
flash, siendo 0 para desac­ 23 son destinados al mane­ mo modo que podemos tivado (1) o desactivado
tivado y 1 para activado. El jo de pantalla, siendo inuti- averiguar cuál es el color de (0), consiguiendo en una y
CONTROL bytes
DATOS 50000 N .
linea D ü MP*-

y i g l l i ^ »
v 66

69 i^ Í 9 6 7 8 1 0 l® 0lli® T ? 2 ®
70
71

r \ír i
ÍO J ”
1 8 78
1366
X
4.56
154- USTADO •+7
684 USR
342^ FOR
a=USR
a
" | " aTb
1 0 68
R6RD b. P°KE ^
3 5 6.4 0.
« !5 t a «6 1 16 6,,2S
2 5 44.5 6 ' 5
i& NE*X
S
¿0 ORTO
r T R 5 6 , 5 6 l£ T y=10
’ 1 6

a <>
10850
55
60 E | 1 a*<>27 RÍ h e Ñ g0 v" • - (a
n f 0R ^ a4>^5Í r =u f RNÓ X <3l»
<21> (a =
-
. 750 .& ® 7 flN° : ■
I « m H í 11 ll® rn i u ^
,111 $ « « « . . 0,30 drRu
!l! lli» w g f ! ! ! % “ '" “
902® DR«U ®'

III 3 ' _ ,c 100,1®®'30


IS S S b s w * - '- %%l% r^ urn

otra forma dar brillo a los INVERSE o, cootrola la io- 65535, coo ayuda de POKE mieoto desde el puotero de
atributos. versióo de caracteres que se tambiéo podemos realizar paotalla taotos oúmeros co­
DATA 0, 11, 11, 0, todos los vao a imprimir. Eo caso de dibujos eo paotalla taoto de mo se iodiqueo eo x.
datas que aparezcao detrás utilizar coo 1 los caracteres gráficos como de atributos. la coma después de
de esta seoteocia, seráo leí­ se imprimeo eo vídeo ¡over­ PRINT, es el comaodo sio PRINT y sio estar eotrecomi-
dos como datos, al utilizar so, y si es 0 eo vídeo oor- lugar a dudas más utilizado llada realiza uoa tabulacióo
la fuocióo READ. mal. eo Basic; coo él podemos de 16 caracteres, desde el
FLASH o, su fuociooa- OVER o, realiza uo ioter­ hacer que aparezca eo pao- puotero.
mieoto es igual que el del cambio al estar activada es­ talla cualquier carácter y su el puoto y coma sir­
brillo, pero realizaodo uo ta fuocióo, eotre los datos fuociooamieoto puede ser ve para iodicar al ordeoa-
iotercambio de atributos eo- que estabao eo paotalla y de distiotas maoeras. dor que todo lo que está
tre el papel y la tiota, coosi- los que posteriormeote seao AT x,y: si es utilizado coo uoido por ellas se imprime
guieodo así el efecto de par­ utilizados. AT, posiciooamos las coor- secjuidameote.
padeo. PAPER o, su fuociooa- deoadas doode vao a ser : la comilla iodica al or-
INK o, el color del atribu­ mieoto es completameote impresos eo paotalla uoo o deoador que debe saltar de
to de tiota es cootrolado por igual al del comaodo INK, varios caracferes. líoea para que lo que se ex­
este comaodo permitieodo pero cootrolaodo el color TAB x: coo él sólo pode­ prese a cootiouacióo sea im­
el uso de cualquiera de los de foodo. mos iodicar el desplaza- preso eo la líoea siguieote.
ocho colores del Spectrum POKE o, sirve para iotro-
además del color 8, para ducir valores compreodidos
traospareote y 9 para coo- eotre 0 y 255 eo las direc-
traste. ciooes desde la 16384 y
Sin duda, uno de ios
factores más
decisivos para que un
programa tenga éxito

CONTROL n primer lugar,


es su presentación.
Si la idea es muy
original, pero los
gráficos son tamaño

£
sprite.
para los no inicia­
dos, definiremos
qué es lo que en­
tendemos por un

Llamaremos sprite a un
gráfico, animado o no, que
UDG o parpadean, el
conjunto desmerece
bastante. Para
solucionar el
problema
se mueve por la pantalla en
una dirección determinada. presentamos una
Este gráfico deberá pasar rutina que moverá y
por delante de lo que haya ’í g ' |
dibujado en pantalla sin bo­
1 * dibujará los gráficos
rrarlo, y si se cruza con otro, mientras nuestro
uno de los dos pasará por programa se encarga
delante de otro. Por esto ca­
da sprite tiene asignada una ae otras tareas.
prioridad, de tal forma que
al cruzarse dos sprites, pa­
sará por delante aquél cu­
ya prioridad sea mayor. Evi­
dentemente, no puede ha­
ber dos sprites con la misma
prioridad.
En otros ordenadores, co-

-v q x «6

mo el Commodore 64, los


sprites se generan por hard­
ware, con lo cual no se con­
sume tiempo de programa.
Pero lamentablemente, en el
Spectrum no existe hardwa­
re para la creación de spri­
tes, así que no tendremos
más remedio que crearlos
poif software. Para ello, uti­
lizaremos un programa en
Código Máquina que se eje­ se compone en realidad de Si vais a crear gráficos tina está pensada para ma­
cutará automáticam ente dos gráficos: el gráfico pro­ nuevos, específicamente pa­ nejar un máximo de 17 spri­
gracias a las interrupciones. piamente dicho y su másca­ ra esta rutina, la forma de tes, que numeraremos del 0
Sobre interrupciones ya se ra. La máscara es un gráfi­ crear la máscara, una vez al 16 (este número servirá
ha hablado bastante en nú­ co adicional, de las mismas realizado el gráfico, podría asimismo para indicar la
meros anteriores de esta re­ dimensiones que el primero, ser así: prioridad del sprite). Como
vista, así que bastará con y que nos facilita informa­ Observamos la figura 1. veremos enseguida, para
que digamos que sirven pa­ ción acerca de la forma de En primer lugar, alrededor especificar toaos los datos
ra que una subrutina escri­ éste. Esto sirve para que del gráfico terminado (par­ de un sprite necesitaremos
ta en Código Máquina se cuando el sprite pase por te A), dibujamos una línea 17 bytes, o lo que es lo mis­
ejecute automáticamente 50 delante de algo, no se mez­ que marque su contornos, mo, un total de 17x17 = 289
veces por segundo. Cuando cle su imagen con la del fon­ obteniendo la parte B. A bytes, que los colocaremos
termina, se devuelve el con­ do ni se borre un rectángu­ continuación, rellenamos en la dirección 53000. De
trol al programa que estaba lo del fondo alrededor del desde aquí hacia afuera to­ esta forma, los datos del pri­
ejecutándose antes de pro­ sprite, como suele ocurrir en do el rectángulo que contie­ mer sprite estarán a partir
ducirse el salto a la subruti­ los métodos tradicionales de ne el gráfico, obteniendo la de la dirección 53000, los
na. De esta forma, pode­ dibujo de sprites. Es el mé­ parte C. Por último, borra­ del segundo en la 53017,
mos lograr el efecto de que todo que se suele usar en los mos el gráfico original (na­ etc.
se están efectuando dos ta­ juegos tridimensionales, co­ turalmente, antes lo habre­ Vamos a ver ahora qué es
reas a la vez. En nuestro ca­ mo «Knight Lore», y en algu­ mos grabado), y nos queda lo que deberemos meter en
so, una de las tareas será el nos otros, como «Everyone's la parte D, que es ya la más­ cada uno de esos grupos de
dibujo de los sprites, y la Wally». Tiene el inconve­ cara. Si el gráfico tuviera 17 bytes. Tenemos un resu­
otra cualquier programa es­ niente de ocupar más me­ agujeros internos (por ejem­ men en la figura 2. Los dos
crito por nosotros, ya sea en moria (cada gráfico ocupa plo, si dibujamos una rosqui­ primeros servirán para indi­
Basic o Código Máquina. el doble, pues necesita de su lla), deberemos hacer el car la dirección de memoria
Normalmente, las subru­ máscara) y de ser más len­ mismo proceso con los agu­ en la que se encuentra el
tinas que se ejecutan por in­ to el proceso de dibujo, pe­ jeros. Lo que representa la gráfico. Siempre, a conti­
terrupciones suelen ser muy ro los resultados obtenidos máscara son las zonas del nuación del gráfico propia­
cortas, de tal forma que son mucho más espectacu­ gráfico a través de las que mente dicho, se debe en­
aparentemente la velocidad lares. Para los que leyeron se puede ver el fondo. contrar su máscara. Si el
del programa principal es la los artículos sobre el sistema sprite representa un objeto
misma que tendría si no hu­ Filmation, publicados en los o un ser animado, deberá
biera interrupciones. Sin números 96,97,99 y 100 de TABLA DE SPRITES constar de varios gráficos
embargo, el dibujo de grá­ MICROHOBBY, en los que parecidos, pero distintos pa­
ficos y el manejo de la pan­ se utilizaban también más­ Para conseguir que nues­ ra lograr el efecto de ani­
talla en general, es siempre caras, advertimos que en es­ tro sprite se mueva como mación. En este caso, todos
bastante lento, y cuando ta rutina vamos a utilizar un nosotros queremos, habre­ estos gráficos deben estar
pongamos en marcha los método ligeramente distin­ mos de comunicarle de al­ uno a continuación del otro,
sprites, notaremos un des­ to. Para evitar el paso de in­ gún modo a la rutina de y cada uno con su máscara
censo enorme en la veloci­ versión de la máscara des­ control todos los datos nece­ detrás.
dad de ejecución de nues­ crito en dichos artículos, no­ sarios acerca de él. Con es­ El tercer y cuarto byte in­
tros programas. Es el precio sotros almacenaremos la te fin, vamos a crear una ta­ dican las dimensiones del
que hay que pagar por no máscara ya invertida, con lo bla de sprites, en la que ¡re­ sprite. El tercero indicará el
tener el hardware adecua­ que ahorramos tiempo a la mos poniendo la posición, ancho, dado en caracteres,
do. A pesar de todo, si pro­ hora de dibujar el gráfico. dimensión, y demás datos y el cuarto el alto, dado en
gramamos en Código Má­ Por tanto, si teneis hechos de de cada uno de ellos. La ru­ píxels. Todos los gráficos de
quina, tendremos suficiente antemano gráficos pensa­
velocidad para bastantes dos para la rutina presenta­
cosas, pues no hay que ol­ da en dichos artículos y los
vidar que nuestro programa queréis usar con ésta, debe­ FIGURR 1
ya no se tendrá que preocu­ réis invertir todos los bytes
par de dibujar los gráficos, de la máscara. La forma de
que suele ser el proceso que hacerlo es bien sencilla. Si
más tiempo consume en la por ejemplo, tenéis una
ejecución de un programa, máscara en la dirección
sobre todo en los juegos ar- 40000 que ocupa 32 bytes,
cade. bastará con que hagáis:
El método que vamos a
utilizar para dibujar los grá­ FOR X = 40 0 00 TO 40031 R B C D
ficos es el de la máscara. En :POKE X,255-PEEK X: ^ _
este método, cada gráfico NEXT X
por 0 en la parte superior y 1234512345123 En el caso de un movi­
va aumentando hacia aba­ 4 5... miento en línea recta, estos
Fig. 2 jo. bytes indican los incremen­
El noveno byte nos dice Si, por el contrario, espe­ tos de X e Y respectivamen­
TABLA DE DATOS cuántas fases de animación cificamos animación de te. Dichos incrementos son
DE LOS SPRITES tiene el sprite. Si se trata de adelante-atrás, obtendre­ números entre —128 y +127,
un sprite inanimado, pon­ mos la secuencia: que se suman cada vez a las
Dirección Contenido
relativa dremos una fase. 1234543212345 coordenadas del sprite pa­
El décimo indica varias ra producir el movimiento.
DIR + 0 Dirección del 4 3 21 2...
cosas. En primer lugar, indi­ Cuanto mayor sea su valor
primer gráfico.
ca el color del sprite. Los tres Por último, en este décimo absoluto, mayor será la ve­
DIR + 2 Ancho en
primeros bits indican el co- byte, está también, en el bit locidad con que se mueva el
caracteres.
ior de la tinta, y el séptimo 4 el indicador de línea rec­ sprite, pero menor su suavi­
DIR + 3 Alto en scans
bit (el bit 6) indica el nivel de ta (con un 0) y trayectoria dad. Los incrementos más
(pixels).
DIR + 4 Coordenada X. brillo. Los sprites no tienen compleja (con un 1). La op­ normales están entre —4 y
color de papel propio; ción de línea recta se usará, + 4. En la coordenada X, un
DIR + 6 Coordenada Y.
adoptan el del fondo por el como su propio nombre in­ incremento positivo produci­
DIR + 8 Número de fa­
que pasan. Por otra parte, dica, para sprites que se rá un movimiento hacia la
ses de
el cuarto bit (el bit 3) indica, muevan en línea recta, sea derecha, y negativo, hacia
animación.
en el caso de sprites anima­ horizontal, vertical o diago­ la izquierda. En la Y, un in­
DIR + 9 Color. Bit
3:Animación. dos, de qué tipo de anima­ nal. Sin embargo, habrá ca­ cremento positivo producirá
Bit ción se trata. Para sprites sos en que preferiremos que un movimiento hacia abajo,
inanimados, su valor es in­ nuestro sprite siga-una tra­ y negativo hacia arriba.
4:Movimiento.
DIR+10 Incremento X. diferente. Si vale 0 la anima- yectoria preestablecida dis­ En el caso de un movi­
DIR. Tabla de miento de trayectoria prefi­
trayectoria. jada, estos dos bytes indican
DIR + 11 Incremento Y. la dirección donde se en­
DIR + 12 Contador de Fig. 3 cuentran los datos acerca
animación. de la misma. En esta direc­
DIR + 13 Contador de Gráficos usados en la demostración ción pondremos dichos da­
trayectoria. tos de la siguiente forma:
Dirección Gráfico Dimensiones Número para delimitar la trayecto­
DIR + 15 Memoria ocupa­
(en de fases ria, se colocan grupos de
da por cada
caracteres) dos bytes que indican los in­
gráfico.
47300 COHETE 2x2 1 crementos X e Y a efectuar
47364 RELOJ 3x3 8 en cada momento. Pero
48516 FLECHA -> 2x2 1 además, puede que quera­
las distintas fases de un úni­ 48580 FLECHA 2x2 1 mos que el sprite cambie su
co sprite y sus respectivas
48644 flec ha! 2x2 1 forma durante el movimien­
máscaras deberán tener las 48708 FLECHA \ 2x2 1 to. Por ejemplo, si queremos
mismas dimensiones.
48772 FLECHAD- 2x2 1 dibujar una nave girando,
48836 FLECHA ^ 2x2 1 no bastará con dar los incre­
Los bytes quinto y sexto
48900 FLECHA 1 2x2 1 mentos que delimiten la tra­
especifican la coordenada X
48964 FLECHA 2x2 1 yectoria de giro, sino que,
del sprite, mientras que los
séptimo y octavo especifican además, deberemos ir dibu­
la Y. Ambas serán números jando un gráfico un poco gi­
entre —32768 y +32767. rado respecto del anterior
Esto nos permite crear un ción será cíclica, mientras tinta de la línea recta, por para que parezca que la na­
sprite inicialmente en unas que si vale 1, será una ani­ ejemplo, un satélite que gi­ ve está realmente girando.
coordenadas que no existan mación de adelante-atrás. ra en círculo alrededor de Para ello, entre los grupos
en la pantalla real del orde­ La primera es la que usaría­ un planeta. Para esto sirve de dos bytes que delimitan
nador, y hacer que aparez­ mos, por ejemplo, para un la opción de trayectoria. La el movimiento, colocaremos
ca posteriormente. Si la helicóptero cuyas hélices gi­ forma de establecer la tra­ un 126, y a continuación, la
coordenada X está entre ran. La segunda la usaríamos, yectoria la vamos a ver a dirección de memoria don­
32512 y 32767 (o lo que es por ejemplo, para un pez continuación. de se encuentra el nuevo
lo mismo, si el byte sexto es que mueve la cola. Si tenemos El significado de los bytes gráfico. Para terminar la tra­
127), se considerará al spri­ cinco fases de animación, undécimo y deámosegundo yectoria, colocaremos un
te como desactivado y ni se que podemos numerar del 1 no es el mismo si el sprite se 127 y ésta se repetirá desde
le moverá ni se le dibujará. al 5, y especificamos anima­ mueve en línea recta o si­ el principio.
A diferencia del Basic, la ción cíclica, las fases se irán guiendo una trayectoria es­ El byte decimotercero es
coordeanda Y comienza repitiendo de esta forma: pecial. utilizado como contador pa-
ra la animación, y debere­ Máquina, o el listado 4 con crear en la tabla anterior­ inicializada al activarse las
mos inicializarlo a 0. un ensamblador, preferible­ mente explicada. Es necesa­ interrupciones, así que si
Los bytes decimocuarto y mente el Gens, y ensamblar. rio advertir que si quere­ queremos que nuestros spri­
decimoquinto se usan como En ambos casos, grabare­ mos, por ejemplo, crear tres tes se muevan sobre algún
contador para la trayecto­ mos el resultado a continua­ sprites, estos deberán ser los fondo o dibujo, tendremos
ria. Si estamos utilizando un ción de lo anterior como números 0, 1 y 2, es decir, que dibujarlo en la pantalla,
movimiento en trayectoria «Sprite.Code USR», indican­ los tres primeros. El progra­ justo antes de hacer el RAN-
preestablecida, deberemos do como dirección la 61953, ma Basic utiliza una suoru- DOMIZE USR 61953. Una
inicializarlos con los mismos y como longitud 1495. Aho­ tina que lee los datos de lí­ consecuencia del uso de
valores que los bytes undé­ ra, ya lo tenemos todo listo. neas DATA y hace los POKEs una pantalla en memoria,
cimo y decimosegundo, es Rebobinemos y carguémos­ pertinentes, pero cada uno es que no podremos dibujar
decir, con la dirección de los lo todo. El verdadero pro­ puede hacerse su propia ni escribir nada en la pan­
datos de la trayectoria. Si el grama controlador de spri­ subrutina como quiera, te­ talla del ordenador, porque
movimiento es rectilíneo, es­ tes es el del listado 3 ó el 4. niendo en cuenta cuáles son las interrupciones se encar­
tos bytes no se usan. El Basic y el listado 2 sirven los datos que hay que indi­ gan de copiar constante­
Por último, los bytes deci­ para efectuar una demos­ car, y que ya han sido expli­ mente la pantalla de memo­
mosexto y decimoséptimo tración de sus posibilidades, cados. Una vez creados los ria en la pantalla del orde­
indican la cantidad de me­ que son las que veremos al datos de los sprites, activa- nador, así que nada más es-
moria que ocupa cada grá­
fico del sprite, ya sea gráfi­
co propiamente dicho o
máscara, y se calcula multi­
plicando el ancho en carac­
teres por el alto de píxels.
Este valor es para el uso in­
terno de la rutina, y no ha­
bría sido necesario incluirlo
en la tabla de sprites, pues
se puede calcular a partir
de los contenidos de los
bytes tercero y cuarto, pero
se ha incluido por razones
de velocidad.

EL PROGRAMA
Antes de profundizar más
en el funcionamiento de la
rutina, sería preferible te­
clear ahora el programa
para ver los resultados y ■ ■ ■ ■

comprender así mejor cómo


funciona. En primer lugar, finalizar la carga. Dicha de­ remos las interrupciones con cribir algo, se borrará auto­
habremos de teclear el lista­ mostración se compone de RANDOMIZE USR 61953 e máticamente. Para poder
do 1 y grabarlo en cinta con siete ejemplos, desde el más indicaremos el programa escribir algo, deberemos
autoejecución en la línea simple hasta el más comple­ c o n tro la d o r de sprites, hacerlo antes de activar las
9999. A continuación, y con jo. Estos ejemplos no están cuántos sprites estamos uti­ interrupciones, o escribien­
ayuda del Cargador Uni­ pensados solamente para lizando, haciendo POKE do directamente en la pan­
versal de Código Máquina, que veamos cómo se mue­ 23681, N, donde N es el nú­ talla de memoria, para lo
publicado innumerables ve­ ven los sprites, sino para mero de sprites. A partir de cual veremos más adelante
ces en Microhobby y Micro- que, estudiando el progra­ ese momento, los sprites co­ dónde y cómo está coloca­
manía, teclearemos el lista­ ma Basic, podamos com­ menzarán a moverse. da.
do 2 y lo grabaremos en cin­ prender mejor cómo mane­ Para evitar parpadeos y Independientemente de la
ta, a continuación, del Ba­ jarlos desde nuestros pro­ otras fealdades varias, to­ rutina de sprites, hay una
sic con el nombre «Spri- pios programas. En él pode­ dos los dibujos se hacen en subrutina que puede resul­
te.Code Data», indicando mos ver cuál es la secuencia una copia de la pantalla tar muy útil en algunos ca­
como dirección de comien­ a realizar para que los spri­ que se encuentra en otra di­ sos. Se trata de la que com­
zo 47140, y como longitud tes comiencen a moverse: rección de memoria, y lue­ prueba el choque entre dos
1888. Ahora podemos te­ en primer lugar, se introdu­ go el resultado se vuelca a sprites. La forma de utilizar­
clear el listado 3 en el Car­ cen los datos de cada urjo la pantalla del ordenador. la es la siguiente: POKE
gador Universal de Código de los sprites que queramos Esta copia de la pantalla es 23729,A:POKE 23728,B:
LET C=USR 62082, donde oportunos, en este caso, las El sexto ejemplo muestra tos de un ejemplo y los de
A y B son los códigos de dos direcciones 53004 Y53006. lo llena que puede parecer otro, y no los lea todos de
sprites, y C terminará valien­ En el tercer ejemplo, ve­ la pantalla cuando se colo­ una vez.
do 1 si los dos sprites están mos como actúa la másca­ can los 17 sprites circulando La rutina de interrupcio­
chocando o 0 si no lo están. ra para producir un efecto en todas direcciones. nes, la pantalla de memo­
Si lo que queremos es ave­ muy convincente de que el Por último, el séptimo no ria, y algunas zonas de da­
riguar si un sprite está cho­ sprite está por delante del se limita a crear los sprites tos más, ocupan por com­
cando con cualquier otro, fondo. Desgraciadamente, y dejar que se muevan, sino pleto de la dirección 53000
sin importarnos cuál, susti­ podemos comprobar tam­ que, con la ayuda de la su­ en adelante, así que nues­
tuiremos B por un 255. bién cómo en el Spectrum es brutina y de comprobación tros programas y gráficos
Comentemos un poco los imposible evitar la famosa de choque, produce unos deben situarse por debajo
ejemplos de la demostra­ mezcla de colores, pero és­ sonidos cada vez que el co­ de aquí. Puede parecer que
ción, porque ilustran bas­ ta es reducida al mínimo po­ hete es interceptado por ocupa demasiado, pero, de
tante bien las características sible. una flecha. Es un ejemplo hecho, es más o menos lo
de los sprites. El cuarto ejemplo consta muy simplificado de lo fácil que suelen ocupar las ruti­
El primer ejemplo es el ya de dos sprites para ver que es hacer un juego utili­ nas y áreas de datos desti­
más sencillo. Un único spri­ cómo al cruzarse uno pasa zando esta rutina para con­ nados al mismo fin en pro­
te de color rojo y sin anima- por delante del otro. Pode- trolar los sprites. gramas comerciales. Hay

f Tr •' i
1 1

i i1 ' ;

• i f I

jt

ción aparece a la izquierda mos comprobar también có­ Para hacer vuestras pri­ que pensar que solamen­
de la pantalla y se mueve mo el sprite toma el color de meras pruebas, podéis utili­ te la pantalla de memoria
hacia la derecha. papel que haya en la pan­ zar también el programa ocupa ya unos 7 K. Pero
El segundo ejemplo nos talla, lo que contribuye a Basic de demostración, con si todavía os parece mu­
muestra una especie de re­ evitar un poco la mezcla de sólo cambiar los DATAs de cho, vamos a ver con de­
loj con una aguja siempre colores que acabamos de algún ejemplo. Para ayuda­ tenimiento qué es lo que
quieta y la otra girando en mencionar. ros, tenéis en la figura 3 una hay a partir de esa direc­
sentido horario. Como de- El quinto ejemplo mues­ tabla con las direcciones y ción.
beriáis haber supuesto, se tra, por una parte, un ejem­ demás datos de los gráficos
trata de animación cíclica. plo práctico del uso de tra­ usados para la demostra­
Además, podéis comprobar yectorias preestablecidas ción, y en la figura 4 un re­ MAPA DE MEMORIA
cómo un sprite no necesita con una flecha que gira, y sumen de qué valores y en
estar siempre moviéndose, por otra parte un grupo de qué orden debéis poner en Si sólo pensáis usar la ru­
puede estar en una posición cuatro flechas paradas de los DATAs. Advertencia im­ tina desde Basic y no tenéis
fija, poniendo los incremen­ las que dos tienen anima­ portante: al final de los da­ ningún interés en el Código
tos X e Y a 0. En este modo, ción cíclica y dos de tos de todos los ejemplos, es Máquina, no es necesario
podemos controlar directa­ adelante-atrás, para que se necesario añadir un cero a que leáis este apartado ni el
mente la posición del sprite, puedan apreciar bien las di­ los DATAs para que el pro­ siguiente, pues en innecesa­
pokeando en los lugares ferencias entre una y otra. grama distinga entre los de­ rio lo que se dice en ellos
para poder utilizar los spri- cuatro tablas. La primera va tercera, después cargar 1
tes. Pero si sabéis Código de 63488 a 63999, la se­ con 47, que es el número
Máquina, continuad leyen­ Fig. 4 gunda de 64000 a 64511, que queremos girar, y la di­
do y podréis sacar mucho la tercera de 64512 a rección formada contendrá
más provecho a la rutina. Valores a colocar en los 65023, y la cuarta de el resultado deseado. Como
En la figura 5 tenéis un es­ 65024 a 65535. Las cuatro al girar un byte, hay una
DATAS
se crean en el momento de parte que se sale, ésta se al­
quema del mapa de memo­ en el programa Basic
ria. Lo primero que tene­ activar las interrupciones. macena en otra dirección,
— Dirección del primer Lo que hay en ellas es el re­ justo 256 bytes más arriba,
mos, entre las direcciones
53000 y 53288, es la tabla gráfico. sultado de girar cada uno así que basta con incremen­
— Ancho en caracteres. de los 256 posibles números tar H para obtenerla. Si no
de sprites, ya explicada an­
— Alto en pixels. que puede contener un os ha quedado demasiado
teriormente, y cuyo inicio
será denominado TASPRI a — Coordenada X. byte, 6 bits hacia la dere­ claro, posiblemente lo en­
— Coordenada Y. cha, en la tabla cuarta, 4 en tendáis mejor cuando veáis
partir de ahora.
— Número de fases de la tercera, 2 en la segunda la subrutina que crea la ta­
Lo siguiente, entre 53288
animación. y 0 en la primera. La utili­ bla. Como muchos de voso­
y 53543, es otra tabla, — ln d ic a d o r:0 = a n im a - dad es que a la hora de di­ tros ya habréis adivinado, el
TABLDI, que no hemos ex­ ción cíclica, l=adelan- bujar un gráfico, no tendre­ que sólo haya cuatro tablas
plicado antes porque es de te/atrás. mos que utilizar instruccio­ quiere decir que el progra­
uso interno de la rutina. En — lndicador:0= línea rec­ nes de rotación que hacen ma no trabaja realmente en
esta se almacenan una serie ta, 1= trayectoria com­ más lento el proceso, pues­ alta resolución en este sen­
de datos de los sprites, pe­ pleja. tido horizontal, sino que el
to que ya tenemos el traba­
ro solamente de los que se
— C o lo r jo hecho. Por ejemplo, si mínimo desplazamiento es
van a dibujar en pantalla
(tintan-64 x brillo). queremos girar el número de dos pixels. Esto no supo­
(como hemos visto, puede
— Si línea recta: 47, 4 bits a la derecha (el ne un gran problema, pues
haber sprites fuera de ésta).
— Incremento X. número 47 puede formar la suavidad obtenida es más
En la figura 6 hay un resu­
— Incremento Y. parte de un gráfico, ya que que suficiente. Sin embargo,
men de los 15 bytes de que para mayor comodidad se
— Si trayectoria comple­ sabemos que todos los grá­
consta cada elemento. Los
ja: ficos, en el ordenador se re­ permite que se den las coor­
dos primeros bytes indican
— Dirección de los ducen a números binarios, denadas como si el mínimo
la dirección en la pantalla
datos de la trayec­ con un equivalente deci­ desplazamiento fuera de
de memoria a la que va a ir
toria. mal), el proceso a efectuar dos pixels. La verdad es que
el gráfico. Los dos siguien­
sería cargar el registro H este sistema del uso de ta­
tes indican la dirección del
con 252, que es el número blas con los bytes desplaza­
gráfico, y los otros dos, la dos no es de nueva crea­
que corresponde a la tabla
de la máscara. El séptimo ción, ha sido utilizado en
byte indica el numero de
varios programas comercia­
scans, o lo que es lo mismo,
les, entre los que cabe des­
la altura en pixels. El octa­
Fig. 5 tacar «Cyberun», cuyo rápi­
vo byte indica el ancho en
M apa de memoria do scroll habría sido impo­
caracteres. Tanto éste como
sible con métodos conven­
el anterior no tienen por DirecciónEtiqueta Contenido cionales. Pero continúenlos
qué corresponder con los 53000 TASPRI Tabla de datos de los sprites con el contenido de la tabla
dados en la tabla de sprites, existentes. TADIBL. El undécimo byte
ya que éstos se refieren a las 53289 TABLDI Tabla de datos de los gráficos
indica los atributos del spri-
dimensiones del gráfico que que se van a dibujar.
te. El decimosegundo y el
se va a dibujar en pantalla, 53544 SPARES Espacio reservado para guardar
decimotercero indican la di­
y si éste se encuentra en un los trozos de pantalla. rección en la pantalla de
lado o una esquina, la por­ 54568(7) ORIGSC Pantalla de memoria. memoria, donde van a ir los
ción de gráfico que se ve es 60904 ORIGAT Atributos de la pantalla de atributos del sprite. Por últi­
menor que el gráfico ente­ memoria. mo, los bytes decimocuarto
ro. El noveno byte nos dice 61696 Tabla de interrupciones.
y decimoquinto indican el
cuántos caracteres de an­ 61953 INICIO Subrutina de inicialización y número de filas y el de co­
cho quedan fuera de la activación. lumnas, respectivamente,
pantalla. Comprobaremos 62075 DESACT Subrutina de desactivación. que ocupa el g rá ­
su utilidad al estudiar el pro­ 62082 COMCHO Subrutina de comprobación de fico en la zona de atribu­
grama. El décimo byte es el choque.
flamado byte de rotación. tos.
62194 ENTINT Subrutina principal de
Puede valer 248, 250, 252 interrupciones. Continuando con el mapa
ó 254, y es el byte alto de 63488 Tablas de rotaciones. de memoria, entre las direc­
la dirección de comienzo de ciones 53544 y 54566, está
una tabla. Son, por tanto, el espacio denominado
1 6 ,0 , 2 0 0 - 1 '® '®
350 ORTO 48580. ' i 6 ( 2 S 5 j 25 S , 1 . 0

' * 4 ' D? T P 34870 ' 3 ' 24 ,2 S 5 .72 <8 ' ® '


USTADO ' l | Í ' | H R 4 ? ! i6 « x e . 9 0 . i ® ® '1 ' 0 '
-rr»
04 é4 7 1 ^ 16' 2 ' 16,0 <2® ' 1 ' ® ' 1 ’
1 i ® '4Í otq 4 8 5 1 6 ’2 ' q ^

L£Ód>O
<0 _ TF D=0_’ í? Q P
» U Sl « r« - 36A' 3 ' I V 60 2 5 6 .1 '®
0 4®i 60 4 t ? ^ ® 0 ' 2 ' I V 0 0 ,1 2 4 .X .0 '
4 8 5 1 6 .2 .1 8 '
°£ci< 23670; C° p o k e R + § ' i x/256): • O A7l^®¿®.eUDI O ~7 _ _ * Pk0.1 /®

pEf® I t e « á ' í S/ i ^ p¿^ R


? g S S .lM T '¿ Yé?8 pí>KE « *8 ' M: P° Kg, '4 5 0DRTH » 3 2 , 0 , 1 , ® '® '
'®4él ORTR 48900 ' 2 , 1 8 .3 2 4 , 1 ,0 ,
U > ° ° ^ P w ^B ^ssa s
70 R
04 ?Ó > « T r ^ 900' ! ' I V 96 , 1 6 . 1 '® '®
®¿0
800 ó1t R 489®0 ' V I V 1 2 8 .2 4 , 1 .® '

* 89 00» ! ' l6 1 6 0 .® '1 '0 » ®


0 é l ó 0 Ó«T ° 48 9 0 ® '2 ' I ® ' 3 2 , 1 ,®
'l í l 'l R T R 4890 ® . 2 '1 8 '^ 4 . 1 6 4 ,1 .

03í ®D I V " 03 •
•6PR f r e s dPOR fiiN

,0
"g ^ s e r s a ? ^ - let x.
■ - M • 1 9 8 • 1 ''

\ n o Ri i ^ ! il# ^ ^ éG° 5US8 S


l . 3 ' 0 nDTfl 4 7 3 6 4 ,3 .2

", 1 .t2 ' i o T f i


4 8 5 1 6 .2 ' 1 = a 0 ,0 íes; 5°t'SuI lp s lt‘ÍK ?"'E’>L''r *“
' 210 DOTO 4 1 6 , 1 6 , 1 6 ,8 ,0 .
OR " ;á 1120 Y P«US| 29© GQ SUB
,0.® ooTO 48 5 1 6 .2 . i,0 ,
22® o 1 6 ,0 .I 6 ' 8
,0 ' 0 ' 0 qTP 4 8 5 1 6 , 2 , 1 ° '
' 230 DAT” 1 6 .1 6 ,0 ' 8 '
® ¿ t ¿ 0«TR 4 8 5 1 6 ,2 ,1 8 '
0 ¿®ó0 rI h 8 ¿ ! ^ ° 2 6 i 6 , 0 . 0 ' 8 '® ; 0
H e

'| 4
8PT« * 881

D«Tfi * 8 S ^ '
1 6 ,0 , 1 6 , 8 , 1 , ® '

1 6 ,0 , 8 0 . 1 . ® '® '
9 M & -S E
1090 POK| 23728'2 rS6 <60

* 7 3 0 0 ' ! ' .6 - 6 6 , 2 0 . 8 '! '


^ V " , 5 0 . 3 8 '8 'K

® 30® 4 l TR S
4 8 160 2 16 ® ' ® ' - 0 ' 0 ' 0
® 6 % 1¿ 0T° 4 7 3 0 0 ' 2 1 6 , - 6 6 , 3 8 , 8 . ® '
112® S R^NTi 0RTo5 é | r Í fe' i ^ ^ T 5 R ^
_ 1 "' R5NDRETURN , ord ""CODE 47
'8 ¿ ® 0 grfi 4851 . ' e ,0,
« r J i o5^ 3 ,: ' c ° s “ 619 '
033¿ V R 4 8 5 l 6 ' V 24 '® . 2 S S . ® '® '®
* a 0 6n
® 6 l0 1Ó0 TP 47 3 6 4 ,3 , '
,0 , 0 '

SPARES. Es una zona de tra­ memoria, cambiando el que para poder generalizar bujo, se necesita que esta
bajo donde se almacenarán EQU de la etiqueta SPARES al máximo la subrutina que columna adicional sea un
los trozos de pantalla que en el listado ensamblador. se encarga de dibujar los píxel más alta que el resto
van a ser borrados al dibu­ En la dirección 54568 se gráficos en esta pantalla, de la pantalla. Así que en
jar los sprites, para poder encuentra la pantalla de necesitamos un carácter realidad, la zona ocupada
restablecerlos después. La memoria. Como sabéis, la más de ancho, en el que se por la pantalla comienza en
cantidad de memoria nece­ pantalla del Spectrum tiene dibujarán restos de los spri­ 54567, pero la dirección
saria depende de los sprites 256 píxels de ancho (32 ca­ tes que, por estar a medias que se corresponde con el
que se vayan a utilizar y sus racteres) por 192 de alto, en la pantalla, no deben ser inicio de la pantalla real del
dimensiones. El valor que se así que ocupa 3 2x1 9 2 = dibujados enteros. De esta ordenador, es la 54568,
le ha dado es un valor pro­ = 6144 bytes (sin contar con manera, la pantalla de me­ que es la que tiene el nom­
medio que será suficiente los atributos), así que, en moria ocupará 3 3 x1 9 2 = bre de ORIGSC.
para casi todos los casos. Si principio esto es lo que de­ = 6336 bytes. En realidad, A continuación de la pan­
para vosotros resulta insufi­ bería ocupar la pantalla de ocupa un byte más, porque talla, se encuentran sus atri­
ciente, podéis colocar esta memoria. Sin embargo, es­ también para generaliza­ butos, en la dirección 60904,
zona en otra parte de la to no es así. Lo que pasa es ción de la subrutina del di­ con la etiqueta ORIGAT. Al
igual que antes, necesitamos registro I estará entre 61696 el gráfico está en el primer hacemos es guardar todos
una columna más, con lo y 61951, y que el contenido píxel de un carácter y otra los registros que vamos a
que ocuparán 33 x 24 = 792 de cualquiera de estas di­ para el resto de los casos. El utilizar. A continuación, es­
bytes. En este caso, no ne­ recciones y de las siguientes resultado quedaría menos tudiamos el contenido de la
cesitamos reservar especial­ será 242, con lo que siem­ elegante, sería más difícil de variable ESTADO. Si es 0,
mente otro byte antes de la pre se saltará a la dirección com prender y ocuparía deberemos volcar la panta­
dirección 60904, pues nos 242 * 256 + 242 = 62194. prácticamente la misma me­ lla, y si es 1, hacer todo lo
sirve el último de la zona de Tras la tabla de interrup­ moria. demás. En este segundo ca­
la pantalla, que será a la ciones tenemos, en 61953, so saltamos a NOVOLC. En
vez el último byte de la pan­ INICIO, la subrutina que el primero, llamamos a la
talla y el primero de los atri­ inicializa las interrupciones y subrutina que vuelca la pan­
FUNCIONAMIENTO talla y hacemos que ESTA­
butos. crea la pantalla de memo­
ria y las tablas de rotacio­ El proceso que hay que DO valga 1 para la próxi­
En la dirección 61696 se
nes. realizar para mover los spri- ma vez que se produzca
encuentra la tabla de inte­ una interrupción, para salir
rrupciones. Se ha dicho mu­ En 62075 está DESACT la tes por la pantalla es bas­
subrutina que desactiva las tante complejo y lleva bas­ después por SALINT.
chas veces en esta y en otras En el caso de encontrar­
revistas que en el modo 2 de interrupciones y vuelve al tante tiempo. Por ello, lo va­
modo normal. mos a dividir en dos partes, nos en la segunda parte,
interrupciones el micropro­
En 62082 está la subruti­ de tal modo que una vez ponemos ESTADO a 0 pa­
cesador toma el contenido
na COMCHO, de compro­ haremos una parte, y la si­ ra la próxima vez. Después
del registro I y el del bus de nos disponemos a borrar to­
datos, que siempre es 255, bación de choque de spri- guiente vez haremos la otra
tes. En realidad no cabe en­ dos los sprites dibujados la
y forma una dirección, de la parte, y a la siguiente volve­
tera aquí, pues se montaría remos a hacer la primera, y última vez. Para ello, toma­
que se extrae la dirección
sobre la dirección donde así. Hacemos el volcado en mos el contenido de NUBL-
definitiva de la subrutina de
deben comenzar las inte­ pantalla de la pantalla de BO, que excede en uno al
interrupciones. Sin embar­ número buscado. Antes de
go, hay algunos periféricos rrupciones, por lo que par­ memoria, que es el proceso
te de ella se encuentra al fi­ más lento, y la segunda, ha­ entrar en el bucle que bo­
ue, por no estar demasia-
nal de todo el bloque de la remos el resto, que se pue­ rrará todos los gráficos, ini-
o bien hechos, hacen que cializamos IX con TABLDI,
el contenido del bus de da­ rutina de interrupciones y de dividir en las siguientes
sus subrutinas. subetapas: tabla que tiene los datos de
tos en el momento de las in­
— Borrar los sprites de los sprites que fueron dibu­
terrupciones no sea 255. Es­ En 62194 se encuentra la
sus posiciones antiguas. jados y ahora queremos bo­
to quiere decir que la direc­ subrutina principal de inte­
— Calcular nueva posi­ rrar, y HL con SPARES, don­
ción donde el microprocesa­ rrupciones, ¡unto con todas
ción de los sprites y el gráfi­ de están almacenados uno
dor buscará la dirección de sus subrutinas y variables
co que toque de los que detrás de otro los trozos de
las interrupciones, puede (excepto NUMSPR y SPRICH,
pantalla necesarios para
ser cualquiera cuyo byte al­ que se encuentran en varia­ compongan la animación
de cada uno. efectuar el borrado. Ahora,
to sea el contenido del regis­ bles del sistema no usadas).
— Hacer todos los cálcu­ si el contenido de NUBLBO
tro I. Para conseguir que Detrás, como ya hemos di­
los necesarios para el dibu­ era 1, es que no habíamos
sea cual sea el valor del bus cho, continúa la subrutina
jo de los gráficos y su pos­ dibujado ningún gráfico la
datos, se lea la misma direc­ de comprobación de cho­
terior borrado, almacenan­ última vez, y salimos del bu­
ción para la subrutina de in­ que, que aunque no es muy
do los resultados en la tabla cle sin haber entrado en él.
terrupciones, no hay más larga, ha sido cortada en
remedio que elegir para la dos para aprovechar mejor TABLDI, a la vez que se al­
subrutina una dirección cu­ la memoria, rellenando ios macenan los trozos de pan­
yos byte alto y bajo sean huecos. talla que van a ser ocupa­
¡guales, y llenar con el va­ Y lo último que hay en la dos por los sprites.
lor de estos, 257 bytes a memoria son las ya mencio­ — Dibujar los spri­
partir de la dirección XX0 0, nadas tablas de rotaciones, tes que se en­
siendo XX el contenido del que comienzan en 63488. A cuentren en
registro I. En nuestro caso, propósito de estas tablas, la pantalla.
para que la tabla de inte­ seguramente os habréis Ahora que
rrupciones esté en 61696, I preguntado qué sentido tie­ sabemos to­
valdrá 61696/256 = 241, y ne almacenar un byte gira­ das las tareas
la subrutina de interrupcio­ do 0 veces (que es lo que a realizar, po­
nes com enzará en hay en la primera tabla), demos comen­
62194=F2F2h, así que la puesto que el resultado se­ zar a comentar
ta b la estará llena de rá el mismo. La respuesta es el listado de la
242 = F2h. Es fácil ver que bien sencilla. Si no incluyé­ rutina.
entonces, sea cual sea el ramos esa tabla, sería nece­ El punto de en­
contenido del bus de datos, sario hacer dos subrutinas trada de ENTIT.
la dirección formada con el de dibujo, una para cuando Aquí, lo primero que
Ahora vamos, tomando de siendo n el dato en cuestión. 33 menos ese número, que mos metido en BORPOI +1.
la tabla los datos necesa­ Este sistema les resultará fa­ será lo que hay que sumar Como en B teníamos 0, en
rios. En DE cargamos la di­ miliar a los que hayan leído a la dirección destino de la BC tenemos el número de
rección en la pantalla de los artículos sobre cómo se pantalla, tras restaurar un bytes a renovar; en DE te­
trabajo donde comenzará programa un juego, publi­ sean para lograr la direc­ nemos el destino, y el origen
el proceso. Ahora, en vez cados en los MICROHOBBY ción del siguiente. Por últi­ en HL, porque los trozos de
de cargar en registros, hay 97-106, y escritos por el mis­ mo, cargamos A con el nú­ pantalla que vamos a recu­
unos datos que los vamos a mo autor. En BORPOI + 1 y mero de scans que debemos perar han sido anteriormen­
meter en una dirección de en BORPOD-l-1 guardamos restaurar. En BORPOI, aun­ te guardados en SPARES,
memoria, de tal manera la cantidad de bytes de an­ que veamos un LD C,0 es­ así que tenemos los pará­
que luego serán recogidos cho que hemos de restau­ tamos cargando C con el metros necesarios para ha­
directamente por una ins­ rar. En AUMPOI + l y en ancho del bloque a restaurar, cer un LDIR. Ahora calcula­
trucción del tipo LD C,n, AUM PO D+1, guardamos pues es el valor que había­ mos la dirección en panta-

■ H L
lia del siguiente sean, su­ los trozos de pantalla, ya alternativos guardamos en ces, a pesar de que iniciali-
mándole al contenido de DE podemos dibujar los sprites HL el origen de pantalla de cemos B con 25. La razón
tras el ld ir, el número cal­ en sus nuevas posiciones, trabajo, y en DE el de la es que, como veremos ense­
culado antes y metido en llamando a DIBUJA, que se pantalla del ordenador, guida, a cada paso por el
AUMPOI + 1 (por si no lo apoyará en los datos de además de poner C a 0. En bucle, el registro BC será
habéis notado, os diré que TABLDI. Ahora, antes de los registros normales pone­ decrementado 32 veces, así
en la pantalla de trabajo, volver, hacemos un rst 56 mos en HL el origen de los que al final de las 22 veces
los scans están uno tras para leer el teclado, y des­ atributos de memoria, y en que se repetirá el bucle, BC
otro, a diferencia de cómo pués entramos en SALI NT, DE su correspondiente en la habrá sido decrementado
están en la pantalla del or­ donde se recuperan los re­ pantalla del ordenador. en 22 x 32 = 704, con lo que
denador). Tras esto, cerra­ gistros y se vuelve. Nótese Asimismo, cargamos C con B habrá sido decrementado
mos el bucle para terminar que tal y como está puesto, 0 y B con 25 (estas dos últi­ en 3. Por tanto, deberemos
con todos los scans. Ahora, y teniendo en cuenta que la mas operaciones de una so­ empezar con B valiendo 3
nos queda restaurar los atri­ fase de volcado de pantalla la vez. B será el contador más de las veces que se re­
butos. Para ello, cargamos abarca el tiempo de dos in­ del bucle que se repetirá pita el bucle. Dentro del bu­
en DE la dirección destino terrupciones, la lectura del para cada fila, dentro del cle de las 22 filas, volvemos
de atributos, y en A el nú­ teclado se hará tres veces cual deberemos volcar ocho a los registros alternativos
mero de filas que ocupa. menos de lo normal. Esto scans y una fila de atributos. para volcar los scans. Car­
Por lo demás, la restaura­ hace que la respuesta del El bucle se repetirá 22 ve- gamos B con nueve para
ción de los atributos es idén­ mismo al teclear sea bastan­ entrar en un bucle que se L1
tica a la que acabamos de te pobre, pero da un poco repetirá ocho veces, adivi­
hacer. Tras restaurar por más de velocidad al no te­ nad porqué. Dentro de es­
completo un trozo de pan­ ner que ejecutarse tantas te segundo bucle, traslada­
talla, cerramos el bucle que veces la subrutina de lectu­ Fig. 6 mos los 32 bytes que com- y
los restaurará todos. Ya he­ ra de teclado. Si pensamos ponen un sean de la panta­
mos terminado la primera usar los sprites desde Códi­ TABLA DE DATOS DE lla desde la Ídem de memo-
de las subfases antes cita­ go Máquina, podría ser útil LOS GRÁFICOS ria a la real. Posiblemente
das. quitar las líneas 96, 97 y 98 QUE SE V A N A DIBUJAR os sorprenda que para esto
para ahorrar aún más tiem­ utilicemos 32 instrucciones
Ahora continúamos por Dirección Contenido
po. LDI. Pero resulta que esto es
INSABO. Aquí hacemos un relativa
bucle en el que ¡remos mo­ Y esto es todo el progra­ mucho más rápido que car­
DIR + 0 Dirección de gar BC con 32 y hacer un
viendo todos los sprites y ma principal. Ahora que­
destino en pan­ LDIR, y además, así pode­
calculando los datos para la dan las subrutinas, que son
talla de mos utilizar el registro B co­
tabla TABLDI en los que es­ cuatro: VUELCA, MOVERR,
memoria. mo contador. Estos DLIs y
tén en la pantalla. Dentro CREADA y DIBUJA.
DIR+ 2 Dirección del los que veremos a continua­
de este bucle, IY será el VUELCA es la que se en­ gráfico.
puntero para el elemento carga de copiar la pantalla ción son la causa de que en
DIR+ 4 Dirección de la un bucle tengamos que car­
correspondiente al sprite de trabajo en la pantalla del máscara.
dentro de la tabla de sprites ordenador. Se trata del pro­ gar B con 25 y en el otro 9
DIR + 6 Número de en vez de 22 y 8 respectiva­
TASPRI, IX el de TABLDI, y ceso que más tiempo consu­ scans.
DE señalará la primera di­ me, ya que hay que mover mente. Tras esto, calcula­
DIR+ 7 Bytes de ancho. mos en DE la dirección del
rección libre de la zona casi 7 K. La rutina vuelca to­ DIR + 8 Bytes que no
SPARES, pues en este bucle dos los scans de arriba a siguiente sean. Dentro de
entran en este bucle siempre vamos a
también será donde guar­ abajo, y por cada 8, vuel­ pantalla.
daremos los trozos de pan­ ca una fila de atributos. pasar de un sean a otro de
DIR+ 9 Byte de la misma fila, y, como mu­
talla que hagan falta. Den­ Puede pareceros que sería rotación.
tro del bucle, lo que encon­ más sencillo volcar primero chos ya sabréis, el algoritmo
DIR + 10 Byte de para pasar de un sean a
tramos son llamadas a dos toda la pantalla sin atribu­ atributos.
subrutinas. MOVERR se en­ tos, y luego los atributos, otro de la misma fila es sim­
D IR -l-ll Dirección de plemente incrementar el
cargará de calcular las nue­ pero el resultado sería que destino en atri­
vas coordenadas del sprite, el movimiento quedaría mu­ byte alto de la dirección. Pe­
butos de ro antes debemos restarle
teniendo en cuenta si se cho menos suave. Con este memoria.
mueve en línea recta o se­ procedimiento habrá pe­ 32, porque al hacer los LDIs
DIR+ 13 Número de filas es como si le hubiéramos su­
gún trayectoria prefijada, y queñas zonas de la panta­ de atributos que
de calcular la fase de ani­ lla donde sprites parecerán mado 32. Como no hay re­
ocupan el
mación en que se encuen­ doblarse; pero en la inmen­ gistros dobles libres, nos va­
gráfico. lemos de A para hacer la
tra, si la tiene. CREADA sa mayoría de los casos, la DIR + 14 Número de co­
crea el elemento en la tabla suavidad de movimientos resta. Primero le restamos
lumnas de 32 a E. Si no se nos produ­
TABLDI y guarda los trozos será perfecta. atributos.
de pantalla. Veamos cómo funciona la ce acarreo, la resta ya está
Una vez guardados todos subrutina. En los registros bien hecha y procedemos a
incrementar D. Pero si hay sean de la siguiente fila, te­ sobrante, cerramos el bu­ de la tabla TABLDI. Lo pri­
acarreo, deberemos restar­ niendo en cuenta que es po­ cle. mero que hacemos al entrar
le uno a D, pero como des­ sible que estemos pasando Llegamos ahora a MO- es comprobar que el sprite
pués tendríamos que incre­ de un tercio a otro. No creo VERR, la subrutina que cal­ esté activado, para lo cual,
mentarlo de nuevo, no ha­ que estos ajustes merezcan cula las nuevas coordena­ como ya hemos dicho, com­
cemos ninguna de las dos más explicación, pues ya se das de cada uno de los spri- probamos que no sea 127 el
cosas. Antes de cerrar el bu­ han gastado muchos litros tes. A esta subrutina se lle­ sexto byte de la tabla (seña­
cle, HL necesita ser incre­ de tinta hablando de cómo ga con IY apuntando a los lado por IY + 5). Si es 127,
mentado para saltarnos la se calcula el sean siguiente datos del sprite en trata­ regresamos inmediatamen­
columna de más que ya di­ a uno dado en la pantalla miento dentro de la tabla de te. A continuación, guarda­
jimos que había en la pan­ del Spectrum. Ahora volve­ sprites TASPRI. IX, por su mos en D el décimo byte de
talla de trabajo. Tras salir mos a los otros registros, y parte, apuntará al lugar la tabla, que era el que in­
del bucle, en el que habre­ trasladamos una fila de atri­ donde debemos crear el dicaba el color, el tipo de
mos volcado los ocho scans, butos. Tras incrementar HL elemento correspondiente
hacemos los ajustes necesa­ para saltarnos la columna
rios para pasar al primer
animación y el tipo de mo­ to lo conseguimos con el CP distintos para la animación,
vimiento. Aislamos el color 128 y el CCF, que pone el primero habrá cinco fases
y lo guardamos en su lugar banderín de acarreo alzado que coincidirán con las de la
correspondiente en la tabla para un número negativo, y cíclica. Pero después, habrá
TABLDI. Ahora, si el movi­ el SBC A,A, que dejará en tres más en las que se dibu­
miento es en línea recta, sal­ A un 0 si el acarreo estaba jarán los tres gráficos del
tamos a RECLIN. Si es en bajo, y un —1 (un 255) si es­ centro en orden inverso:
taba alto. Este incremento, primero el cuarto, luego el
trayectoria prestablecida,
cargamos en HL la direc­ una vez convertido en un tercero, y después el segun­
número de 16 bits, se lo su­ do. En general, si hay N
ción de los datos de la tra­
mamos a la coordenada Y, gráficos distintos, la canti­
yectoria. Leemos el valor
y guardamos la nueva coor- dad de fases por las que pa­
contenido en esa dirección.
deanda. A continuación, saremos será de 2*N-2. Por
Si es 127, la trayectoria ha
hacemos lo propio con la X. eso ADETRA, tras incremen­
finalizado y cargamos en
Ya hemos actualizado las tar el contador de fase, le camente, lo que se hace en
HL la dirección inicial para
volverla a repetir. Tanto si coordenadas. Ahora vamos restamos ese número. Si el ella es averiguar si hay que
hacemos esto como si no, a pasar a calcular qué grá­ resultado es 0, el ciclo ha­ dibujar todo el gráfico, o és­
continuamos por NOFITA. fico hay que dibujar, de los brá terminado y comenza­ te se encuentra parcialmen­
varios que puede tener un remos de nuevo por la fase te en la pantalla, y calcular
Ahora comprobamos si el
valor leído es un 126. En es­ sprite, para lo cual tendre­ 0. Pero antes hemos guar­ todos los datos para que
mos aue tener en cuenta la dado el resultado de la res­ luego DIBUJA se encargue
te caso, los dos siguientes
fase ae animación. Por eso ta. Ahora tenemos que cal­ ya de dibujar los gráficos.
bytes indicarán la nueva di­
cargamos en E el número cular qué es el que hay que Lo primero que hacemos es
rección inicial de los gráficos
correspondientes al sprite, y total de fases de animación dibujar. Si la fase actual es calcular qué tabla de rota­
y en A la fase en la que es­ menor que la cantidad de ciones de las cuatro existen­
los pasamos a su lugar en la
tabla TASPRI, para retroce­ taba la última vez. Ahora gráficos distintos que hay, tes es la que vamos a utili­
der a continuación a RECU- saltamos a ADETRA si la nos encontramos en la par­ zar. En realidad, lo que cal­
anim ación es del tipo te que es igual que en la culamos es el byte alto de su
PE y leer un nuevo dato de
adelante-atrás. Si es cíclica, animación cíclica, por lo dirección de inicio (el bajo
la tabla de datos de la tra­
yectoria. Cuando nos en­ simplemente incrementamos que la fase es igual al núme­ es 0). Tras guardar esto en
contramos con un dato que la fase, y si hemos llegado ro del gráfico. En caso con­ su lugar, comprobamos si la
no es 127 ni 126, llegamos a la última, la ponemos a 0. trario, bastará que calcule­ coordenada X es positiva y
a TRANOR. Este dato será Después saltamos a TRA- mos 2*N-2-fase actual, pe­ menor de 256. En este caso
REN. Nótese que en la ani­ ro eso es lo que habíamos saltamos a XPOSIT. En ca­
el incremento X, y lo pasa­
mos a E, cargando A el si­ mación cíclica, coinciden la calculado antes, salvo que so contrario, si no es mayor
guiente valor que será el in­ fase actual con el gráfico con signo contrario así que de —256, retornamos inme­
que hay que dibujar. Esto en PARETR lo recuperamos diatamente, pues el sprite se
cremento Y, tras actualizar
el contador de trayectoria, quiere decir que si la fase es (había sido guardado en encuentra fuera de la pan­
saltamos a COCORE, don­ 0 habrá que dibujar el pri­ PARETR + 1), lo cambiamos talla. Cuando es negativa
mer gráfico, si es 1, el se­ de signo y continuamos por mayor que —256, compro­
de nos reuniremos con la bi­
furcación hecha en el caso gundo, etc. En ADETRA tra­ TRAREN como en los otros bamos si es mayor o igual
tamos la animación de casos. En TRAREN, carga­ que —6, en cuyo caso, el
de un movimiento en línea
recta. En este casó saltába­ adelante-atrás. En este tipo mos DE con la cantidad de trozo del gráfico que no se
de animación, si por ejem­ memoria que ocupa cada ve en pantalla será menor
mos a RECLIN. Aquí, car­
gamos en E el incremento X plo, tenemos cinco gráficos gráfico, y la multiplicamos de un carácter. Esto quiere
y en A el Y, para entrar en por dos caras para calcular decir que habrá que dibujar
COCORE con los mismo da­ la que ocupa cada gráfico el gráfico entero, pero em­
tos que si hubiéramos veni­ con su mascara. Este es el pezando en la columna so­
do desde el caso de trayec­ valor que le tendremos que brante de la pantalla de
toria prefijada. En COCO- sumar a la dirección del pri­ memoria, para que quede
RE, pasamos el incremento mer gráfico del sprite tantas aquí el trozo que no se ve­
Y a BC. Hay que tener en veces como indique el con­ rá en pantalla. Por eso car­
cuenta que los incrementos tenido de A. Tras hacer es­ gamos en BC ORIGSC—1 y
son números con signo, y al to, guardamos la nueva di­ en HL ORIGAT—1. Es en es­
pasarlos a un registro do­ rección del gráfico en el lu­ tos registros donde vamos a
ble, el registro bajo deberá gar que le corresponde en construir las direcciones des­
ser igual que el byte de in­ ía taola TABLDI. Y esto es tino del gráfico en la panta­
cremento, pero el alto, de­ todo lo que hace MOVERR. lla de trabajo y en los atri­
berá ser 0 para un incre­ Llegamos ahora a CREA­ butos de la misma. Como
mento positivo y 255 para DA, posiblemente, la subru­ hemos dicho que dibujare­
un incremento negativo. Es­ tina más complicada. Bási­ mos el gráfico entero, hace-
mos que el ancho del gráfi­ es porque el sprite está com­ PARTEY. Seguimos ahora de un gráfico que se sale
co en la pantalla sea igual pletamente fuera de la pan­ por XPOSIT. Aquí la coor­ por arriba o por abajo, co­
al ancho del gráfico en sí, y talla, y retornamos ensegui­ denada X estará entre 0 y gemos el número de scans
que el número de bytes de da. Si el resultado excede 255, y pueden ocurrir dos que caben en pantalla, lo
ancho que no entran en la de cero, coincidirá con la casos: que el sprite quede dividimos por 8, y si no re­
pantalla es 0. Tras esto sal­ cantidad de caracteres de totalmente dentro o que se sultado exacto, al cociente
tamos a PARTEY para hacer ancho que del gráfico ca­ salga parte por la derecha. le sumamos 1 y nos olvida­
cálculos similares con la brán en la pantalla, y lo Vamos a comprobarlo. Si la mos del resto, y ese cocien­
coordenada Y. Continua­ guardamos en su lugar en X es 0, consideramos desde te será lo que buscábamos.
mos en NEGARE, a donde TABLDI. Ahora si que hay el principio que el sprite es­ En el caso de un sprite que
llegamos cuando la coorde­ un trozo del gráfico que no tá totalmente dentro de la cabe completamente en la
nada X es mayor que —256 se dibuja por estar fuera de pantalla. En caso contrario, pantalla, se calcula la fila de
pero menor que —6. Como la pantalla. El ancho de es­ calculamos la columna en la pantalla dentro de la que
las dimensiones de los grá­ te trozo será igual a la coor­ baja resolución donde ter­ está el primer sean del grá­
ficos en la magnitud X vie­ denada en baja resolución minaría, el dibujo. Si no lle­ fico, y la fila dentro de la
ne dada en caracteres, va­ del sprite, sólo que cambia ga a 33, el gráfico cabe en­ que esta el último, se restan,
mos a pasar esta coordena­ de signo. Pero para esos tero. En caso contrario, al se le suma 1 y obtenemos el
da X de alta a baja resolu­ bytes que no se van a dibu­ valor obtenido le restamos resultado deseado. Conti­
ción, para lo cual la dividi­ jar sean tomados de la de­ 32 y ya tenemos cuantos nuaremos ahora la explica­
mos por 8, teniendo en recha, como debería ser, y bytes de ancho no tienen ción más detalladamente
cuenta que se trata de un no de la izquierda, este nú­ que ser dibujados. Lo resta­ desde COYPOS. En primer
número negativo, y por lo mero no sólo lo guardare­ mos del ancho del sprite y lugar, guardamos en su lu­
tanto, los bits que entren mos en IX+ 8, sino que se lo obtenemos cuántos han de gar correspondiente en la
sumaremos a la dirección serlo. En RECOIN calcula­ tabla la dirección de la pan­
de comienzo del gráfico. mos la dirección destino en talla de memoria a la que
Por último, cargamos en BC la pantalla de trabajo y sal­ va a ir el gráfico. A conti­
y HL, ORIGSC— 1 y tamos a PARTEY. En INTE- nuación calculamos la direc­
ORIGAT— 1 respectivamen­ GE, lo único que hacemos ción de la máscara a partir
es indicar que el ancho del de la dirección del gráfico y
gráfico que cabe en panta­ de la memoria ocupada por
lla es igual al ancho total de un gráfico. Ahora calcula­
éste y que el ancho de la mos cuántas columnas de
parte que no cabe es 0, y atributos ocupa el gráfico, si
después retrocedemos a RE­ está en el principio de una
COIN para calcular la di­ columna, ocupará tantas
rección de la pantalla de columnas como su ancho en
trabajo. Y llegamos a PAR­ caracteres, pero en caso
TEY. Aquí se hace lo mismo contrario, ocupará una
que acabamos de hacer con más. Ahora recuperamos
la X, así que no la vamos a de la pila a DE y HL (que
comentar tan en detalle, si­ han sido guardados en el
no sólo a ver las diferencias. fragmento de listado que no
Aquí, cuando un sprite no hemos visto con detenimien­
está completamente en la to), y volvemos a guardar
pantalla, no necesitamos HL. Tras meter la dirección
te, para que, como antes, el calcular nada más que de atributos en su sitio y
trozo del primer byte a di­ cuantos scans quedan den­ aumentar en 1 el contenido
bujar que no debe salir en tro, y no cuántos fuera, de la variable NUBLBO pa­
pantalla, quede en la co­ aunque cuando se sale por ra indicar que hay un sprite
lumna extra. Pero si el grá­ arriba, igual que cuando más para dibujar, llegamos
fico empieza justo en la po­ con la X se salía por la iz­ a las líneas que se encargan
sición de un carácter, no ha­ quierda, habrá que modifi­ de guardar en SPARES (re­
brá ningún byte que quede car la dirección de comien­ cuérdese que DE apunta a
a medias entre dos direccio­ zo del gráfico, sumándole el SPARES) cada uno de los
nes, o lo que es lo mismo, el ancho del gráfico tantas ve­ trozos de pantalla donde
por la izquierda deben ser primer byte a dibujar del ces como scans quedan fue­ luego van a ir los sprites.
unos y no ceros. A esta gráfico quedará completa­ ra de la pantalla. Lo único Tampoco necesitan comen­
coordenada en baja resolu­ mente dentro de la panta­ que se hace y que no se ha­ tarios, pues son práctica­
ción, le sumamos el ancho lla, por lo que hacemos que cía con la X es calcular mente idénticas a las que to­
del gráfico. Si el resultado BC y HL incrementen en uno cuántas filas de atributos maban estos trozos de SPA­
es cero o ni siquiera llega, sus valores antes de saltar a ocupa el gráfico. En el caso RES y los copiaban en la
pantalla. Al final, actualiza­ contador para el bucle, que mos desplazar todo el grá­ racteres. En SUMVAL+1,
mos IX para que apunte al se repetirá tantas veces co­ fico antes de dibujarlo). En cargamos 33 menos el nú­
siquiente elemento de la ta­ mo sprites haya que dibu­ P O S N U M +1, almacena­ mero de scans de ancho. Es­
bla. jar, utilizamos A guardado mos un 255 girado (8-N) te es el valor que hay que
Y llegamos a DIBUJA, la en la pila. Veamos todos los veces hacia la izquierda. sumarle a la dirección de
subrutina que, utilizando el datos que cargamos dentro Ahora intercambiamos los pantalla tras haber dibuja­
gráfico y la máscara y todos de este bucle antes de pro­ registros con los alternati­ do un sean para obtener la
los datos de la tabla TABL- ceder a efectuar el dibujo. vos. En HL, cargamos la di­ dirección del siguiente. C se­
Dl, se encarga de efectuar En DE cargamos la direc­ rección del gráfico para lue­ rá el contador de los scans
los dibujos de los sprites en ción de la pantalla de traba­ go pasarla a IY. En HL car­ que debemos dibujar. Por
la pantalla de memoria. El jo. En H, el byte alto de la gamos la dirección de la
mayor problema de com­ tab la de ro tación . En máscara. En POSBYT+1,
prensión que puede presen­ PONUDO + 1, el valor 255 cargamos el ancho en ca­
tar esta subrutina es que girado N veces (siendo N el
maneja demasiados datos y número de pixels que debe­
puede uno perderse. Como
último, en DE cargamos el
número de caracteres de
ancho que no vamos a di­
bujar del sprite. Sobre LOS-
CAN se cerrará el bucle pa­
ra cada sean.
Aquí intercambiamos los
registros. Ahora tenemos
que tener bien claro cuál es
el proceso a seguir para di­
bujar cada sean. Cada byte
del gráfico tendrá que ser
colocado entre dos direccio­
nes de memoria dentro de
la pantalla. Por tanto, en
una dirección de la panta­
lla entrarán fragmentos de
dos bytes del gráfico. Sa­
biendo que la tabla de ro­
taciones nos da por un lado,
la parte del byte del gráfi­
co que va en la dirección de
pantalla actual y por otro
lado la parte irá en la mis­
ma dirección que la prime­
ra parte del siguiente byte
de gráfico, el proceso para
cada byte sería: obtener la
primera parte del byte. Jun­
tarla con la segunda parte
del anterior byte. Almace­
nar el resultado en pantalla.
Obtener la segunda parte
del byte y guardarla para
su uso con el byte siguiente.
En realidad, sería un poco
más complicado, pues hay
que hacer esto para el byte
del gráfico y para el de la
máscara. El paso descrito
como guardar el resultado
en pantalla, será en reali­
dad hacer un AND de lo
contenido en pantalla con el
resultado de la máscara, a
continuación hacer un OR
con el resultado del gráfico
y por último almacenar el
resultado en pantalla. A
partir de ahora, para inten­
tar clarificar un poco las co­
sas, vamos a llamar B1, C1,
etc., a los registros del jue­
go que hemos inicializado
primero, es decir, en el que
DE tiene la dirección de la
pantalla y HL la de la tabla
de rotaciones, y B2, C2,
etc., a los del otro juego, es
decir, en el que HL confine
la dirección de la máscara
Actualidad, pokes, mapas, trucos,
los mejores juegos y programas para
SPECTRU M , AM STRAD, COM M ODORE y M SX

Todo el universo
del Software
mes a mes

v e n t a

ya esta
K ¡o s e ° '
| A 'c R ° ¡p íd e la
y DE el número de bytes que parte del byte anterior y en imaginario byte de másca­ cemos el AND con la pan­
no hay que dibujar. Para B la de éste para usarlo la ra (colocada a n te rio r­ talla y el OR con el gráfico
guardar la segunda parte próxima vez. mente en PO N U D O +1) y lo metemos en pantalla.
del byte del gráfico, utiliza­ Ahora decrementamos H con la segunda del byte que Ahora le sumamos a la di­
remos B1 para el gráfico y y juntamos la segunda par­ ha quedado sin dibujar. Ha­ rección de pantalla el valor
C1 para la máscara. Pero te del byte anterior, que es­ necesario para calcular la
en el caso del primer byte tá en A con la primera de dirección del siguiente sean
de un sean, estos registros éste. Lo guardamos tempo­ (dicho valor se encontraba
no podrán contener la se­ ralmente en L y obtenemos en SUMVAL+ 1).
gunda parte del byte ante­ la máscara, hacemos el Por último, sólo nos que­
rior, porque éste no exis­ AND con la pantalla, el OR da volver al juego 2 y cerrar
te. Por esto, lo que hacemos con el gráfico y lo guarda­ el bucle de los scans. Aho­
es invertarnos un byte an­ mos en la pantalla. Ahora ra nos queda dibujar los
terior, que para que no volvemos al juego 2 para atributos. Para ello, carga­
afecte al dibujo debe ser 0 cerrar el bucle de cada byte mos en HL la dirección des­
para el gráfico y 255 (una de un sean. Súmanos DÉ a tino de los atributos en la
vez girado y tomada su se­ HL e IY para saltarnos la pantalla de memoria, en
gunda parte) para la más­ parte del gráfico que no ha ATDIRG+1 el número de
cara. de ser dibujada y de nuevo columnas que hay que relle­
Estos son los valores que al juego 1. Ahora tenemos nar , en SUMATT + 1, 33-el
debemos cargar en B1 y C1 que dibujar la segunda par­ número anterior (ya debe­
antes de entrar en el bucle te del último byte del sean ríais saber para qué lo va­
para todos los bytes de un que no ha sido dibujada mos a utilizar), en E el byte
sean, y lo hacemos en POS- dentro del bucle. Al igual de atributos, en D una más­
NUM (recuérdese que pre­ que como ocurría con el pri­ cara para las partes del atri­
viamente habíamos carga­ mer sean, con este último buto de la pantalla que no
do en POSNUM+1 la se­ debemos inventarnos un deben cambiar (el papel y
gunda parte del resultado byte siguiente, del que el el flash), y en A el número
de rotar 255). Ahora volve­ gráfico sea 0 y la máscara de filas a rellenar. En
mos al juego de registros 2, 255. En PONUDO ¡unta­ ATLAFX se cierra el bucle
e inicializamos B2 que va a mos la primera parte del para cada fila, y en ATBL-
ser el contador del bucle pa­ Dl el de cada byte de la fi­
ra los bytes de un sean (el la. Dentro de éste, tomamos
número de sean lo había­ el byte de atributos de la
mos puesto en POSBYT +1). pantalla, nos quedamos con
Sobre LOBYTS se cerrará el el PAPEL y el FLASH me­
bucle. Aquí, guardamos en diante un AND D, lo junta­
A' el byte del gráfico y en A mos con INK y BRIGHT y lo
el de máscara. Volvemos al guardamos en la pantalla.
juego 1. Cargamos en A la Por lo demás, es práctica­
primera parte del byte de mente idéntico este proceso
máscara y la juntamos con al de volcar los atributos de
la segunda del byte an­ pantalla a SPARES o de
terior que estaba en C, SPARES a pantalla, que ya
y después cargamos en ha sido visto. Tras dibujar
C la segunda parte del los atributos, recuperamos
byte actual. Ahora pa­ A, que nos decía cuántos
samos a A el byte del gráficos había que dibujar,
gráfico y después a L y actualizamos IX para que
para calcular la direc­ apunte al siguiente elemen­
ción correspondiente to.
en la tabla de rota­ Con esto hemos termina­
ción. Como he­ do todo lo relacionado con
mos incremen­ el programa principal. Lo
tado H, HL es­ único que quedan son las
tará apuntando tres subrutinas anexas, IN I­
a la segunda CIO, DESACT y COMCHO,
parte del byte, y que son tan sencillas y poco
no a la primera. interesantes y que no mere­
Cargamos en cen una explicación a fon­
A la segunda do.
LISTADO EN SAM BLADO R C
11 0 4 778 1NSAB0 LD A .l
28 O - 781 LD (NUBLBO),A
31 788 LD DE, SPARES
SPRITES POR 888 LD IX.TABLDI
SI 818 LD IY.TASPR1
<18 INTERRUPCIONES 828 LD A.ÍNIKSPR)
78 838 LD B,A
88 POR PABLO AR12A. 848 AND A
88 858 JR Z,NOSPRI
188 868 IttttlN PUSH BC
118 ORO 62184 878 PUSH DE
128 881 CALL NOVERR
138 888 POP DE
148 ENTINT DI 888 CALL CREADA
158 PUSH AP 818 LD BC, 17
168 PUSH BC 828 ADD IY.BC
178 PUSH DE 838 POP BC
188 PUSH HL 848 DJNZ IffIAIN
188 PUSH IX 858 CALL DIBUJA
288 EXX 868 NOSPRI POP IY
218 EX AF.AF' 878 PUSH IY
221 PUSH AF 881 RST 56
238 PUSH BC 888 SALINT POP IY
248 PUSH DE lili POP HL
258 PUSH HL 1818 POP DE
248 PUSH IY 1128 POP BC
278 LD A,(ESTADO) 1838 POP AF
288 AND A 1848 EX AF,AF'
288 JP N2.N0V0LC 1858 EXX
318 CALL VUELCA 1868 POP IX
311 LD A, 1 1878 POP HL
328 LD (ESTADO),A 1888 POP DE
338 JP SALINT 1888 POP BC
341 1188 POP AF
358 NOVOLO LD HL,SPARES 1118 El
368 XOR A 1128 RETI
378 LD (ESTADO),A 1138 1
381 LD A,(NUBLBO) 1148 i
388 LD IXJABLDl 1158 VUELCA LD HL.0R1GSC
SUGERENCIAS Y demos pokear en las direc­
488 INBOTO DEC A 1168 LO DE,16384
ciones 62387 y 62388 la di­
ADVERTENCIAS 418 JR 2 ,1NSA80 1178 LD C,8
rección de la pantalla del 421 EX AF,AF' 1188 EXX
ordenador dónde quere­ 438 LD E, ( IX+8) 1188 LD HL.0R1GAT
Tal y como está, la zona
mos que empiece, y en 441 LD D ,(lX 4 l) 1288 LD DE,22528
de pantalla sobre la que se
62396 y 62397 la dirección 458 LD A ,(1X414) 1218 LD BC,25*256
dibujan los sprites es toda la
de atributos. 468 LD (B0RP01+1),A 1221 LVOLCA EXX
parte superior de ésta, las
478 LD (BORPOD4l),A 1238 LD 8,8
22 líneas, pero no hay ra­ Es necesario advertir que 481 NEG 1248 LOPPNU LDI
zón para que la zona usa­ si usamos demasiados spri­ 488 ADD A ,33 1258 LD1
da tenga la altura que que­ tes o demasiado grandes, se 518 LD (AUIPOI41),A 1261 LDI
ramos. Por .ejemplo, pode­ puede producir el bloqueo 518 LD (AÜHPOO*1 ),A 1278 LDI
mos reservar los dos tercios del ordenador. La única so­ 528 LD A ,(1X46) 1288 LDI
superiores para la pantalla lución a esto, como ya he­ 538 LD B,8 1288 LDI
de juego y utilizar el tercio mos dicho, es cambiar en el 541 B0RP01 LD C ,l 1388 LDI
inferior para marcadores y listado Ensamblador la ubi­ 558 LD1R 1316 LDI
otras cosas. Cuanto más pe­ cación de la zona SPARES. 568 AUiPOI LD 0,8 1328 LDI
queña sea la zona destina­ 571 EX DE.HL 1338 LDI
Por último advertirles a 581 ADD HL.BC
da a sprites, mayor será la 1348 LDI
los usuarios del Spectrum 588 EX DE.HL 1358
velocidad a la que vayan LDI
128 o + 2 que el programa 611 DEC A 1368 LDI
nuestros programas. Los
ajustes que deberemos ha­ funcionará perfectamente 618 JP NZ.BORPOI 1378 LDI
cer son los siguientes: Si en modo 48 K, pero en 128 628 LD A ,(1X413) 1388 LDI
queremos que la zona en la sólo funcionará si no inten­ 638 LD E ,(1X4)1) 1388 LDI
tamos interrumpir el pro­ 648 LD 0,(1X412) 1488 LDI
que aparezcan los sprites
grama con las interrupcio­ 658 BORPOD LD 0,8 1418 LDI
tenga un alto de N filas, 661 LD1R
nes activadas, pues en este 1428 L01
tendremos que hacer POKE 678 AUMPOD LD C,8 1438 LDI
momento se bloqueará el
62400,X, donde X es igual 681 EX DE.HL 1448 LDI
a N +1 si N está entre 1 y ordenador.
688 ADD HL.BC 1456 LDI
8, a N + 2 si N está entre 9 Esperamos que este pro­ 788 EX DE.HL 1468 LDI
y 16, y a N + 3 si N es ma­ grama os sea de utilidad y 718 DEC A 1478 LDI
yor de 16. Si no queremos consigáis con él hacer pro­ 721 JP NZ,BORPOD 1488 LDI
que esta zona empiece jus­ gramas de calidad comer­ 738 LD C,15 1488 LDI
to arriba de la pantalla po­ cial. 741 ADD IX,BC 1588 LDI
758 EX AF,AF' 1511 LDI
768 JP INBOTO 1528 LDI
DE M A N E J O DE PANTALLAS
1538 LD1 2298 LD A,(HL) 3858 ; 3818 SUB C 4578 SRL C
1541 LDI 2388 LD (1Y+8),A 3848 CREADA LD A ,<IY+4) 3828 LD 8, A 4588 SRL c
1558 LD1 2318 INC HL 3878 LD C,A 3838 JP PARTEY 4598 LD A,(IY+4)
1548 LO A,E 2328 LD A,<HL) 3888 AND 4 3848 INTEGE LD A,(1Y«2) 4488 ADD A,(IY<3)
1578 SUB 32 2338 LD < m n ,A 3898 ADD A, 248 3858 LD (IX+7),A 4418 ADD A ,7
1588 LD E,A 2348 INC HL 3188 LD <1X*9),A 3848 XOR A 4428 SRL A
1598 JR C.NOINCD 2358 JP RECUPE 3111 LD A ,( W 5 ) 3878 LD (1X+8),A 4438 SRL A
1488 INC D 2348 TRANOR LD E,A 3128 AND A 3888 JP RECOIN 4448 SRL A
1418 N01NCD INC HL 2378 INC HL 3138 JR Z,XPOSIT 3898 PARTEY LD A ,(IY *7 ) 4458 SUB C
1428 DJNZ LOPPNU 2388 LD A,(HL) 3148 INC A 3988 ANO A 4448 LD (IX+13),A
1438 LD A.E 2398 INC HL 3158 RET NZ 3918 JR Z.YP0S1T 4478 EX AF.AF'
1448 ADD A ,32 2488 LD <IY+13),L 3148 LD A,C 3928 INC A 4488 LD C.A
1451 LD E|A 2418 LD <IY+14) ,H 3178 ADD A ,4 3938 RET NZ 4498 JP COYPOS
1448 JR C.SITERC 2428 JP COCORE 3188 JR NC,NEGARE 3948 LD A,(1Y«4) 4788 M0SCA8 LD A ,192
1478 LD A, D 2438 RECLIN LD A ,0 Y 0 8 )
3198 LD HL.ORIGAT-l 3958 ADD A ,(m 3 > 4718 SUB (1Y<4)
1488 SUB 8 2448 LD E,A 3288 LD BC.ORIGSC-l 3948 RET NC 4728 LD (IX i4 ),A
1498 LD D.A 2458 LD A .O Y O l)3218 LD A,(IY+2) 3978 RET 2 4738 ADD A ,7
1788 S1TERC EXX 2448 COCORE LD C,A 3228 LD (IX<7),A 3988 LD (IX+4),A 4748 SRL A
1718 LDI 2478 CP 128 3238 XOR A 3998 NEG 4758 SRL A
1728 LDI 2488 CCF 3248 LD (IX *8),A 4888 ADO A.OY43) 4748 SRL A
1738 LDI 2498 SBC A,A PARTEY 4818 PUSH HL 4778 LD (1X413) ,A
3258 JP
1748 LDI 2588 LD B,A 3248 NEGARE SCF 4828 PUSH DE 4788 COYPOS LD ( IX*8),C
1758 LDI 2518 LD L,(IY 44) 3278 RRA 4838 LD L ,(IX *2 ) 4798 LD (1X41),B
1748 LDI 2528 LD H,(IY47) 3288 SRA A 4848 LD H,(1X«3) 4888 LD L.UX42)
1778 LDI 2538 ADD HL.BC 3298 SRA A 4858 LD D, 8 4818 LD H,(IX*3)
1788 LDI 2548 LD (IY 44),L 3388 LO B.A 4848 LD E,(1Y*2) 4828 LD E.UY4I5)
1798 LDI 2558 LD <1Y47),H 3318 ADD A, <IY+2) 4878 NESUDI ADD HL.DE 4838 LD D .0 Y 0 4 )
1888 LDI 2548 LD A.E 3328 RET NC 4888 DEC A 4848 ADD HL.DE
1818 LDI 2578 LD C.A 3338 RET 2 4898 JP NZ,NESUDI 4858 LD (1X*4),L
1828 LDI 2588 CP 128 3348 LD <IX+7),A 4188 LD (1X42),L 4848 LD (1X45),H
1838 LDI 2598 CCF 3358 LD A ,8 4118 LD (1X43),H 4878 LD 0,0X47)
1848 LDI 2488 S8C A, A 3348 NE6 4128 LD A ,(1X44) 4888 LD A ,0X49)
1858 LDI 2418 LD 8, A 3378 LD ( 1X+8),A 4138 ADD A ,7 4898 AND i
1848 LDI 2428 LD L,(IY 44) 3388 ADD A ,(IX *2 ) 4148 SRL A 4988 JR Z, SANUBY
1878 LDI 2438 LD H,(IY45) 3398 LD <1X+2),A . 4158 SRL A 4918 INC D
1888 LDI 2448 AOD HL.BC 3488 LD A ,8 4148 SRL A 4928 SANUBY LD (1X+14),D
1898 LDI 2458 LD <IY44),L 3418 ADC A, <IX+3) 4178 LD (1X413),A 4938 POP DE
1988 LDI 2448 LD (IY45),H 3428 LD (IX *3) ,A 4188 JP COYPOS 4948 POP HL
1918 LDI 2478 LD A,(1Y412) 3438 LD A, C 4198 YP0S1T LD A ,( IY+4) 4958 PUSH HL
1928 LDI 2488 LD E,(IY48) 3448 LD HL jORIGAT-l 4288 CP 192 4948 LD 0 X 0 1 ) ,L
1938 LDI 2498 BIT 3,0 3458 LD BC.ORIGSC-l 4218 RET NC 4978 LD 0 X 0 2 ) ,H
1948 LDI 2788 JP NZ .ADETRA 3448 AND 4 4228 SRL A 4988 LD H.B
1958 LDI 2718 INC A 3478 JR NZ,PARTEY 4238 SRL A 4998 LD L.C
1948 LDI 2728 CP E 3488 INC HL 4248 SRL A 5888 LD A ,(1X04)
1978 LDI 2738 JR NZ.N0F1CI 3498 INC BC 4258 PUSH BC 5818 LD <PUBYSA41 ),A
1988 LDI 2748 XOR A 3588 JP PARTEY 4248 LD BC, 33 5828 LD (PUATSAO) ,A
1998 LDI 2758 NOFICI LD (IY«12),A 3518 XPOSIT LD A,C 4278 INC A 5838 NEG
2888 LDI 2748 JP TRAREN 3528 SUB 1 4288 CALATT DEC A 5848 ADD A ,33
2818 LDI 2778 ADETRA INC A 3538 JR C.INTEGE 4298 JR Z.ATCOMP 5858 LD (PUSUSAO),A
2828 LDI 2788 LD D,A 3548 SRL A 4388 ADD HL.BC 5848 LD (ATSUSAO).A
2838 INC HL 2798 sue E 3558 SRL A 4318 JP CALATT 5878 LD A.(NUBLBO)
2848 DEC B 2888 SUB E 3548 SRL A 4328 ATCOMP POP BC 5888 INC A
2858 JP N2,LVOLCA 2818 ADD A ,2 3578 ADD A ,(IY *2 ) 4338 PUSH HL 5898 LD (NUBLBO),A
2848 RET 2828 LD (PARETR+l) ,A 3588 CP 33 4348 PUSH DE 5188 LD A, 0X44)
2878 1 2838 JR Z.FIANC1 3598 JR C.INTEGE 4358 LD H.B 5118 LD 8,8
2888 1 2848 LD A,D 3488 SUB 32 4348 LO L.C 5128 PU8YSA LO C .l
2898 HOVERR LD A,(1Y*5) 2858 FIANC1 LD <IY+12),A 3418 LD ( IX+8),A 4378 LD DE, 33 5138 LDIR
2188 CP 127 2848 CP E 3428 NEO 4388 LD A,(IY44) 5148 PUSUSA LD C,8
2118 RET 2 2878 JR C,TRAREN 3438 ADD A ,<IY+2) 4398 AND A 5158 ADD HL.BC
2128 LD A, <IY+9) 2888 FARETR LD A ,8 3448 LD (1X<7 ),A 4488 JR Z.PRIFIL 5148 DEC A
2138 LD D.A 2898 NEO 3458 RECOIN LD A,C 4418 CALF1L ADD HL.DE 5178 JR NZ.PUBYSA
2148 AND 71 2988 TRAREN LD E,<IY415) 3448 SRL A 4428 DEC A 5188 POP HL
2158 LD (1X418),A 2918 LD D .0 Y 0 4 ) 3478 SRL A 4438 JP NZ.CALFIL 5198 LD A ,(1X 03)
2148 BIT 4,D 2928 SLA E 3488 SRL A 4448 LD B,H 5288 PUATSA LD C,8
2178 JR 2, RECLIN 2938 RL D 3498 LD C,A 4458 LD C,L 5218 LDIR
2188 LD L .0 Y 0 3 ) 2948 LD L.UY48) 3788 LD HL.ORIGAT 4448 PRIF1L LD A,(1Y44) 5228 ATSUSA LD C, 8
2198 LD H .0 Y 0 4 ) 2958 LD H,( IY*1> 3718 ADD A,L 4478 ADD A.OY43) 5238 ADD HL.BC
2288 RECUPE LD A, (HL) 2948 AND A 3728 LO L,A 4488 JR C.MOSCAB 5248 DEC A
2218 CP 127 2978 JR Z.PRIFAS 3738 ADC A,H 4498 CP 193 5251 JP NZ, PUATSA
2228 JR N2,NOFITA 2988 LD 8, A 3748 SUB L 4588 JR NC.M0SCA8 5248 LD C,15
2238 LD L , <IY+18) 2998 HULTIP ADD HL,DE 3758 LD H.A 4518 LD A,(IY43) 5278 ADD IX,BC
2248 LD H ,(IY 4 ll) 3888 DJNZ NULTIP 3748 LD A, C 4528 LD (1X44),A 5288 RET
2258 LD A, ( HL > 3818 PR1FAS LD <IX42),L 3778 LD BC.ORIGSC 4538 LD A,C 5298 ;
2248 NOFITA CP 124 3828 LD (1X43),H 3788 ADD A,C 4548 EX AF,AF' 5388 ;
2278 JR N2 .TRANOR 3838 RET 3798 LD C.A 4551 LD C,(IY44) 5318 DIBUJA LD IX.TABLDI
2288 INC HL 3848 ; 3888 ADC A,B 4548 SRL C 5321 LD A,(NUBLBO)
5338 D1BLUP DEC A 6050 SUS L 7018 POP HL 7498 LD A, 1
6538 RET
5348 RET Z 6860 LD H,A 7820 INC H 7508 LD (NUBLBO),A
6548 COORDS CALL DITABS 7510 XOR A
5358 PUSH AF 6878 EX D£,HL 7830 LD A,H
6558 CALPOI JP 8 7528 (NIMSPR) ,A
5368 LO E,<IX*8) 6080 EXX 7840 AND 7 LD
6568 COORDX LD L,(IY «4) 7538 LD (ESTADO),A
5378 LD D,<IX+1) 6090 DEC C 7858 JR NZ.INIPR7
6578 U> H,(1Y*5)
5388 LD H,(1X«9> 6100 JP NZ.LOSCAN 7860 LD A,L 7548 El
6588 RET
5378 LD L ,255 6118 LD L , <IX+11> 7078 ADD A ,32 7558 RET
6598 COORDY LD L,<IY+6)
5488 LD A,<HL> 6128 LD H,(IX+12) 7888 LD L,A 7561 ;
6608 LD H,(1Y*7) 7570 ¡
5418 LD <PONUOO-* 1) ,A 6138 LD A,(IX *14) 6618 RET 7098 JR C.1NIPRT
5428 INC H 6148 LD (ATDIRG+l) ,A 7188 LD A,H 7588 DESACT LD A, 63
6628 D1TABS LD IY.TASPRI
5438 LD A, (HL) 6158 NEG 7118 SU8 8 7590 1N 1
6630 AND A
5448 DEC H 6168 ADD A ,33 7128 LD H,A 7686 LD I,A
6640 RET 2
5458 LD ( POSNUM*1 ),A 6178 LD (S U V m *l),A 7130 1N1PRT EX AF.AF' 7616 RET
6658 PUSH DE
5468 EXX 6188 LD E, <1X+18) 7148 DEC A 7628 ;
6668 LD DE,17
5478 LD L,(1X*2> 6190 LD D.184 7158 JR NZ, INI LAP 7638 ;
6678 SIMDIS ADD IY,DE
5488 LD H,(IX*3) 6200 LD A, <IX+13) 7160 LD HL, 22528 7648 CONCHO LD BC,(SPRICH)
6680 DEC A
5498 PUSH HL 6218 ATLAFX EX AF.AF' 6690 JR NZ,SIMDIS 7178 LD DE, ORIGAT 7650 INC C
5588 POP IY 6228 ATD1RG LD 8,8 6780 POP DE 7188 LD A ,24 7666 JR Z.BCONTO
5518 LD L,(1X*4) 6238 ATBLD1 LD A,(HL) RET 7198 INATIA LD 8C,32 7676 DEC C
6710
5528 LD H,<IX+5) 6248 AND D 7280 LD1R 7686 CALL CHOSUB
6728 ;
5538 LD A,(1X*7) 6258 OR E 7210 INC DE 7690 LD 8C,6
6738 ;
5548 LD (POSBYTM) ,A 6260 LD (HL),A 7220 DEC A 7788 RET NC
6740 NUMSPR EOU 23681
5558 NEG 6278 INC HL 7230 JR NZ.INATLA 7710 INC BC
6758 TABLDI EQU 53289
5568 ADD A ,33 6280 DJNZ ATBLD1 7240 IN 2 7720 RET
6760 TASPR1 EQU 53880
5578 LD (SUMALMI.A 6298 SIMATT LD C.0 7258 LD C,4 7738 ¡
6778 0RI6SC EQU 54568
5588 LD C.ÍIX+6) 6380 ADD HL.BC 7260 LD H, 248 7740 8COÍTO LD IX,SPRICH
6788 0R1GAT EQU 60984
5598 LD E,(IX*8> 6318 EX AF.AF' 7270 LCRTCR LD A ,9 7750 LD A, (NIMSPR)
6790 SPARES EQU 53544
5688 LD 0,0 6328 DEC A 6800 SPRICH EQU 23728 7288 SUB C 7768 BUCHAL INC (IX*8)
5618 LOSCAN EXX 6338 JP NZ.ATLAFX 6810 ; 7290 SU8 C 7778 EX AF.AF'
5628 POSNUN LD BC,0 6340 POP AF 6820 ; 7300 LD L,8 7780 LD 8C,(SPRICH)
5638 EXX 6358 LD C, 15 6830 ORG 61953 7310 ROTACU LD 8,L 7798 LD A ,8
5648 POSBYT LO 8,8 6368 ADD IX , BC 6848 INICIO DI 7328 LD E,8 7886 CP C
5658 L08YTS LO A ,(IY *0 ) 6370 JP D1BLUP 6858 LD A, 241 7338 LD D,A 7816 JR Z,SASPRI
5668 INC IY 6388 ; 6860 LD I.A 7348 VERROT DEC D 7828 CALL CHOSUB
5678 EX AF.AF' 6398 ; 6878 LD B,0 7358 JR Z.UEREXI 7836 LD BC, 1
5688 LD A,(HL) 6408 ESTADO DEFB 0 7368 SRL B 7848 o rr C
6888 LD HL,61696
5698 INC HL 6418 NU8L80 DEFB 1 6898 INTCRE LD (H L),242 7378 RR E 7858 SASPRI EX AF.AF'
5788 EXX 6420 ; 6900 INC HL 7380 JR VERROT 7868 DEC A
5718 LD L,A 6438 ; 6918 DJNZ INTCRE 7398 VEREX1 LD (HL),B 7870 JR NZ,BUCHAL
5728 LD A,(HL) 6448 D1HEXS LD E,<IY+2) 6920 LD (H L),242 7480 INC H 7880 DEC BC
5738 OR C 6458 SLA E 6930 LD DE.0R1GSC 7418 LD (HL),E 7898 RET
5748 INC H 6468 SLA E 6940 LD HL,16384 7420 DEC H 7908 ;
5758 LD C, (HL) 6478 SLA E 6950 LD A ,192 7430 DEC L 7910 CHOSUB LD HL,COORDX
5768 EX AF,AF' 6480 JP CONTIN 6960 1NILAP EX AF.AF' 7440 JR NZ,ROTACU 7920 LD (CALP01+1),HL
5778 LD L,A 6490 D1NEYS LD E,<1Y*3) 6978 PUSH1 HL 7458 INC H LD KL.DIHEXS
7938
5788 LD A, 8 6588 C0NT1N LD D.8 6988 LD 8C.32 7468 INC H 7948 LD (ANCALT*1),HL
5798 LD B,(HL) 6518 AND A 6998 LD1R 7478 DEC C CALL CHOREA
7950
5888 DEC H
7968 RET NC
5818 OR (HL)
7978 LD HL,COORDY
5828 LD L,A
7980 LD (CALPOI+1),HL
5838 EX AF.AF'
7990 LD HL.DINEYS
5848 EX DE.HL
8660 LD (ANCALT*1),HL
5858 AND (HL)
8010 CHOREA LD A,8
5868 OR E
8820 CALL COORDS
5878 LD (HL),A
8030 EX DE.HL
5888 INC HL
8646 LD A,C
5898 EX DE.HL
8856 CALL COORDS
5988 EXX
5918 DJNZ LOBYTS 8668 AND A
5928 ADD HL.DE 8878 SBC HL.DE
5938 ADD 1Y.DE 8888 LD A,B
EXX 8898 JR NC.BIENCO
5948
5950 LD A, C 8186 LO A,H
5968 PONUDO OR 0 8116 CPL
5978 EX DE.HL 8126 LD H,A
5980 AND (HL) 8138 LD A,L
5998 OR B 8146 CPL
6888 LD (HL),A 8158 LD L,A
6818 SIMAL LD A, 0 8168 INC HL
6828 ADD A,L 8178 LD A,C
6838 LD L(A 8188 BIWCO CALL DITABS
6848 AOC A,H 8198 ANCALT JP 8
6 GRANDES EXITOS EN UNO
MAS UN JUEGO GRffnS(DUET) P ta s-
^RSTÓ N c a ss e ^

'fK ¡ w gw ¿" b'0R


SCOOBV

an h b »ad

PLUSBO NUSG AM E
DUET. PREVIOUSLY
UNRELEASED,
SIMULTANEOUS
TWO-PLAYER ACTION

duet
D a vid LÓPEZ GUAITA

Con esta rutina no


sólo podrás definir
las teclas y mover un
sprite principal por la
pantalla, sino ction es una ru-
FUNCIONAMIENTO dirección 63450; en las lí­
trasladar gráficos v. tina form a da neas 70-80 el ordenador
M ■ por tres partes Para describir el funciona­ abre el canal dos de la pan­
secundarios al diferenciadas: miento, vamos a hacerlo di­ talla, llamando a una rutina
mismo tiempo, borrar BM M una rutina de vidiendo el programa en sus de la ROM. Después, se
definición de teclas o elec­ tres partes: carga en DE la dirección de
zonas de la ción de ¡oystick, un progra­ Definición de teclas. un texto a imprimir, en BC la
pantalla e incluso ma que se encarga de che­ Con esta rutina comienza duración del texto y se llama
colorear zonas de quear el teclado, actualizar el programa. A grandes a la subrutina de la ROM
la posición de un objeto en rasgos, el programa pre­ PR-STRING, que se encarga
atributos. pantalla y escribir los nue­ gunta en principio si se quie­ de imprimir todo el texto.
vos datos en un buffer y la re usar con ¡oystick Kemp- Así, con el primer menú
rutina por interrupciones ston o redefinir las teclas. Si ya en pantalla, el ordena­
ue imprime en pantalla to- se redefinen las teclas, el or­ dor leerá la primera semifi-
3 os los gráficos que haya en denador chequeará una a la del teclado para ver si se
el buffer, vaciándolo. una todas las semifilas del ha pulsado alguna tecla.
Con esta rutina sacarás el teclado. Si hay alguna tecla Como probablemente ya
máximo rendimiento si la pulsada, el ordenador al­ sabrás, el teclado se divide
usas desde Código Máqui­ macenará sus datos en la en ocho semifilas (fig .l).
na con esta rutina. memoria, y pasará a la si­ Para leer una semifila hay
guiente dirección para defi­ que describir en el acumu­
nir otra tecla, hasta acabar. lador el dato de esa semifi­
El inicio la, (los números
El registro L con­
tiene el número de
la tecla que esta­
mos redefinien­
do. Desde la
línea 410 has­
ta la 690 se po­
nen los atributos de
una determinada opción
de la pantalla en FLASH 1,
y los de la opción anterior
en FLASH 0. Esto lo hace en
función del registro L, que
tiene el número de opción
la rutina DEFIN. Lo que se está preguntando.
para después hacer un primero que se hace es A partir de la línea 700
IN A,(FE). Con esto carga­ imprimir otro texto, (líneas empieza la rutina de defini­
remos en la mitad superior 250-270). Se coloca en la ción propiamente dicha. Se
del registro de direcciones el dirección de salto de la ru­ carga en A el v a lo r
valor del registro A, y en la tina número 2 el valor de te­ 01111111b. Esto se hace
mitad inferior el valor FEh. clado, por si hubiera sido por la siguiente razón; si ob­
Al ejecutarlo, se nos devuel­ cambiado por error, y se servas el valor que hay que
ve en el registro A un valor carga en HL el valor de una darle al registro A, a prime­
con las teclas pulsadas en la distintas partes del progra­ ra vista no parece haber
dirección de tabla. Entre la
semifila. ma. ninguna relación entre ellos.
línea 330 y 380 se borran
Si no hay ninguna tecla Si se ha pulsado la tecla 1 Pero el poner esos valores
los ocho bytes de la tabla.
pulsada, el v a lo r es para jugar con el ¡oystick en binario, observa el resul­
En esta tabla ¡remos escri­
XXXI1111. Si hubiera algu­ Kempston, el ordenador irá tado:
biendo los datos de cada te­
na tecla pulsada, el valor de a KEMPS, en el cual simple­ 7Fh = 01111111b
cla seleccionada: byte de
uno de los cinco primeros mente cambiará una direc­ BFh = 10111111b
mayor peso del bus de di­
bits se pondría a 0. De esta ción de salto de la rutina de DFh= 11011111b
recciones y valor de la semi­
forma, el primer bit se pon­ control del sprite para que EFh = 11101111b
en vez de chequear el tecla­ fila si le tecla está pulsada.
dría a cero si pulsáramos la Después de limpiar la tabla F7h= 11110111b
tecla de la semifila más ale­ do teclee el joystick, y des­ FBh = 11111011b
se salta a ESPERA, rutina
jada del centro del teclado, pués volverá al Basic. Si se FDh = 11111101b
entre las líneas 1370 y 1420
el segundo bit si pulsáramos pulsa la tecla 2 FEh = 11111110b
que se encarga de detener
la siguiente tecla, etc. se procede a Como pueden observar,
la ejecución hasta que no
En la rutina, el ordenador observar todo para chequear el teclado se
haya ninguna tecla pulsada.
chequea la semifila 1-5, y si el teclado con puede cargar en A el valor
hay una tecla pulsada, (1 ó de la semifila, y haciendo
2), sus bits se pondrán a 0, ocho rotaciones podemos
y el ordenador saltará a las leer todas las semifilas del
teclado.
Esto es precisamente lo
que ocurre entre las líneas
700 y 790. El programa va
rotando A, y comparando
los valores de la semifila se­
leccionada con 00011111b;
si alguna tecla está pulsada,
se salta a INTEC.
En INTEC cargamos en E
el valor de la semifila que
tiene alguna tecla pulsada,
y entre las líneas siguientes
cargamos en D el valor que
se ha devuelto en el registro
A con las teclas pulsadas.
Desde la línea 870 hasta VALORES
la 970, se observa si en la
semifila hay dos teclas pul­
4 DE LAS DIRECCIONE
DEL M OVIM IENTO
sadas al mismo tiempo, y si Fig. 2
es así, se vuelve hacia el ini­
cio de la redefinición.
En ONMASC se compa­ JOYST, según lo hayamos pantalla del gráfico princi­
ran todos los datos de teclas ACTUALIZACIÓN DE
definido antes. pal. En 65501 guardamos
ya seleccionadas con los da­ POSICIÓN DESPUÉS DE A continuación voy a ex­ ía posición en el eje X en al­
tos de la actual, y si se han CHEQUEAR EL TECLADO plicar los datos y las varia­ ta resolución y en 65502 el
seleccionado dos teclas bles que usa la rutina, los valor del eje Y también en
iguales de nuevo se vuelve Empieza con ZCONTR, cuales empiezan en la direc­ alta resolución. Al contrario
al incio de la rutina de defi­ donde verás dos «DEFB». ción 65500: de lo que sucede en Basic
nición, en CHECK. Si se han Con ellos se hace en reali­ 65500: Variable de un con PLOT, las coordenadas
comprobado todas las ante­ dad un salto a la dirección byte SWITCH. Se usa para en la rutina tienen su origen
riores teclas y ninguna es que en principio es KEYBO. seleccionar entre dos posi­ en el extremo superior iz­
igual a la anterior se salta a Esta dirección de salto es bles formas de impresión quierdo, con lo cual la va­
TODOS. Allí se calcula la di­ precisamente la que cam­ del gráfico principal, una riable Y es distinta.
rección en la tabla donde biábamos al seleccionar la lenta y otra rápida. Las ven­ 65503 NUEPOS: Varia­
pondremos los datos de la opción de ¡oystick Kemp- tajas y desventajas de las ble de dos bytes que alma­
tecla que ha sido pulsada. ston. Al hacer esto, la ruti- rutinas las explicaré más cena la nueva posición del
Al hacer esto, se llama a \ na saltará a KEYBO o a tarde. sprite. Es igual que ANPOS,
SONY, subrutina que pro­ 65501 ANPOS: Variable sólo que NUEPOS almace­
duce un ruido. Observa en de dos bytes que almacena na los datos de la nueva po­
la rutina SONY (líneas la anterior posición en la sición.
1430-1520) como para 65505 ATR: Variable de
preservar el color del borde un byte. Si tiene un valor
lo tomamos de la variable distinto de 0, el programa
BORDCR (23624), antes de
hacer el sonido.
Una vez hecho todo esto,
volvemos a la rutina princi­
pal. Cargamos de nuevo L
con el valor de la opción
que estamos preguntando,
y si esta es ya 4, es decir, se
han seleccionado ya las
cuatro teclas, volvemos al
Basic.
Si aún no son cuatro las
teclas seleccionadas, volve­
mos a PREG hasta acabar.
contiene las direcciones de
inicio de los gráficos del per­
sonaje principal según cual
SEMI FILAS DEL TECLADO sea su dirección. Es decir,
que para cada dirección el
ordenador buscará en esta

1#F7 5 6#EF 0 tabla para encontrar el in­


do del gráfico que corres­
ponde a esa dirección del
objeto. Como esto parece
algo lioso, vamos a poner
Q#FB T Y#DF P un ejemplo. Observa la fi­
gura 2.
En la figura están repre­
sentadas las sumas que se

A#FD G H#BF ENT obtienen para cada movi­


miento del personaje del
contenido de las variables
HORIZ y VERTI. Suponga­
mos que el gráfico se mue­
IES
) CAP$#FE V B#7F SPA ve en diagonal hacia abajo
y hacia la izquierda. Enton­
ces, la suma de VERTI y HO­
RIZ sería 12. El ordenador
multiplica por dos este da­
cambiará los atributos de lo rección Horizontal que lleva guardamos la dirección de to, y lo suma a GRAFIC. La
pantalla por los que la figu­ el movimiento del gráfico. memoria del último gráfico posición de memoria resul­
ra con el valor de ATR. Es Es 2 si el movimiento es ha­ impreso. tante es el inicio del gráfico
decir, si ATR es 4, el orde­ cia la derecha, 0 si no hay 65515 TABLA: Variable en el cual se representa por
nador pondrá los atributos movimiento horizontal y 8 si de dos bytes que almacena ejemplo a nuestro héroe ca­
el movimiento es hacia la iz­ la dirección de inicio de la minando hacia abajo y ha­
de la pantalla con el valor
4. quierda. tabla en la que se guardan cia la izquierda.
En cambio, si es cero, el 65509 VERTI: Variable de los valores de todas las te­ Después de haberte expli­
ordenador no cambiará los un byte; es similar a la va­ clas predefinidas. Normal­ cado la utilidad de cada va­
atributos de la pantalla. riable anterior, sólo que el mente su valor es 65515, riable, proseguiré con la ex­
65506 DIMEN: Variable programa la utiliza para el pero se puede poner en plicación del programa.
de dos bytes; contiene las movimiento vertical. Su va­ cualquier zona de la memo­ Según esté bWITCH a 1 o
dimensiones del gráfico lor cuando el movimiento es ria. a otro valor, el ordenador
principal. En 65506 guar­ hacia arriba es 1; si no hay 65512 GRAFIC: Variable imprimirá el gráfico con la
damos el ancho del sprite en movimiento vertical es 0 y si de dos bytes. Indica el co­ subrutina IMPRESS o con la
baja resolución, es decir, en el movimiento es hacia aba­ mienzo de una tabla que subrutina FASTER. Te pre­
caracteres; en 65507 el al- jo es 8. guntarás el proqué de ha­
ber puesto dos subrutinas
que realizan lo mismo. La
respuesta estriba en su pro­
pio funcionamiento. Cuan­
do imprimimos un gráfico
en la posición 4 por ejemplo
en horizontal, tenemos que
rotar hacia la derecha cua­
tro veces cada uno de los
bytes del gráfico. Esto hace
que la impresión sea muy
lenta, especialmente cuan­
do hay que imprimir varios
gráficos y éstos son muy
grandes. La solución a este
problema se encuentra en
FASTER. Esta rutina trabaja
con los gráficos ya rotados.
■ ■ ■ ■ ■ ■ Supon que quieres imprimir
con FASTER un gráfico que guir explicando la rutina de interrupciones. La línea Este número irá con un
está situado también en la lectura del teclado y actua­ 2290 decide si se debe uti- prefijo delante de otros 6
posición 4 del eje X. Enton­ lización de las variables de liar IMPRES, y si es así salta datos. Estos datos serán,
ces, el programa buscará posición. a LNTIMP. Si no se ha sal­ dependiendo de la función
en su memoria dónde em­ Lo primero que se hace tado, se utilizará FASTER; que hayamos escogido:
pieza el gráfico que ya está una vez que estamos en en ese caso se copia en A N ­ 1 IMPRESS
rotado cuatro veces, y lo im­ KEYBO es deshabilitar las POS NUEPOS y se carga en Dirección del prefijo uno
primirá en la pantalla. El interrupciones para tener DE. A continuación, toman­ en la memoria: 6200 1 (por
defecto de FASTER es que mayor velocidad y que no do el valor de buffer se lla­ ejemplo)
ocupa mucha más memo­ se imprima ningún gráfico ma a PUTTER. 62001...1
ria, ya que hay que introdu­ mientras formamos sus da­ Buffer es una variable de 62001 +1 Dirección del
cir un gráfico por cada po­ tos. El programa carga en un byte situada en la direc­ gráfico que queremos impri­
sible posición. No obstante, BC el alto y el ancho del ción 620 0 0. Contiene el nú­ mir.
hay algunos casos en los sprite; pone las variables mero de sprites que se de­ 62001 + 3 Dimensiones
que el número de gráficos HORIZ y VERTI A 0 y car­ ben imprimir. Inmediata­ del gráfico que vamos a im­
puede ser de cuatro, de dos ga en IX el valor de NUE- mente después de la direc­ primir; primero se almacena
o de uno. Si movemos el POS. Después carga DE con ción 62000 se colocan los el ancho del sprite en carac­
gráfico de dos en dos pixels, el valor de NUEPOS y lo co­ datos de todos los sprites teres y después el alto del
sólo necesitaremos cuatro pia en ANPOS. que se deseen imprimir. sprite en scanes.
gráficos, ya que si el orde­ Para chequear el teclado, PUTTER es una rutina que 62001 +5 Posición del
nador al empezar a mover se carga en HL el inicio de comienza en la línea 3990; gráfico en la pantalla. Se
el sprite comienza en el pi- la tabla que contine los da­ sirve para calcular en qué pokea primero la posición
xel de coordenada X igual tos de todas las teclas, y se lugar del buffer se deben in­ en la coordenada X en pi­
a 0, las posibles posiciones van comprobando si esas troducir los siguientes datos. xels y después la de la coor­
para X serían 0, 2, 4, 6. Si teclas son pulsadas ahora. Para ello toma el valor denada Y en pixels. Recuer­
X fuera 8, bastanría con in­ Para ello primero se carga del acumulador y lo multipli­ da que el origen del sistema
crementar el número de co­ en el acumulador el byte de ca por 7 llamando a MUL- de coordenadas está situa­
lumna para la impresión. mayor peso del bus de di­ Tl, rutina que hace una mul­ do en la esquina superior iz­
Por otro lado, IMPRES im­ recciones, luego con el va­ tiplicación entre dos núme­ quierda.
prime en OVER 1 y FASTER lor devuelto por el teclado ros de 16 bits y deja el re­ 2 FASTER
simplemente imprime enci­ se hace un complemento y sultado en HL. HL toma así 62001...2
ma de lo anterior. se hace un OR con el valor la dirección donde se deben Los datos son básicamen­
En la figura 2 verás los de la tecla predefinida. Si el guardar los gráficos y se lla­ te idénticos. Las únicas dife­
dos gráficos necesarios pa­ resultado es de 255, quiere ma a la rutina principal. En rencias es que la dirección
ra un movimiento que se decir que la tecla ha sido ella IX toma el valor de HL, de los datos de 62001 +3
desplace de cuatro en cua­ pulsada. Entonces llama a y pokea con el valor 2. no apuntará directamente
tro pixels. la subrutina de dirección co­ al gráfico, sino a una tabla.
Es hora de que te expli­ En esta tabla deberán estar
Otra ventaja que tiene rrespondiente; en ella ob­ que cómo se colocan los da­
serva si la nueva posición las direcciones de inicio de
imprimir con FASTER es que tos para que el impresor por
haría que parte del sprite cada gráfico desplazando,
con IMPRES hay que impri­ interrupciones haga una co­
saliera fuera de la pantalla según el número de pixels
mir primero el gráfico en la sa u otra.
anterior posición para bo­ y si es así vuelve a la rutina que se haya separado la
En primer lugar se carga
rrarlo y después imprimir el principal. En caso negativo, posición X de la columna si­
en el acumulador buffer y se
cambia NUEPOS con la tuada a su izquierda. Por
nuevo gráfico. Con FASTER multiplica por 7 para hallar
nueva posición y pone HO ­ ejemplo:
podemos hacerlo im pri­ la dirección donde debemos
RIZ o VERTI como corres­ X = 27. Excede en tres pi­
miendo un sólo gráfico. El introducir los datos. La ruti­
ponda. Después volverá al xels de la columna de su iz­
truco consiste en hacer que na de impresión tiene cua­
programa. quierda (8 x 3 = 24).
en el dibujo del sprite hay tro funciones: imprimir con
un marco que tenga de an­ Todo esto se repite hasta IMPRES, imprimir con FAS­
TABLA
cho el número de pixels del que ya hemos observado TER, borrar una zona de la
todas las teclas. Con la ruti­ Exceso
pasod el movimiento. Así, pantalla y cambiar los atri­ de pixel Dirección
un sprite se mueve de dos na de ¡oystick Kempston los butos de una zona de la 1 60000
en dos pixels, necesitará un pasos son muy similares, pe­ pantalla.
2 60100
marco alrededor de toda la ro no hace falta mirar en las Seleccionamos la opción
3 60200
figura con un ancho de dos teclas de la tabla, basta con que queremos con un núme­
4 60300, etc
pixels. Entonces, con impri­ tomar el dato del port 233. ro al principio de cada blo­
mir una vez el gráfico, que­ Después KEYBO y JOYST que de 7 datos: La tabla podrías ubicarla
darían borrados los restos confluyen en CAMBIA. Esta 1 = IMPRESS en la dirección 5 00 0 0, por
del anterior. parte se ocupa ya de poner 2 = FASTER ejemplo, y ese es el dato
Una vez hechas todas es­ los datos en el buffer para 3 = BORRA que debes de introducir en
tas aclaraciones, voy a se­ que luego se impriman por 4 = PAINT dirección. Esta tabla estaría
después formada por todas
las direcciones (6 0 0 0 0 ,
60100, 60200, etc.).
La segunda y única dife­
LISTADO A C T IO N rencia más es que el ancho
que introduzcas debe ser
siempre el del gráfico sin
DUMP: 40.0 0 0 desplazar, a pesar de que
desplazado ocupe más ca­
LÍNEA DATOS CONTROL N.° BYTES: 1.572 racteres.
3 BORRA
1 3 E 0 2 C D 0 1 1 6 0 1 3 5 0 0 1 1E4 591 80 F521E8FF7E23666FF185 1513
2 F8CD3C203EF7DBFECB47 1601 81 D 2FEFR246FD 55E235662 1387 620 0 1.. .3
3 CRF9F7CB4FCR03F8C3E8 1860 82 6 B 1 1 E 6 F F 7 D 1 2 7 C 1 3 12D 1 1122 62001 + 1 Dimensiones
I 4 F72131F21122FB 732372 1137 83 C9D5C506004F16001E07 755
. 5 C 9 0 1 5 00 01119F9CD 3C20 870 84 CDD0FR1131F219C1D1C9 1599 de la zona que vamos a bo­
6 2131F2116CF973237221 995 85 F3D D 21E2FFD D 4E00D D 46 1568
7 EBFF0608RF772310FC2E 114-7 86 0 1DD360200DD360300DD 777 rrar. Primero introducimos
8 00CDC7F8E57DC6092105 1251 87 21D FFFD D 6E00D D 6601E5 1395 el ancho en caracteres y
9 584F06003E20093D C230 579 88 DDE12 1D D FF5E23562373 1320
10 F8060R7EE67F772310F9 1166 89 2372D BD FCB47CR56FBCD 1609 después el alto en scanes.
11 3E1685D245F8246F060R 907 90 7EFRD BD FCB4FCR 60FBCD 1 8 54 Hay que decir que la rutina
12 7EF680772310F9E13E7F 1333 91 99FRD BD FCB57CP6RFBCD 1899
13 5F7B0F5FD BFEE61FFE1F 1347 92 R RFR D BDFCB5FCRD FF9CD 2039 borra por bytes y no por
14 C262F8C353F8577BD BFE 1749 93 BFFRC3D FF9D D 360704D D 1615
15 E61FFE1FCR24F8570E02 1135 94 7108DD7009DD730RDD72 1144 bits. Es decir, si hay un byte
16 0604CB67CR7EF8CB2710 1150 95 0BD D770C2130F234C37B 1056 del que la rutina sólo debe­
17 F7C386F80DCR50F8CB27 1609 96 FRDD 21FD FD D D 3600C321 1513
18 10EC06004D21EBFF78FE 1232 97 B4FBDD7501DD74022100 1142 ría borrar un bit, la rutina
19 04CR RCF87BBECR9D F823 1581 98 F E 0 1 F D 0 0 7 12 310FC713E 1099 borrará todo el byte, po­
20 2304C38CF87R23BEC2R7 1330 99 FEED 47ED 5EC9F5C5D 5D D 1970
21 F869C350F80423C38CF8 1498 100 E5E50E00DD2131F23R30 1123 niéndolo a 0.
22 21EBFF79CB2785D 2B7F8 1660 101 F2B9CR4FFCD D 7E00FE02 1563
23 246F732372CD D 1F8692C 1222 102 CR FFFBFE01CR1D FCFE03 1703 62001 + 3 Posición en
24 7D FE04C224F8C9RFDBFE 1710 103 CR3BFCC5D D 4E01D D 4602 1303 pantalla de la esquina supe­
25 2FE61FC2C7F8C906073R 1221 104 D D 5E03DD5604DD7E05CD 1186
26 485CCB3FCB3FCB3FD3FE 1427 105 ERFCC1DDE5E13E0785D2 1766 rior izquierda de la zona a
27 E E 107610F9C9160R0510 891 106 F7F8246FE5DDE10CC3C0 1719
28 0213011100312E204R4F 319 107 FBDD E5C5D D 6E01D D 6602 1555 borrar. Se introduce la
29 59535449434B204B454D 724 108 DD4E03D D 4604D D 5E0SD D 1138 coordenada X y después la
30 5 0 5 3 5 4 4 F 4 E 1 6 0 C 0 5 1006 465 109 5606CD5DFCC1DDE1C3ED 1713
31 322E20444546494E4520 587 110 FBDDE5CSDD4E01DD4602 1491 Y; las dos deben estar en al­
32 434F4E54S24F4C455316 719 111 DD5E03DD5604DD6E05DD 1186 ta resolución, por pixels.
33 0H051007444552454348 465 112 6606CD 5RFD C1D D E1C3ED 1727
34 41202020202020202020 353 113 FBC5DD4E01DD4602DD5E 1356 6 2 0 0 1 + 5 Indiferentes.
35 20202020160B05100649 261 114 03DD5604CDR7FCC1C3ED 1563
36 5R515549455244412016 667 115 FB R F32 30 F2FFE1 D D EID 1 1901 4 PAINT
37 0 C 0 5 10 05 4 1 4 2 4 1 4 R 4F20 419 116 C1F1FBED4D7BE607CB27 1601 6 2 0 0 1 .. .4
38 20202020202020202020 320 117 85D 267FC246FD 55E2356 1273
39 2 0 2 0 2 0 2 0 160D 05100241 251 118 D 5EID 17 B C B 3B C B 3B C B 3B 1556 62001 + 1 Dimensiones.
40 52524942412020202003 691 119 E607R7CR7D FC0CCD 3D FD 1514
41 6CF9F3D D 21E2FFD D 4E00 1634 120 C50600D 5ED B0D 1C17RE6 1583 Son ¡guales que en la rutina
42 DD4601DD360200DD3603 847 121 07FE07CR94FC14C3R4FC 1501 borra.
43 00D D 21DFFFD D 6E00D D 66 1386 122 7BC620D RR 2FC5F7RD 607 1423
44 0 1E5D BE121D Q FF5E2356 1400 123 5 7 C 3 R 4 F C 5 F 1 4 10DRC97B 1371 62001 + 3 Posición. Tam­
124 CB3BCB3BCB3BR7CRB3FC 1586
45
46
2373237221EBFF7EDBFE
23E61F2FB6FEFFC2R9F 9
1421
1646 125 0 C C D 3 D F D C 5 R F D 5 1 2 1C0 D 1175 bién ¡guales.
47 CD 7EFR237EDBFEE61F2F 1523 126 C2B9FCD1C17RE607FE07 1653 6200 1 + 5 Atributo con el
48 23B6FEFFC2BRF9CD 99FR 1963 127 CRCD FC14C3D D FC7BC620 1700
49 237EDBFEE61F 2F23B6FE 1413 128 DRD BFC5F7RD 60757C3D D 1630 que se va a llenar la zona.
50 FFC2CEF9CDRRFRC3DFF9 2196 129 FC5F1410D7C9D5E5D1CD 1655 El último byte es indiferen­
51 237ED BFEE61F2F23B6FE 1413 130 3D FD D 5EID 1C9 F5 CB 38 CB 1869
52 FFC2D FF9CD BFFR3PDCFF 2100 131 38CB387BE607R7CRF9FC 1S45 te.
53 FE01CR22FR21D FFF2356 1373 132 0C7RE607R7CR01FD04CB 1201
54 2B5E2B7226733R30F2CD 1005 13 3 3RCB3RCB3RCB3BCB3BCB 1307
Ahora que ya sabes todo
55 0 F F B E 5 D D E 1DD360002CD 1423 134 3 B D 5 E 1 C D 2 R F D F 1 6 14CD5 1624 esto, comprenderás des­
56 E8F PDO7501DD7402DD71 1494 135 12130DC216FDD16F7BC6 1160
57 03DD7004DD7305DD7206 1022 136 20D 225FD145F7D 10EBC9 1224 pués el porqué pone esos
58 2130F2343RE1FFR7C277 1393 13 7 7CCB2FCB2FCB2FC65857 1247 datos.
59 FBFBED 4D 3R30F23CCD 0F 1 4 44 138 7CE6070F0F0F855FC97P 957
60 FBE5D BE5D 1D D E1D D 36F 9 2109 13 9 CB27CB27E6E0B35F7RE6 1564 Volvamos donde lo deja­
61 0 121E6FF7E23666FD D75 1231 140 C0CB3FCB3FCB3FF57RE6 1587 mos: el registro IX tiene la
62 01D D 7402BB71FCD D 70FD 1512 141 0757F1B2CBF757C9C5DD 1669
63 DD360001DD7103DD7004 950 142 E17DE60747R7CPB3FDCB 1662 dirección donde se deben
64 DD7305DD7206CDE8FRDD 1590 143 3 D C B 3 D C B 3 D C D E 0 F C D 5 16 1505
65 75FRD D 74FB21E0FF562B 1596 144 000E00D D 7E00C5CB3FCB 1027 cargar los datos.
66 5E2B722B73DD73FEDD72 1 3 34 145 1910FR82RE772C5148C1 1104 En la línea 2460, se llama
67 FF2130F234343RE1FFR7 1387 146 D D 231DC273FD7RRE77D1 1471
68 C277FBFBED 4D 79CB27CB 1695 147 15C87CE607FE07CR9FFD 1457 a TABLER. TABLER suma las
69 2 7 C B 2 7 C 6 0 2 8 3 D 8 E 5 2 1DF 1313 148 7D 936F24C36EFD 7D 93C6 1447 variables HORIZ y VERTI
70 FF7BC6025F7321E4FF36 1358 149 20D RREFD 6F7CD 60767C3 1431
71 02E1C97BD602D8E521DF 1468 150 6EFD6F24C36EFDCB3DCB 1535 con el resultado va a una ta­
72 FF5F7321E4FF3608E1C9 1469 151 3DCB3DCDE0FCDDE5D5C1 1862
73 3E028082FEC0D 0E521E0 1462 152 D 179C547F51RRE77132C 1225 bla de direcciones de movi­
74 FF90577221E5FF3604E1 1400 153 10F9F147052BF57CE607 1231 miento. Toma el valor de la
75 C97RD602D8E55721E0FF 1583 154 FE07CRE0FD7D906F24C3 1S51
76 7 2 2 1 E 5 F F 3 6 0 1 E 1 0 9 2 100 1145 155 F1FD7D 90C620D REFFD 6F 1814 tabla en el lugar de la suma
77 003E10CB432801093FCB 664 15 6 7CD 60767C3F1FD6F24F1 1525 multiplicada por dos, y lo
78 3RCB1BCB21CB103DC2D5 1211 157 C 110CDC93E3FED47ED56 1371
79 FRC921E4FF7E2386CB27 1504 158 C9000000000000000000 201 guarda en ANTDIR. Enton­
ces, vuelve a la rutina.
LISTADO ENSAMBLADOR ACTION
61 0R6 63458 788 CHECK LD A,781111111 1348 CP 4 1958 CP 255 2598 RETI
78 LD A,2 718 LD E,A 1358 JP NZ.PREG 1968 JP NZjCONTl 2688 LNTJNP LD A,(BUFFER)
88 CALL 5633 728 CHECK1 LD A,E 1368 RET 1974 CALL DEREC 2618 INC A
98 LD BC,53 738 RRCA 1378 ESPERA XOR A 1988 C0NT1 INC HL 2628 CALL PUTTER
188 LD OE.TEXT 748 LD E,A 1388 IN A ,(254) 1998 LD A, ( HL) 2638 PUSH HL
118 CALL S283C 758 IN A,(UFE) 1398 CPL 2888 IN A.ÍIFE) 2646 PUSH IX
128 AUHO LD A,IF7 768 AND 788811111 1488 AND »1F 2818 AND 31 2658 POP DE
131 1N A,(8FE) 778 CP 788811111 1418 JP NZ,ESPERA 2828 CPL 2668 POP IX
148 BIT 8,A 788 JP NZ, INTEC 1428 RET 2434 INC HL 2678 LD ( IX -7 ),1
158 JP 2, KEMPS 798 JP CHECK1 1438 SONY LD B,7 2846 OR (HL) 2688 LD HL.ANTD1R
168 BIT 1,A 888 INTEC LD D,A 1448 LD A ,(23624) 2658 CP 255 2698 LD A, (HL)*
178 JP Z.DEF1N 818 LD A,E 1458 SRL A 2868 JP NZ.EWTERT 2788 INC HL
188 JP Airno 828 IN A,(UFE) 1468 SRL A 2678 CALL IZQUI 2714 LD H, (HL)
191 KEMPS LD HL,SALTO 838 AND 78881111) 1478 SRL A 2888 EW7ERT INC HL 2728 LD L,A
288 LD OE.JOYST 848 CP 788811111 1488 S0NY2 OLTT (254),A 2898 LD A, ( HL) 2738 LO (IX *1),L
218 LD <HL),E 858 JP Z.PREG 1498 XOR 766818688 2186 IN A ,(IFE) 2748 LD (IX*2),H
228 INC HL 868 LD D,A 1588 HALT 2118 AND 31 2756 LD (IX-4),C
238 LD (HL),0 878 LD C,2 1518 DJNZ SONY2 2128 CPL 2768 LD <IX-3),B
248 RET 888 LD 8,4 1528 RET 2136 INC HL 2778 LD (IX ),I
258 DEF1N LD 8C,88 898 DOBLE BIT 4,A 1538 TEXT 2148 OR (HL) 2788 LD (IX*3),C
268 LD DE.TEXT2 988 JP Z.MASC 1548 DEFB 22,16,5,16,2 ,12158 CP 255 2798 LD (IX*4),B
278 CALL I283C 918 SLA A 2168 JP N2,C0NT2 2888 LD (1X*5),E
288 LD HL,SALTO 928 DJNZ DOBLE 1558 DEFB 17,8 2174 CALL ABAJO 2818 LD ( IX+6),D
298 LD DE,KEYBO 938 JP OMiASC 1568 DEFM • I . JOYSTICK K 2181 JP CAMBIA 2826 CALL TABLER
388 LD (HL),E 948 MASC DEC C EMPSTCN* 2194 C0NT2 INC HL 2838 LD (IX -6 ),L
318 INC HL 958 JP Z,CHECK 1578 DEFB 22,12,5,16,6 2286 LD A,(HL) 2848 LD <IX-5),H
328 LD (HL),0 968 SLA A 1588 DEFM *2. DEFINE CON 22U IN A,(6FE> 2858 LD HL.NUEPOS+l
338 LD HL,TABLA 978 DJNZ DOBLE TROLES* 2228 AND 31 2866 LD D, (HL)
348 LD 8,8 988 (NiASC LD B,8 1598 TEXT2 DEFB 22,18,5,16,7 2238 CPL 2878 DEC HL
358 XOR A 998 LD C,L 1688 DEFM 'DERECHA * 2248 INC HL 2888 LD E, (HL)
368 LIMPIA LD <HL),A 1888 LD HL.TABLA 1618 DEFB 22,11,5,16,6 2258 OR (HL) 2898 DEC HL
378 INC HL 1818 COMPAR LD A,B 1628 DEFM •IZQUIERDA * 2268 CP 255 2988 LD (HL),0
388 DJNZ LIMPIA 1828 CP 4 1638 DEFB 22,12,5,16,5 2278 JP NZ,CAMBIA 2914 DEC HL
398 LD L,8 1838 JP 2 ,TODOS 1648 DEFM 'ABAJO • 2288 CALL ARRIBA 2928 LD (HL),E
488 CALL ESPERA 1848 LD A,E 1658 DEFB 22,13,5,16,2 2298 CAMBIA LD A,(SUITCH) 2938 LD (!X-2),E
418 PREG 1858 CP <Hl> 1668 DEFM ■ARRIBA 1 2388 CP 1 2948 LD (IX -l).D
428 PUSH HL 1868 JP Z,POSIB 1678 ZCONTR DEFB 195 2314 JP Z.LNT1NP 2958 LD HL,BUFFER
438 LD A,L 1878 INC HL 1688 DEFU KEYBO 2326 LD HL.NUEPOS 2968 INC (HL)
448 ADD A ,9 1888 INC HL 1698 KEYBO DI 2336 INC HL 2978 INC (HL)
458 LD HL,22528*5 1898 INC B 1788 LD IX.DIMEN 2348 LD D, (HL) 2988 LD A,(ATR)
468 LD C,A 1188 JP COMPAR 1718 LD C,(IX) 2358 DEC HL 2998 AND A
478 LD B, 8 1118 POSIB LD A,D 1728 LD B ,(IX tl) 2368 LD E ,(H l) 3886 JP NZ.TOPAIN
488 LD A,32 1128 INC HL 1738 LD ( IX+2),6 2374 DEC HL 3818 ADIOS El
498 SITO ADD HL,BC 1138 CP (HL) 1748 LD <ix*3),e 2388 LD (HL),D 3828 RETI
588 DEC A 1148 JP NZ.NOCHEC 1758 LD IX.NUEPOS 2398 DEC HL 3838 DEREC LD A,C
518 JP N2,Sim 1158 LD L,C 1768 LD L,<IX) 2488 LD <HL) , E 3848 SLA A
528 LD 8,18 1168 JP CHECK 1778 LD H, <IX+1) 2418 LD A, (BUFFER) 3858 SLA A
538 NOFLSH LD A,<HL) 1178 NOCHEC INC 8 1788 PUSH HL 2428 CALL PUTTER 3868 SLA A
548 AND 7.81111111 1188 INC HL 1798 POP IX 2436 PUSH HL 3878 AOD A ,2
558 LD (HL),A 1198 JP COMPAR 1886 LD HL.ANPOS 2448 POP IX 3888 ADD A,E
568 INC HL 1288 TOOOS LD HL,TABLA 1816 LD E, ( HL) 2458 LD (IX ) ,2 3896 RET C
578 DJNZ NOFLSH 1218 LD A,C 1828 INC HL 2468 CALL TABLER 3186 PUSH HL
588 LD A ,22 1228 SLA A 1836 LD D,(HL) 2476 LD <IX+1),L 3118 LO HL.NUEPOS
598 ADO A,L 1238 ADD A,L 1846 INC HL 2488 LD (IX*2),H 3128 LD A,E
688 JP NC.NOLLEV 1248 JP NC,NOC 1858 LO (HL),E 2498 LD <IX+3),C 3138 ADD A,2
618 INC H 1258 INC H 1868 INC HL 2586 LD (IX *4),B 3148 LD E.A
628 NOLLEV LD L,A 1268 NOC! LD L,A 1878 LD (HL),D 2516 LD (IX+5),E 3158 LD (HL).E
638 LD B,18 1278 LD ( HL) , E 1886 LD HL.TABLA 2528 LD (IX*6),D 3161 LD HL.HORIZ
648 SIFLSK LD A,(HL) 1288 INC HL 1898 LD A, ( HL) 2536 LD HL,BUFFER 3178 LD (HL),2
658 OR 128 1298 LD ( HL >,D 1986 IN A, («FE) 2548 INC (HL) 3188 POP HL
668 LD (HL),A 1388 CALL SONY 1916 INC HL 2558 LD A,(ATR) 3198 RET
678 INC HL 1318 LD L,C 1928 AND 31 2568 ANO A 3288 IZQUI LD A,E
688 DJNZ SIFLSH 1328 INC L 1936 CPL 2576 JP NZ.TOPAIN 3218 SU6 2
698 POP HL 1338 LD A,L 1948 OR (HL) 2588 El 3228 RET C
; :• •- i mm* '■¿ v- ■

3231 PUSH HL 3878 INC HL 4518 LD (IX *11) ,D 5158 CALL FAeER 5798 AMD 786866111
3248 LD HL,NUEPOS 3888 LD D,(HL) 4528 LD (1X412),A 5168 POP BC 5888 AND A
3258 LD E,A 3896 LD H,D 4538 LD HL.BUFFER 5178 POP IX 58)8 JP Z,EXACT
3268 LD <HL),E 3988 LD l,E 4548 INC (HL) 5188 JP FOLLOU 5828 INC C
3278 LD HL.HORIZ 3918 LD DE.ANTD1R 4558 JP ADIOS 5198 ALNT PUSH IX 5838 EXACT CALL D1RPAD
3288 LD (HL),8 3928 LD A.L 4568 ZLAUNC LD 1X,8FDFD 5288 PUSH BC 5848 FAe PUSH BC
3298 POP HL 3936 LO (DE),A 4578 LD ( I X ) ,195 5216 LD C,(1X41) 5856 LD B,8
3388 RET 3946 LD A,H 4588 LD HL, 1NTPR 5228 LD 8,(1X42) 5868 PUSH DE
3318 AMJO LD A ,2 3958 INC DE 4598 LD (1X41),L 5238 LD E,(IX+3) 5876 LDIR
3328 ADD A,8 3966 LD (DE),A 4668 LD (1X42),H 5248 LD D,(IX44) 5888 POP DE
3338 ADD A, D 3978 POP DE 4618 LD HL.8FE88 5258 LD L,(IX *5 ) 5896 POP BC
3348 CP 192 3988 Re 4628 LD BC, I88FD 5268 LO H,<1X46) 5988 LD A,D
3358 RET NC 3998 PUTTER PUSH DE 4636 ESCRIB LD (HL),C 5276 CALL 1MPRESS 5918 AND 788888111
3368 PUSH HL 4888 PUSH BC 4648 INC HL 5288 POP BC 5926 CP 7
3378 LO HL.NUEPOS+l 4818 LD B,B 4658 DJNZ ESCRIB 5298 POP IX 5936 JP Z,TB41
3388 SUB 8 4628 LD C,A 4668 LD (HL),C 5388 JP FOLLOU 5948 INC D
3398 LO D,A 4836 LD 0,8 4678 LD A,IFE 5318 A60RRA PUSH BC 5958 JP FAei
3488 LD (HL),D 4848 LD E,7 4688 LD 1 ,A 5328 LD C ,(lX 4 l) 5968 T0M1 LD A.E
3418 LD HL.VERTI 4856 CALL NULTI 4698 IH 2 5336 LD B,(IX42) 5976 ADD A, 32
3428 LD (HL>,4 4866 LD DE,BUFFER*i 4788 Re 5346 LD E.ÍIX43) 5988 JP C.T0N2
3436 POP HL 4876 ADD HL, DE 4718 1NTPR PUSH AF 5358 LD D,(IX*4) 5996 LD E,A
3446 RO 4886 POP BC 4728 PUSH BC 5368 CALL BORRA 6886 LD A,D
3456 ARRIBA LD APD 4896 POP DE 4738 PUSH DE 5378 POP BC 6816 SUB 7
3468 SU8 2 4186 Re 4746 PUSH IX 5388 JP FOLLOU 6828 LD D,A
3478 Re C 4118 JOYST DI 4758 PUSH HL 5398 HLUE60 XOR A 6636 JP FA ei
3488 PUSH HL 4128 LD IX,D1NEN 4768 LD C,8 5468 LD (BUFFER),A 6848 T0M2 LD E|A
3496 LD D,A 4136 LD C,(IX> 4776 LD IX.BUFFER41 5416 R e 838 6656 INC D
3588 LD HL.NUEPOS* 1 4146 LD B,<1X+1 4788 QUEDA? LD A,(BUFFER> 5428 POP HL 6868 F A ei DJNZ FAe
3516 LD <HL),D 4158 LD (1X42),6 4798 CP C 5436 POP IX 6871 Re
3528 LO HL,VERTI 4168 LD (IX i3 ),8 4888 JP 2.HLUE60 5448 POP DE 6888 BORRA
3536 LD (HL),1 4171 LD IX,NUEPOS 4818 LD A ,(IX ) 5458 POP 8C 6896 LO A.E
3548 POP HL 4188 LD L, (IX) 4828 CP 2 5468 POP AF 6188 SRL E
3558 Re 4198 LD H ,(IX M ) 4838 JP Z.AFAST 5476 El 6116 SRL E
3568 MULTI LD HL ,8 4288 PUSH HL 4846 CP 1 5488 R eí 6128 SRL E
3578 LD A ,16 4218 POP IX 4858 JP Z,ALNT 5496 6RAFIC EQU 65512 6138 AND A
3588 TRIU BIT 8, E 4228 LD HL,AMPOS 4868 CP 3 5588 SU1TCH EOU 65588 6148 JP 2 ,BORRAI
3598 JR 2 ,TOPI 4238 LD E, (HL) 4878 JP Z,ABORRA 5516 AMPOS EQU 65561 6158 INC C
3688 ADD HL.8C 4248 INC HL 4888 PUSH BC 5528 NUEPOS EQU 65583 6168 BORRAI CALL DIRPAO
3618 TOPI CCF 4256 LD D,(HL) 4898 LD C,(1X41) 5536 BUFFER EQU 62886 6178 80RRA2 PUSH 8C
3628 SRL D 4266 INC HL 4988 LD B,(IX42) 5548 SALTO EQU 6286) 6188 XOR A
3636 RR E 4278 LD (HL),E 4916 LD E ,(IX*3) 5558 ATR EQU 65585 6196 PUSH DE
3648 SLA C 4288 INC HL 4928 LD D,(1X*4) 5568 DIMEN EQU 65566 6286 HILAN LD (DE),A
3658 RL B 4298 LD <HL),0 4938 LD A ,(1X45) 5578 H0R1Z EQU 65588 6216 INC E
3668 DEC A 4386 IN A ,(223) 4948 CALL PAINT 5588 VERTI EQU 65569 6228 DEC C
3678 JP NZ.TRIU 4316 BIT »,A 4956 POP BC 5598 AKTD1R EQU 65518 6236 JP NZ.MILAN
3688 Re 4328 JP Z.JOYSTl 4968 FOLLOU PUSH IX 5666 TABLA EQU 65515 6246 POP DE
3698 TABLER LO HL.HORIZ 4338 CALL DEREC 4976 POP HL 5618 FAeER LD A,E 6256 POP BC
3788 LD A,(HL) 4348 J0YST1 IN A ,(223) 4986 LD A ,7 5628 AND 766688111 6266 LD A,D
3716 INC HL 4358 BIT 1|A 4998 ADD A.L 5638 SLA A 6278 AND 786666111
3728 ADD A,(HL) 4368 JP Z,J0Ye2 5888 JP NC,PENSE 5648 ADD A.L 6288 CP 7
3738 SLA A 4378 CALL IZBUI 5818 INC H 5656 JP NC.MAZ 6298 JP Z.T0M3
3748 PUSH AF 4388 J0Ye2 1N A, (223) 5828 PENSE LD L.A 5668 INC H 6388 INC D
3758 LD HL.GRAFIC 4398 BIT 2, A 5638 PUSH HL 5678 MAZ LD L.A 6318 JP 80RRA3
3766 LD A,<HL) 4488 JP Z.J0YCT3 5848 POP IX 5688 PUSH DE 6328 T0M3 LD A>E
3778 INC HL 4418 CALL ABAJO 5856 INC C 5698 LD E, (HL) 6336 ADD A ,32
3786 LO H,< HL) 4428 J0YST3 IN A ,(223) 5861 JP QUEDA? 5788 INC HL 6348 JP C.T0M4
3798 LD L,A 4436 BIT 3,A 5878 AFAe PUSH IX 5718 LD D,(HL) 6358 LD E,A
3886 POP AF 4448 JP 2 ,CANSIA 5888 PUSH BC 5728 PUSH DE 6368 LD A,D
3818 ADO A,L 4458 CALL ARRIBA 5896 LD L ,(IX 4 l) 5736 POP HL 6376 SUB 7
3828 JP NC,TABLl 4466 JP CAMBIA 5188 LD H,(1X42) 5748 POP DE 6388 LD D,A
3838 INC H 4476 TOPAIN LD (IX +7) ,4 5118 LD C, ( IX+3) 5758 LD A,E 6398 JP B0RRA3
3848 TABLl LD L.A 4488 LD (IX«8),C 5128 LD B,(IX44) 5766 SRL E 6488 T0M4 LD E,A
3858 PUSH DE 4498 LD ( IX+9),8 5136 LD E,(IX45) 5776 SRL E 6418 INC D
3868 LD E,< HL) 4588 LD (1X«18),E 5146' LD D,(1X46) 5788 SRL E 6426 BORRA3 DJNZ B0RRA2
4431 RET 7888 RET 7738 TGM2I LD A ,L
¿448 D1RPRN PUSH DE 7898 DIRPAD LD A,D 7748 sue E
¿458 PUSH HL 7188 SLA A 7756 ADD A ,32
¿4 ¿8 POP DE 7116 SLA A 77¿e JP C.T0M22
¿478 CALL DIRPAD 7126 AND X I1188886 7776 LD L,A
¿488 PUSH DE 7138 0R E 7788 LD A ,H
¿498 POP HL 7148 LD E,A 7794 SUB 7
¿588 POP DE 7156 LD A,D 7888 LD H,A
¿5)8 RET 71 ¿6 AND X I 1888888 7816 JP INPR3
¿528 PA1NT PUSH AF 7178 SRL A 7828 T0N22 LD L,A
¿538 SRL 8 7188 SRL A 7838 INC H
¿548 SRL 8 7196 SRL A 7848 JP INPR3
¿558 SRL B 7288 PUSH AF 7858 IMPR2 SRL L
¿5¿8 LD A,E 7216 LD A|D 78¿8 SRL L
¿578 AND 7.846881 1 1 7228 AND X86888111 7878 SRL L
¿588 AND A 7236 LD D,A 7888 CALL DIRPAN
¿598 JP Z, XEXAC 7248 POP AF 7898 PUSH IX
¿¿88 INC C 7258 0R D 7988 PUSH DE
¿¿IB XEXAC LD A,D 72¿6 SET ¿,A 7916 POP BC
¿¿21 AND X66668111 7276 LD D,A 7928 POP DE
¿¿38 AND A 7288 RET 7938 LD A,C
¿¿48 JP Z,YEXAC 7296 1NPRES PUSH BC 7948 1MPR7 PUSH BC
¿¿58 INC B 7388 POP IX 7958 LD 8, A
¿¿¿8 YEXAC SRL D 7316 LD A |L 79¿8
¿¿78 SRL D 7328 AND X88888111 7978 PUSH AF
¿¿88 SRL D 7338 LD B,A 7986 LDIR LD A,(DE)
¿¿98 SRL E 7346 AND A 7998 XOR (HL)
¿788 SRL E 7358 JP Z.IMPR2 8888 LD <HL),A
¿718 SRL E 73¿8 SRL L 8818 INC DE
¿728 PUSH DE 7378 SRL L 8828 INC L
¿738 POP HL 7388 SRL L 8838 DJNZ LDIR
¿748 CALL D1RAT 7396 CALL D1RPAN 8848 POP AF
¿758 POP AF 7488 INPR3 PUSH DE 8858 LD B,A
¿7¿8 LD H,C 7411 LD 0,6 88¿8 DEC B
¿778 RAIN1 LD C,H 7428 LD C,8 8678 DEC HL
¿788 PUSH DE 7438 IHPR5 LD A,(IX) 8888 PUSH AF
¿798 PAIN2 LD (DE),A 7448 PUSH BC 8898 LD A,H
¿888 INC DE 7458 IMPR4 SRL A 8166 AND X888881 11
¿816 DEC C 74¿8 RR C 8118 CP 7
¿828 JP NZ.PA1N2 7478 DJNZ INPR4 8128 JP Z.TTNl
¿836 POP DE 7488 ADD A , D 8138 LD A ,L
¿846 LD L,A 7496 XOR (HL) 8)48 SUB B
¿856 LD A,E 7588 LD (H L),A 8158 LD L.A
7518 INC L 81 ¿8
¿8¿6
¿878
¿888
ADD A ,32
JP
INC D
NC,SINCA 7528
7536
LD
LD
D,C
C,B
8178
8188 TTM1
INC H
JP 1NPR¿
LD A .L
DEM O 1
¿898 7548 POP BC 8198 SU8 6
5 BORDER 0 INK 7: PR PER 0: C
¿988 SINCA LD E,A 7556 INC IX 8288 ADD A ,32 L E fiR 2 4 9 9 9 : FOR a = 65500 TO 6 5 5 2 0
75¿8 DEC E : POKE a ,0 NEXT a
¿918 LD A ,L 8216 JP C,TTN2 10 POKE 6 5 5 0 6 , 3 : POKE 6 5 5 0 7 ,1 6
¿928 DJN2 PAIN1 7578 JP NZ.INPR5 8228 LD L,A POKE 6 5 5 0 5 , 4 : POKE 6 5 5 1 0 , 5 6 : P
OKE 6 5 5 1 1 , 1 9 9 POKE 6 5 5 1 2 , 8 0 : PO
¿938 7588 LD A,D 8238 LD A,H KE 6 5 5 1 3 , 1 9 5 : LORD ""C O D E 5 0 0 0 0 :
¿948 RET 7598 XOR (HL) 8246 SUB 7 LORD "" C O D E 5 0 5 0 0 : LORD ""C O D E
51000 RRNDOMIZE USR 6 3 4 5 0 RRND
¿958 DIRAT LD A,H 7¿88 LD (H L),A 8258 LD H,A O M IZE USR 6 4 4 0 1
¿9¿6 SHA A 7¿18 POP DE 82¿8 JP 1MPR¿ 20 RRNDOMIZE USR 6 3 8 4 9 : PRUSE
1: GO TO 20
¿978 SHA A 7¿28 DEC D ' 8276 TIN2 LD L.A 6 0 0 0 FOR R = 50000 TO 5 0 0 3 0 S T E P 2
7¿34 RET Z 8288 INC H : POKE R ,6 8 : POKE ( R + l ) , 1 9 7 : NEX
¿988 SHA A T R: GO TO 20
¿996 ADD A ,858 7¿46 LD A,H 8296 1NPR¿ POP AF 6 0 1 0 GO TO 10
7866 LD D,A 7¿58 AND X88888111 8388 POP BC
7818 LD A,H 7¿¿8 CP 7 8318 DJNZ 1MPR7
7828 AND 7 7¿78 JP Z.T0M21 8328 RET LISTADO 1.1 DUMP: 50.0 00. N.° BYTES: 30
7838 RRCA 7¿88 LD A , L 8338 ZOUIT LD A,83F
7848 RRCA 7¿98 SUS E 8348 LD I,A LÍNEA DATOS CONTROL
7858 RRCA 7788 LD L,A 8358 IN 1 1 38C738C778C758C7B8C7 1499
7718 INC H 83¿B RET 2 38C798C738C7F8C718C8 1532
78¿8 ADO A ,L 3 38C738C7D8C738C738C7 1435
7478 LD E,A 7728 JP IMPR3 8378 ZFLA8
En la línea 2470 comien­ gistros, y después se ob­ Además, si el exceso de
za a pokear los valores en IMPRESOR serva si hay algún gráfico desplazamiento es 0, salta
IX según el criterio que ya POR INTERRUPCIONES que imprimir. Si no hay nin­ a IMPR2, en la cual lo hace
antes te he explicado. Incre­ guno, se realiza un rst 38h más rápidamente, ya que
menta el contenido de buf­ para actualizar el teclado no debe rotar nada.
fer, para indicar que se ha La rutina ZLAUNC, en la con la rutina de la ROM. Si BORRA empieza en la lí­
añadido un gráfico, y ob­ línea 4560, establece las in­ estás usando esta rutina nea 6080. Comprueba si la
serva si ATR es distinto de 0, terrupciones en modo 2. desde Código Máquina, posición está desplazada de
en cuyo caso debería saltar ZLAUNC parece excesiva­ puedes quitar esa orden. alguna columna, y si es así
a TOPAIN. mente complicada, ya que Para acabar recupera todos incrementa el ancho en la lí­
TOPAIN deja los datos en las interrupciones se esta­ los registros y vuelve al Ba­ nea 6150. Llama a DIR­
el buffer para que se pinte blecen con tres órdenes, pe­ sic. PAD, para calcular la direc­
el sprite después de impri­ ro no es así. Si hay más gráficos para ción en el archivo de panta­
mirlo. Finalmente, incre­ imprimir, el ordenador con lla; pone a 0 los bytes de
menta de nuevo el conteni­ Una interrupción se fija al IX apuntando a la dirección pantalla de cada sean; des­
do de buffer, regresa y cargar en el registro I un va­ del buffer toma el prefijo, y pués recicla la dirección de
vuelve al Basic reponiendo lor que será el byte de ma­ en base a él salta a las ruti­ pantalla y halla la dirección
las interrupciones. yor peso de una dirección. nas dee preparación de da­ del sean inferior del anterior
En caso de que se hubie­ El byte de menor peso se to­ tos, que son AFAST, ALNT, entre las líneas 6260 y
ra escogido IMPRES, el pro­ ma del valor del bus de da­ ABORRA y una última que 6420. Repite esto hasta que
cedimiento sería muy simi­ tos, que en teoría debería los manda a PAINT. A la acaba con el alto de la zo­
lar. La diferencia sería que valer 255. vuelta de cada una de estas na a borrar y retorna.
habría que imprimir dos Sin embargo, el interface rutinas, se añade IX 7 y si PAINT empieza por divi­
gráficos, uno para borrar el Kempson puede hacer que quedan más gráficos se re­ dir el alto por ocho y si las
sprite anterior y otro para este valor cambie, y no sa­ pite la operación. Finalmen­ posiciones horizontales no
imprimir el nuevo. La direc­ bremos la dirección resul­ te se pone a 0 buffer y se corresponden a alguna co­
ción del sprite anterior la to­ tante. Para solucionarlo, la vuelve al Basic. lumna precisamente incre­
maría de ANTDIR, y la po­ rutina llena desde FE00 h Cada una de estar rutinas menta el ancho. Llama a Dl-
sición del registro IX, en el hasta FEFFh toda la memo­ de preparación (AFAST, RAT, subrutina que calcula
cual la habíamos dejado ria con el dato FDh. Así cai­ ALNT, etc.), hacen lo mis­ la posición en el archivo de
desde la línea 1790. Solta­ ga donde caiga la interrup­ mo. Toman los datos del atributos en base a dos
ría a TOPAIN si fuera nece­ ción siempre tomará como buffer y llaman a cada una coordenadas cargadas en
sario, y para finalizar vuel­ valor de salto FDFDh. de las rutinas de impresión, HL, y devuelve el resultado
ve al Basic. Con esto hemos En esa dirección tenemos de borrado o de coloreado. en DE. A la vuelta a la ruti­
acabado la segunda parte, la memoria justa para hacer Empezaré explicando na empieza a llenar la zo­
y llegamos al impresor por un ¡pINTPR. En INTPR pri­ FASTER. En ella se toma el na de los atributos con el
interrupciones. mero se salvan todos los re­ exceso de bits de desplaza­ valor del registro A. Des­
miento con respecto a la co­ pués calcula la dirección en
lumna, se multiplica por 2 y el archivo de atributos de­
se busca en la tabla. Des­ bajo de la actual posición y
LISTADO 1.2DUMP:5uaa. N.° BYTES: 257 pués se carga en HL la di­ lo repite hasta que acaba
rección de comienzo del con el alto.
sprite, y llama a DIRPAD, Aquí finaliza la explica­
LÍNEA DATOS CONTROL rutina que calcula la direc­ ción del funcionamiento;
ción de la memoria de pan­ ahora voy a decirte cómo
X 01 8 0 0 18003C003C007E0 879
2 07E00FF00FF000000FF0 996 talla donde se debe empe­ puedes hacerlo.
3 0E700F700F700F700F70 634
4 0FF00003000F003E00FE 58 9 zar a imprimir el sprite. Al
5 03FC03FC05F80EF81F70 1168
6 23B07BC0E3806F002200 1026 imprimir cada sean, vuelve USO DE ACTION
7 1C000800000000000000 36 a tomar el ancho, calcula la
8 0000FEC0E2F0FPFCF2FF 1911 ¡
9 FRFFE2FCFEF0FEC00000 1923 dirección de la pantalla que Para empezar, éstas son
10 0 0 0 0 0 0 0 0 0 0 0 0 0 8 0 0 1C00 36
11 2P006B00E3807BC03BB0 1054 1 está debajo de la anterior las direcciones para activar
12 1F700EF805F803FC03FC 1168 j entre las líneas 5900 y
13 00FE003E000F00030FF0 58 9 y desactivar la rutina:
14. 0E300EF00E300FB00E30 631 6050 y después decremen- 63450 Origen de la ruti­
15 0FF000000FF00FF007E0 996
16 0 7 E 0 0 3 C 0 0 3 C 0 0 1800180 879 ta el alto hasta que éste lle­ na y dirección donde debes
17 00100038004400DE01C7 562
18 03D60D C40EF81F701FO 0 1022 ga 0, en cuyo caso vuelve llamar para redefinir teclas.
19 3FC03FC07F007C00F000 1001 ! al Basic. 63849 Dirección de inicio
20 C0000000000000000000 192 1
21 037F0F613F7D FF7BFF77 1182 IMPRES es muy parecida; de la subrutina de actualiza­
22 3F770F7F037F00000000 454
23 00000000C000F0007C00 556 la diferencia está en que an­ ción de posición con che­
24 7F003FC03FC01FP01F70 971
25 0EF80DC403D601C700D6 1102 tes de imprimir cada byte queo del teclado. Si vas a
26 00440038001000000000 140 tiene que rotarlo, y pasar hacer un movimiento lleva­
1 _ parte de él a otros bytes. do por esta rutina deberás
llamarla periódicamente. 65014 Dirección para Si piensas hacer lo prime­ con IMRES entonces debe­
También se encarga de in­ desconectar el impresor por ro, deberán introducir los rás hacer una tabla, y si
troducir los datos en el buf- interrupciones. Hay dos po­ datos como ya he expuesto usas FASTER dos tablas,
fer. sibilidades: que desees usar antes. Para ello deberás to­ aparte naturalmente de los
64401 En esta dirección la rutina introduciendo di­ mar el contenido de buffer, propios gráficos. La prime­
se activa el impresor por in­ rectamente en el buffer da­ multiplicarlo por 7 y añadir­ ra tabla debe tener las di­
terrupciones. Una vez pues­ tos y esperando a que se im­ le al resultado 62001. En­ recciones de los gráficos, (o
to en marcha, no es necesa­ priman o definiendo las te­ tonces tendrás la dirección de las segundas tablas, en el
rio que vuelvas a llamar clas y llamando a la rutina donde debes colocar los da­ caso de FASTER) y se debe
aquí de nuevo. del teclado. tos. Los introduces, incre­ de poder acceder a ella su­
mentas el contenido de buf­ mando VERTI y HORIZ, mul­
fer y ya está. tiplicando el resultado por
dos y añadiéndole GRAFIC.
DEM O 2p. Te recuerdo que cuando
uses IMPRES, la dirección En el contenido de la posi­
será la del propio gráfico, y ción de memoria resultante
5 BORDER 0 : PR PER 0 : INK 7 : C si usas FASTER la dirección se debe de encontrar la di­
L S : FOR a = 65500 TO 6 5 5 1 5 POKE será la de una tabla con las rección de inicio de otra ta­
a , 0 : N EXT a : POKE 6 5 5 0 0 , 1 : POKE
6 5 5 0 5 , 6 : POKE 6 5 5 0 6 , 2 PO KE 6 5 5 0 direcciones de los gráficos bla o del gráfico, según el ti­
7 , 1 6 : POKE 6 5 5 1 2 , 8 0 : POKE 6 5 5 1 3 , po de impresión. Cuando es
195 LORD "" C O D E 5 0 0 0 0 : LORD " " C desplazados.
ODE 5 1 0 0 0 : RRNDOMIZE USR 6 3 4 5 0 : Si usas la rutina del tecla­ otra tabla, es señal de que
RPNDOM IZE USR 6 4 4 0 1
10 RRNDOMIZE USR 6 3 8 4 9 : PR U SE do, lo primero que debes se usa FASTER, y en esa ta­
1: GO TO 10
6 0 0 0 FOR R = 50000 TO 5 0 0 3 0 S T E P 2 hacer es darles a las varia­ bla deben estar las direccio­
: POKE f l , 5 6 : POKE < R + 1 ) ,1 9 9 : NEX bles los contenidos correc­ nes de inicio de cada gráfi­
T R
6 0 1 0 GO TO 10 tos. Piensa que si trabajas co desplazado. Para acce-

LISTADO 2.1 0 2 4 4 2 2 4 0 0 16DB6800000 588 1


5 0 0 R 8 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 168 65
6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 C 0 0 0 0 12 68 0000001BF7D0003B5R00 631 1
DUMP: 5 0 .0 0 0 . N.° BYTES: 30 003BF80000012020007F 499 1
7 0 0 0 0 0 0 0 0 0 0 0 F0 0 0 0 0 0 D 0 223 69
8 B 0 0 0 0 3 D F B C 0 0 0 7 C F 3 E 0 0 866 70 FFE000800010002DB6C0 1042 1
71 0 0 9 1 0 8 9 0 0 0 0 8 8 4 40005R 591 1
LÍNEA DATOS CONTROL 9
10
0 3 D 0 B C 0 0 0 0 1 F 8 0 0 0 0 7 C 0 757
3 E 0 0 0 5 5 F 9 4 0 0 0 7 C S 3 E 0 0 576 72 DB600000000000000000 315 1
11 0 2 8 0 2 R 0 0 0 0 0 0 0 0 0 0 0 0 0 0 172 74 F000033C0003D 00001D 6 729 1
1 44C544C564C554CS84C5 1437 75 001C0180233C4024CF18 583 1
13 00030000000000000003 6 1
2 000074C50000R4C5B4C5 1051 C 0 0 0 0 0 3 4 2 C 0 0 0 0 F 7 E F 0 0 774 76 19301C061BCC01BB9C00 682
3 0000000094C538C738C7 855 14
15 0 1 F 3 C F 8 0 0 0 F 4 2 F 0 0 0 0 0 7 87 7 77 70380000000000000000 168 1
79 003C000000CF000000F4 511 1
16 E 0 0 0 0 1 F 0 0 F 8 0 0 1 5 7 E 5 0 0 925 1
17 0 1 F 1 4 F 8 0 0 0 R 0 0 R 8 0 0 0 0 0 74 7 80 00000075800007006000 348
08CF10000933C600064C 571 1
19 0 0 0 0 0 0 0 0 0 0 0 0 C 0 0 0 0 0 0 0 192 81 1
20 0 0 0 0 0 0 0 0 F 0 0 0 0 0 0 D 0 B 0 0 264 82 07 00 0186F300006EE700 726
1
21 0 0 3 D F B C 0 0 0 7 C F 3 E 0 0 0 3 D 1156 83 001C0E00000000000000 42 1
LISTADO 2.2 22 0 B C 0 0 0 0 1 F8 0 0 0 0 7 C 0 3 E 0 803 85
86
00000000000F00000033
C000003D0000001D6000
66
378 1
23
24
0 0 5 5 F 9 4 0 0 0 7 C 5 3 E 0 0 0 2 8 86 9
0 2 R 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 162 87 01C018000233C400024C 544 1
DUMP: 5 0.5 0 0 . N.° BYTES: 129 F180019301C00061BCC0 1187 1
25 00000000000000040000 4 88 1
26 1 8 0 0 0 0 6 6 7 0 0 3 19C80ER7 647 89 001BB9C0000703800000 542 1
27 2 4 1 D 9 C C 4 0 B 7 3 1 0 3 0 E C 4 8 915 91 00000000000000000003 3
LÍNEA DATOS CONTROL 28 2 F 11 10 37 B 440 38 3B 0 01C 522 92 C000000CF000000F4000 523
1
29 1 C 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 28 93 00075800007006000080 353 1'
1 38C7000068C70000R8C7 925 30 00000000000000010000 1 94 F10000933C600064C070 948 1
2 0000E8C7000028C80000 671 31 0 0 0 6 0 0 0 0 0 0 1 9 9 C 0 0 0 0 C 6 385 95 00186F300006EE700001 540 1
3 58C8000098C80000D8C8 1056 32 7 2 00 03 R 9 C90 007 67 31 00 646 96 C0E00000000000000000 416 1
4 000018C9000048C90000 498 33 0 2 D C C 4 0 0 0 C 3 B 1 2 0 0 0 B C 4 714 98 0000003C0007F3E00F72 663 1
5 8 8 C 9 0 0 0 0 C 8 C 9 0 0 0 0 0 8 CR 948 34 4 4 0 0 0 5 ED 1 0 0 0 0 E 0 C C 0 0 0 544 99 F01B1CD 80F7EF0000000 892 1
6 000038CR000078CR0000 580 35 0 7 0 7 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 14 100 1 F 7 E F 8 1 5 5 4 5 0 1F28F80R 919 1
7 88CR0000F8CR000028CB 1079 37 0 0 0 0 4 0 0 0 0 0 0 1 8 0 0 0 0 0 0 6 199 101 00R80000000000000000 168 1
8 000068CB0000R8CB0000 678 38 6 7 0 0 0 0 3 1 9 0 8 0 0 0 E R 7240 848 103 00000000000F000001FC 268 1
9 E8CB000018CC000058CC 955 39 01 D 9C C 4 00 0B 73 10 00 30E 735 104 F80003DCBC0006C73600 918 1
10 000098CC0000D8CC0000 776 40 C 4 8 0 0 2 F 1 1 1 0 0 0 1 7 B 4 4 0 0 776 105 03D FBC000000000007D F 644 1
11 08CD000048CD000088CD 83 1 41 0 3 8 3 3 0 0 0 0 1C 1C 0000000 568 106 BE000555140007CA3E00 571 1
12 0000C8CD 0000F8CD 0000 85 8 43 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 16 107 02802R00000000000000 172 1
13 38CE000078CE00000000 58 8 44 6 0 0 0 0 0 0 199C 0 00 0C 6 720 589 109 00000000000000000003 3 1
45 0 0 3R 9C 9 00 07 673 10 00 2D 652 110 C000007F3E0000F72F00 675 1
46 C C 4 0 0 0 C 3 B 1 2 0 0 0 B C 4 4 4 0 992 111 0 IB 1CD 8 00 0F7EF000000 997 1
47 0 0 5 E D 1 0 0 0 0 E 0 C C 0 0 0 0 7 0 843 112 000001F7EF8001554500 770 1
48 7 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 112 113 01F28F8000R00R800000 812 1
50 0 0 0 0 0 6 F D F 4 0 E D 6 8 0 0 E F E 1127 116 00000000F000001FCF80 606 1
1
LISTADO 2.3 51
52
0 0 0 0 4 8 0 8 1 F F F F 8 2 0 0 0 0 4 650
0 D B 6 D 8 2 2 2 1 1 4 0 4 4 2 2 4 IB 631
117
118
003DCBC0006C7360003D
FBC000000000007D FBE0
836
1043 1
53 6D B 0 00 000 00 00 000 00 00 285 119 0 0 5 5 5 140007OA3E00028 781 1
DUMP: 51.000. N.° BYTES: 1921 55 0 0 0 0 0 0 0 0 0 1 B F 7 D 0 0 0 3 B 5 501 120 02R00000000000000000 162 1
56 R 0 0 0 0 3 B F 8 0 0 0 0 0 1 2 0 2 0 0 502 122 0F00003OO0000BO00066 577 1
57 0 7 F F F E 0 0 0 8 0 0 0 1 0 0 0 2 D B 746 123 80018038023CC418F324 874 1
LÍNEA DATOS CONTROL 58 6 C 0 0 0 1 1 0 8 8 0 0 0 8 8 8 4 5 0 0 474 124 380C9833D86039DD801C 1017 1
59 0 3 6 D B 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 292 125 0E000000000000000000 14 1
1 00000000000000300000 48 61 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 6 F 111 127 0003C000000F30000002 260 1
2 0000003C000342C00F7E 462 62 D F 4 0 0 0 E D 6 8 0 0 0 0 E F E 0 0 0 1091 128 F 0 0 0 0 0 1AE00000600E00 600 1
3 F01F3CF80F42F0007E00 1026 63 0 0 0 4 8 0 8 0 0 1 F F F F 8 0 0 2 0 0 901 129 008F3100063CC9000E03 476 1
4 1F00F8157E501F14F80R 815 64 0 0 4 0 0 1 6 D B 6 8 0 0 0 2 2 1100 5 3 5 130 2 6 0 0 0 C F6 18 00 0E776000 549 1

mmm
der a ella debe tomar el ex­
ceso de pixels que nos resul­
ta de restar la posición X de
la columna de pantalla de
su izquierda. El resultado es
un número entre 0 y 7. Des­
pués lo multiplicas por dos
y lo añades al inicio de esta
segunda tabla, para tomar
de esa dirección la posición
de inicio del gráfico despla­
zado. Esto último lo realiza
la propia rutina FASTER.
Es evidente que antes de
mover así un sprite deberás
de haber introducido estas
tabla(s) en la memoria, se­
gún indique GRAFIC, que
normalmente vale 5 00 0 0.
Para dar color al sprite
que estás moviendo dale a
ATR un valor distinto de 0,
con el cual coloreará los
atributos del sprite.

131 07038000000000000000 138


133 000000000000F0000003 243
134 CC000000BC000006B800 582
135 001803800023CC40018F 602
136 32400380C980033D8600 772
137 039D D80001C0E0000000 793
140 3C000000F30000002F00 350
141 0001AE00000600E00008 413
142 F3100063CC9000E03260 1076
143 00CF618000E776000070 893
144 38000000000000000000 56
146 00002FBF60016B70007F 68 1
147 701012001FFFF8200004 716
148 0D B6D 02442240884401B 772
149 60680000000000000000 21 3
151 000000000BEFD 800005P 55 6
152 D C00001FDC0004048000 60 7
153 07FFFE000800010005B6 71 2
154
155
DR0002211 00 00 910 89 00
0586DR00000000000000
431
405
LAS DEMOSTRACIONES
157 000000000000000002FB 253
158 F6000016B7000007F700 705 Antes de nada te diré que
159 0101200001 F F F F 800200 675
160 004000OB6D0000442200 494 te parecerán muy largas de
161
164
0288444000B6DB000000
000000BEFD 800005RD C0
671
941
introducir, especialmente la
165 0001FD C000404800007F 709 segunda. Pues bien, para
166 FFE000800010006D B 6C0 1106
167 00R21110009108800036 530 que puedas seguir viendo la
168 O B600000000000000000 315 demostración puedes usar
169 00000000000000200000 32
170 18000E66001398C024E5 768 un truco. En el DUMP del
171 702339B808CED012370C 895
172 0888F4022D E800CC1C00 899 blque de bytes segundo de
173 38380000000000000000 112 la primera demostración in­
174 00000000000000080000 8
175 000600000399800004E6 524 troduce tan sólo 32 como
176 300009395C0008CE6E00 530 duración. De esta manera,
177 0233B400048OC3000222 609
176
179
3O00008B7R00003 30 70 0
000E0E00000000000000
380
28
sólo tendrás que teclear
181 000200000001800000E6 361 cuatro líneas de texto. Des­
182 6 0 0 0 0 1398C0 0 0 2 4 E 5 700 461
183 02339B80008CED000123 749 pués, sálvalo normalmente
184 70C000888F400022DE80 1031 y mientras se ejecute el pro­
185 000CC1C0000383800000 65 9
187 00000000000080000000 128 grama, haz BREAK y GO
188 600000399800004E6300 48 2
189 009395C0008CE6E00023 1117 TO 6000. Así apreciarás el
190 3B400048DC30002223O 0 740 movimiento, aunque el grá­
191 0008B7R0000330700000 51 4
192 E0E00000000000000000 448 fico no tomará direcciones
193 00000000000000000000 0
distintas según éste.
Para hacerlo en la segun­
da rutina, deberás introdu-
cir tan sólo 24 líneas de tex­
to del segundo bloque de
bytes, y escribir como dura­
ción 240 bytes. Sálvalo, y
después de ejecutar el pro­
grama, haz BREAK y GO
TO 6000.
En cuanto al tema de las
demostraciones, la primera
hace empleo de IMPRES pa­
ra mover por la pantalla
una flecha con las teclas re­
definidas.
La segunda realiza el mo­
vimiento de un tanque con
una ligera animación de las
orugas en el movimiento
horizontal.
La tercera sirve para mos­
trar como también se pue­
den hacer con esta rutina en
el movimiento de persona­
jes secundarios, en este ca­
so con animación.
Esta demostración funcio­
na introduciendo datos di­
LISTADO 3.2 LISTADO 3.3 rectamente en el buffer. Re­
DUMP: 51.000. N.° BYTES: 481
presenta a una chica co­
DUMP: 5 4.0 0 0 . N.° BYTES: 55
rriendo y dando saltos. Los
LÍNEA DATOS CONTROL saltos los he conseguido me­
LÍNEA DATOS CONTROL diante los datos de una fun­
1 00000000000000500010 96
1 2168BF0673DD2131F2DD 1215 ción seno.
2 360303DD3604200E00DD 606
2 R C000554000ABE00056C 574 3 360002DD360150DD3602 689 La cuarta y última demos­
3 0000F000007C00000000 364 4 C3F 3DD71050C0C7EDD77 1267
4 00E80001E40003C40003 663 5 0623D D 36FF01FB7610ED 1194
tración borra y pinta espa­
5 8 4 00 07 816007ED6003EC 943 6 C9000000000000000000 201 cios de pantalla al meter da­
6 00000000008000007C00 252
7 003C001E5E001BEE001F 480 tos en el buffer desde el pro-
8 F700 19 E7 001003800002 652
9 800003C00003E0000000 550 pió Basic.
11 00000000000R00000055 95 Un último apunte sobre la
12 800002AR80000157C000 708
13 002D8000001E0000000F 218 LISTADO DESENSAM­ rutina; si quieres usar el con­
14 800000000000001D0000 157 trol de teclado pero con dis­
15 0 0 1C8000001C80000038 368 BLADOR DEMO 3.3
16 800000380000003F6000 343 tinta velocidad en el movi­
17
18
0 0 1 F 6 0 0 0 0 0 0 0 0 0 0 0 0 0 1F
8000000F800000078000
158
406
8388 0R6 54888 miento, cambia los valores
19 00078000000380000003 269 8398 LO HL,49888 numéricos de las líneas
20
21
R0000007R00000072000
000D7000000F30000007
366
195
8488 LO 8,115 3070,3130, 3210,3310 y
22 80000001800000000000 257 8418 LO IX.BUFFER+l 3460 por otro valor.
24 00000022800000556000 343 8428 LD <1X*3),3
25 00RRR0000015F000000B 602
26 6000000780000003E000 458 8438 LD (1X*4),32
27 00000000000340000007 74 8448 LO C,8
28 20000007200000172000 126
8458 LD (IX),2
29
30
31
0 0 3 7 8 0 0 0 0 0 1 7 F 6 0 0 0 0 0B
F6000000000000040000
0003E0000003E00000F 3
463
250
697
8488
8478
LD (1X0),88
LO <IX*2),195
DEM O 4p.
32 E00000D FD 00000FFB800 1094
33 0 0 C F3 8 0 0 0 0 8 0 1C000000 419 8488 DEM
O OI 10 BORDER 0 PA PER 0: INK 7: C
34
37
1 4 0 0 0 0 0 0 1 E 0 0 0 0 0 0 1 F 00
0000R00000055800002R
81
295
8498 LO <IX*5),C LS : C L E fiR 2 4 9 9 9 :
20 L E T C=USR 6 4 4 0 1 : FOR a =0 TO
38 R80000157C000002D800 531 8588 INC C 2 5 5 S T E P 2: PLO T a , 0 DRfiU 0 , 1 7
39 0001E0000000F8000000 473 8518 INC c 5 : NEXT a
30 FOR a =0 TO 20 L E T a n c = IN T
40 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1C800 410
41 0 0 0 1C800000388000003 343 8528 LO A,(HL) (RND *31) : L E T a l t = I N T (R N D * 1 7 0 ):
42 80000003F6000001F600 624 8538 LD < 1X+8),A L E T X =INT (R N D * ( 3 1 - a n c ) ) : L E T y
=INT (R N D * ( 1 9 2 - a l t) )
43
44
000000000001F8000000
F80000007C0000007C00
249
496
8548 INC HL 40 POKE 6 2 0 0 1 , 3 : POKE 6 2 0 0 2 , an
45 00001C0000002E000000 74 8558 LD (1X-1),1 C: POKE 6 2 0 0 3 , a l t : POKE 6 2 0 0 4 , X :
POKE 6 2 0 0 5 , y POKE 6 2 0 0 8 , 4 : POK
46
47
2E0000006E0000004E00
0000ER0000006F000000
234
345
8588 El E 6 2 0 0 9 , a n c : POKE 6 2 0 1 0 , a l t : POK
48 37800000000000000000 183 8578 HALT E 6 2 0 1 1 , X: POKE 6 2 0 1 2 , y : POKE 62
0 1 3 , (IN T (RND*255) í : POKE 6 2 0 0 0 ,
49 00000000000000000000 0 8588 DJNZDEMO 2 PAU SE 1
8598 RE7 50 NEXT a
¡- f - f T J í 1 M II H n Í W 1
Vi ¿ ( J * » i

UNA
AVENTURA
EN EL
OESTE

10 TdeweWa'sulpane"™ hu‘ ¿ como en las clásicas pela


Udttoa. < S de la acciónaos*

á s x s s a s ; í a s a ra s

^ERBE SOFTWARE. C/. NUÑEZ MORGADO, 11 -28036 MADRID. TELEF. (91) 3 Í4 _18"04
DELEGACION BARCELONA. C/. VILADOMAT, 114 - TELEF. (93) 253 55 60.
s mismos progra- K
creado ahora este J La continuación de uneia
, aún en gráficos y éxito de todos ios tiempos
¡nte increíbles han roe ha de salvarlo de una
haya sorprendido i tú podéis evitarloll

liGOS DEL
Toda rutina concebida
para manejar gráficos
y desplazarlos a lo
largo y ancho de la
pantalla, debe
cumplir algunos
requisitos básicos y
de entre ellos cabe
señalar como
fundamental, el que
sea capaz de detectar
si se ha producido un

HECCION
choque entre sprites
para poder obrar en
consecuencia. Con
este artículo se
pretende dar una
idea clara de las
técnicas que podemos
utilizar para
conseguirlo.
esulta difícil ima­ 22527d— a la que corres­ El fichero de imagen, sin y su nombre es PIXEL-AD.
ginar una rutina pondan. Ríos de tinta se han los atributos, ocupa 6144d La utilización de esta ruti­
que mueva un vertido a fin de explicar la bytes y se encuentra dividi­ na es sumamente simple:
cierto número de forma en que éste está or­ do en tres bloques bastante basta llamarla conteniendo
figuras por la pan­ ganizado en el Spectrum. diferenciados entre sí; de tal en el registro B el valor de
talla, sin asignarles unas Organización que, por otra modo que si queremos pa­ la coordenada vertical, y en
coordenadas —verticales y parte, más de uno podría sar de una línea de la pan­ C el de la horizontal. La di­
horizontales— a partir de calificar de «caótica» al oír talla a la inmediatamente rección del fichero de ima­
las cuales podamos empe­ hablar de ella por vez pri­ inferior, tenemos que sumar gen correspondiente a esas
zar a imprimir los sprites y mera. Es de suponer que el valor 256d a la dirección coordenadas, nos será de­
también, partiendo de ellas, muchos lectores conocerán en cuestión en lugar de 32d, vuelta en el reqistro doble
conocer si dos —o más— de el tema en profundidad, pe­ como cabría esperar. HL.
estas figuras se han puesto ro para aquellos que nunca La cuestión se complica Una última «pega» queda
en contacto. se han aventurado a inter­ todavía más si esa línea es­ por resolver; y es que
Basándose en esta premi­ narse en el tortuoso mar de tá en un tercio diferente al PIXEL-AD no fue concebida

I
sa, se hace evidente la ne­ la pantalla del Spectrum, que nos encontramos, con para operar en la parte in­
cesidad de una rutina que trataremos de explicar bre­ lo cual en vez de 256d tene­ ferior de la pantalla —don­
se encargue de transformar vemente su configuración y mos que sumar 2048d a la de el Spectrum presenta los
estas coordenadas en la di­ la manera en que podemos dirección en la que estemos mensajes de error y efectúa
rección del fichero de ima­ solventar los problemas que en dicho momento. los INPUTs.
gen —desde 16384d hasta esto nos plantea. El problema estriba, por Para arreglar esto, basta
lo tanto, en conocer nuestra cargar el acumulador con el
situación y la cantidad que valor 191 d y llamar a la ru­
debemos de sumar, o res­ tina dos direcciones más

fHOQUES
tar, a esa dirección para ir adelante con lo cual, para
a donde pretendemos. nosotros, PIXEL-AD va a es­
La solución la tenemos en tar situada en la posición
la propia ROM del ordena­ 8876d, teniendo en cuenta
dor, concretamente en la que el valor mínimo —0 —
posición 22AAh —8874d— de la coordenada Y se en-

Enrique LÓPEZ MARTÍNEZ


contrará en la última línea La otra posibilidad es bo­ gará de forma irreversible.
de la pantalla, mientras que rrar una línea de la figura Los buenos resultados con
el máximo —191— se loca­ antigua, imprimir una de la la utilización de halt depen­
lizará en la primera. actual, continuar borrando den, en la mayoría de los ca­
Una vez resuelto el pro­ la anterior y así sucesiva­ sos, de la experimentación,
blema que supone trabajar mente hasta completar la es decir, si a pesar de todo
directamente con el fichero impresión del gráfico. Esta hay un sprite que se obstina
de imagen, ya podemos técnica disimula un poco en seguir parpadeando, de­
plantearnos la tarea de con­ más el parpadeo —muy si­ bemos cambiar la ubicación
feccionar nuestra rutina. Y milar, por cierto, al que te­ de halt dentro del progra­
vamos a intentar desarrollar nían la mayoría de los jue­ ma hasta conseguir que de­
una que mueva tres objetos gos antiguos— que la pri­ je de hacerlo.
por la pantalla: un revolver, mera, pero tampoco consi­ Desgraciadam ente no
una bala, y algo a lo que gue evitarlo. siempre resulta tan sencilla;
disparar. Una cruz, por Por suerte para nosotros, en los casos más «rebeldes»
ejemplo, podría ser un blan­ el microprocesador Z80 dis­ suele ser eficaz la utilización
co perfecto, aunque centra­ pone de una instrucción lla­ de un bucle —antes o des­
remos nuestra atención en mada halt, que lo introduce pués de halt— como el pro­
la subrutina que se encarga a «no hacer nada» —salvo puesto a continuación y va­
de comprobar si el disparo continuar refrescando la riar el valor de HL hasta lo­
y la cruz han colisionado. RAM— hasta que se pro­ grar que el molesto parpa­
duzca una petición de inte­ deo desaparezca por com­
rrupción o un reset, la cual pleto:
nos va a ayudar a lograr
EL PROGRAMA que nuestros gráficos no
parpadeen jamás, acen­ HALT: Paro del Z80
La rutina se encuentra
tuando el efecto de suavi­ LD HL,500d: Valor inicial
profundamente comentada del bucle
en el listado ensamblador, dad en los desplazamientos;
aunque no movamos las fi­ LOPP DEC HL: Decre-
pero no estará de más re­
guras pixel a pixel. menta HL
calcar algunos aspectos dig­
Para que esta instrucción LD A,H
nos de consideración. En
funcione, ojo, las interrup­ OR L: ¿Es cero?
primer lugar, cabe señalar
ciones han de estar habilita­ JR NZ,LOOP: Si no lo es,
que los gráficos los vamos a
das —líneas 200 a 220 del continúa decrementando
imprimir utilizando XOR HL
—u OVER 1—, con lo cual programa—. En caso con­
a la hora de borrarlos bas­ trario el ordenador se col­
tará con imprimir la figura
por encima de la que desee­
mos hacer desaparecer y el
fondo quedará restableci­
do. Existen dos maneras de
imprimir los gráficos em­
pleando esta técnica; la pri­
mera de ellas, que es la que
va a ser usada por nosotros,
consiste en borrar el sprite
anterior «de una sola vez» e
imprimir el actual del mismo
modo. Esto presenta el in­
conveniente de que, entre el
borrado y la impresión del
gráfico, transcurre un tiem­
po durante el cual vamos a
tener grandes posibilidades
de que el haz de la televi­
sión se encuentre barriendo
esa zona de la pantalla y en
virtud de esto, conseguire­
mos obtener un desastroso
efecto de parpadeo.
tía': i.
no al Basic lo haremos a tra­ 1410 a 1580—, las cuales Por último salta a la ruti­
RESTO DEL PROGRAMA vés de la subrutina CHO­ se encargan del movimien­ na COMPR, la cual si no se
QUE; ésta tiene como obje­ to de la cruz y el disparo, si ha detectado un choque nos
Continuando con el aná­ to restablecer ciertos valo­ lo hubiera, respectivamen­ devuelve al bucle principal;
lisis de la rutina, vamos a in­
res del programa, que más te. en caso contrario retorna al
tentar explicar con breve­
adelante veremos, y habili­ IDEN y DIREC son dos Basic.
dad su funcionamiento. Co­
tar las interrupciones para bytes señalizadores utiliza­
mienza haciendo una llama­
poder salir al Basic en caso dos por ellas. El primero in­
da a las subrutinas REVOL
de que se confirme una co­ dica con un uno la existen­ COMPROBACIÓN
y CRUZ —líneas 450 a 650 lisión, por lo cual podemos
y 660 a 860 respectivamen­ cia de un disparo en panta­ DE CHOQUE
perfectamente servirnos de lla o con un cero su ausen­
te— cuya misión es, como su ella para este fin.
nombre indica, imprimir el cia. El segundo adopta el La filosofía seguida en
revolver y la cruz, partien­ Seguidamente, hace una valor «cero» si la cruz tiene nuestra rutina para detectar
do de las coordenadas ver­ llamada a las subrutinas que moverse hacia arriba o una posible colisión entre
tical y horizontal contenidas MCRUZ —líneas 1590 a el «uno» si tiene que hacer­ sprites, responde al siguien­
en el registro doble BC. Es­ 1870— y MDISP —líneas lo hacia abajo. te esquema:
ta operación resulta impres­
cindible puesto que si no lo
hiciésemos así, al estar em­
pleando XOR, observaría­
mos cómo extrañas cosas
empezarían a ocurrir en la
pantalla o, en otras pala­
bras, la primera impresión
de ambos gráficos perma­
necería sin borrarse.
A continuación, nos en­
contramos con la etiqueta
PRINC, estamos ante el bu­
cle principal del programa
—líneas 40 a 250— el cual
se encarga de chequear el
teclado y llamar a las subru­
tinas ARRIBA —líneas 260 a
350 ABAJO —líneas 360 a
440— y disparo (DISP) —lí­
neas 1310 a 1400— o salir
del programa si SYMBOL
SHIFT está pulsada. El retor­
IX,TABLA—. De este modo,
sería posible tener en
jK ^ iS á S S S S S fS tf? ^ (IX + 0), la ordenada; en
IX + 1 ), la abscisa; en
IX+ 2), la fase, etc.
De cualquier manera, no
NO parece demasiado práctico
el hacer uso de todo esto en
nuestra rutina, cuando sola­
retorna mente pretendemos que
una única bala se desplace
por la pantalla.
Prosiguiendo con la su­
‘A5SSS& #
SI
.« S t fS S S S k brutina COMPR, intentare­
mos profundizar un poco en
ella, a fin de entender su
de c h o q u e s funcionamiento, que dista
"r éto í mucho de ser complicado.
En primer lugar, señalar
ADO algo que de por sí ya resul­
ta bastante obvio para que
un sprite se mueva hacia la
derecha, es preciso incre­
SI q o e re m ° s mentar su abscisa tantas
m a n e \a r unidades como desplaza­
ggS fflS M gráf»coS/
ló g ic a m e n -
mientos queremos que efec­
túe —nuestro disparo se
LA DIFER£NPC'
..¿WENOR DEDOS.
og> mueve de cuatro en cuatro
b e b e re m o s pixels—; del mismo modo,
para que lo haga hacia arri­
. . a s s s w d ispon er ba debemos incrementar su
de u na ordenada. Y decrementar
ambas para que se despla­
ta b la en ce en sentido contrario.
CHOQUE rnem oria.
Partiendo de que el dispa­
ro se realiza desde la iz­
retorna . quierda de la pantalla, su
coordenada horizontal ha

LISTADO i
Las etiquetas V A R I, pantalla, aunque no resulta
VAR2, etc., que pueden ob­ demasiado complicado el 1® BORDER :0LORbe " "COD

servarse en el listado, están hacer que esto no sea así. E I¿4- CLS . LET fi =INT (BND
referidas a los parámetros Si queremos manejar grá­
verticales y horizontales de ficos, lógicamente debere­ * # i í B< i f M E BÍNpÍRIoSEV IS
cada gráfico y su significa­ mos disponer de una tabla
do es: en memoria, que nos infor­
me cuál es la situación de
VARI: Ordenada del re­ cada uno de ellos —también *^60 XNK1: | ; CF o |I ^ 0tti? IN¿
volver. puede indicarse su fase y BT . N É X
N ÉT
XT fí pRINT
.-.o t kjT RRT
T f f.®
,0
VAR2: Ordenada de la color, si los tuviera, o la di­ x'70 fo h / - « T V * ÑE&T f „
cruz. rección en que debe despla­
VAR3: Ordenada de la zarse— a fin de que poda­ > e, S » í % ; "4i "T r t * x ',3 i; "
bala. mos ir moviéndolos secuen-
VAR4: Abscisa de la bala. cialmente, o llqgado el ca­
VAR5: Abscisa de la cruz. so, hacer que alguno desa­
parezca. %I . ^ 22, 4, 4
; "; S
" SYYHHBB 0
0L S
SHH IFT
IF T
En nuestro caso, no es po­ No es mala práctica el ac­
p?§ § I r n d o h i z e usr 4®!®® 1; FLRS
sible efectuar un nuevo dis­ ceder a una tabla de este ti­
Í t ® p ? R 3 NÍ 2 - " O T R R UEZ?“
paro hasta que el anterior po, mediante el registro in-
haya desaparecido de la dexado IX —formato LD then g0
...........o» ST
0P__
de ser, al menos, igual o un la se encontraría por enci­
n cierto número de veces — ma de la cruz, pero sin lle­
n nosotros decidimos cuán­ gar a entrar en contacto
n tas— mayor que la de la con ella, si es así, podemos
cruz. En tal caso, la sustrac­ regresar sin más miramien­
o ción entre ambas deberá tos al bucle principal.
o ser un número positivo. En cambio, si la resta no
n De otro modo, querría dio como resultado un nú­
i- decir que la bala —horizon­ mero positivo, es fácil llegar
e talmente— todavía no ha a la conclusión de que el dis­
e llegado a la altura de la paro se encuentra por de­
cruz. bajo de la cruz. Sólo nos
i- En el supuesto de que el queda comprobar si está a
disparo se moviese de dere­ menos de 15 —scans verti­
n cha a izquierda, sería nece­ cales que ocupa el gráfico
u sario seguir los mismos pa­ de la cruz, menos uno— po­
a sos, pero a la inversa, es de­ siciones de distancia de és­
cir, restar de la abscisa de ta; en caso afirmativo se po­ LISTADO 2
ir la cruz, la de la bala, mirar ne de manifiesto la existen­
I- si su resultado es positivo y
DUMP: 40.000 N.° BYTES: 420
cia de un choque. De lo con­
e obrar en consecuencia. trario se retorna al bucle LÍNEA DATOS CONTROL
a Volviendo al caso que nos principal. 1 C D 9 E 9 C C D B E 9 C 3 E F B D B F E 1856
ocupa, lo siguiente es com­ 2 C B 4 7 C C 7 6 9 C 3 E F B D B F E C B 1741
is probar cuántas veces es Para finalizar, es posible 3 4 F C C 8 B 9 C 3 E F B D B F E C B 6 7 1670
4 C C 2 4 9 D 3 E 7 F D B F E C B 4 F C R 1543
i- que alguien se pregunte por 5 D 1 9 D F B 7 6 F 3 C D 6 4 9 D C D 3 B 1 7 04
mayor la abscisa del dispa­ 6 9 D C 3 R 0 9 D C B 4 F C 8 3 R 9 F 9 C 1524
qué, en el listado Basic la
ro que la de la cruz. 7 F E 9 7 C 8 C D 9 E 9 C 3 R 9 F 9 C 3 C 1557
e abscisa de la cruz es siem­ 8 3 2 9 F 9 C 1 8 13 C B 47 C 83 R 9 F 1099
Considerando que esta 9 9 C F E 1 7 C 8 C D 9 E 9 C 3 R 9 F 9 C 1525
o pre un número múltiplo de 10 3D 3 29 F 9 C 0 6 4 0 0 E 0 8 1150 615
última ocupa 16 pixels de C 3 3 E 1 0 F5 C 5 3 E B F C D R C 2 2 1379
ocho. 11
¡, ancho, si el resultado de la 12 0 6 0 3 1 R R E 7 7 2 3 1 3 10F 9 C 1 840
La respuesta es muy sim­ 13 0 5 F 1 3 D 2 0 E R C 9 0 6 9 5 0 E E 8 1175
i- resta fuese, pongamos por 14 1 1 8 0 C 3 3 E 1 0 F 5 C 5 3 E B F C D 1318
u caso, dos. Significaría que el ple: como no está pensado 15 R C 2 2 060 21 R R E77 23 131 0 603
16 F 9 C 1 0 5 F 1 3 0 2 0 E R C 9 0 6 2 8 1262
ir disparo se encuentra dos pi­ aue se mueva hacia los la­ 17 0 E 2 0 C 5 2 1 E 1 9 D 1 1 R 0 C 3 0 6 1036
i- xels a la derecha de la po­ dos, si intentamos imprimir­ 18 0 2 1R 7 71 3 2 3 3 6 0 0 2 3 10F7 553
19 7 9 E 6 0 7 2 8 0 E 4 7 2 1 E1 9 D 0 E 912
sición actual que ella ocupe. la en una coordenada hori­ 20 0 4 C B 1 E 2 3 0 0 2 0 FR 1 0 F3 C 1 1019
zontal que no sea múltiplo 21 1 1 E 1 9 D 3 E 0 2 F 5 C 5 3 E B F C D 1363
i- En nuestro ejemplo, se ha 22 R C 2 2 0 6 0 2 1 R R E 7 7 2 3 1310 603
considerado el número 12 de ocho, el gráfico tenderá
u como un valor aceptable, a aparecer en una que si lo 23 F9C105F13D 20ERC93RE0 1498
sea, de lo que se despren­ 24 9DFE00C03E0132E09D3R 1155
□ por lo que si la diferencia 25 9F9CD60232DF9CCDDE9C 1543
fuese mayor que esta canti­ de que su posición en pan­ 26 C93RE09DFE00C83RE19C 1533
talla no coincidirá con el va­ 27 FEF0300FCD D E9C3RE19C 1579
dad, se retorna al bucle 28 C60432E19CCDDE9CC9CD 1622
principal sin hacer más com­ lor asignado a su abscisa, 29 D E9C3E2032E19CRF32E0 1352
30 9D C93R D F9D FE00201B3R 1167
probaciones. con la consiguiente confu­ 31 BF9CFE96300EF5CD BE9C 1609
sión que esto produciría. 32 F1C 60 33 2B F 9CCDBE9CC9 1 5 91
En caso contrario, las 33 3E0132D F9D C93RBF9CFE 1353
coordenadas horizontales Por último, cabe decir que 34 1R380EFSCDBE9CF1D603 1 3 50
35 3 2 B F9 C C D B E9 C C 9 R F 32DF 1597
están ya suficientemente las condiciones impuestas 36 9 D C 9 3 R E 0 9 D F E 0 0 2 8 3 5 3R 1202
chequeadas, ocupémonos en el programa para que un 37 C19C473RE19C98382BFE 1364
38 0C30273RBF9C473RDF9C 1012
ahora de las verticales. choque se verifique son ab­ 39 983806FE023019180C3R 637
40 D F9C473RBF9C98FE0F30 1324
El proceso a seguir es muy solutamente arbitrarias, es 41 0BRF32E09D3E2032E19C 1142
similar al anterior: restamos decir, pueden variarse a 42 FBC9C3469C0000FC00FC 1377
a la coordenada Y de la ba­ gusto del consumidor y no
la, la de la cruz, si el resul­ existe ningún impedimento LISTADO 3
tado es positivo y menor de para hacerles los retoques DUMP: 50.000 N.° BYTES: 82
dos —scans verticales que necesario hasta conseguir
ocupa el gráfico del dispa­ que se adapten a nuestras LINEA DATOS CONTROL
ro— querrá decir que la ba­ pretensiones.
1 07FC02D 803FF63F00144 1143
la se encuentra impresa, co­ Se puede afirmar que el 2 10014413FF43F0088003 805
3 F0940400R9F800RB0800 988
mo máximo, dos posiciones mejor aprendizaje es, sin 4 RRC800RR1000RBE000BR 1137
por encima del gráfico de la duda, la práctica y las expe­ 5 00008200007C000003C0 449
6 03C003C003C003C003C0 975
cruz, con lo cual se hace evi­ riencias personales. Confío 7 FFFFFFFFFFFFFFFF03C0 2235
dente una colisión entre am­ en que este artículo haya 8 03C003C003C003C003C0 975
9 FCFC0000000000000000 504
bos sprites. Si la diferencia contribuido en algún modo
fuese mayor de dos, la ba­ a ello.
LISTADO EN SA M B LA D O R 648
658
JR N2,IMPRIM
RET
668 CRU? LD 6,149 ¡Ordenad a
ie ORG 48888 678 LD C.ME8 ¡Abscisa
28 CALI REVOL ¡Primera impresión del revolver 688 LD DE, NC388 ¡D ire ccion del g rá fic o de la cruz
38 CALI CRU2 ;T la cru z, con over 1 698 LD A.818 ¡Numero de scans v e rtic a le s
48 PRINC LD A,8FB ¡Chequea la te c la Q 788 1MPR1 PUSH AF
58 1N A , <UFE) 718 PUSH BC ¡Guarda coo rdenadas
68 BIT 8,A ¡Esta puls ada? 728 LD A,8BF ¡c a lc u la la d ire cc ió n
78 CALL 2,ARRIBA ¡s i 1 o e sta, mueve arrib a 738 CALL P1XEL ¡del fie hero de pan ta lla
88 L? A.8FB ¡Chequea la te c la U 748 LD 8,482
98 IN A,(UFE) 758 12 LD A,(DE) ¡E impr ifie
188 BIT 1,A ¡Esta puls ada? 768 XOR (HL) ¡del misn o modo que
ne CALI. 2,ABAJO ¡Si lo esta, mueve abajo 778 LD (HL),A ¡la sub ru tin a Revol
128 LD A ,KFB ¡Chequea la te c la T 788 INC HL
138 IN A,(UFE) 798 INC DE
148 BIT 4,A ¡Esta puls ada'5 888 DJNZ 12
158 CALL Z.D1SP ¡Si lo e sta, dispara 818 POP BC ¡Recupera c oordenadas y
168 LD A,87F ¡Chequea Symbol S h ift 828 DEC 6 ¡decrementa la ordenada hasta
178 IN A , <UFE' 838 POP AF ¡f in a liz a r la impresión
188 BIT !,A ¡Esta puls ada'' 848 DEC A
198 JP 2 ,CHOQUE ¡Si 1 o e sta, retorna al Basic 858 JR N2.IMPR1
288 El ¡S in cro n iza co n 868 RET
218 HALT ¡el b arrid o 878 IDIS LD 8,828 ¡Ordenad a del disparo
228 DI ¡de la p an tall a 888 LD C,828 ¡Abscisa
238 CALL MCRUZ ¡Mueve 1 a cruz y 898 PUSH BC ¡Guarda coo rdenadas
248 CALL MD1SP ¡el disp aro, s i se ha producido 988 LD HL.BUFER
258 JP COMPR ¡S alta a comprobación de choque 918 LD DE.8C3A8 ¡Dire ccion del g rá fic o del disparo
268 ARRISA BIT 1,A ¡Esta puls ada <a W*5
928 LO B.882
278 RET 2 ¡Retorna si lo esta
938 METE LD A,(DE) ¡Mete 1 os datos en
288 LD A ,(V A R I' ¡La o rdenada del revolver
948 LD (HL),A ¡el buf er e introduce
298 CP 897 ¡Ha alcanz ado el lim ite superior?
958 INC DE ¡un cero de spues de cada
388 RET 2 :Er caso a f¡ rm ativo, retorna
968 INC HL ¡lin e a a f i n de poder
318 CALL REVOL ¡Borra f ¡gura an te rio r
978 LD (H L),888 ¡rota r ío s s i la abscisa
328 LD A,(VARI) ¡Incr ementa en uno 988 INC HL ¡no fuese u n nuriero
338 INC A ¡la ordenada y la 998 DJN2 METE ¡m ú ltip lo de ocho
348 LD (VARI),A ¡uuel ve a in tro d u c ir
1888 LD A,C
358 JR REVOL ¡Imprime la fig u ra en la nueva p o sio o n 1818 AND 887 ¡Si lo es, sigue sin
368 ABAJO 81T 8,A ¡Esta pu ls ada la Q 1828 JR 2 ,SIGUE ¡hacer ninguna operación
378 RET 2 ¡Retorna si lo esta 1838 LD 8,A
388 LD A,(VARI) ¡La o rdenada del revo lver 1848 ROI LD HL.BUFER
398 CP 817 ¡Ha alcanz ado el 1 im ite in fe r io r '’ 1858 LD C.I84
488 RET 2 ¡En caso a fi rm ativo, retorna 1868 R02 RR (HL) ¡Rota lo s datos del
418 CALL REVOL ¡Borra f i gura antigua 1878 INC HL ¡bufer para SU
428 LD A,(VARI) ¡Tena la ordenada 1888 DEC C ¡p o s te rio r i npresion
438 DEC A ¡para decrem e n ta rla en uno 1898 JR N2.R02
448 LD (VARI),A ¡y vo Iver a in tro d u c irla 1188 DJN2 ROI
458 REVOL LD 8,848 ¡Ordenad a del revolver 1118 SIGUE POP BC ¡recupera c oordenadas
468 LD C,888 ¡Abscisa 1128 LD DE,BUFER ¡y lo in p n ie
478 LD DE.8C358 ¡Oiré ccion del g r á fic o del revo
1138 LD A ,882 ¡Numero de scans v e rtic a le s
488 LD A ,818 ¡Numero de scans v e rtic a le s
1148 INOI PUSH AF
498 IMPRIM PUSH AF 1158 PUSH BC
588 PUSH 8C ¡Guarda coo rdenadas LD A,8BF
1168
518 LD A.8BF ¡C alcu la la d ire cc ió n 1178 CALL P1XEL
528 CALL P1XEL ¡del Fie hero de p a n ta lla 1188 LD 8,882
538 LO B,883 ¡e in p ri ne 1198 ESCR LD A,(DE) ; Impr ir» e el g rá fic o
548 1MP8 LD A,(DE) ¡mezcla ndo lo s 1288 XOR (HL) ¡del disp aro mezclando
558 XOR (HL) ¡datos de 1 g r á fic o con 1218 LD (HL),A ¡el con tenido del
568 LD (HL),A ¡ lo que haya en p a n ta lla 1228 INC HL ¡bufer con lo que
578 INC HL 1238 JNC DE ¡haya en pa n ta lla
588 INC DE 1248 DJNZ ESCR
598 OJNZ 1MP8 1258 POP BC
688 POP BC ¡Recupera c oordenadas y 1268 DEC B
618 DEC B ¡decrementa la ordenada 1278 POP AF
628 POP AF ¡hasta conp le ta r la fig u ra 1288 DEC A
638 OEC A 1298 JR N2.IMD1
1388 RET 1438 CP 194 ¡ I m it e na xino, es p re ciso
1318 DISP LO A ,<1DEN) ¡Hay ya un disparo etectuado? 1448 JR NC.F1N0 ¡canbi pr el sentido
1321 CP M86 ¡En caso a f ir n a t iv o 1458 PUSH AF ¡Guarda ord e n id i
1336 RET N2 ¡retorna 1446 CALL CRU2 ¡borra la f i gura actual
1346 LO A ,881 ¡Ahora s i ha de haberlo 1478 POP AF ¡recupera o rdenada
1358 LO (1DEN),A ¡y lo hace constar 1488 ACO A ,883 ¡la incr ementa en tre s
1348 LO A,(VARI) ¡Tona la ordenada del revolver 1498 LO <VAR2),A ¡mpr me la cru 2
1378 SU8 882 ¡para decr enentarla en dos e 1788 CALL CRU2 ¡en su nu eva p o sició n y
1388 LO (VAR3),A ¡in tr o d u c irla en la del disparo 1718 RET ¡retorna
1398 CALL 101S ¡Imprime su g ra tic o y 1728 FINO LO A, 1 ¡In d ica qu e la cruz
1488 RET ¡retorna 1738 LO (DIREC),A ¡se nueve hacia abajo
1418 MDISP LO A,(IDEM) ¡Hay un disparo 1748 RET
1428 CP 886 ¡en pantal la? 1758 AEA LO A,(UAR2) ¡La o rdenada de la cruz
1438 RET 2 ¡Retorna si no lo hay 1748 CP RIA ¡ha alcanz ado el I i m te in t e r io r?
1448 LO A,(VAR4) ¡Su a bscisa ha alcanzado 1778 JR C.F1ND2 ¡Si es a s i, canbia su sentido
1458 CP 8F8 ¡el valor máximo? 1788 PUSH AF ¡Guarda la ordenada,
1446 JR NC,BORRA ¡Si e s a s i , restab lece paranetr 1798 CALL CRUZ ¡Borra la a n te rio r tig u ra
1478 CALL 101S ¡Borra la tig u ra a n terio r 1888 POP AF ¡recupera o rdenada
1488 LO A,(VAR4) ¡in c r ementa su 1818 SUB R83 ¡la decren enta en
1498 A00 A ,884 ¡abscisa en cuatro 1826 LO (VAR2>,A ¡tres unidades
1588 LO (VAR4),A ¡unid ades, 1836 CALL CRUZ ¡la m pri ne de nuevo y
1516 CALL ID1S ¡la m pri ne en la nueva po sició n 1848 RET ¡retorna
1528 RET ¡y retorna 1858 F1N02 XOR A ¡Ahora la cr uz ha de
1538 BORRA CALL ID1S ¡Borra gr á tic o del disparo 1848 LO (DIREC),A ¡nov erse hacia a rrib a
1546 LO A ,828 ¡restaur a su abscisa 1878 RET
1558 LO (VAR4),A ¡e in d ica que ya 1388 »SU8RUTlfW DE CHOQUE»
1548 XOR A ¡puede produ c irs e 1898 CCWPR LO A,(IDEN) ¡Hay un disparo
1578 LO <1DEN),A ¡un n uevo disparo 1988 CP 888 ¡en pantal la ’
1588 RET 1918 JR Z,VUELVE ¡Si n 0 lo hay retorna
1598 MCRUZ LO A ,( DIREC) ¡Si el indicador de sentido 1928 LO A , (VAR5) ¡Rest a a la abscisa
1488 CP 888 ¡es un nun ero d is t in t o de 8 1938 LO 8,A ¡del dispa ro
1418 JR N2,ABA ¡la cru z se mueve hacia abajo 1946 LO A,(VAR4) ¡la d e la cru 2
1428 LO A,(VAR2) ¡Si s u ordenada ha alcanzado el 1958 SBC A,B ¡si el res u ltad o no es un numero p o s itiv o
1946 JR C,VUELVE ¡reto rna
1978 CP R8C ¡Si lo es, ha de ser nenor de doce
1988 JR NC,VUELVE ¡En caso c o n tra rio retorna
1996 LD A.ÍVAR2) ¡Rest a a la ordenada
2888 LO 8,A ¡del dispa ro
2618 LD A , (VAR3J ¡la d e la cruz
2828 SBC A ,8 ¡Si el res ultado no es p o s itiv o
2838 JR C,N0 ¡s a lta a la subrutm a No
2848 CP R82 ¡Si es pos it iv o , pero nayor de dos
2658 JR NC,VUELVE ¡ret orna
2848 JR CHOQUE ¡si es menor, se detecta un choque
2878 NO LD A,(VAR3> ¡Rest a a la ordenada
2888 LD B,A ¡de la cru z
2898 LD A,(VAR2) ¡la d el disparo
2188 SBC A.B ¡s i el res u l tado es
2118 CP I8F ¡menor de quince, se detecta un choq ue
2128 JR NC.VUELVE ¡si es nayor retorna
2138 CHOQUE XOR A ¡Restaura el byte
2148 LD (IDEN),A ¡iden tit ic a d o r del
2158 LO A ,128 ¡disparo , repone el valor
2148 LO (VAR4),A ¡m ic 1al de su abscisa
2178 El ¡ h a b ilita las in terru p cio n e s
2188 RET ¡y retorna al Bas i c
2198 VUELVE JP PR1NC ¡Regresa al bucle p n n c ip il
2286 D1REC DEFB «8
2218 1DEN DEFB 88
2228 BUFER DEFS *4
2238 PIXEL EQU 8874
2248 VARI EOU 48895
2258 VAR2 EQU 48127
2248 VAR3 EQU 48159
2276 VAR4 EOU 48141
2286 VAR5 EQU 48129
Recorta o copia este cupón y envíalo a Hobby Press, S.A. Apartado de Correos n? 8. 28100 Alcobendas (Madrid).
D e se o recibir en mi domicilio las cintas de MICROHOBBY que a continuación indico, al precio de 625 ptas cada una. Cada cinta lleva grabados los programas publicados por MICROHOBBY durante
cuatro números consecutivos (1 al 4. 5 al 8, 9 al 12. etc ).
Números Números Números. _ Números___ _
Nombre Apellidos _ __ Fecha de Nacimiento.
Domicilio_ Localidad . Provincia. C. Postal Teléfono .
Fonos do |ago (Para agilizar tu envió, es importante que indiques el código postal)
□ Talón bancario adjunto a nombre de Hobby Press. S A. □ Giro Postal a nombre de Hobby Press. S.A., n ? ___________________
□ Contra reembolso (supone 125 ptas. más de gastos de envío y es válido sób para España).
□ Tarjeta de créditon?DDDD DODD PULID DCDD (Sólo para pedidos superiores a 1.500 ptas.)
Visa □ Masler Card □ American Express □ Fecha de caducidad de la tarjeta___________Nombre del titular (si es distinto) Fecha y firma
(Si b deseas puedes sofcitartas por teléfono (91) 734 65 00)
V M Ja JÜ ¿k
de Sesto, 50. 28009 Madrid (Metro O'Donnell
T e l. (91) 2 7 5 9 6 16 - 2 7 4 7 5 0 2

„c r nflT|S A ELEGIR

- - ‘ o o s

SP EC T R U M PLUS +
PTAS. PTAS. C A S C O S M Ú S IC A STEREO
FIST II ................................ 875 XEVIUS .............. 875 19.800 P T S (incl. IVA).
DEEP STRIKE ...................... 875 lOth FRAME ................... .. 1.200
SUPER SOCCER ................... 875 LEADERBOARD ................ .. 1.200 OFERTASJOUSTICKS
TERRA CREST ..................... 875 EXPRESS RAIDER ........... .. 875
DOUBLE TAKE ..................... 875 ACE OF ACES .................. .. 1.200
SHORT CIRCUIT ................... 875 IMPOSSABALL ................ .. 875
ARKANOID ......................... 875 S IG M A 7 ......................... .. 875
UCHI MATA ......................... 875 BAZZOKA BILL .................. .. 875
INSPECTOR GADGET ........... 875 DRAGON'S LAIR II ........... .. 875
SHAO LIN’S ROAD .............. 1.750 SHADOW SKIMMER ......... .. 875
SOFTAWARE AMSTRAD DISCO 2.250 (Incluido regalo calculadora)

IMPRESORAS 20% DTO. SOBRE P.V.P.


C A B L E S E IN T E R F A C E S
20% DTO. S O B R E P.V.P. SOLICITA GRATIS
NUESTRO CATÁLOGO A
C A D E N A M U S IC A L 27.900 PTS. TODO COLOR, DE PTAS.
V ID E O V H S A K A I 79.900 PTS.
NUESTROS PRODUCTOS 695
R A D IO C A S S E T T E S T E R E O 6.895 PTS.
D1SKETTE 3".• •• .... 190
R A T Ó N P A R A A M S T R A D Y C O M M O D O R E C O N S O F T W A R E 4.900 PTS.
DISKETTE 5 W p íS jM ■ 2-890
LÁPIZ 0PT? n X aD • 2JM
PEDIDOS CONTRA REEM BO LSO S IN GASTOS
DE ENVÍO (si es inferior a 1.200 ptas. se cargarán üNTA C-15 ESPECTRUNI ■
150 ptas). LLAM A POR TELÉFONO. ADELAN TAS TRES D ÍA S TU PEDIDO TELE (91) 274 75 02 / , microorwe ■ • rn-3;,•••;. 2.600
(91) 275 96 16 ARCHIVADOR DISCO ' 995
— ^ ^ ^ — (Durante las 24 horas)
[ ralentizado ^ ---------
S E R V IC IO T É C N IC O R E P A R A C IÓ N T A R IF A F IJA : 3.600 PTAS.
(incluido provincias sin ga sto s envío)

CASSETTE ESPECIAL ORDENADOR


CASSETTE ESPECIAL ORDENADOR 3.495 PTAS. Y 3.995 PTAS. 3.495 PTS. Y 3.995 PTS.
COMPATIBLE PC-IBM 640 K
2 BOCAS 360 K
COMMODORE 128 ................................ 54.900
MONITOR FÓSFORO VERDE
COMMODORE 128 + TECL. M U S IC A L .... 57.900
149.900 PTAS. (inelido IVA)

¡¡PRECIOS EXCEPCIONALES PARA TU AMSTRAD!!


Tiendas y Distribuidores, pidan lista de precios al mayor. C/. Galatea, 25 28042 - M A D R ID telef. (91) 274 75 03
A la hora de
adentrarnos en el
mundo de la
programación resulta R afa el MARQUEZJARRA
imprescindible

conocer las diferentes


técnicas que permiten
diseñar el mapeado
de un |uego. En estas
páginas encontraréis
una rutina que
desarrolla una de
estas técnicas.

I M H N I !

® s” Cuando y a están dibuja- C uando ¡^ ^ JJ jS S u n a


ara fa cilita r su Jos hay que almacenarlos 'T í " e nos indique que

P
comprensión va- memoria. Estos gráficos tab q gn cada panta.

mas a 9u'arnoT ° r no se almacenan como los arañe TABLA


dentro deun programa
muy e|em
poco podréis sjno por scanes,
» “ de'caraCteres es
que com- lia.
indica e. (no se cuen-
diseñar fácilmente vuesfros g) gráfico después a ■q u e deS/ puertas te-
propios mapeados. H sequnda fila de la primer escaleras ni el te-
elegido pora e ,e m p le a r ego caracteres y as. cha 1 fa ventana que
S S S *
nuestra rutina el mapeado ! • « £ ^
***"-■-- nasiu
tocío el lacio con
jado luí i t—
hay en él, ya que éstos reci-
de una casa. Í - * . *. gráfico. (Fig.
9 rcoC°tod o siol)-
\ gráficos ya u ¿ un tratamiento d,(ere -
ben
forma que quepa en nueve nados hay que cons-
enados te ^
te)^ . este
de ... u ..^ v¡e-
byte
pantallas deMelev.sor En truir ana ^ >ab ^ » con las|as- ca^ C más para cada
cada una podran vers meterísticas de cada uno. cj primero es el nu-
“ sos , tendrá >res habita- ™de ^ ,e llamaremos objeto El ^ del
Sones en el plano horizon- TABLA DE GRAFICOS, GRAFICOS. ^ ! ° ° e '^_Z. \o
mero . ? o„cs,c,on
s\ó ó n
tal- por tanto estara com- ™ da ^ ocupa cuatro gráfico, q ^ ^ ja B L A dE
t° ' Porpor
puesta __ 18 ilinnrac d.stm-
iq lugares distin bytes de la tabla. El prime- Pu ÁFlcPo S . El segundo
tos Para hacerlo mas real, mdica el número de bits GKA ^ posición ver-
el último piso lo converge- ^ Qnch0; el segundo el nu- byte d Py e, tercero
mos en el te|ado de la casa de ^ ^ sc nes) de . ¡ón horizontal (estos
y será una zona donde no m , tercero y el cuarta la pos.c co pan-

^ o ro b a y « d b j* *
S tm á l K habito- ' - » ^ n^ hgt . o : lo siguiente m a n e r a ^ O -
ción.
iH H H

LOR DE TINTA + COLOR Entre las líneas 720 y 00


DEL PAPEL*8 = BRILLO* está la TABLA DE DATOS
64 + FLASH*128. que contiene la dirección de
Por tanto, si en una habi­ comienzo de la TABLA DE
tación hay una mesa, una si­ PANTALLA de cada uno de
lla y una ventana, la TABLA ellas.
DE PANTALLA tendrá una 850-870: Papel negro y
longitud de 13 bytes, el pri­ tinta blanca.
mero el contador de objetos 880-910: Se inicializan
y cuatro para cada gráfico las coordena­
que haya. das del muñe­
Ya sólo falta hacer una co.
tabla, la TABLA DE DA­ 920-930: Se pone a 0 la
TOS. Esta tiene dos bytes variable SAL­
por cada pantalla, es decir TO. Estará a 1
18. Estos bytes contienen la si el muñeco
dirección donde comienza tiene que sal­
la TABLA DE PANTALLA de tar.
cada una de ellas. 940-950: Se inicializa a
Ahora ya está desarrolla­ 1 la variable
do todo lo necesario para FORMA. Pue­
empezar a explicar las ruti­ TABLA DE PANTALLA
de contener un
nas que lo realizan. número del 1 kJ z o • j
También haremos que un al 8. Cada uno o Oh Z J Z h ID
pequeño personaje pueda corresponde a »o HfcJ o a o z ÚO
0 0 0 0 HÜ H O h
visitar todas las habitacio­ un gráfico dis­ ÜTh O ID O H ON aiü
nes de la casa. tinto del muñe­ tu tu kJO H h HH 00
r o a: ioa « a j c
co. O ID H ID OID o o o o
960-970: Se almacena -ZJL Ü Ü 0.3 a i 0
en PANT el nú­
EXPLICACIÓN mero de habi­
DEL PROGRAMA taciones donde
se encuentra el TRBLR DE GRAFICOS
Empieza en la línea 100 muñeco. Las
con un salto a SEGUIR. En­ habitaciones se NUMERO NUMERO
tre las líneas 120 y 260 es­ numeran de iz­ DE SCRNNS DIRECCIO N
tán las etiquetas utilizadas quierda a de­ BYTES DE D EL
por el programa. recha y de arri­ ANCHO ALTO GRAFICO
Entre las líneas 280 y 700 ba a bajo em­ 1 BYTE 2 BYTE 3 Y 4- B Y T E
se encuentra la TABLA DE pezando por
GRÁFICOS. 1.
gráficos del en la panta­
techo. lla 1 ó 2 sal­
1310-1370 Si el muñeco ta a MUR.
está en las 1950-2010: I m p r i m e
pantallas 3, una pared,
6 ó 9 salta a una puerta
MUR02. y salta a TE­
1380-1400: Se imprime JADO.
una pared 2020-2040: Si estamos
en el piso en la panta­
bajo de la lla 2 salta a
pantalla. TEJADO.
1410-1430: Se imprime 2050-2130: I m p r i m e
una puerta una pared,
en el piso un muro y
DATOS FIG. 1 bajo. una puerta.
1440-1460: Se comprue­ 2140-2160: Si estamos
<
3,0 ,0 ,0 ,0 ,0 ,0 , 0 ,0 ,0 ,2 8 ,0 ,0 ,6 2 ,0 , ba si se está
0 , 127, 0 , 0 , 127, 0 , 0 , 8 5 , 0 , 0 , 12 7 , 0 ,0 en la prime­
, 109, 0 , 0 , 127, 0 , 0 , 127, 0 , 0 , 6 2 , 0 , 1 , en las dos ra pantalla
2 2 1 , 1 2 8 , 5 , 2 2 7 , 224. , 1 3 , 24-7 , 1 7 6 , 1 3 , primeras salta a TE­
2 3 5 , 1 8 4 , 1 4 , 2 5 5 , 1 8 4 , 3 1 , 2 5 5 , 1 2 4 ,3 1 pantallas
, 2 5 5 , 2 5 2 , 6 3 , 2 5 5 , 2 5 4 , 6 1 , 2 5 5 , 2 2 2 ,1 JADO.
2 4 , 8 5 , 2 0 6 , 1 2 4 , 2 5 5 , 1 4 2 , 1 2 0 , 2 5 5 ,2 0 y si es así 2170-2250: I m p r i m e
6 , 2 4 9 , 2 5 5 , 1 9 7 , 2 0 9 , 2 5 5 , 2 3 1 , 2 2 4 ,1 2 se salta a una pared,
7 , 1 4 3 , 1 1 3 , 1 4 0 , 1 1 0 , 1 1 3 , 2 4 3 , 2 2 4 ,3 3 CONT2.
, 2 4 3 , 2 2 4 , 1 , 2 4 3 , 2 2 4 , 1 , 2 4 3 , 2 2 4 , 1 ,2 una puerta
4 3 , 2 2 4 , 3 , 2 4 3 , 2 4 0 , 3 , 2 4 3 , 2 4 0 , 3 ,2 4 3 1470-1490: I m p r i m e y un muro.
,240,2 , 225, 208, 3 , 3 3 ,4 8 , 2 , 161, 8 0 , una puerta
3 , 9 7 , 4 8 , 2 , 1 9 2 , 2 0 8 , 3 , 6 4 , 1 7 6 , 2 ,1 9 2 2260-2280: Si no esta­
,208,5 , 6 4 , 168, 10, 192, 212,2 1 , 128,
en el piso mos en las 3
1 0 6 , 1 4 , 0 , 2 8 ,1 9 2 alto de la primeras pan­
pantalla. tallas salta a
1500-1530: I m p r i m e CONT3.
990-1020: CLS y borde 1060-1130: Se crea un una pared 2290-2310: Imprime el
azul. Se mar­ bucle para en el piso gráfico del
ca la variable que im pri­ alto y salta tejado.
MODO a 1. ma 8 gráfi­ a CONT2.
2320-2460: Crea un bu­
Si tuviera un cos horizon- 1540-1560: Aquí se lle­ cle para im­
0, la rutina ta lm e n te . ga si está en primir cinco
de impresión Entre 1100 la pantalla filas de grá­
no im prim i­ y 1120 se 3, 6 ó 9. ficos que for­
ría. incrementa Se imprime man el teja­
Entre las líneas 1030 y la coorde­ un muro.
do.
2730 se imprimen las figu­ nada. 1570-1590: Si estamos
ras correspondientes a cada en la panta­ 2470-2490: Imprime la
1140-1170: Se imprime ventana del
pantalla que no sean obje­ el g rá fico lla 3 salta a
tejado.
tos, como paredes, puertas, del techo y TRES.
etc. Para imprimirlos se car­ se llama a 1600-1750: I m p r i m e 2500-2550: Si estamos
ga en DE la dirección que SUBI. dos puertas, en la pan­
ocupa el gráfico en la TA­ 1180-1210: Se cambia dos paredes talla 4 ó 7
BLA DE GRÁFICOS y en HL la coorde­ y un mu­ salta a ESC,
el comienzo de los datos nada Y pa­ ro. Salta a sino a
que contienen las coordena­ CONT2. CONT4.
ra imprimir
das y el color del gráfico a en la parte 1760-1780: Imprime un 2560-2580: I m p r i m e
imprimir. superior de muro. una escale­
Después se llama a SITUA la pantalla 1790-1850: Si estamos ra.
que introduce los valores en otro gráfico en la panta­ 2590-2640: Si estamos
las etiquetas para que pue­ del techo. lla 1, 4 ó en la panta­
da utilizarlos la rutina de im­ Llama a 7 salta a lla 6 ó 9 va
presión e imprime el gráfi­ SUBI y salta MUR. a ESCB, sino
co. CONT1. 1860-1910: Se imprime a CONT5.
1030-1050: Se imprime 1220-1300: Se crea un una pared y 2650-2670: I m p r i m e
un gráfico bucle para una puerta. una escale­
del suelo. im prim ir 8 1920-1940: Si estamos ra.
2680-2730: Si estamos coloca los
LISTADO 1
en la panta­ datos de los 10 LO R D " " C O D E 5 0 0 0 0
lla 7 impri­ gráficos en 20 LO R D " " C O D E 6 4 0 0 0
me un mu­ las etiquetas 30
40
LO R D •'"CODE 5 5 1 0 4
LO R D ■ •"CODE 4 5 0 0 4
ro. para que 50 R R N D O M IZ E U SR 5 0 0 0 0
En SIG comienza la rutina pueda utili­
que lee los datos de las pan­ zarlos la ru­
tallas y crea las habitacio­ tina de im­
nes. presión.
2760: Se carga en A el Carga la anchura del grá­
número de panta­ fico en ANCHO, la altura
LISTADO 2
lla donde está el en ALTO; el byte bajo de la (RUTINAS)
muñeco. dirección donde está alma­
2770: Se carga en B pa­ cenado en INFER y el alto 1 C 3 1 1 C 4 1 0 1840D 7101871 880
ra hacer un bucle. en SU PER; la coordenada Y 2 D 71 0 18R2D70820D3D720 1130
2780-2810: Se calcula la en POSY, la X en POSX y los 3 20F4D 7181875D81018BE 1102
4 D 8 2 0 0 8 E F D 8 1 0 2 0 10D920 1 0 24
posición de atributos en COLOR. Luego 5 1 0 5 1D91 8 1092D 92818C3 976
ia pantalla 6 D 9 2 0 0 8 3 C D R 0 8 2 0 5 D D R 18 910
llama a IMPRI que dibuja el 7 10 7ED R 1 8 10 R FD R 1 8 10E0 1057
en la TABLA gráfico y retorna. Los datos 8 D fl1 0 1 8 1 1 D B 1 0 1 8 4 2 D B 2 0 851
DE DATOS. 9 1073DB1810B4DB2020E5 1082
que hay entre las líneas 10 D B 1 8 2 0 6 6 D C 1 0 1 0 C 7 D C 10 1 0 64
2820-2860: Se pasa la 3360 y 3610 sirven para 11 18E8DC101819DD18184R 884
12 D D 1 0 1 8 9 3 D D 2 0 1 0 C 4 D D 10 1110
dirección de imprimir las puertas, pare­ 13 1805D E18 1836D E28187F 766
14 DE1018F8D E201029D F20 1076
la TABLA des, etc. El primer byte es la 15 1 8 6 R D F 1 0 1 0 C B D F 1 0 18EC 1087
DE DATOS posición Y, el segundo la X 16 D F10181DE008204EE020 890
17 206FE01818F0E0101839 976
de la panta­ y el tercero el color del grá­ 18 E110186RE1CCRFD DR FF2 1613
lla donde 19 RF07B028B059B07EB097 1292
fico. Los datos que hay en­ 20 B 0C 0B 03 E02C D 01163E07 905
está el regis­ tre las líneas 3630 y 3700 21 328D5C32485C3E603292 851
22 E23E7F3291E2RF3294E2 1435
tro HL. indican la dirección donde 23 3C3293E23E083290E2CD 1178
están almacenadas las figu­ 24 6B0D3E01D3FE32065821 828
2870-2880: Carga en B 25 9BC61177C3CD2DC60608 1146
el número ras para crear el movimien­ 26 C5CD00FRC13R045BC620 1228
27 3 2 0 4 5 B 1 0 F 1 2 1 9 E C 6 1 16F 919
de gráficos to del muñeco. 28 C3CD2DC6CD6FC43ERF32 1442
a imprimir. 29 05 5B CD 6 FC418 120608C5 861
Las primeras 4 son del 30 CD 00FRC13R045BC62032 1081
2890: Se guarda el regis­ movimiento a la derecha y 31 045B10F1C93R90E2FE03 1 2 38
32 2 8 3 5 FE 0 6 2 8 3 1FE09282D 790
tro B para no per­ las 4 últimas a la izquierda. 33 2156C61187C3CD2DC621 1145
der su contenido. La figura 1 y 3 de cada sen­ 34 59C611EBC3CD2DC63R90 1384
35 E 2 F E 0 3 3 8 5 C 2 1 5 C C 6 1 1EB 1206
2900-2930: Se carga en tido son ¡guales. 36 C 3C D 2 D C 62 15 FC 61 187C3 1316
37 C D 2 D C 6 1 8 4 8 2 1 8 9 C 6 1173 1044
B el número 3720-3800: Pone los da­ 38 C3CD2DC63R90E2FE0328 1368
de identifi­ tos iniciales 39 2F218CC611EBC3CD2DC6 1313
40 2 156C61187C3CD2DC621 1145
cación del del muñe­ 41 9 2 C 6 1 1 E B C 3 C D 2 D C 6 2 195 1 4 21
42 C 6 1187C3CD 2D C6218FC6 1367
primer grá­ co. Llama a 43 1 173C3CD2DC618092198 993
fico. BFORM que 44
45
C 6 1173C3CD 2D C63R90E2
FE012835FE042831FE07
1401
956
2940-2990: Halla la po­ busca la for­ 46 2 8 2 D 2 1 6 2 C 6 1 187C3CD2D 1011
47 C 6 2 1 6 8 C 6 1 15FC3CD 2D C6 1288
sición de los ma que le 48 3 R 9 0 E 2 F E 0 3 3 8 1 4 2 165C6 1093
datos del corre sp on ­ 49 1 1 8 7 C 3 C D 2 D C 6 2 1 6 B C 6 11 1150
50 5FC3CD2DC618443R90E2 1258
g rá fico a de. Después 51 F E 0 2 2 8 3 D 2 1 7 R C 6 1 173C3 1037
imprimir en 52 CD2DC6217DC61187C3CD 13S6
se llama a 53 2 D C 6 2 1 8 0 C 6 1 15FC3CD2D 1159
la tabla de PCOOR que 54 C63R90E2FE01281B2165 1082
55 C 6 1187C3CD2DC62183C6 1355
gráficos. coloca las 56 115FC3CD2DC62186C611 1 1 37
3000: Imprime el gráfi­ 57 73C3CD2DC63R90E2FE04 1444
coordena­ 58 3 0 3 1 1 1D7C32177C6CD2D 1124
co. das del mu­ 59 C60605C50608C5CD 00FR 1072
60 C 1 3 R 0 4 5 B C 6 2 0 3 2 0 4 5 B 10 737
3010: Recupera el con­ ñeco para 61 F13R055BD 610320S5BC1 964
tador y repite si que pueda 62 1 0 E 3 2 1 7 4 C 6 1 1CBC3CD2D 1255
63 C63R 90E2FE042806FE07 1 1 91
aún faltan más. utilizarlas la 64 2 8 02 18 09216EC611EFC3 867
3030-3060: La p a n ta ­ 65 CD 2DC63R90E2FE062806 1182
rutina de 66 F E 0 9 2 8 0 2 1 8 0 9 2 1 7 1 C 6 11 699
lla ya está impresión, y 67 63C3CD2DC63R90E2FE07 1431
68 2 0 0 9 2 IR 1 C 6 1 173C3CD2D 1010
completa y por último 69 C 6 3 R 9 0 E 2 4 7 1 1 F D C 3 1313 1200
se almace­ lo imprime. 70 10FC1R6F131R677E47C5 947
71 2 3 7 E 2 3 4 7 1 1 4 F C 3 131313 615
na en me­ 3830-3860: Si se ha pul­ 72 1 3 10FRCD 2D C6C110EC21 1211
moria. 73 0 0 4 0 1 1 B 8 8 8 0 1 0 0 1BEDB0 842
sado la tecla 74 C 3 B 4 C 6 F 3 1 R 3 2 0 7 5 B 1 3 IR 1035
3070: Salta a SEGU2. Z se salta a 75 3 2 0 8 5 B 1 3 1 R 3 2 0 R 5 B 1 3 IR 390
3090-3330: Esta rutina PULIZ.
3870-3900: Si se ha pul­
sado la X se
salta a PUL-
DE.
3910-3940: Si se ha pul­
sado Space
se llama a
PSALT.
3950-3980: Si se ha pul­
sado ENTER
DUMP: 50000 vuelve al
BASIC.
N.° BYTES: 1.472 3990: Carga en A el va­
lor ae SALTO.
4000- 4010: Si no es 0
320B5B7E32055B237E32 635
045B237E32095BE5CD00 84.0 es que el
FRE 1 F B C 9 5 F F 8 0 6 3 F F 8 4 4 1655 muñeco ha
87F844R7F8065F0006R7 1140
00063F00448700448710 491 de estar su­
433FD043977802RF0002 855
5F00163F00063F0844R7 492 biendo por­
08448700163FF0 165FF0 893 que se ha
44R7F01687F04487F806 1329
5 F F 0 161F00166700283F 616 pulsado la
001640D771D740D7R2D7 1285 tecla de sal­
6 R E 1 E C D F 6 P E 1 1 D E 0 3 E 10 1452
32075B3E1832085B3E07 452 to y pasa a
32095BCD E0C7CD F5C7CD 1632
00FR3EFED BFECB4F2824 1397 SUBIR.
3EFEDBFECB5728703E7F 1420 4020: Si es 0 hay que
D8FECB47CCR0C73EBFD B 1782
FECB47C83R94E2B7C2RF 1712 comprobar si tiene
C7CC1EC818D43R92E23D 1360 que bajar porque
4F3R91E2D61747C5CDRR 1388
22CD 05C8C11RFE44CR80 1315 no hay suelo de­
C8FE1628C7FE432009CD 1282
CE22CDDS2DB720BR3R93 1309 bajo suyo, y se ha­
E23CFE09D4DRC7FE05DC 1657 ce una llamada a
DRC73293E2CDE0C73R92 1672
E2D6023292E2CD10C8CD 1490 BAJAR.
F5C 70 1 0 5 0 0 C D 3 D 1 F1890 915
3R 92E2C6104F3R 91E2D 6 1366 4030: Cierra el bucle so­
1747C5CDRR22CD05C8C1 1303 bre TECLAS.
1RFE44CRCCC8FE16CRD C 1652
C6FE43200RCDCE22CDD5 1424 PULIZ. Aqui se llega si se
2DB7C2DCC63R93E23CFE 1585
0538023E013293E2CDE0 978 ha pulsado para mover a la
C73R92E2C6023292E2CD
10C8CDF5C7010500CD3D
1456
1137
izquierda.
1FC3DCC63P94E2B7C03C 1511 4060-4120: Se sacan las
3294E23E053295E2C93R 1175
95E23D3295E2B7200932 1135 coordena­
94E2CD1EC3C3CCC63P91 1609 das del mu­
E2C6023291E2CD10C8CD 1473
F5C7010500CD3D1FC3CC- 1146 ñeco y se
C6C93E053293E2C93R93 1295
E221R2C647232310FC7E 1154 act ual i zan
320R5B237E320B5BC93R 723 para com­
92E232045B3R91E23205 1001
SBCD 00FRC97C0F0F0FE6 1146 probar qué
03F658575D C9F321B888 1314 hay a su iz­
11004001001BEDB0FBC9 974
3 R 9 2 E 2 4 F 3 R 9 1 E 2 D 6 1847 1247 quierda. Se
C5C D R R 2 2 C D 0 5 C 8 C 1 1RFE 1489
28C8FE16C8FE432008CD 1282 guardan las
CE22CDD52DB7C03R92E2
C60F4F3R91E2D 61847C5
1508
1227
nuevas
CD R R22CD 05C8C1 1RFE28 1332 coordena­
C8FE16C8FE432008CDCE 1448 das en BC y
22CDD52DB7C03R91E2D6 1515
0 2 3 2 9 1E2CD10C8CDF5C7 1493 éste en la
010500CD3D1F189E3R90 687
E 2 F E 0 12814FE042810FE 1109 pila.
07280C3D3290E23EE832 884 4130: Se llama a una ru­
92E2C335C43R91E2FE5F 1594
3 8 153R90E2D6033290E2 1142 tina de la ROM.
3E373291E23E123292E2 1040
C335C43R90E2C6033290 1267 Esta rutina necesi­
E23E123292E23E9F3291 1 1 44 ta las coordena­
E2C33SC43R90E2FE0628 1398
10FE09280C3C3290E23E 873 das en el registro
0R3292E2C335C43R91E2 1305 BC y a la salida da
FE5F38133E573291E23E 1056
D E3292E2CD 10C8CD F5C7 1714 en HL la dirección
C3CCC63E7F3291E23ED E 1491
3292E2CD10C8CDF5C7C3 1687 del punto que se­
CCC60000000000000000 402 ñalan las coorde­
nadas.
LISTADO 4
(GRÁFICOS) DUMP: 55.104 N.° BYTES: 2M

LÍNEA DATOS CONTROL 134 DFB5FBDFB5FBDFB5FBDF 2 1 88 20 1


67 FFFFFC3FFC003FFC3FFD 1708
038007C0065E0FFF0FFE 969 FFBFFC3FFD E3BFFC3FFD 2000 135 B5FBD FB5FBDFB5FBD FB5 2 1 46 20 2
68 FBDFB5FBD FB5FBDFP5F8 2 2 00 20 3
0 F S 0 0 3 E 0 0 1 C 0 0 1800180 821 69 FFBFFC1FFD FFBFF803C4 1875 136
3 0 2 C 0 0 2 C 0 0 6 E0 0 6 E00660 950 1298 137 D FR 5FBD FR5FBD FR5FBD F 2 1 40 20 4
70 0023C003C7FFE3C003C0
4 0240024003C003800180 587 71 0003C003C00003C003C0 780 138 R5FBDFB5FBDFB5FBDFB5 2 1 30 20 5
5 018001C001E000000003 550 72 0003C003C00003C003C0 780 139 FBDFB5FBDFB5FBDFB5FB 2216206
6 8007C0065E0FFF0FFE0F 981 73 0003C003C00003C003C0 780 140 D FB5FBD FB5FBC03403FF 1812207
7 8 0 0 3 E 0 0 1 C 0 0 1 8 0 0 1800F 821 74 0003C003C00003C003C0 780 141 F F F F E 7 F F E 7 1800181800 1299206
8 C013402767779F67E703 1032 75 0003C003C00003C003C0 780 142 181800180007E003C001 49 9 202
9 C001E00670077806180E 706 76 0003C003C00003C003C0 780 143 8 0 01 80 018009905999D9 998 f i e
10 180C1C0F1E0000000380 240 77 0003C000FFFFFFFFFFFF 1725 144 9BD99BD99BD3CBCDB342 1763213
11 07C0065E0FFF0FFE0F80 981 78 FFFFFFFFFFFF3800001C 1 6 14 14 5 423C3C00000000000000 186 g j í
12 0 3 E 0 0 1 C 0 0 1 8 0 0 18003C0 873 79 38 00 001C3800001C3000 216 14 6 07E0081037E437DC0830 869 S I .
13 1C6027D773CF67C707C0 1201 80 000C3000000C00FFFFFF 837 147 63CE58165RDRB6DB76D R 3.460 S 1^
14 0 7 0 0 0 6 E 0 0 6 F 0 0 6 3 0 1C30 613 81 00F7F7F700FFFFFF00EF 1745 148 96O 9E0077FFE9FF9R003 15 5 0 2 1 )
1739 S l í
15 181C1E1E000000F0F0F0 832 82 EFEF00FFFFFF00F7F7F7 1 9 84 149 B6DBB6DRB6DR36DR36D4
16 F0F0F0F0F0F0F0F0F0F0 2400 83 00FFFFFF00EFEFEFEF00 1721 150 16D 016D 00RD 0000FF011 950 | 1 '
17 F0F0F3FD F1FD F3F0F0F0 2433 84 FFFFFFC00003B FFFFD B7 1842 151 8 8 2 1 8 4 4 1 8 2 4 9 9 2 9 189R1 H5821£
18 F0F0F0F0F0F0F0F0F000 2160 85 FFFD B1FFFD R3FD FD BBF9 2298 152 818181FFFFFFFF8181R1 182621)
19 000000FF000000FF0000 510 86 FDBFF5FD8FED FD BFED FD 2304 153 91918189918589898585 1374 22(
20 00FF000000FF000000FF 765 87 BE0009950015RR802995 857 154 818381FFFF0000FFFF00 140922:
21 000000FF000000FF0000 510 88 5555C00003FFFFFF00FF 1385 155 00FFFFFFFF000FFFF01F 1 5 6 l| | ‘
00FF0000FFFF0000FFFF 1275 89 FFFFC00003BFFFFD BF80 1723 156 FFF83FFFFC3FFFFC3FFF !9 6 1
23 0000FFFF0000FFFF0000 1020 90 FDBFBEFD BF7F7D BF497D 1719 157 FC3FFFFC3FFFFC1FFFF8 1926| | í
24 FFFF0000FFFF0000FFFF 1530 91 BF7F7D BFSD 7D BF637D BF 1458 158 1C003843FFC2BD FFBD BD 1422 2 2 .
25 0000FFFF00FFFFC100FF 1468 92 7F7DBFBEFD BF80FD BFFF 1904 159 FFB D B D FFB D 8C003D 5D FF 1 6 7 4 |2£
26
07 FF2B00FFFC5500FFFRR3 1558 93 F D C 0 0 0 0 3 FF FF FF 007000 1325 160 BR3D FFBC3C003C3D FFBC 131d 22.
00FFE50500FFC8PB00FF 1370 94 00F8003CF8000C70004E 758 161 3D FFBC3D FFBC3FFFF80C 1586 | | )
28 D 14500FFR2R3FFFF8541 1566 95 70204E70F07E70E03C71 1209 162 0 0 3 0 1E00781E00780000 3 4 8 22
29 FFFF22R3FFFF4141FFFF 1857 96 C01 S2 3C0182360182030 702 163 0007E008101428124812 423 2 3 ‘
30 288BFFFF5545FFFFRRR3 1686 97 18201818201818200C18 252 164 4 8 1 2 4 8 1 2 4 8 12480R500R 442 2 3 ;
31 FFFF5555FFFFFFFF0000 1700 98 20061800040000004410 150 16 5 50 08 10 042 00 4201FF81F 4-86
32 007C0000FR0000FB0000 627 99 CC19CC199C1D9C1D9C0D 997 166 F800000C300C300C3008 436 2 3 '
33 FR0000FD 0000FR0000FD 1006 100 B80D BS0F70077002E003 856 167 1008100810081000FFFF 5 9 8 23-
34 0000FR0000FD 1FFEFR3F 1101 101 E 0 0 3 C 0 1 F F 8 0 0 0 0 1 F F 800 977 16 8 FFFFFFFFFFFFC0000003 1725 23 !
35 FEFD 3FFEFR3FFEFD 3FFE 1 9 61 102 001FF81FF81FF81FFS0F 1131 169 D FFFFFFBD FFFF24BCFFF 2 2 41 |3<
36 F R 0 0 0 1 F D 1 5 5 5 F R2RRBFD 1326 103 F007E007E00001000080 831 17 0 F24BC7FFF24BC3F0124B 1616 2 3
37 3FFFFR3FFFFD 3FFFFR 3F 1770 104 01000080010000800100 259 17 1 D1F0124BD 8FFF24BD C70
38 17 2 1662 I ?
FFFD 0C000C1E001E1E00 622 105 00800100008001000080 386 124BDE70124BC0000003 715 § ?
39 1E000000003800380038 198 106 0 1 0 0 0 0 8 0 0 10003800SC0 458 173 FFFFFFFFFFFFFFFFFFFF 2 5 5 0 2 *'
40 00380038003800180018 216 107 0BR 017D 02FE87FF47E7C 1302 174 F F F F 0040024002600670 8 5 6 §*.
41 0018001800181FE81FE8 598 108 0 1 8 0 0 1 8 0 0 0 155555002R 491 17 5 0 E 7 8 1 E 3 F F C - 1 F F 8 1 F F 8 IB 1064 24,
42 0 0 1 8 1 F F 8 181818181818 447 10 9 RRRRE07FFFFFF0FFE7FF 2182 176 D 83D BC5FF65FF6D FF7D F 1840 24 .
43 10081008100810081008 120 11 0 08FFD BFE08FFE7FE04FF 1743 177 F7EE77F7EF7BDE3DBC3E 1746 24;
44 00FFFFFFFF0000000140 1085 111 FFFE0400000004F5FFRE 1191 178 7C1FF80FF003C0000000 853 24
45 10080500000001000000 30 11 2 04F5FFRE04F5FFRE04F5 1605 179 000000F60001F78003F7 8 7 2 §* !
46 0 1 4 0 1 0 0 8 0 5 0 0 0 0 0 0 0 1FF 350 113 FFR E0400000004F5FFR E l i l i 180 C -0 0 7 F 7 E 0 0 F 8 1 F 0 186618 1.204 | A
47 F F F F F F 0 0 F F F F 8 0 0 18001 1533 114 04F5FFRE04F5FFRFF800 1605 181 3 4 2 4 2 C 6 4 2 4 2 6 D 8 2 4 1 8 1F
48 6 1 3 §1
8001800180018001FFFF 1026 115 0 0 00 18 000 0187C00007C 296 182 E 7 F 8 0 0 0 0 0 0 1 0 0 0 0 8 1FE7
49 81018101810181018101 650 11 6 0 0 1 8 7 C 0 0 1 8 3 8 0 0 18003E 314 183 F 8 102408142408142428
765 II
468 I I 1
50 81018101FFFF30018001 1028 11 7 183822 3 C 7 C 2 2 7 EFE 2260 842 184 1 2 2 4 C 8 1 1 2 4 0 8 1 0 2 4 0 8 1F
51 80018001800180018001 645 11 8 06226EF6146E06086EFE 904 185 FFF80000007FFFFE7FFF 1521 f|:
52 F F F F 8 101810181018101 1030 11 9 0860FE087EFE3E7E00FF 1189 186 FE7FFFFE001C00FF0038 1229 |5
53 81 01 81 013 10 181 0100FF 775 120 FFFFFFB5555555FFFFFF 1998 187 1C03FFC038080FFFF010 1068 ||;
54 F F F F F F 0 0 0 0 8 0 0 1000080 1022 121 FF04000020FBFFFFD F52 1357 188 0 8 3 F F F F C 1 0 0 8 F F F F F F 10 1 3 83 ||,
55 01000080010000800100 259 122 R flflR 8 C 3 0 0 0 0 0 0 R 5 0 0 0 0 0 618 189 17000000E837FFFFFFEC 1311 251
56 00800100008001000080 386 12 3 0C31FFFFSP51FFFF8C31 1489 190 37FFFFFFEC37FFFFFFEC 2112 25
57 0 1 F F F F F F F F 0080008000 1277 124 C0038R51BFFD 8C31BFFD 1491 191 37FFFFFFEC17FFFFFFE8 2076 25,
58 80008000800080008000 640 12 5 8R 51BFFD 8C31BFFD 8R51 1515 192 00000000007FFFFFFFFE 1146 25 '
59 8000800080008000S0FF 895 12 6 BFFD8C31C0038R51FFFF 1557 193 FFFFFFFFFFFFFFFFFFFF 2550 26i
60 F F F F F F 0 0 F F F F F F 8 0 1801 1683 12 7 8C31FFF88R51FFF08C31 1595 194 FFFFFFFFFFFFFFFFFFFF 2550 26
61 80180180180180180180 587 12 8 FFFF8R51C0038C31BFFB 1557 195 FFFFFFFFFFFFFFFFFFFF 2550 26
62 1S01801801FFFFFFFFFF 1453 12 9 8R 51BFF08C31BFFD 8R51 1515 196 F3FFFFFFCFFFFFFFFFFF 2490 26
63 F F 8 0 18 0 18 01801801801 714 130 BFFD 8C31BFFD 8R51BFFD 1740 197 0C000000300C00000030 120 26
64 8 0 1 8 0 1 8 0 1 8 0 1 8 0 1 8 0 1FF 714 131 8C31C0038R51FFFF8C31 1302 198 0C0000003000018003C0 384 26
65 FFFF00FFFFFFFFFFFFFF 2295 13 2 FFFF8RF9FFFF9F00FFFF 2076 199 03C003C007E007E00180 981 26
66 FFFFFF00000000003FFF 1083 133 FFFFFFFFC03403D F85FB 1922 200 018003C003C003C00180 843

tonces se na POINT de la 4240: Se hace una llama­ chocado


vuelve a ROM que dice si el da para poner el con una es­
VOLV. punto de las coor­ valor que hay en­ calera y sal­
4220: Si no es 67 denadas que están cima de la pila de ta a VOLV.
se salta a en el registro BC, la calculadora en 4270-4280: Aquí se lle­
CONT8. Si está a uno o a 0. el registro A. ga si no hay
es 67 es que El resultado lo de­ ningún obs­
hay una es­ ja encima de la pi­ 4250-4260: Si el valor táculo. Se
calera. la de la calculado­ de A es uno, toma en A
Se llama a la ruti- ra. es que ha el valor de
00007FFE781E7BDE7RSE 1092
kt EB
7BDE700E700E700E700E 84-9
700E700EFFDEDEDEDEDE 1617
DEDEDEDEDEDEDEDEDEDE 2220
DEDEDEDEDED2D2D2D2CC 2154
CCCCCCDEDEDEDEEDEDED 2211
EDEDEDEDEDEDEDEDEDED 2370
EDEDEDEDEDEDED2D2D2D 1794
2DCCCCCCCCEDEDEDED00 1809
FFFFFFFFFFFFFFFFFFFF 2550
FFFF000000003EFBEFBC 1250
3EF00FBC000FF0002F3F 870
FCF42EFEFF7401FCFF80 1803
3BFPFFDC3BF6FFDC03F7 1814 4330-4340: Se almace­
7FC02BF7BDD42BF7B1D4
03B7CDC03B3BEDDC3B5B
1689
1308 na la nue­ LISTADO 5 (DATOS)
DDDC036BFDC02B73FBD4 1617
2B77FBD4037BF7C03BB7 1432 va forma y DU M P: 4 5 0 0 0
EFDC3BCFDFDC0017D817 1430 se llama a N .° BYTES: 2 8 5
D817D800003F7C3F7C00 829
007BEE 7BEE0000DF7DDF 1293 BFORM.
7D0000FBEFFBEF000000
01C003E07R60FFF07FF0
1105
1500
4350-4370: Decrementa 04142F2806142FS00513 288
01F007C0038001800180 829 la coorde­ 5F7804104FB007050F4F 596
3006135F 60021B376007 451
03F002C8E6E4F9EEE7E6 1851 nada X del
03C007800E601EE01860 814 1D4F88031E4FC0040521 590
372805185F5003203748 461
1870383078F 000000001 601 muñeco y lo 07173F80040737R80208 465
C003E07R60FFF07FF001 1500
F007C003800180018003 S31 a lm a c e n a 1R9F4803178798061D4F 684
C00638EBE4F3CEE3E603 1626 30051D3F 30051D2F3005 327
E000E007600F600C600C 782
de nuevo en 135F80041B3778021R57 563
38381878780000000F 0F 406 COORX. B8070C127F20052R7F48 626
0F0F0F0F0F0F0F0F0F0F 150 0718R770030C7F680607 569
0F0F0FCFBF8FBFCF0F0F 1014 4380: Se llama a REST 7FR0071R94C8041E4F38 837
07293748022447700623 437
0F0F0F0F0F0F0F0F0F0F 150 que imprime la 376806063790021E4FR8 649
00FF000000FF000000FF 765
000000FF000000FF0000 510 pantalla que había 0709297F480518R77804 576
00FF000000FF000000FF 765 207F7006217FR0021787 757
000000FFFF0000FFFF00 1020 sido almacenada. 08071R57200712374005 501
00FFFF0000FFFF0000FF 1275 4390: Se llama a PCOOR. 135F68031C3788060613 471
FF0000FFFF0000FFFF00 1275 R77802127FR8030D3F 30 729
00FFFF000083FFFF00D4 1363 07114F68050C3760060B 392
FFFF00RR3FFF00C55FFF 1545 4FB0070R127F480218R7 682
780316877007127FR002 706
00R0R7FF00D513FF00R2 1231
8BFF00C545FF0082R1FF 1461. 19373805193748061937 379
5806135F7804154FB807 623
FFC544FFFF8282FFFFD1
14FFFFR2RRFFFFC555FF
2009|
1909 LISTADO 6 t^LWACENl 0D3FB0030R0F97300629
7F480218R778040C7F68
526
759
FFRRRRFFFFFFFFFFFF00 2125
3E00005F 0000BF 00005F 443 07067F98021097B0060B 654
0000BF00005F0000BF00 477 — xh p ut . : - - 3 LORDe- acooE, 4F300710375804135F78 543
005F0000BF00005F7FF8 756
^ / n ^ V a | a: ; HEHr 06142F 80030000000000 204
BF7FFC5F7FFCBF7FFC5F 1709 de ancho
7FFCBF 80005F RRR88FD5 1535
545FFFFCBFFFFC5FFFFC 1986
BFFFFC30003078007878 1154 90ál I N P UT "C , ET d£=d LO
00780000001C001C001C 204 ? " 'i a 9 p t d= 6s ? 6 f r c V o n donde
001C001C001C00180018 132 9 0 2 4 XNPUT "4.1 S 1 l FT di<-=de
0018001800180017F817 366 T0 ad +l *a ® - g _ i 5TEP
4400-4410: Se hace una
F818001FF81818181818 671 a& a>-»„D e = l
pausa lla ­
18100810081008100810 136 9® ±t^O
90S0 FOR ^9=d
^P E E K 9
080001C003E07R60FFF0 1141
9060 de=da +^- ., i EX d mando a
7FF001F007C003800180 1067
01800340034007600760 469 una rutina
066002400240030001C0 622 de la ROM
01800180038007800000 524
00000000000000000000 0 y con el va­
lor de espe­
!i| ! S ^ i 0 ^ ú ^ f e ü c^ ^ NZ9; ra en BC.
4420: Se salta a VOLV.
4450-4510: Se calculan
FORMA y se Sl308 INPUT
9130 Ü T «<
I=,B
|R 920®
92®®
las coorde­
a
incrementa. 9140 xr
91*® ll a*22* nadas que
4290-4300: Si es mayor
que mueve
I1|I XHPUT
hay a la de­
recha del
se llama a LONGU muñeco.
CAMB1. UD 1 S i- E HSCODE C ¿ . .. r BPOO 4520-4530: Se halla el
4310-4320: Si es menor «-TO co lo r que
que 5 se g2i}0 pRlNTf % 56) hay en esas
llama a 92 í ^ eturn c o o rd e n a ­
CAMB1. das.
c o n te n d rá MA a 5 y re­ das.
4560-4570: Si hay una
puerta salta un 1 y se re­ torna. 5630-5670: Si es un te­
a PUEDE. torna. 5160-5210: Halla la di­ cho o un
4860-4870: Pone SALTO rección don­ suelo se re­
4580-4590: Si hay un to rn a , ya
a 1. de se en­
muro salta a que el mu­
4880-4900: Se carga en cuentra el
VOLV. ñeco no de­
CO NT el gráfico de la
4600-4610: Si no hay número de form a del be caer.
una escale­ veces que muñeco que 5680-5690: Si no es el
ra salta a hay que im­ color de una
habrá que
CONT9. primir. escalera sal­
incrementar
4620-4650: Si ha choca­ la coorde­ 5220-5270: La almace­ ta a
do con una nada Y del na en las eti­ CONT12.
escalera se muñeco. Se quetas que 5700-5730: Si está to­
salta a retorna. utiliza la ru­ cando la es­
VOLV. SUBIR: Aquí se llega si tina de im­ calera re­
4660-4690: Si el valor SALTO contiene 1. presión y re­ torna.
de FORMA 4930-4950: Decrementa torna. 5740-5940: Realiza lo
es m enor el contador 5290-5340: Coloca las mismo pero
que 5 salta de veces c o o rd e n a ­ para las
a CONTÓ. que hay que das del mu­ c o o rd e n a ­
4700-4710: Se carga 1 hacer subir ñeco en las das que hay
en A y se al­ al muñeco. e tiq u e ta s debajo del
macena en 4960-4970: Si no es 0 que utiliza la muñeco y a
FORMA. salta a rutina de su derecha.
4720: Se llama a BFORM. CONT7. im p re sió n , 5950-5970: Decrementa
4980-4990 : Si no es 0 se lo imprime y la coorde­
4730-4750: Se incremen­ pone SAL­ retorna. nada Y y se
ta la coor­ TO a 0 y se 5360-5440: Halla la di­ almacena
denada X llama a BA­ rección del en COORY.
en dos y se JAR. archivo de 5980-6020: I m p r i m e
almacena. 5 00 0 : Se vuelve a TE­ atributos de a nt a 11a ,

R
4760: Imprime la panta­ CLAS. una dire c­ ama A
lla. 5010-5030: Incrementa ción del ar­ PCOOR,
4770: Se llama a PCOOR. la coorde­ chivo de hace una
4780-4790: Se realiza nada Y del pantalla. pausa y cie­
una pausa. muñeco y 5460-5580: Calcula las rra el bucle
4800: Salto a VOLV. se almace­ c o o rd e n a ­ sobre BA­
4830-4850: Aquí se lle­ na. das que hay JAR.
ga si se ha 5040: Recupera la pan­ debajo del 6050-6110: Si está en la
pulsado la talla. muñeco en pantalla 1,
tecla de sal­ 5050: Llama a PCOOR. su parte iz­ 4 0 7 salta a
to. Si el mu­ 5060-5070: Hace una quierda. CONT10.
ñeco ya es­ pausa. 5590-5620: Halla el co­ 6120-6130: Decrementa
taba saltan­ 5080: Vuelve a teclas. lor de estas el número
do, SALTO 5120-5140: Pone FOR­ c o o rd e n a ­ de pantallas
y lo almace­
na en PANT.
6140-6160: Actualiza
las coorde­
nadas del
muñeco y se
salta a EMP.
6170-6190: Si el muñeco
está en el pi­
so de aba­
jo salta a
CONT11.
6200-6220: Di smi nuye
el número
de pantalla
en 3. 19 ; * H i i i H H i i « « i < « i < i 518 DEFB 16,16,199,228 1818 OUT (254),A
6230-6270: Actualiza 28 :* * 528 DEFB 14,24,232,228 1828 LO (MODO),A
las coorde­ 38 ¡«RUTINA DE ÑAPEADO « 538 DEFB 14,24,25,221 1838 LD HL.SUEL
nadas del 48 ¡* » 548 DEFB 24,24,74,221 1848 LD DE,SUELO
muñeco y 58 558 DEFB 16,24,147,221 1858 CALL SITUA
¿8 548 DEFB 32,14,194,221 1868 LD B,8
salta a EMP.
71 ORO 58988 578 DEFB 14,24,5,222 1878 REP1 PUSH BC
6280-6350: Aumenta en
88 ENT 58888 588 V ENTAN DEFB 24,24,54,222 1888 CALL IMPR1
3 el número 598 DEFB 48,24,127,222
98 1898 POP BC
de p a n ta ­ 188 JP SEGUIR 688 DEFB 14,24,248,222 1188 LO A,(POSX)
lla, se ac­ 118 418 TEJAD DEFB 32,14,41,223 1118 ADD A ,32
tualizan las 128 1MPR1 EOU 84888 628 DEFB 32,24,186,223 1128 LD (POSX),A
coordena­ 138 PANT EQU 58888 638 DEFB 16,14,283,223 1138 DJNZ REP1
das del mu­ 148 COORY EOU 58881 448 DEFB 16,24,234,223 1148 LD HL.TECH
ñeco y salta 158 COORX EOU 58882 65» DEFB 14,24,29,224 1158 LD DE,TECHO
a EMP. 188 FORMA EOU 58883 448 PUERTA DEFB 8,32,78,224 1168 CALL SITUA
178 SALTO EQU 58884 478 ESCAL DEFB 32,32,111,224 1178 CALL SUBI
6380-6420: Si está en la
188 CONT EOU 58885 688 DEFB 24,24,248,224 1188 LD A , 175
pantalla 6 ó 198 POSX EOU 23388 698 DEFB 16,24,57,225 1198 LD (POSY),A
9 salta a 288 POSY EOU 23381 788 OEFB 16,24,186,225 1288 CALL SUBI
CONT13. 218 NODO EQU 23382 718 1218 JR CONT 1
6430-6470: Aumenta el 228 ANCHO EOU 23383 728 DPAN DEFB 284,175 1228 SUBI LD 8,8
número de 238 ALTO EQU 23384 738 DEFB 221,175 1238 REP2 PUSH BC
pantalla, se 248 COLOR EOU 23385 748 DEFB 242,175 1248 CALL 1MPR1
act ual i zan 258 INFER EOU 23306 758 OEFB 7,176 1258 POP BC
288 SUPER EOU 23387 748 DEFB 48,176 1268 LD A,(POSX)
las coorde­
27» 778 DEFB 89,174 1278 ADD A ,32
nadas del
288 TABLA DEFB 14,24,64,215 788 DEFB 124,176 128» LD (POSX),A
muñeco y se 298 DEF8 16,24,113,215 798 DEFB 151,174 1298 DJNZ REP2
vuelve a 388 DEFB 16,24,162,215 888 DEFB 192,174 RET
138»
EMP. 318 PUERT2 DEFB 8,32,211,215 818 1318 CONT1 LD A,(PANT)
6480-6500: Si el muñe­ 328 ESCAL2 DEF8 32,32,244,215 828 1328 CP 3
co está en 338 DEFB 24,24,117,214 838 SEGUIR LD A ,2 1338 JR 2.MUR02
el piso de 348 DEFB 14,24,198,214 848 CALL 81681 1348 CP 6
abajo salta 358 TECHO DEFB 32,8,239,214 858 LD A ,7 1358 JR 2.MUR02
388 MURO DEFB 14,32,14,217 868 LD <23693),A CP 9
a CONT5. 1348
378 SUELO DEFB 32,14,81,217 878 LD (23424),A 1378 JR Z.MUR02
6510-6570: Actualiza 388 DEFB 24,14,146,217 888 LD A ,94 1388 LD HL.PARl
las coorde­ 398 DEFB 48,24,195,217 898 LD (COORX),A 1398 LD DE,PARED
nadas, recu­ 488 DEFB 32,8,68,218 988 LD A ,127 1488 CALL SITUA
pera la pan­ 418 PARED DEFB 8,32,93,218 918 LD (COORY),A 1418 LD HL.PUEl
talla, llama 428 DEFB 24,16,124,218 928 XOR A 1428 LD DE,PUERTA
a PCOOR y 438 DEFB 24,14,175,218 938 LD (SALTO),A 1438 CALL SITUA
se vuelve a 448 DEFB 24,14,224,218 948 INC A 144» LD A,(PANT)
TECLAS. 458 OEFB 14,24,17,219 958 LD (FORMA) ,A 1458 CP 3
6580-6640: Actualiza 488 DEFB 16,24,44,219 968 LD A ,8 1448 JR C.C0NT2
478 DEFB 32,14,115,219 978 LD (PANT),A 1478 LD HL.PUE2
las coorde­
488 DEFB 24,16,188,219 988 1488 LD DE,PUERTA
nadas, lla­ 498 DEF8 32,32,229,219 998 EMP CALL 3435 1498 CALL SITUA
ma a REST, 588 DEFB 24,32,182,228 1888 LD A,1 1588 LD HL.PAR2
llam a a
PCOOR y
vuelve a TE­
CLAS.
1511 LD DE, PARED 2818 JR TEJADO 2518 CP 4 3818 POP 8C 3518 PUE4 DEFB 147,8,48
1528 CALL SITUA 2828 MUR LD A, <PANT) 2528 JR 2 ,ESC 3828 DJNZ OTRA 3528 MUR2 DEFB 135,8,22
1538 JR C0NT2 2838 CP 2 2538 CP 7 3838 LD H L,14384 3538 MUR3 DEFB 43,248,22
1548 HUR02 10 HL.MUR3 2848 JR 2 ,TEJADO 2548 JR 2 ,ESC 3848 LD DE,35888 3548 PUE7 DEFB 95,248,48
1558 LO DE.MURO 2858 LD HL.MUR1 2558 JR C0NT4 3858 LD BC.4912 9558 MUR4 DEFB 147,248,22
1541 CALL SITUA 2848 LD DE.MURO 2548 ESC LD HL.ESC1 3848 LDIR 3548 PUE8 DEFB 135,248,48
1578 LO A.(PAKT) 2878 CALL SITUA 2578 LD DE.ESCAL 3878 JP SE6U2 3578 PAR4 DEFB 135,248,4
1588 CP 3 2888 LD HL.PAR5 2588 CALL SITUA 3888 3588 MUR5 DEFB 95,248,22
1598 JR 2 ,TRES 2898 LD DE, PARED 2598 C0NT4 LD A,(PAN!) 3898 SITUA 01 3598 SUEL DEFB 31,8,22
1488 LO HL.PUE7 2188 CALL SITUA 2488 CP 4 3188 LD A,(DE) 3488 TECH DEFB 183,8,48
1418 LO DE.PUERTA 2118 LD HL.PUE5 2418 JR 2 ,ESCB 3118 LD (ANCHO),A 3418 MUR4 DEFB 43,8,22
1428 CALL SITUA 2128 LD DE.PUERT2 2428 CP 9 3128 INC DE 3428
1438 LO HL.PAR1 2138 CALL SITUA 2438 JR 2 ,ESCB 3138 LD A,(DE) 3438 FIGURA DEFB 44,215
1448 LO DE,PARED 2148 LD A,(RANT) 2448 JR CINT5 DEFB 113,215
3148 LD (ALTO),A 3448
1458 CALL SITUA 2)58 CP 1 2458 ESCB LD HL.ESC2 DEFB 44,215
3158 INC DE 3458
1448 LO HL.PUE8 2148 JR 2 ,TEJADO 2448 LO DE.ESCAL2 DEF8 142,215
3148 LD A,(DE) 3448
1478 LO DE,PUERTA 2178 LO KL.PAR4 2478 CALL SITUA (1NFER),A 3478 DEFB 184,225
3178 LD
1488 CALL SITUA 2188 LD DE,PARED 2488 C0NT5 LO A,(PANT) 3488 DEFB 234,223
3188 INC DE
1498 LO HL.PAR4 2198 CALL SITUA 2498 CP 7 3498 DEFB 184,225
3198 LD A,(DE)
1788 LD DE, PARED 2288 LD HL.PUE4 2788 JR N2.SI6 LD (SUPER),A 3788 DEFB 29,224
3288
17)8 CALL SITUA 2218 LD DE.PUERT2 2718 LD HL.MUR4 3218 LD A ,( HL) 3718
1728 LO HL.MUR4 2228 CALL SITUA 2728 LD DE .MURO 3228 LD (POSY),A 3728 SEGU2 LD A ,14
1738 LO DE.MURO 2238 LD HL.MUR2 2738 CALL SITUA LD (ANCHO),A
3238 INC HL 3738
1748 CALL SITUA 2248 LD DE.MURO 2748 3248 LD A ,( HL) 3748 LD A ,24
1758 JR COMI 2 2258 CALL SITUA 2758 (POSX),A (ALTO),A
3258 LD 3758 LO
1748 TRES LD HL.MUR5 2248 TEJADO LD A,(PANT) 2748 SI 6 LD A,(PANT> 3248 INC HL 3748 LD A ,7
1771 LD DE,MURO 2278 CP 4 2778 LD B,A (COLOR),A
3278 LD A,(HL) 3778 LD
1788 CALL SITUA JR NC.C0KT3 2788 LD DE.DPAN-2
2288 3288 LD (COLOR),A 3788 CALI BFORM
1798 C0NT2 LO A.tPAWT) 2298 LD DE.TEJAD 2798 BUC1 INC DE PUSH HL CALL PCOOR
3298 3798
1888 CP 1 2388 LD HL.TEJ 2888 INC DE CALL IMPRI
3388 CALI. IMPR1 3888
1818 JR Z,MUR 2318 CALL SITUA 2818 DJN2 BUC1 3318 POP HL 3818
1828 CP 4 2328 LD B ,5 2828 LO A,(DE) 3328 El 3828
1838 JR Z.MUR 2338 REP3 PUSH BC 2838 LD L,A RET 3838 TECLAS LD A,«FE
3338
1848 CP 7 2348 LD B ,8 2848 INC DE 3848 IN A, (BFE)
3348
1858 JR Z.MUR 2358 REP4 PUSH BC 2858 LO A,(DE) 3858 BIT 1 ,A
3358
1848 LD HL.PAR3 CALL IMPR1 2848 LO H,A JR 2 ,PUL 12
2348 3348 PARI DEFB 95,248,4 3848
1878 LO DE,PARED 2378 POP BC 2878 LD A,(HL) LD A, «FE
3378 PUE1 DEFB 43,248,48 3878
1888 CALL SITUA 2388 LD A.(POSX) 2888 LD 8, A 3888 IN A,(«FE)
3388 PUE2 DEFB 135,248,48
1898 LD HL.PUE3 2398 ADD A ,32 2898 OTM PUSH BC BIT 2,A
3398 PAR2 DEFB 147,248,4 3898
1988 LD DE.PUERT2 2488 LD (POSX),A 2988 INC HL JR Z.PULOE
3488 PAR3 DEFB 95,8,4 3988
1918 CALL SITUA 2418 DJN2 REP4 2918 LD A, (HL) DEFB 147,8,4 3918 UOLV LO A.87F
3418 PAR4
1928 LO A.ÍPANT) 2428 LO A , <POSY) 2928 INC HL DEFB 43,8,48 IN A,(«FE)
3428 PUE3 3928
1938 CP 3 2438 SUS 14 2938 LO B,A DEFB 135,8,48 3938 BIT 1, A
3438 PUE4
1948 JR C.MUR 2448 LO (POSY),A 2948 LO DEJABLA-4 DEFB 135,14,47 3948 CALI. Z.PSALT
3448 ESC1
1958 LD HL.PAR4 2458 POP BC 2958 8UC2 INC DE DEFB 43,288,47 LD A.IBF
3458 ESC2 3958
1948 LO DE, PAREO 2448 DJNZ REP3 2948 INC DE DEFB 151,128,2 3948 IN A,(BFE)
3448 VENT
1978 CALL SITUA 2478 LO HL.VEMT 2978 INC DE 3478 TEJ DEFB 175,8,2 3978 BIT 8, A
1988 LO HL.PUE4 2488 LD DEMENTAN 2988 INC DE 3488 MUR1 DEFB 95,8,22 3988 RET 2
1998 LO DE.PUERT2 2498 CALL SITUA 2998 DJNZ 8UC2 3498 PAR5 DEFB 43,8,4 3998 LD A,(SALTO)
2888 CALL SITUA 2588 COMI3 LD A,(PAm> 3888 CALL SITUA 3588 PUE5 DEFB 43,8,48 4888 OR A
6818 CALL I1F3D
6828 JR BAJAR
6836
6848
6858 PUE12 LD A,(PANT)
6868 CP 1

FIG. 2 6878
6688
JR
CP
2.C0NT18
4
6898 JR 2 ,CONT1•
7, 224., 3 , 1 9 2 , 1 , 1 2 8 , 1 , 1 2 8 , 1 , 1 2 8 , 9 ,
144-.89, 1 5 3 / 2 1 7 , 1 5 5 , 2 1 7 , 1 5 5 , 2 1 7 , 1 6188 CP 7
55,211,203,205,179,66,66,60,60,0 6116 JR 2.C0NT18
,0,0,0,0 6128 DEC A
6138 LD (PAÑI),A
6148 LD A, 232
4818 JP N2,SUBIR 6158 LD (COORX),A
4518 PUSH BC 5818 C0NT7 LD A.ÍCOORY) 5511 El
6168 JP ENP
4828 CALL 2 ,BAJAR 4528 CALL 8874 5828 ADD A ,2 5528 RET 6170 CONT 18 LD A,(COORY)
4838 JR TECLAS 4538 CALL BATRI 5838 LD (COORYÍ.A 5531
6180 CP 95
4848 4548 POP BC 5848 CALL REST 5548 BAJAR LD A,(COORX)
6198 JR c ,c o r n il
4858 4558 LD A,(DE) 5058 CALL PCOOR 5551 LO C,A
6208 LD A.ÍPANT)
4868 PULI 2 LO A.ÍCOORX) 4566 CP 68 5068 LD BC, 5 5548 LO A.ÍCOORY)
6218 SU8 3
4878 DEC A 4578 JP 2 ,PUEDE 5878 CALL 8IF3D 5571 SU8 24
6228 LO (PAÑÍ),A
4888 LD C.A 4586 CP 22 5888 JP TECLAS 5581 LD 8, A
6238 LD A ,55
4898 LD A.ÍCOORY) 4598 JP Z.VQLV 5898 RET 5591 PUSH BC
6248 LD (COORY), A
4188 SUB 23 4686 CP 67 5188 5688 CALL 8874
6258 LD A , 18
4118 LD B.A 4618 JR N2.C0NT9 5110 5618 CALL BATRI
6268 LD (COORX), A
4128 PUSH BC 4628 CALL 8918 5128 CAMB1 LD A ,5 5621 POP BC
6278 JP EMP
4138 CALL 8874 4638 CALL 11733 5136 LD (FORMA),A 5631 LD A,(DE) 6286 CIIÍT11 LD A,(PANT)
4148 CALL 8ATRI 4648 OR A 5148 RET 5641 CP 48
6290 ADD A ,3
4158 POP BC 4658 JP N2.VOLU 5158 5651 RET 2 6368 LD (PANT),A
4168 LD A,(DE) 4668 CONT9 LD A,(FORMA) 5168 BFORM LD A,(FORMA) 5668 CP 22 6316 LD A , 18
4178 CP 68 4678 INC A 5170 LD HL.FIGURA-2 5678 RET 2 6326 LO (COORX),A
4188 JP 2.PUEI2 4688 CP 5 5188 LD 8, A 5688 CP 67 6338 LD A , 159
4198 CP 22 4698 JR C.C0NT6 5198 BUC3 INC HL 5698 JR NZ,CONT12 6346 LO (COORY), A
4288 JR 2 ,VOLO 4788 LD A,1 5288 INC HL 5788 CALL 8918
6350 JP EMP
4218 CP 67 4718 CONT6 LD (FORMA),A 5216 DJN2 BUC3 5718 CALL 11733 6368
4228 JR N2.C0NT8 4728 CALL 8F0RM 5228 LD A , (HL) 5728 OR A
6370
4236 CALL 8918 4738 LD A.(COORX) 5236 LD (1NFER),A 5738 RET N2
6388 PUEDE LD A,(PANT)
4248 CALL 11733 4748 ADD A ,2 5248 INC HL 5748 CCNTI2 LD A,(COORX) 6398 CP 6
4258 OR A 4758 LD (COORX).A 5258 LD A,(HL) 5758 AOD A , 15
6400 JR 2 .CONT 13
4268 JR NZ.VOLV 4768 CALL REST 5268 LD (SUPER).A 5768 LD C,A
6418 CP 9
4278 C0NT8 LD A,(FORMA) 4778 CALL PCOOR 5278 RET 5778 LD A . ÍCOORY)
6428 JR 2 ,CONT i 3
4288 INC A 4788 LD BC ,5 5288 5788 SU8 24
6438 INC A
4298 CP 9 4798 CALL I1F3D 5298 PCOOR LD A,(COORX) 5798 LD B, A
6448 LD (PANT),A
4386 CALL NC.CAHBl 4888 JP VOLV 5388 LD (POSX),A 5888 PUSH BC
6458 LD A.1B
4318 CP 5 4818 5316 LD A.ÍCOORY) 5818 CALL 8874
6468 LD (COORX), A
4328 CALL C.CAM81 4826 5326 LD (POSY) ,A 5828 CALL 8ATR1
6478 JP B4P
4338 LD (FORMA),A 4838 PSALT LD A,(SALTO) 5338 CALL 1MPR1 5838 POP BC
6488 CONT 13 LD A,(COORY)
4346 CALL 8F0RM 4846 OR A 5348 RET 5848 LD A.ÍDE) 6490 CP 95
4358 LD A.(COORX) 4858 RET N2 5358 5858 CP 48 6588 JR C.CCNT15
4368 SUB 2 4868 INC A 5368 BATRI LD A,H 5868 RET 2
6518 LO A ,87
4378 LD (COORX).A 4878 LD (SALTO),A 5376 RRCA 5878 CP 22
6526 LD (COORY),A
4388 CALL REST 4888 LD A ,5 5388 RRCA 5888 RET 2
6536 LD A, 222
4398 CALL PCOOR 4898 LD (CONT),A 5398 RRCA 5898 CP 67
6546 LD (COORX),A
4488 LD BC, 5 4988 RET 5488 AND 3 5988 JR NZ.CCKT14
6556 CALL REST
4418 CALL 81F3D 4918 5416 OR 858 5918 CALL 8918
6566 CALL PCOOR
4428 JR VOLO 4928 5428 LD D,A 5928 CALL 11733
6570 JP TECLAS
4438 4938 SUBIR LD A,(CONT) 5438 LD E,L 5938 Ofl A 6580 CONT15 LD A , 127
4448 4948 DEC A 5448 RET 5948 RET N2
6596 LD (COORY),A
4458 PULDE LD A.ÍCOORX) 4958 LD (CONT),A 5456 5958 C0NT14 LD A.ÍCOORY)
6680 LD A, 222
4468 ADD A, 16 4968 OR A 5468 REST DI 5968 SUB 2
6618 LD (COORX),A
4478 LD C.A 4978 JR N2.C0NT7 5476 LD H L,35888 5978 LD ÍCOORY),A
6628 CALL REST
4488 LD A.ÍCOORY) 4988 LD (SALTO), A 5488 LD DE,16384 5988 CALL REST
6636 CALL PCOOR
4498 SUB 23 4998 CALL BAJAR 5496 LD BC.6912 5998 CALL PCOOR
6646 JP TECLAS
4588 LO 8,A 5866 JP TECLAS 5588 LD1R 6888 LD BC.5
■■MMMMMMHnMMBi ■■■■■■■■■■■i
En alguna ocasión
hemos comentado los
diferentes programas
que sobre gráficos se
encuentran en el
mercado. En estas
páginas encontraréis,
a modo de guía, el
análisis de las
características de
cada uno. Desfilarán
diseñadores gráficos,
ampliaciones de
memoria y
ensambladores; es
decir todas las
herramientas que
facilitarán nuestro
trabajo. Por razones
obvias, algunos de
sobra conocidos por
los usuarios de
Spectrum ocuparán
un lugar mínimo,
dedicando mayor
espacio a programas
de reciente aparición
que no han sido
sometidos hasta
ahora al minucioso
examen que pasaron
sus precedesoras.

emos eliminado

H
de esta guía
aquellos p r o ­
gramas que no
han superado el
nivel de calidad establecido.
Creemos que esta selección
beneficiará tanto a los mu­
chos asiduos a los progra­
mas de dibujo, como a to­
dos aquellos que se inicien
en este mundo, sustituyendo
el lápiz y el papel por él, sin
duda, más cómodo diseño a
través del ordenador.
"THE ART STUDIO"
«The Art Studio» fue cali­
ficado en su momento como
la mejor utilidad de dibujo
para Spectrum situándola
pareja al potente «Mac­
Paint» del Macintosh. Entre
sus peculiaridades destacan
el sencillo manejo por ico­
nos y la posibilidad de em­
plear ratón, ¡oystick o recu­
rrir al teclado. Además de
ser el único programa con
menú de impresoras.
Consta de un menú prin­
cipal con once opciones di­
ferentes, de las que se ge­
neran submenús específicos.
La forma de acceder a ellos
es trasladar un icono sobre
la opción deseada y dejar
volar nuestra imaginación
combinando las amplias po­
sibilidades de este progra­
ma de dibujo.
Las opciones del menú
principal son: bINbW DdÜ IW
PRINT, permite sacar una
copia por impresora de la
pantalla, eligiendo el tama­
ño y justificando a nuestro MICROMñNIR
antojo a derecha o izquier­
da.
FILE, se utiliza para vol­
car en pantalla los gráficos
salvados en cinta. Permite
además de salvar, cargar y
verificar archivos, o mezclar
dos pantallas.
ATTRS, sirve para modifi­
car los atributos con los que
trabajemos, cambiando co­
lor de tinta, papel o borde
y detallando brillo, flash, ¡n-
verse, etc.
PAINT, podremos elegir
para dibujar entre lápiz,
spray y brocha, modifican­
do la configuración dentro
de un submenú de dieciseis
especificaciones.
MISC, incluye un variado
submenú formado por sien­
te opciones que permiten
desde borrar la pantalla,
crear un rejilla de los atribu­
tos u observar la pantalla
completa.
UNDO, elimina la última
operación realizada en la
pantalla.
W IN D O W , permite deli­
mitar ventanas y trabajar
con ellas aprovechándonos
de su utilidad, empleando
las dieciseis variantes del
menú.
FILL, rellena con color o
con cualquiera de las 64
tramas una superficie pre­
viamente delimitada.
MAGNIFY, para ampliar
una zona de la pantalla en­
tre dos y ocho veces, y tra­
bajar en ella.
TEXT, introduce texto en
pantalla; permite modificar
[ ]8 P h

tamaño y grosor de los ca­


racteres.
SHAPES, sirve para crear
figuras.
Como veis estamos ante
un programa muy comple­
to, de fácil manejo, que
cumple a la perfección su
objetivo prioritario, emular
a Miguel Angel con un so­
fisticado método.
"MELBOURNE DRAW"
Éste fue uno de los prime­
ros programas de dibujo
que llegaron para Spec-
trum. Introdujo en su mo­
mento interesantes noveda­
des, como trabajar con to­
da la pantalla o ampliar
una parte de ella. Su mane­
jo se realiza a través del te­
clado o del ¡oystick, situan­
do el cursor y la pantalla en
los diferentes modos que
combinados permiten el ac­
ceso a variadas opciones.
La información aparece en
las dos líneas inferiores de
pantalla, pudiendo ser des­
plazadas para poder traba­
jar en estas líneas. El cursor
puede estar en cuatro mo­
dos: normal, dibujo, borra
e invierte. A su vez el cursor
puede cuatriplicarse dando
como resultado cursores en
alta y baja resolución, el de
texto y el de scroll. Incluye
también la posibilidad de
ampliar un detalle de la
pantalla o manejar una ex­
tensa gama de colores y
atributos. Un programa de
fácil manejo, con grandes
posibilidades.
'LEONARDO"
«Leonardo» es un progra­
ma de dibujo para realizar
pantallas, gráficos definidos
por el usuario y elementos
gráficos, variando su tama­
ño desde un pixel a toda la
pantalla.
El programa presenta tres
opciones en el menú princi­
pal: creación de dibujos,
salvar y cargar gráficos. Pa­
ra manejar el programa po­
demos emplear un joystick o
el teclado. Si elegimos la op­
ción de creación de dibujos
en pantalla aparecerá el
cursor que nos permitirá di­
bujar. Dentro de esta op­
ción encontraremos una ex­
tensa variedad de posibili­
dades a las que accedere­
mos mediante determinadas
teclas. Existen dos modos de
cursor: el modo pixel, mo­
verá el cursor pixel a pixel
y su tamaño es de un pixel;
y el modo carácter, lo mue­
ve de carácter a carácter y
su tamaño es de 8 X 8 pixels.
Para poder dibujar es pre­
ciso poner el cursor en mo­
do plot. Es imprescindible
en muchos momentos cono­
cer el modo en el que nos
encontramos o la localiza­
ción exacta del cursor, pa­
ra ello diferentes teclas nos
irán suministrando la infor­
mación a través de una ven­
tana en pantalla.
«Leonardo» tiene una lar­
ga lista de comandos que
permiten desde invertir, bo­
rrar, rellenar y realizar
cualquier diseño geométrico
a una amplia variedad de
posibilidades. Un programa
interesante aunque resulte
en algunos momentos lioso
por la gran variedad de te­
clas a utilizar.
"T H E A R T IS T "
Este programa se maneja
a través del teclado median­
te el clásico sistema de me-
nús, combinados con dos
cursores que si lo deseamos
podrán trabajar simultá­
neamente en pantalla. «The
Artist» consta de tres menús
que se representan en la
parte inferior de la pantalla,
que a su vez abarcan un
amplio número de opcio­
nes.
Con el primer menú po­
dremos invertir, desplazar o
almacenar en memoria los
gráficos, preseleccionando ta diez opciones diferentes; podremos crear figuras
ae antemano el tamaño de tal vez la más interesante es geométricas y recurrir a la
la brocha y la trama. Permi­ la de poder manipular una opción are para dibjuar ar­
te también borrar la última pantalla cargada previa­ cos que serán delimitados
operación realizada en mente, con la consiguiente gracias a una tecla. Podre­
pantalla e insertar texto. ampliación o reducción. mos rellenar también las fi­
El segundo menú presen­ También desde este menú guras con gran rapidez.

“Sábado ”phiC, de 17a


f \

nuestro trabajo. Al igual


"DRAWER" que la posibilidad de mane­
jar dos parrillas guía para
Este programa no presen­
distinguir la posición de los
ta grandes diferencias con
caracteres. Presenta tam­
el resto de los programas
analizados manejados des­ bién la opción de Fill, que
de un menú en la parte in­ permite rellenar eligiendo
ferior de la pantalla. Como entre diez tramas diferen­
tes.
os indicamos el manejo es
«Drawer» admite la posi­
semejante, un elevado nú­
bilidad de almacenar en
mero de teclas van dando
memoria la pantalla sobre
paso a las diferentes opcio­
nes de que consta. la que trabajamos. Un da­
El cursor puede estar en to interesante que hace de
cuatro modos: pintar, inver­ «Drawer» un buen progra­
ma, que aunque no se ca­
tir, xor y el modo desplaza,
racteriza precisamente por
que responden al plantea­
su sencillo manejo, no llega
miento inicial de cualquier
a ser excesivamente compli­
programa de dibujo. Permi­
te también realizar scrolls en cado, permitiendo realizar
pantalla o introducir textos. nuevas experimentaciones
La ampliación de una parte en el campo del diseño.
de la pantalla es un detalle
a tener en cuenta, ya que
facilita considerablemente

Todos los sábados, de 5 a 7


de la tarde, en “ Sábado C hip” .
D irigido por A ntonio Rúa.
Presentado por José Luis
Arriaza, hecho una
computadora. Dedicado en
cuerpo y alma al ordenador,
y a la inform ática. Haciendo
radio chip... estilo Cope.
/ i
, r v . f
v * v a* r ' X -
* -*■
i ' i
V.» m ♦ r* m. V
1 1 1( i I
mr t . W > m. vD'TWh
RADIO POPULAR ' I A ’ -

•9 9 de chip a chip
"PAINT PLUS"
Todos los usuarios de
STORE/RETRIEUE
Spectrum interesados en al­
guna medida en los progra­ 0 TEMPORRRY STORE
mas de diseño gráfico cono­ 1 LONG TERM STORE
cerán el «Paint Box», uno de
los primeros programas que
aparecieron. «Paint Plus»,
basado en este programa,
perfecciona muchas de las
opciones de su predecesor.
Presenta un menú con
cuatro opciones. El editor
de UDG posee cuatro ban­
cos gráficos; permite mane­
jar los gráficos realizando
rotaciones, inversiones y
ampliaciones de pantalla
entre otras cosas. La segun­
da opción es el Plotter, o
modo de alta resolución,
permite el manejo de la
pantalla punto por punto;
así como salvar y cargar
pantallas, borrar la última
operación y tiene cinco tra­
mas diferentes de fill. La op­
ción Screen planer posibili­
ta la introducción de textos
y gráficos, así como cam­
biar los colores de los carac­
teres. La última opción, Or-
ganiser, se presenta en un
programa adicional que sir­
ve para almacenar un má­
ximo de cinco pantallas y
grabarlas en un fichero.
«Paint Plus» dispone de
una página de ayuda que
solucionará en parte el pro­
blema de memorizar un ele­
vado número de teclas. Sin
embargo no permite traba­
jar en las dos líneas inferio­
res de la pantalla, ya que
no admite la posibilidad de
desplazar el menú, ni alma­
cenar figuras.
" D Y N A M IC G R A P H IC S "
Dynamic Graphics es un
paquete de diseño formado
por tres programas que te
permitirán experimentar en
el campo del dibujo desde
tu Spectrum.
Los tres programas se
complementan para dar co­
mo resultado una útil herra­
mienta de gran calidad. El
primer programa es un di­
señador de sprites. El se­
gundo permite la creación
de subrutinas de dibujo pa­
ra incorporarlas a los pro­
gramas del usuario; y el ter­
cero llamado «Drawmaster»
que trata de la creación de
dibujos.
En el primer programa
encontraremos cuatro me-
nús que permiten el acceso
a más de veinticinco coman­
dos. Las posibilidades son PERIFÉRICOS
muchas, podremos desde
borrar la ventana, invertir­ Todo diseñador gráfico
la, modificarla, insertar un debe cumplir dos objetivos.
carácter, utilizar un carácter Por una parte permitir des­
como un UDG, dividir la de el ordenador la creación
ventana o grabar en cinta de diseños dependiendo sus
los dibujos. posibilidades del software
El segundo programa dis­ elegido, y por otro lado la
pone de cinco comandos medida en que facilita su
que permiten cargar en cin­ realización al usuario. Esta
ta los dibujos realizados con última razón hace que mu­
el primer programa, grabar chos de los programas de
la subrutina, autodestruir el dibujo admitan que a la ho­
programa, ir al Basic y ra de manejarse la sustitu­
crear la subrutina. ción del teclado o el ¡oystick
El programa «Drawmas­ por periféricos especialmen­
ter», especialmente creado te creados para hacer más
para dibujar, permite que el cómodo su uso. Sin duda
cursor esté en cuatro modos son los ratones y los lápices
diferentes: draw, erase, ópticos los que se ajustan a
over y trans. Podremos de­ este cometido.
limitar el número de pixels AMX MOUSE y STAR
por el que queremos que se MOUSE son los dos ratones
mueva el cursor, jugar con compatibles con Spectrum.
los comandos para modifi­ Permiten el manejo a través
car los atributos, rellenar de ¡conos de las opciones
con tinta una parte del dibu­ del software que lo admi­
jo y cargar y salvar en cinta tan. Su fácil manejo evita te­
las pantallas. ner que recurrir constante­
Un paquete interesante, mente a hojas de consulta
en el que aunque el progra­ para su utilización.
ma de dibujo es algo limita­ Los lápices ópticos permi­
do, comparado con otros ten trabajar sobre la panta­
programas del mercado, sin lla en lugar del papel. Des­
embargo combinados fo r­ tacan el lápiz óptico Inves-
man una interesante utili­ trónica y lápiz óptico DK
dad gráfica. Tronics.
GET, para leer el teclado
'BETA B A S IC " sin usar ENTER, de forma si­
«Beta Basic» es una am­ milar a INKEY $.
pliación del Basic del Spec- KEYWORDS, controla la
trum que añade considera­ utilización de las funciones
bles ventajas a la hora de de Beta Basic, como tokens
programar y trabajar con el o comandos introducidos
ordenador. Añade 26 nue­ carácter a carácter.
vas instrucciones y diez fun­ O N , permite hacer un
ciones. Además se introdu­ GOTO o GOSUB a un nú­
cen mejoras en algunos co­ mero de línea particular,
mandos y se han añadido dependiendo de una situa­
algunos rasgos como cursor ción dada.
parpadeante y un break pa­ PLOT, para trazar una
ra Código Máquina. Las cadena de hasta 32 carac­
nuevas instrucciones se ob­ teres al igual que los pixels
tienen de forma sencilla des­ usuales.
de el modo de gráficos, sus­ RENUM, para renumerar
tituyendo los gráficos por las líneas de un programa.
los comandos. SORT, ordena cadenas,
Las instrucciones más im­ números o letras en orden
portantes son entre otras: ascendente o descendente.
ALTER, para manipular TRACE, permite la depu­
los atributos de la pantalla. ración de un programa en
Permite cambiar la pantalla Basic.
a una combinación de atri­
butos, o por ejemplo crear
un gráfico utilizando tinta
del mismo color que el pa­
pel y luego modificar la tin­
ta.
AUTO, pone en funciona­
miento una numeración
automática de líneas.
BREAK, especial para
C/M.
CLOCK, controla la ope­
ración de un reloj de 24 ho­
ras con alarma.
DEF PROC, END PROC,
PROC, estos tres comandos
sirven para llamar un pro­
ceso, definirlo con un nom­
bre y terminarlo.
DELETE, borra todas las
líneas de un bloque delimi­
tado del programa.
DO y LOOP, ¡unto con las
calificaciones whilw y until
proporciona una estructura
de control ventajosa respec­
to al Basic originario del
Spectrum.
DPOKE, significa doble
poke, utilizando la dirección
especificada y la siguiente.
EDIT, permite editar un
número de línea.
nas informativas, etc. Tam­ "GENS Y M ONS"
bién incluye tres juegos de
caracteres en cuatro tama­ Estos dos programas de
ños distintos que hacen po­ la compañía Hisoft son dos
sible 12 tipos de letra dife­ herramientas imprescindi­
rentes. El tratamiento de bles para todos aquellos
gráficos y atributos ha sido que se inicien en el mundo
potenciado con comandos de la programación.
para alterar los valores de «Gens» es un poderoso
los atributos y almacenar o ensamblador del Z80, el mi­
modificar bloques de gráfi- I croprocesador del Spec­
eos. También permite el lia- I trum; su principal caracterís­
mamiento a subrutinas pre- I tica es la diferencia de ma­
viamente definidas. «Mega- nejo respecto a otros en­
basic» proporciona, al mis­ sambladores disponibles,
mo tiempo, dos modos dis- que le convierten en un pro­
tintos para producir soni­ grama profesional por su
dos. extensión y sus amplias po­
«Megabasic» contiene, sibilidades.
además de la ampliación, Un ensamblador, básica­
un segundo programa de­ mente es una herramienta
nominado «Megaspectrum que permite programar en
Sprites» especialmente dise­ Código Máquina de forma
ñado para el tratamiento de muy sencilla, trabajando de
gráficos en pantalla. Po­ modo complementario con
drán definirse formas, colo­ el relocalizable desensam­
res, desplazamientos y velo­ blador Mons. Sustituye el
"MEGABASIC" cidad de animación, visua­ árido sistema binario, por
lizar las distintas secuencias una serie de nemónicos,
Ampliar el sistema opera­ de imágenes para la edición que constituyen el código
tivo de cualquier ordena­ y corrección de las mismas. fuente; el propio programa
dor, supone que aumenten Las ventajas de esta po­ traslada a números este có­
considerablemente las posi­ tente utilidad son considera­ digo, que tras ensamblarlo
bilidades de los mismos a la bles dejándonos libres una se convierte en el código
hora de programar. «Me- vez almacenados los datos
gabasic», como bien indica de unos 20 K de memoria.
su nombre, incorpore al Ba­
sic del Spectrum nuevos co­
mandos que se introducirán
tecleando directamente el 0000 F3 DI
>PC 0759 F3 22 27 AF 2A 2E AF
nombre; diferencia respec­ SP 9C0B 2B 2D 65 33 58 27 ED
to a otros programas que XV 5C30 FF CD 00 1F 9C 00 00
IX 03D4 04 0C 0D 20 FD 0E 3F
contenían en las teclas ori­ HL 0000 F3 AF 11 FF FF C3 CB
ginarias los nuevos coman­ DE 00 12 15 FF FF FF FF FF 2A
BC 0053 El 6E FD 75 00 ED 7B
dos. fiF 004.4. Z U
IR 3F56
«Megabasic» tiene un sis­
tema de edición muy com­ FFF4. 10 FFFC 42 0004 FF
FFF5 10 FFFD 42 0005 C3
pleto que incluye la posibi­ FFF6 10 FFFE 3C 0006 CB
lidad de desplazar el cursor FFF7 00 FFFF 00 0007 11
FFF8 00 >0000 F3< 0008 2A
horizontal y verticalmente, FFF9 4-2 0001 AF 0002 5D
FFFfl 42 0002 11 000A 5C
borrar líneas, copiar algu­ FFFB 42 0003 FF 000B 22
nas para transpasarlas a la
>
fcí
línea de edición para facili­
tar la correción de los pro­
gramas. El aspecto que más
nos interesa en el tratamien­
to de gráficos es la amplia
gama de comandos refe­
rentes a ventanas, borrado,
scrolls con diferentes venta­
objeto. El «Gens» es tam­
bién totalmente reubicable, Muchas son las opciones
es decir, podemos hacer ae este ensamblador, pero
que funcione instalándolo como analizar detenida­
en cualquier zona de la me­ mente cada una de ellas su-
moria; esta es la ventaja pondría escribir de nuevo
que le sitúa por encima ae un libro de instrucciones, co­
mo el que acompaña a am­
otros ensambladores, ya
que evita la posibilidad de bos programas, nos limita­
que coincidan en una misma remos a señalar que algu­
dirección el programa sobre nas de ellas son: ensambló­
el que trabajamos y el en­ le rápido, producir un lista­
samblador o el desensam­ do de la tabla de símbolos
blador. no generar ningún código
°b|eto y dirigir el listado del
El «Gens» se caracteriza
por la rapidez en la ejecu­ ensamblador a la impreso­
ra.
ción, y añade otras venta­
jas como incluir un ensam­
blado condicional, muchos
comandos del ensamblador
y una tabla de símbolos bi­
naria.

"T H E C O PE M A C H IN E "
Todos los usuarios intere­
sados en la programación
en Código Máquina cono­
cerán sin duda el popular
paquete monitor/ensambla-
dor Editas, de la casa
Gremlins. Este paquete ha
sido actualizado por esta
misma compañía y ha dado
lugar a la nueva versión
3.1, que recibe el nombre
globar de «The Code Ma­
chine», pudiendo ser adap­
tados ambos programas a
casi todos los modelos de in­
terface de impresora.
El editor ensamblador
trabaja en modo 40 colum­
nas divididos en distintos
campos. El primero permite
introducir los comandos y
renumerar las líneas; el se­ mandos de edición más uti­ permitirá estudiar y trabajar Dos herramientas impres­
gundo para la utilización de lizados son: LIST, EDIT, sobre nuestras propias ruti­ cindibles para adentrarnos
etiquetas; el tercero destina­ AUTO, NEW, RETURN, nas reubicarlas o analizar en el mundo de la progra­
do a los nemónicos y el últi­ RENUM y DELETE. las rutinas de otros progra­ mación de una forma mu­
mo para operandos. Los co- El programa monitor nos mas. cho más asequible.
l _________
Para solicitar
tus tapas,
llámanos
al tel. (91)
734 65 00

No necesita encuadernación,
gracias a un sencillo
sistema de fijación
que permite además
extraer cada revista
cuantas veces sea necesario.
N O N . ’S T I N

SPECTRUM • MSX
AMSTRAD »C B I#64

*fs á

875 PTS. CADA UNO, NUEVO PRECIO DINAMIC


★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ irr ir ir i r ir i r i r i r ir roSeN uN
’m Í t b a d
750 Pts
D IN A M IC SO F T W A R E . Plaza de España,.18.
Torre de Madrid. 29-1,28008,Madrid.
Pedidos contra reembolso (de luri& ti\iernes.
2
de 10 a 2 y de 4 a 8 horas): Teléfono ¡9 p 2 4 8 78 87.
Tiendas y Distribuidores: Teléfono (91)4473410. o

You might also like