Está en la página 1de 84

• «fiwir

U
<JÍWUCÍÚn r j f j

JJWfUjf

Con rutinas completamente


inéditas para crear
tus propios gráficos

Pft/mn

Pfogrd
U ' ú f i : ü
¡JACK ATACA DE NUEVO!
1.200Ptas.
(VERSIÓN CASSETTE)

DISPONIBLE EN
Spectrum
Commodore
Arnstrad
Amstrad Disk

POCO RUIDO, MUCHAS NUECES


Director Editorial
José l Gómoz-CcniurtOn

Gabriel Nieto

Director de Microhobby
Domingo Gómez

Diserto
José María Oeia.

Redactores
CfiStna Fernandez. ESPECIAL MICROHOBBY-AÑD IIMT 6 JUNIO 1987
Pedro Pérez

Secretaria Redacción
Caimán Santamaría

Colaboradores
Rabio Artza. Rafael Márquez, T O D O S O B R E L O S U D G . C o n o c e r el
Enrique LOpez. Dav»d López modo de almacenamiento gráfi-
Fotografía c o e n el S p e c t r u m e s i m p r e s c i n d i -
Carlos Candet. b l e p a r a e m p e z a r a h a c e r un j u e -
Chema Sacristán go.
Dibujos
F L Frontón. J. Igual.
M López Moreno. A Luis González Romero
V.tal Gana José Manuel Barco

Edita CONTROL DE SPRITES. Por fin una


HüftBv PRr-SS S potente rutina q u e m u e v e g r á f i -
Presidente cos, c r e a a n i m a c i ó n y te p e r m i t e
d e s p l a z a r por pantalla simultá-
Consejero Delegado n e a m e n t e distintos tipos d e f i g u -
José i Gómez-Cenlur»ón
Jete de Publicidad
Mar Lumbreras
Publicidad Barcelona
José Galán Cortés
Tots 303 10 22 313 71 76
M O V I M I E N T O Y T E C L A D O . T o d o lo

32
Secretaria de Dirección q u e necesitas s a b e r p a r a p o d e r
Pilar Anstizába: u t i l i z a r el j o y s t i c k o c u a l q u i e r ti-
Suscripciones
M 4 Rosa González p o d e combinación d e teclas en
V y ai Ca-zaO:i tus j u e g o s . Y , a d e m á s , con la p o -
Redacción. Administración sibilidad adicional d e c r e a r dis-
y Publicidad tintas secuencias d e a n i m a c i ó n
Ctra de Irun p a r a tus p e r s o n a j e s .
km 12.400 (Fuencarrai)
Tei 634 70 12
49480 HQPR
Dto. Circulación
Carlos Peropadre
Distribución
Cood«s. S A Valencia. 245 DETECCION DE CHOQUES Ahora

48
F
Baice'ona t u e d e s d e f i n i r d e un m o d o senci-
Imprime lo t o d o s l o s o b s t á c u l o s y e l e m e n -
Roted«c. S A Ctra de liún. tos hostiles d e tus j u e g o s , m e -
km 12.450 (MADRID) d i a n t e u n a rutina c a p a z d e detec-
Fotocomposición tar cualquier tipo d e choque o
Novocomp. S A disparo.
Nicolás Morales. 3840
Fotomecánica
Grol
O EzeqtiwM Solana. 16
Deposito Legal:
M36.598-1984 T E C N I C A S D E M A P E A D O . C r e a r los
m a p a s y d e c o r a d o s d e tus j u e g o s
Representante para Argentina.
Oile. Uruguay y Paraguay. Cía será a partir d e a h o r a una t a r e a
Americana de ediciones. S R L casi r u t i n a r i a .
Sud América 1.532 Tei 21 24 64
1209 BUENOS AIRES «Argentina?
MICROHOBBY no so hace
necesariamente solidaria de las
opiniones vertidas por sus

70
turnadas Reservados todos los GUÍA DE UTILIDADES GRÁFICAS.
Una completa guía de herra-
Solicitado control mientas de programación para
t r a b a j a r con los g r á f i c o s del
Spectrum.

MICROHOBBY ESPECIAL
S F E C i n L .

TODO
SOBRE LOS G H I ..I
2
t
[
Los UDG o gráficos
definidos por el
usario, son unos
caracteres similares a
los del alfabeto al ñ I
•«: *F
conectar el 5 e
F"t o:
ordenador. Gracias a § I
S t
unas pequeñas
operaciones podemos
llegar a crear U K
Z C
cualquier carácter o .i R
gráfico que nos sea
de utilidad. Para 1/
conocer esta * A
i l
interesante i
posibilidad de N Ox
nuestro ordenador, os V *
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 c u a d r o de a r r i b a a troducir nuestro gráfico, uti-
la izquierda. Apuntaremos lizaremos POKE USR " A " ,
Un carácter del ordena- un 1 cuando el c u a d r o en y después de la coma con el
d o r es una cuadrícula de cuestión este pintado y con c o m a n d o BIN colocaremos
ocho por ocho pixels o pun- un 0 cuando el c u a d r o esté los ocho números que he-
tos. Para diseñar el gráfico en blanco, siguiendo cua- mos a p u n t a d o en la prime-
necesitamos unas cuadrícu- d r o a c u a d r o hasta a c a b a r 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. c o m p l e t a d o la línea empe- " A " , B I N 0 0 1 1 1 0 0 . Así he-
Sobre esta cuadrícula zaremos una nuevo 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 f o r m a 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. f o r m a n el gráfico que he- la coma, un 1 (POKE USR
mos c r e a d o . " A " + l , B I N 00111000),y
Cuando el gráfico esté
en el binario colocar los da-
terminado, podemos intro- Una vez realizada esta
tos de la segunda línea y re-
ducirlo en el o r d e n a d o r de operación y con los datos
petir la operación sumando
varias formas. La más sen- que hemos a p u n t a d o , utili-
iuego 2, 3, 4, 5, 6 y 7 y las
cilla y aconsejable si se está zaremos el c o m a n d o POKE
siguientes líneas; como po-
empezando, es la utilización para introducir en memoria
déis observar en el listado 1.
de la función binaria de ios distintos datos, teniendo
nuestro o r d e n a d o r . 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 U D G , lo más sencillo es uti- memoria, por lo que existen
TODO SOBRE LOS UDG 5

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 60 0 0 0 — ({I NT
d o 2. En él hemos sustituido 60 0 0 0/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 U D G 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-
ter del último gráfico MÁS DE 21 UDG
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 o r d e n a d o r , si-
dientes al resto de grá-
guiendo las mismas pautas
ficos.
que para los gráficos defini-
Por último p a r a 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- 2 3 6 0 6 y la 2 3 6 0 7 , usare-
do gráfico y pulsaremos la mos la misma fórmula que
letra en la que hemos intro- con los U D G pero con estas
ducido el gráfico, y que en dos direcciones. En el lista-
el caso que estamos expli- d o 3 encontraremos un
c a n d o 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
distinta a las anteriormente
PODEMOS CREAR explicadas, que consiste en
Es importante saber que que con ayuda de la función
los U D G , pueden ser posi- R A N D O M I Z E 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, p o r lo que luego só-
memoria donde se encuen- lo nos queda actualizar la
tran los U D G . Esta variable variable del sistema CHARS,
1 es la denominada la U D G , con el contenido de estas di-
± 14 2
y su dirección es la 23675 y recciones. Es importante re-
1T1
c o r d a r a la hora de utilizar
1 f f i é
la 23676.
Cuando la dirección esté
decidida, por ejemplo la
un nuevo set de caracteres
que los primeros 256 bytes
1 r 4 " no se pueden emplear por
I r v $ X 0
>•
6 0 0 0 0 , calcularemos las
cantidades que hay que po-
lo que debemos restar a la
dirección donde hayamos
•• • kear, para ello utilizaremos
la siguiente fórmula, PRINT
archivado los gráficos esta
cantidad. Es también impor-
INT 6 0 0 0 0 / 2 5 6 , e i n t r o d u -
1 5 ^ ^ Í E EZZI n i L-

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 2 3 6 0 6 , 0 y padee se consigue colocan-
POKE 2 3 6 0 7 , 6 0 . d o 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
de un filtro se tratase.
Con todas estas técnicas
con a y u d a del c o m a n d o
OVER conseguimos que lo
C Ó M O UTILIZAR que anteriormente estaba
LOS UDG en la pantalla no se bo-
PARA UN JUEGO rre totalmente. Con PLOT,
D R A W y CIRCLE, dibuja-
C o m o habréis p o d i d o mos a l g o en pantalla y al
comprobar, no es nada com- pasar por encima de las lí-
plicado realizar un U D G . neas, el dibujo sólo se b o r r a
Moverlo por la pantalla en- cuando el gráfico está super-
traña a l g o 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 d a n d o 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 1 0 , 1 0 ; " 0 ' ' ;
Con el ejemplo 4, obtene- OVER1;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 a r r i b a , aba-
por la pantalla. jo y a la derecha, p e r o 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, b o r r a r 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 8 0 , b o r r a n d o 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
^ desde el LP°Pe

^¿teSifeK ra
' " variables C
,°mP°-
?
]
"
1
'
Pero s u u f ¡ L d r e s d e f ' B a s i c ,
o n
Códiqo mT desde e
g ™ TIN
coma 0 65 o» , • ' 0
c o i ' "
¡Zquierd l'za la onerl 'yQ,que 'ea- ed ca
J3 ENTER °
entreel oar ° 0 n bit °
«Vamenté a f
'^Peroe°
' ^c/u-
Adiciona-
n
17 PAP F C p ° n t Cr o 1nfro 9'strlX^X'roSyelrJ: ° caliza ,a oo9° M ó
^¡-
18 FLASH ° ' cenaeleZ^ealn.a- y el
19 BPiruTCon'r°l Probar me/or < í ° c o ™ - tenido del ron i con-
tando (os n „ 9 ' f ° A
'
20
I N V E R S F C OCOníro
ntro1
oper q u e
21 ¿VER ' C'°n en la tahu ! °- "'"estraoen/^ M *e
>2 ¿ V K c°ntrol
C nfro1 tab,
'3 IAB TAR ° dad: ° ° de ver-
control A N D
0 S = A
0 ? 0 £ S = .
0
' 0
J f 0
X
un
PR'desde el R 5IC' •
S0 funciona °° ' ene
^9roTutT'°9'cos d d al
nejar a r á f í ~ ° za M
operárLT, ' reali-
s a j FI s ? ,.a spi c oSÓ-
í ^ess POsibtlo r
do
del regisLVf1 contení-
del AND y!, c¡pU P án ^ s ^ o s
?r° ,0s [unc'°n
Verdad ae la fi • ° de
condicionantes q ^ e d o os,® ° XOR
devuélvele'/ ^válordo
0A « » s . a
0 0

11
8 $ >í & c ) * + - • /
2 3 4 F; 6 7 8 9 * < — >
B C D E F G H I J K L M Ñ 0
R 5 T U U U X Y z C \ D t
b C d e f g h i J K L m n 0
r s t u V w X y z í 1 } ©

FIG. 3
5 F E C i n i _
H G U R A 2
l i s t a d o
. -BIN ®<
1
1® FFI! USB FILILÍ ®
2® USB S-Í3,BIN IIHL0O®
30 USB •.G. Í4,BLN, 2 1 I L L 0 0 ®

8 ¿0 POK6 8
USB

T<*

F I G U R A 1 \ 3 0
a a a s ^ í *
P \ onKÉ USR .g - U , 5 6
40 S S k e u s r ..g. + l s 0e8
K ' se
60
onKE U l i Ss Br 4, 0
l =
1% S S k I j j

USTADO 3
W I ^o •T• » " oT O OUSSBB
U

3 U 3
I I ^ S ? | , 254., 5 6 . S 6 • 4 0
'

USTADO 3a
L 0 B
BB

SS1UI&
C L E

u i i 100®
O 0 l l
j.000

de x e y estén cerrados en- sexto bit nos expresa el es- lizabas 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- auinto al tercero son los de- do podemos averiguar el realizar esta operación si el
bar a imprimir en pantalla dicados 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;INK 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 + 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 + N U M . 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
H T O D O SOBRE LOS UDG
USTADO 3b • —
0
^^mtrol H — —« ki BYTta

iMti r M H (
1 Sil V

1? l l l s i l l l l i l i i f l l l l l ¡ f

8 S®B»»«s*
I ifltfNkft
1 1
" alivíete» 3 I s i l i l S I l l i l l l l l l l i 11!
i n
M slIsssiBfeííg!; is3®
1Ii 1
l i s t a d o

1
U
..,•• TO USR "3 •

p Í t Í | 8 S 8 S f ¿0 DOTO SO LeT y=10 1

1I !i !| I s H %
ui»
•ts feS "" - -

HiflMHl
1 n s s q m ^
te^r-'-^1 0

n i s ^ ® • .. c 100 , 1 0 ® ' 3 0

otra forma dar brillo a los INVERSE n, controla la in- 65535, con ayuda de POKE miento desde el puntero de
atributos. versión de caracteres que se también podemos realizar pontallo tantos números co-
DATA n,n,n,n, todos los van a imprimir. En caso de dibujos en pantalla tanto de mo se indiquen en x.
datas que aparezcan detrás utilizar con 1 los caracteres gráficos como de atributos. " , " : la coma después de
de esta sentencia, serán leí- se imprimen en vídeo inver- PRINT, es el comando sin PRINT y sin estar entrecomi-
dos como datos, al utilizar so, y si es 0 en vídeo nor- lugar a dudas más utilizado llada realiza una tabulación
la función READ. mal. en Basic; con él podemos de 16 caracteres, desde el
FLASH n, su funciona- OVER n, realiza un inter- hacer que aparezca en pan- puntero.
miento es igual que el del cambio al estar activada es- talla cualquier carácter y su " ; " : el punto y coma sir-
brillo, pero realizando un ta función, entre los datos funcionamiento puede ser ve para indicar al ordena-
intercambio de atributos en- que estaban en pantalla y de distintas maneras. dor que todo lo que está
tre el papel y la tinta, consi- los que posteriormente sean AT x,y: si es utilizado con unido por ellas se imprime
guiendo así el efecto de par- utilizados. AT, posicionamos las coor- seguidamente.
padeo. PAPER n, su funciona- denadas donde van a ser : la comilla indica al or-
INK n, el color del atribu- miento es completamente impresos en pantalla uno o denador que debe saltar de
to de tinta es controlado por igual al del comando INK, varios caracteres. línea para que lo que se ex-
este comando permitiendo pero controlando el color TAB x: con él sólo pode- prese a continuación sea im-
el uso de cualauiera de los de fondo. mos indicar el desplaza- preso en la linea siguiente.
ocho colores del Spectrum POKE n, sirve para intro-
además del color 8, para ducir valores comprendidos
transparente y 9 para con- entre 0 y 255 en las direc-
traste. ciones desde la 16384 y
SFECinL- Sin duda, uno de los
factores más

CONTROL
decisivos para que un
programa tenga éxito
es su presentación.
Si la idea es muy

f
original, pero los
n p r i m e r lugar, gráficos son tamaño
para los no inicia-
dos, definiremos UDG o parpadean, el
qué es lo que en- conjunto desmerece
tendemos por un
bastante. Para
sprite.
Llamaremos sprite a un solucionar el
gráfico, animado o no, que 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
dibujado en pantalla sin bo-
dibujará los gráficos
rrarlo, y si se cruza con otro, mientras nuestro
uno de los dos pasará por
delante de otro. Por esto ca-
programa se encarga
da sprite tiene asignada una ie 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-

mo el C o m m o d o r e 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
p o f software. Para ello, uti-
lizaremos un programa en
SPRITES
SPRITES ] ]

Pablo ARIZA
12 I PEE 11311

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áticamente 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 f o r m a de En primer lugar, alrededor especificar todos 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 c u a n d o 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 1 7 x 1 7 = 2 8 9
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- d o ni se borre un rectángu- c o n t i n u a c i ó n , rellenamos en la dirección 5 3 0 0 0 . De
trol al programa que estaba lo del f o n d o 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 5 3 0 0 0 , los
na. De esta forma, pode- dibujo de sprites. Es el mé- parte C. Por último, borra- del segundo en la 5 3 0 1 7 ,
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 á q u i n a . el doble, pues necesita de su lla), deberemos hacer el car la dirección de memoria
máscara) y de ser más len- mismo proceso con los agu- en la que se encuentra el
Normalmente, las subru-
to el proceso de dibujo, pe- jeros. Lo que representa la gráfico. Siempre, a conti-
tinas que se ejecutan por in-
ro los resultados obtenidos máscara son las zonas del nuación del gráfico propia-
terrupciones suelen ser muy
son mucho más espectacu- gráfico a través de las que mente dicho, se debe en-
cortas, de tal forma que
lares. Para los que leyeron se puede ver el fondo. contrar su máscara. Si el
aparentemente la velocidad
los artículos sobre el sistema sprite representa un objeto
del programa principal es la
Filmation, publicados en los o un ser animado, deberá
misma que tendría si no hu-
números 96,97,99 y 100 de constar de varios gráficos
biera interrupciones. Sin
MICROHOBBY, en los que TABLA DE SPRITES
embargo, el dibujo de grá- parecidos, pero distintos pa-
se utilizaban también más- ra lograr el efecto de ani-
ficos y el manejo de la pan- Para conseguir que nues-
caras, advertimos que en es- mación. En este caso, todos
talla en general, es siempre tro sprite se mueva como
ta rutina vamos a utilizar un estos gráficos deben estar
bastante lento, y cuando nosotros queremos, habre-
método ligeramente distin- uno a continuación del otro,
pongamos en marcha los mos de comunicarle de al-
to. Para evitar el paso de in- y cada uno con su máscara
sprites, notaremos un des- gún m o d o a la rutina de
versión de la máscara des- detrás.
censo enorme en la veloci- control todos los datos nece-
crito en dichos artículos, no-
d a d de ejecución de nues- sarios acerca de él. Con es- El tercer y cuarto byte in-
sotros almacenaremos la
tros programas. Es el precio te fin, vamos a crear una ta- dican las dimensiones del
máscara ya invertida, con lo
que hay que p a g a r por no bla de sprites, en la que ¡re- sprite. El tercero indicará el
que ahorramos tiempo a la
tener el hardware adecua- mos poniendo la posición, ancho, d a d o en caracteres,
hora de dibujar el gráfico.
do. A pesar de todo, si pro- dimensión, y demás datos y el cuarto el alto, d a d o en
Por tanto, si teneis hechos de
gramamos en Código M á - de cada uno de ellos. La ru- pixels. Todos los gráficos de
antemano gráficos pensa-
quina, tendremos suficiente
dos para la rutina presenta-
velocidad para bastantes

•n
da en dichos artículos y los
cosas, pues no hay que ol-
queréis usar con ésta, debe-
vidar que nuestro programa

ñ
ya no se tendrá que preocu-
réis invertir todos los bytes F I G U R O 1
de la máscara. La f o r m a de
p a r de dibujar los gráficos,
hacerlo es bien sencilla. Si
que suele ser el proceso que
p o r ejemplo, tenéis una
más tiempo consume en la
máscara en la dirección
ejecución de un p r o g r a m a ,
40 0 0 0 que ocupa 32 bytes,
sobre todo en los juegos ar-
bastará con que hagáis:
cade.

El método que vamos a


utilizar para dibujar los grá- FOR X = 4 0 0 0 0 TO 4 0 0 3 1 R C D
ficos es el de la máscara. En :POKE X,255-PEEK X:
este método, cada gráfico NEXT X
C O N T R O L DE SPRITES m
i3

p o r 0 en la parte superior y 1 2 3 4 5 1 2 3 4 5 1 2 3 En el caso de un movi-


va a u m e n t a n d o hacia a b a - 4 5... miento en línea recta, estos
Fig. 2 jo. bytes indican los incremen-
El noveno byte nos dice Si, p o r el contrario, espe- tos de X e Y respectivamen-
T A B L A DE D A T O S cuántas fases de a n i m a c i ó n cificamos a n i m a c i ó n de te. Dichos incrementos son
DE L O S S P R I T E S 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 C o n t e n i d o
dremos una fase. c o o r d e n a d a s del sprite pa-
relativa 1 2 3 4 5 4 3 2 1 2 3 4 5
El décimo indica varias ra producir el movimiento.
DIR + 0 Dirección del 4 3 2 1 2...
cosas. En primer lugar, indi- Cuanto m a y o r sea su valor
primer g r á f i c o .
ca el color del sprite. Los tres Por último, en este décimo absoluto, mayor será la ve-
DIR + 2 Ancho en locidad con que se mueva el
primeros bits indican el co- byte, está también, en el bit
caracteres. sprite, pero menor su suavi-
lor de la tinta, y el séptimo 4 el indicador de línea rec-
DIR + 3 Alto en scans d a d . Los incrementos más
bit (el bit 6) indica el nivel de ta (con un 0) y trayectoria
(pixels). normales están entre —4 y
brillo. Los sprites no tienen compleja (con un 1). La op-
DIR + 4 C o o r d e n a d a X. + 4. En la coordenada X, un
color de papel propio; ción de línea recta se usará,
DIR + 6 C o o r d e n a d a Y. incremento positivo produci-
a d o p t a n el del f o n d o p o r el c o m o su p r o p i o n o m b r e in-
DIR + 8 N ú m e r o de fa- rá un movimiento hacia la
que pasan. Por otra parte, dica, p a r a sprites que se
ses de el cuarto bit (el bit 3) indica, derecha, y negativo, hacia
muevan en línea recta, sea
animación. en el caso de sprites anima- la izquierda. En la Y, un in-
horizontal, vertical o d i a g o -
DIR + 9 Color. Bit dos, de qué tipo de anima- cremento positivo producirá
nal. Sin embargo, habrá ca-
3:Animación. un movimiento hacia abajo,
ción se trata. Para sprites sos en que preferiremos que
Bit y negativo hacia a r r i b a .
inanimados, su valor es in- nuestro sprite siga-una tra-
4:Movimiento. diferente. Si vale 0 la anima- yectoria preestablecida dis- En el caso de un movi-
DIR + 10 Incremento X.
DIR. Tabla de miento de trayectoria prefi-
trayectoria. jada, estos dos bytes indican
DIR + 11 Incremento Y. la dirección d o n d e se en-
DIR + 12 C o n t a d o r d e Fig. 3 cuentran los datos acerca
animación. de la misma. En esta direc-
DIR + 13 C o n t a d o r d e ción p o n d r e m o s dichos da-
Gráficos usados en la d e m o s t r a c i ó n
tos de la siguiente f o r m a :
trayectoria.
Dirección Gráfico Dimensiones Número p a r a delimitar la trayecto-
DIR + 15 M e m o r i a 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 c a d a momento. Pero
48516 FLECHA - » 2x2 1 además, puede que quera-
48580 FLECHA 2x2 1 mos que el sprite cambie su
las distintas fases de un úni-
48644 FLECHA! 2x2 1 f o r m a durante el movimien-
co sprite y sus respectivas
48708 FLECHA \ 2x2 1 to. Por ejemplo, si queremos
máscaras deberán tener las
48772 FLECHAD- 2x2 1 d i b u j a r una nave girando,
mismas dimensiones.
48836 FLECHA ^ 2x2 1 no bastará con d a r los incre-
Los bytes quinto y sexto
48900 FLECHA; 2x2 1 mentos que delimiten la tra-
especifican la coordenada X
48964 FLECHA N 2x2 1 yectoria de giro, sino que,
del sprite, mientras que los
además, deberemos ir dibu-
séptimo y octavo especifican
jando un gráfico un poco gi-
la Y. Ambas serán números
r a d o respecto del anterior
entre - 3 2 7 6 8 y + 3 2 7 6 7 .
para que parezca que la na-
Esto nos permite crear un ción será cíclica, mientras tinta de la línea recta, p o r ve está realmente g i r a n d o .
sprite inicialmente en unas que si vale 1, será una ani- ejemplo, un satélite que gi- Para ello, entre los grupos
coordenadas que no existan mación de adelante-atrás. ra en círculo a l r e d e d o r de de dos bytes que delimitan
en la pantalla real del orde- La primera es la que usaría- un planeta. Para esto sirve el movimiento, colocaremos
nador, y hacer que aparez- mos, p o r ejemplo, p a r a un la o p c i ó n d e trayectoria. La un 126, y a continuación, la
ca posteriormente. Si la helicóptero cuyas hélices gi- f o r m a de establecer la tra- dirección de m e m o r i a don-
coordenada X está entre ran. La segunda la usaríamos, yectoria la vamos a ver a de se encuentra el nuevo
32512 y 32767 (o lo que es p o r ejemplo, p a r a un pez continuación. gráfico. Para terminar la tra-
lo mismo, si el byte sexto es que mueve la cola. Si tenemos El significado de los bytes yectoria, colocaremos un
127), se considerará al spri- cinco fases de a n i m a c i ó n , undécimo y decimosegundo 127 y ésta se repetirá desde
te como desactivado y ni se que podemos numerar del 1 no es el mismo si el sprite se el principio.
le moverá ni se le d i b u j a r á . al 5, y especificamos anima- mueve en línea recta o si-
A diferencia del Basic, la ción cíclico, las fases se irán g u i e n d o una trayectoria es- El byte decimotercero es
c o o r d e a n d a Y comienza repitiendo de esta f o r m a : pecial. utilizado como contador pa-
14 E s f e c i p i l .

ra la animación, y debere- M á q u i n a , 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 d o como dirección la 61953, ma Basic utiliza una subru- 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 t o d o 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 lo 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- g a n 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 lo 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 pixels.
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 asi 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 R A N D O M I Z E USR 61953 e máticamente. Para poder
do 1 y grabarlo en cinta con siete ejemplos, desde el más indicaremos el p r o g r a m a escribir algo, deberemos
autoejecución en la línea simple hasta el más comple- c o n t r o l a d o r d e 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 d o directamente en la pan-
versal de Código M á q u i n a , 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 ó n d e 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. A h o r a 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 uno la pantalla del ordenador. la es la siguiente: POKE
g a d o r Universal de C ó d i g o de los sprites que queramos Esta copia de la pantalla es 2 3 7 2 9 , A : P O K E 23728,B:
C O N T R O L DE SPRITES m
i3

LET C=USR 6 2 0 8 2 , d o n d e 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 5 3 0 0 4 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 5 3 0 0 0
sin importarnos cuál, susti- podemos c o m p r o b a r 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 ¡lustran 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- p o r delante del otro. Pode- trolar los sprites. gramas comerciales. Hay

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 p r o g r a m a 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 g r u p o 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, c i ó n cíclica y dos d e tos de todos los ejemplos, es M á q u i n a , no es necesario
podemos controlar directa- adelante-atrás, para que se necesario añadir un cero a que leáis este a p a r t a d o 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 da- rio lo que se dice en ellos
S P E C i n L .

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 6 4 0 0 0 a 64511, que queremos girar, y la di-
do y podréis sacar mucho la t e r c e r a de 6 4 5 1 2 a rección f o r m a d a contendrá
más provecho a la rutina. 6 5 0 2 3 , y la c u a r t a de el resultado deseado. Como
V a l o r e s a c o l o c a r e n los
6 5 0 2 4 a 65535. Las cuatro al girar un byte, hay una
En la figura 5 tenéis un es- DATAS
se crean en el momento de parte que se sale, ésta se al-
quema del mapa de memo- en el p r o g r a m a Basic
activar las interrupciones. macena en otra dirección,
ria. Lo primero que tene-
mos, entre las direcciones
_ Dirección del primer Lo que hay en ellas es el re- justo 256 bytes más arriba,
gráfico. sultado de girar cada uno así que basta con incremen-
5 3 0 0 0 y 53288, es la tabla
— Ancho en caracteres. de los 256 posibles números tar H p a r a obtenerla. Si no
de sprites, ya explicada an-
teriormente, y cuyo inicio
_ Alto en pixels. que puede contener un os ha q u e d a d o demasiado
— C o o r d e n a d a X. byte, 6 bits hacia la dere- claro, posiblemente lo en-
será denominado TASPRI a
partir de ahora.
_ C o o r d e n a d a V. cha, en la tabla cuarta, 4 en tendáis mejor cuando veáis
— N ú m e r o de fases de la tercera, 2 en la segunda la subrutina que crea la ta-
Lo siguiente, entre 53288 y 0 en la primera. La utili- bla. Como muchos de voso-
animación.
y 53543, es otra tabla, d a d es que a la hora de di- tros ya habréis adivinado, el
l n d i c a d o r : 0 = anima-
TABLDI, que no hemos ex- bujar un gráfico, no tendre- que sólo haya cuatro tablas
ción cíclica, ^ a d e l a n -
plicado antes porque es de mos que utilizar instruccio- quiere decir que el progra-
te/atrás.
uso interno de la rutina. En
esta se almacenan una serie
_ lndicador:0= línea rec- nes de rotación que hacen ma no trabaja realmente en
ta, l = trayectoria com- más lento el proceso, pues- alta resolución en este sen-
de datos de los sprites, pe- to que ya tenemos el traba- tido horizontal, sino que el
pleja.
ro solamente de los que se
van a dibujar en pantalla _Color jo hecho. Por ejemplo, si
queremos girar el número
mínimo desplazamiento es
de dos pixels. Esto no supo-
(como hemos visto, puede (tinta + 64 x b r i l l o ) .
47, 4 bits a la derecha (el ne un g r a n problema, pues
haber sprites fuera de ésta). Si línea recta:
número 47 puede f o r m a r la suavidad obtenida es más
En la figura 6 hay un resu- — Incremento X.
porte de un gráfico, ya que que suficiente. Sin embargo,
men de los 15 bytes de que — Incremento Y.
sabemos que todos los grá- para mayor comodidad se
consta cada elemento. Los Si trayectoria comple-
ficos, en el ordenador se re- permite que se den las coor-
dos primeros bytes indican ja:
ducen a números binarios, denadas como si el mínimo
la dirección en la pantalla — Dirección de los
con un equivalente deci- desplazamiento fuera de
de memoria a la que va a ir datos de la trayec-
mal), el proceso a efectuar dos pixels. La verdad es que
el gráfico. Los dos siguien- toria . este sistema del uso de ta-
sería c a r g a r el registro H
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 que corresponde a la tabla dos no es de nueva crea-
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- tacar «Cyberun», cuyo rápi-
vo byte indica el ancho en Fig. 5 do scroll habría sido impo-
caracteres. Tanto éste como M a p a de memoria sible con métodos conven-
el anterior no tienen por cionales. Pero continúemos
Dirección Etiqueta Contenido
qué corresponder con los con el contenido de la tabla
53000 TASPRI Tabla de datos de los sprites
dados en la tabla de sprites, TADIBL. El undécimo byte
existentes.
ya que éstos se refieren a las indica los atributos del spri-
53289 TABLDI Tabla de datos de los gráficos
dimensiones del gráfico que te. El decimosegundo y el
que se van a dibujar.
se va a dibujar en pantalla, decimotercero indican la di-
53544 SPARES Espacio reservado p a r a g u a r d a r
y si éste se encuentra en un rección en la pantalla de
lado o una esquina, la por- los trozos de pantalla.
54568(7) ORIGSC Pantalla de memoria. memoria, donde van o ir los
ción de gráfico que se ve es atributos del sprite. Por últi-
menor que el gráfico ente- 60904 O R I G A T Atributos de la pantalla de
mo, los bytes decimocuarto
ro. El noveno byte nos dice memoria.
y decimoquinto indican el
cuántos caracteres de an- 61696 Tabla de interrupciones.
número de filas y el de co-
cho quedan fuera de la 61953 I N I C I O Subrutina de inicialización y
lumnas, respectivamente,
pantalla. Comprobaremos activación.
que ocupa el grá-
su utilidad al estudiar el pro- 62075 DESACT Subrutina de desactivación.
fico en la zona de atribu-
g r a m a . El décimo byte es el 62082 C O M C H O Subrutina de comprobación de
tos.
llamado byte de rotación. choque.
Puede valer 248, 2 5 0 , 252 62194 ENTINT Subrutina principal de
ó 254, y es el byte alto de interrupciones. Continuando con el mapa
la dirección de comienzo de 63488 Tablas de rotaciones. de memoria, entre las direc-
una tabla. Son, por tanto, ciones 53544 y 54566, está
el espacio d e n o m i n a d o
1
CONTROL • —
o ,6 B.20®' '®'®
35 0 DOTO * 8 5 8 0 ' 2 . ' 5 S ,25S,1,« DE SPRITES I /
7-8,,8
•SéS'SSrV" '"'»8.7a.e.«.
LISTADO 1 '3^0' 16 í00 '1'® '
1 g 8 H Í 8 H Í & " L ^
0 7 N 8 . ¿ «
L
; "PETORN 3 9 0 DOTO 4 8 5 1 ° . ,08.86.8.1'
laeSe „ . t>=gnISeS,pecK a 3

ttMMlfiM
0 IF

! ! 8 S S | c M P ^ % V POK|
48516,2. 16.9
1
t i ^ l & ' & s t f t f - -0 • 1 6 0 • 1 ' 0 •
4 4 0 DOTO 4 0,1,0.0.®
' 3 4 é | ' Sd 0oTt 0o 0
"ü ' : : 66 6 . 48 4 .. x .—
®.
' ¿ 7 0 DOTO 48900.2'l '^'•
P
O.íit r>2 PQ^e g * ^ i POKE 0*13^
líi¿7á> POKt v
« 8 ^ 1 - 0 .
0
4|'BOTO 48900.2.1^^ .

®s:0,VoTO - 0 0
' ! - : : 1
l 9 2 ' . 32.1.®

0
• i u ^ s a f r ? * . • 1 —
15® 0 , n 4 . «, 1,0,®

1,3.®dO-T0 47364.3.2a"

4|00DOTO - - ' ^ . 0 . 6 . 1 . 0

w f t M r a w GO SUB

G B
i ! i l ? 0 ^ 2 3 ? 2 9 . - 5 . - F u s r 6 2 0 0

' 1 4 DOTO ' 0,80.1.®-0' o>


0 -— « n o f l . 25o
0 11090
0 9 0 PPOK|
O ^ .t 2pp 3720i,RND*e>w
0 8 i ,2 R S N 5 Di60
¿Ié1OOTO 4 7 3 0 ® ' 2 ' _ 6 6 í 2 0 . e , l .
4 0
¿l0 DOTO 4 8 5 1 6 . 2 . 1 6 - NEXT X „ ,• USR 6 2 0
l f
48S16 . 2 . 1 6 »

ViíVOTO 473W.a.i».
1,0.0'®
IWft^WWSr-»"
' | ¿ S DOTO 4 8 5 1 6 . 2 . 1 6
A ® ® * * * * *
14
bún
• ¿ ^ é S t » 47364.3,24,0.
,0,0.

SPARES. Es una zona de tra- m e m o r i a , c a m b i a n d o el que para poder generalizar b u j o , se necesita q u e esta
bajo d o n d e se a l m a c e n a r á n E Q U d é l a e t i q u e t a SPARES a l m á x i m o la subrutina q u e c o l u m n a a d i c i o n a l sea un
los trozos d e p a n t a l l a q u e en el listado e n s a m b l a d o r . se e n c a r g a d e d i b u j a r los píxel más alta q u e el resto
van a ser b o r r a d o s al d i b u - En la d i r e c c i ó n 5 4 5 6 8 se g r á f i c o s en esta p a n t a l l a , d e la p a n t a l l a . Así q u e en
jar los sprites, p a r a p o d e r e n c u e n t r a la p a n t a l l a d e n e c e s i t a m o s un c a r á c t e r r e a l i d a d , la z o n a o c u p a d a
restablecerlos después. La m e m o r i a . C o m o sabéis, la más d e a n c h o , en el q u e se p o r la p a n t a l l a c o m i e n z a en
c a n t i d a d d e m e m o r i a nece- p a n t a l l a d e l Spectrum tiene d i b u j a r á n restos d e los spri- 5 4 5 6 7 , p e r o la d i r e c c i ó n
saria d e p e n d e de los sprites 2 5 6 píxels d e a n c h o (32 ca- tes q u e , p o r estar a m e d i a s q u e se c o r r e s p o n d e c o n el
que se v a y a n a utilizar y sus racteres) p o r 192 d e a l t o , e n la p a n t a l l a , no d e b e n ser inicio d e la p a n t a l l a real d e l
dimensiones. El valor q u e se así q u e o c u p a 3 2 x 1 9 2 = d i b u j a d o s enteros. De esta o r d e n a d o r , es la 5 4 5 6 8 ,
le ha d a d o es un v a l o r p r o - = 6 1 4 4 bytes (sin c o n t a r con m a n e r a , la p a n t a l l a d e me- q u e es la q u e tiene el nom-
medio q u e será suficiente los a t r i b u t o s ) , así q u e , e n moria ocupará 3 3 x 1 9 2 = bre de ORIGSC.
p a r a casi todos los casos. Si p r i n c i p i o esto es lo q u e de- = 6 3 3 6 bytes. En r e a l i d a d , A c o n t i n u a c i ó n d e la pan-
p a r a vosotros resulta insufi- b e r í a o c u p a r la p a n t a l l a d e o c u p a un b y t e más, p o r q u e talla, se e n c u e n t r a n sus atri-
ciente, p o d é i s c o l o c a r esta m e m o r i a . Sin e m b a r g o , es- también para generaliza- butos, en la dirección 6 0 9 0 4 ,
zona en o t r a p a r t e d e la to no es así. Lo q u e p a s a es c i ó n d e la s u b r u t i n a d e l di- c o n la e t i q u e t a O R I G A T . A l
18¡E5F>E[=II3C!

igual que antes, necesitamos registro I estará entre 61696 el gráfico está en el primer hacemos es g u a r d a r 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 comprender y ocuparía deberemos volcar la panta-
dirección 6 0 9 0 4 , 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- demás. En este segundo ca-
la pantalla, que será a la ciones tenemos, en 61953, so saltamos a N O V O L C . En
vez el último byte de la pan- I N I C I O , la subrutina que el primero, llamamos a la
talla y el primero de los atri- inicializa las interrupciones y subrutina que vuelca la pan-
butos. crea la pantalla de memo-
FUNCIONAMIENTO talla y hacemos que ESTA-
ria y las tablas de rotacio- D O valga 1 p a r a la próxi-
En la dirección 61696 se El proceso que hay que ma vez que se produzca
encuentra la tabla de inte- nes. realizar para mover los spri- una interrupción, p a r a salir
rrupciones. Se ha dicho mu- En 6 2 0 7 5 está DESACT la tes por la pantalla es bas- después por SALINT.
chas veces en esta y en otras subrutina que desactiva las tante complejo y lleva bas-
interrupciones y vuelve al En el caso de encontrar-
revistas que en el modo 2 de tante tiempo. Por ello, lo va-
m o d o normal. nos en la segunda parte,
interrupciones el micropro- mos a dividir en dos partes,
ponemos ESTADO a 0 pa-
cesador toma el contenido En 6 2 0 8 2 está la subruti- de tal m o d o que una vez
ra la próxima vez. Después
del registro I y el del bus de na C O M C H O , de compro- haremos una parte, y la si-
nos disponemos a borrar to-
datos, que siempre es 255, bación de choque de spri- guiente vez haremos la otra
dos los sprites dibujados la
y forma una dirección, de la tes. En realidad no cabe en- parte, y a la siguiente volve-
última vez. Para ello, toma-
que se extrae la dirección tera aquí, pues se montaría remos a hacer la primera, y
mos el contenido de NUBL- is*.-i
definitiva de la subrutina de sobre la dirección donde así. Hacemos el volcado en
BO, que excede en uno al
interrupciones. Sin embar- deben comenzar las inte- pantalla de la pantalla de
número buscado. Antes de
g o , hay algunos periféricos rrupciones, por lo que par- memoria, que es el proceso
entrar en el bucle que bo-
que, por no estar demasia- te de ella se encuentra al fi- más lento, y la segunda, ha-
rrará todos los gráficos, ini-
d o bien hechos, hacen que nal de todo el bloque de la remos el resto, que se pue-
cializamos IX con TABLDI,
el contenido del bus de da- rutina de interrupciones y de dividir en las siguientes
tabla que tiene los datos de
tos en el momento de las in- sus subrutinas. subetapas:
los sprites que fueron dibu-
terrupciones no sea 255. Es- En 6 2 1 9 4 se encuentra la — Borrar los sprites de jados y ahora queremos bo-
to quiere decir que la direc- subrutina principal de inte- sus posiciones antiguas. rrar, y HL con SPARES, don-
ción donde el microprocesa- rrupciones, ¡unto con todas — Calcular nueva posi- de están almacenados uno
d o r buscará la dirección de sus subrutinas y variables ción de los sprites y el gráfi- detrás de otro los trozos de
las interrupciones, puede (excepto NUMSPR y SPRICH, co que toque de los que pantalla necesarios para
ser cualquiera cuyo byte al- que se encuentran en varia- c o m p o n g a n la animación efectuar el borrado. Ahora,
to sea el contenido del regis- bles del sistema no usadas). de cada uno. si el contenido de N U B L B O
tro I. Para conseguir que Detrás, como ya hemos di- — Hacer todos los cálcu- era 1, es que no habíamos
sea cual sea el valor del bus cho, continúa la subrutina los necesarios para el dibu- dibujado ningún gráfico la
datos, se lea la misma direc- de comprobación de cho- jo de los gráficos y su pos- última vez, y salimos del bu-
ción para la subrutina de in- que, que aunque no es muy terior b o r r a d o , almacenan- cle sin haber entrado en él.
terrupciones, no hay más larga, ha sido c o r t a d a en d o los resultados en la tabla
remedio que elegir para la dos para aprovechar mejor TABLDI, a la vez que se ol-
subrutina una dirección cu- la memoria, rellenando los macenon 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 ji
registro I. En nuestro caso,
propósito de estas tablas, l a p a n t o l l a . j0k
para que la tabla de inte-
s e g u r a m e n t e os habréis A h o r a que
rrupciones esté en 61696, I
preguntado qué sentido tie- sabemos to- (
valdrá 6 1 6 9 6 / 2 5 6 = 241, y
ne almacenar un byte gira- das las tareas

m
la subrutina de interrupcio-
do 0 veces (que es lo que a realizar, po-
nes comenzará en
hay en la primera tabla), demos comen- ;;
62194 = F2F2h, así que la
puesto que el resultado se- zar o comentar
tabla estará llena de
rá el mismo. La respuesta es el listado de la

1
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 ' t r a d a de ENTIT.
la dirección f o r m a d a con el
de dibujo, una para cuando Aquí, lo primero que
C O N T R O L DE SPRITES
m i3

Ahora vamos, t o m a n d o 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 h a y a n 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á p r o g r a m a un juego, publi- sean p a r a lograr la direc- nemos el destino, y el origen
el proceso. A h o r a , 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+ 1 guardamos restaurar. En BORPOI, aun- te g u a r d a d o s 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 c a r g a n d o C con el metros necesarios p a r a ha-
directamente por una ins- rar. En A U M P O I + 1 y en ancho del bloque a restaurar, cer un LDIR. A h o r a calcula-
trucción del tipo LD C,n, A U M P O D + 1 , guardamos pues es el valor que había- mos la dirección en panta-
2 0 I E 5 P E C I R L -

lia del siguiente sean, su- los trozos de pantalla, ya alternativos guardamos en ees, 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 l d i r , el número cal- en sus nuevas posiciones, t r a b a j o , y en DE el de la es que, como veremos ense-
culado antes y metido en llamando a DIBUJA, que se p a n t a l l a del o r d e n a d o r , guida, a cada paso por el
A U M P O I + 1 (por si no lo a p o y a r á en los datos de además de poner C a 0 . En bucle, el registro BC será
habéis notado, os diré que TABLDI. A h o r a , antes de los registros normales pone- decrementado 32 veces, así
en la pantalla de t r a b a j o , 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 p a r a 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 SALINT, DE su correspondiente en la h a b r á sido decrementado
están en la pantalla del or- donde se recuperan los re- p a n t a l l a del o r d e n a d o r . en 2 2 x 3 2 = 704, con l o q u e
denador). Tras esto, cerra- gistros y se vuelve. Nótese Asimismo, cargamos C con B habrá sido decrementado
mos el bucle p a r a terminar que tal y como está puesto, 0 y B con 25 (estas dos últi- en 3. Por tanto, deberemos
con todos los scans. A h o r a , 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 a b a r c a 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 p a r a 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 Ll
tica a la que acabamos de te p o b r e , pero da un poco repetirá ocho veces, adivi-
hacer. Tras restaurar p o r 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- mos los 32 bytes que com- (j
ra de teclado. Si pensamos Fig. 6 ponen un sean de la panta-
los restaurará todos. Ya he-
mos terminado la primera usar los sprites desde Códi- lla desde la Ídem de memo-
g o M á q u i n a , podría ser útil T A B L A DE D A T O S DE rio a la real. Posiblemente
de las subfases antes cita-
quitar las líneas 96, 97 y 98 LOS GRÁFICOS os sorprenda que para esto
das.
p a r a ahorrar aún más tiem- Q U E SE V A N A D I B U J A R utilicemos 32 instrucciones
A h o r a continúamos por po. Dirección Contenido LDI. Pero resulta que esto es
INSABO. Aquí hacemos un relativa mucho más rápido que car-
bucle en el que iremos mo- Y esto es todo el p r o g r a - g a r BC con 32 y hacer un
DIR + 0 Dirección de
viendo todos los sprites y ma principal. A h o r a que- LDIR, y además, así pode-
destino en pan-
calculando los datos para la d a n 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. Dirección del los que veremos a continua-
DIR + 2
de este bucle, IY será el VUELCA es la que se en- gráfico. ción son la causa de que en
puntero p a r a el elemento carga de copiar la pantalla DIR + 4 Dirección de la un bucle tengamos que car-
correspondiente al sprite de trabajo en la pantalla del máscara. gar B con 25 y en el otro 9
dentro de la tabla de sprites ordenador. Se trata del pro- N ú m e r o de en vez de 22 y 8 respectiva-
DIR + 6
TASPRI, IX el de TABLDI, y ceso que más tiempo consu- scans. mente. Tras esto, calcula-
DE señalará la primera di- me, ya que hay que mover 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 siguiente sean. Dentro de
SPARES, pues en este bucle dos los scans de a r r i b a a entran en este bucle siempre vamos a
también será donde guar- a b a j o , y por cada 8, vuel- pasar de un sean a otro de
pantalla.
daremos los trozos de pan- ca una fila de atributos. la misma fila, y, como mu-
DIR + 9 Byte de
talla que hagan falta. Den- Puede pareceros que sería chos ya sabréis, el algoritmo
rotación.
tro del bucle, lo que encon- más sencillo volcar primero p a r a pasar de un sean a
D I R + 1 0 Byte de
tramos son llamadas a dos toda la pantalla sin atribu- otro de la misma fila es sim-
atributos.
subrutinas. MOVERR se en- tos, y luego los atributos, plemente incrementar el
DIR + 11 Dirección de
cargará de calcular las nue- pero el resultado sería que byte alto de la dirección. Pe-
destino en atri-
vas coordenadas del sprite, el movimiento quedaría mu- ro antes debemos restarle
butos de
teniendo en cuenta si se cho menos suave. Con este 32, porque al hacer los LDIs
memoria.
mueve en línea recta o se- procedimiento h a b r á pe- es como si le hubiéramos su-
DIR + 13 N ú m e r o de filas
gún trayectoria prefijada, y queñas zonas de la panta- m a d o 32. Como no hay re-
de atributos que
de calcular la fase de ani- lla donde sprites parecerán gistros dobles libres, nos va-
ocupan el
mación en que se encuen- doblarse; pero en la inmen- lemos de A para hacer la
gráfico.
tra, si la tiene. CREADA sa mayoría de los casos, la resta. Primero le restamos
DIR + 14 N ú m e r o de co-
crea el elemento en la tabla suavidad de movimientos 32 a E. Si no se nos produ-
lumnas de
TABLDI y g u a r d a los trozos será perfecta. ce a c a r r e o , la resta ya está
atributos. bien hecha y procedemos a
de pantalla.
Veamos cómo funciona la
Una vez guardados todos subrutina. En los registros
c o n t r o l de sprites 2 ]

incrementar D P E rn <; K
sean de la siguiente fila fe
un "¡endo en cuenta que es DO" o b r a n t e , cerramos el bu-
„ ° ° Pero como des- de la tabla TABLDI. Lo n r i
Jlequeestemosqp:seQSnPd°0
a e u n ,erc|
^ en,Qr
' ° de nuevo, no ha o a otro. N o e r J , -ero e hacemos al enZ
cemos ninguna d e l a s d o s VERp9?m0lahoro ° ^O-
J i / , a subrutina que cal este n T q U e e l s P r | te
Antes de cerrar el bu. r&ssxzz culo | QS coordena-
das de cada uno de los spri-
com ud°' Para cual,
cono ya hemos dicho, com-
probamos que no sea 127 el
o uno d
SCQ,n Si9uíenfe byte de la tabla (seña
ado por IY + 5). S i e s 127
regresamosinmediatamen:
spntes TASPRI. I X , po° e A
' continuación, guarda-
bastad ° ' r o s registro y

105 P Q r o
P°sar al
P
demento
2 E 2 ctV
correspondiente
r™ ™ D el décimo byte de
lo 'oblo, que era el que ¡„?
dicaba el color, el « p o d e
primer

3D00BC3EC37C3F3CFC27 1044
LISTADO 2 FC003FF8001FF0000FE0
0007C00003C000038000
01800001800001800001
1073
525
388
129
130
131
C3E427FFE4 3FFFFC0000
00000000FFFFFFFF00FF
1515
1275
80000180000180000180 515 132 FC003FF8001FFO000FE0 1073
00018000018000018000 387 0007C00003C000038000 525
133 01800001800001800001 388
01800001800001800001 388 134
800001FFFFFF00000000 894 80000180000180000180 515
135 00018000018000018000 387
000000FF0003FFC007C3 907 136
E00F3CF01EC3781D0068 1097 0 1 8 0 0 0 0 1 8 0 0 0 0 1 8 0 0 0 0 1 388
137 8 0 0 0 0 1 F F F F F F 0 0 0 0 0 0 0 0 894
3R105C3R105C34102C34 496 138
102C34102C34082C3R04 338 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 8 1 0 56
7E84BD040004 00040004 463 139 14181FFC141828100000 427
5C3R025C3D008C3EC37C 874 140
LÍ004 0 0 0 4 0004121004 0 0 0 4 20 3F3CFC27C3E427FFE43F 1422 0000000000000000FFFF 510
007EC4BD02FE02FE02FE 1279 FFFC000000000000FFFF 1017 141 FFFFFFFFFFFFFFFF83C7 2370
02FE02FE02FE02FE02FE 1280 142 81C38001C000800181C3 1098
FFFF00FFFC003FF8001F 1359
7E04BE00FC00FC00FC00 1076 F0000FE00007C00003C0 873 143 83C7FFFFFFFFFFFFFFFF 2370
FC00FC00FC00FC00FC7E 1386 00038000018000018000 389 144 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 F 0 240
44BEFEFEFEFEFEFEFEFE 2290 01800001800001800001 388 145 00700070009001000R00 379
FEFEFEFEFEFEFEFE7E84 2290 80000180000180000180 515 146 34000R00040004000000 70
BEFC00FC00FC00FC00FC 1450 00018000018000018000 387 147 0000FFFFFFFFFFFFFE07 1791
00FC00FC00FC00 7EC4BE 1268 01800001800001FFFFFF 1024 148 FE07FF07FE07FC07E027 1306
FE02FE02FE02FE02FE02 1280 00000000000000FF0003 258 149 807F80FF80FFE0FFF1FF 1996
FE02FE02FE027E04BF00 1089 FFC007C3E00F3CF01EC3 1413 150 F1FFFFFF 000 000000080 1134
040004 0004 0 0 0 4 0 0 0 4 0 0 781O00B83R105C3R105C 665 151 0 1 C 0 0 3 E 0 0 0 8 0 0 0 8 0 0 0 8 0 804
04 0 0 0 4 0 0 0 4 7E 4 4 B F 0 2 0 2 388 152 0 0 8 0 0 0 8 0 0 1 C 0 0 2 R 0 0 1 C 0 804
02020202020202020202 153 022000000000FF7FFE3F 733
020202027F0000000000 154 FC1FF80FF80FF80FFE3F 1389
00000000000000008000
SC00BFF0SFFEBFF0SC00
128 155 FE3FFE3FFC1FF80FF80F
F80FF80FF88FFFFF0000
1443
1427
1395 _ _ 1092 156
80000000000000000000 128 0000FFFFFFFF00FFFC00 1527 157 0 0 0 0 0 0 0 0 0 0 0 0 0 F 0 0 0 E 0 0 29
0000FFFFFFFFFFFF7FFF 3FF8001FF0000FE00007 828 158 0E00090000800050002C 275
23FF000F000100000001 C00003C0000380000180 647 00500020002000000000 144
159
000F23FF7FFFFFFFFFFF 1707 00018000018000018000 387 160 FFFFFFFFFFFFE07FE07F 2232
FFFFFFFF000000000000
1020 01800001800001800001 388 161 E0FFE07FE03FE407FE01 1607
00FF0003FFC007C3E00F
3CF01EC3781D00B83R10 1146 80000180000180000180 515 162 FF01FF01FF07FF8FFF8F
FFFF0000000000000000
1570
510
00018000018000018000 387 163
5C3R105C34102C34102C 01FFFFFF000000000000 766 00000000081418283FF8 403
34102C34002C3R00SC3FI 164 1 8 2 8 0 8 1 4 0 0 0 0 0 0 0 0 0 0 0 0 92
00FF0003FFC007C3E00F 1146 165
005C3D0OBC3EC37C3F3C 3CF01EC3781D00B83R10 932 00000000FFFFFFFFFFFF 1530
FC27C3E427FFE4 3FFFFC 166 FFFFFFFFE3C1C3818001 1893
5C3R105C34102C34102C 482
1806 167
000000000000FFFFFFFF
00FFFC003FF8001FF000 1020 34102C34202C3R405C3R
805C3D00BC3EC37C3F3C
512
973
168 00038001C381E3C1FFFF
FFFFFFFFFFFF00000000
1386
1S30
0FE00007C00003C00003 1089 169 002000200050002C0050 268
636 FC27C3E427FFE43FFFFC 1806 170 008009000E000E000F00 180
80000180000130000180
00018000018000018000 515 102 000000000000FFFFFFFF
00FFFC003FF8001FF000
1020
1089
171 0000000000000000FFFF 510
01800001800001800001 387 103 0FE00007C00003C00003 636
172 FF8FFF8FFF07FF01FF01 1570
80000180000180000180 388 104 80000180000180000180 515 173 FE01E407E03FE07FE0FF 1607
0001800001FFFFFF0000 515 105 00018000018000018000 387 174 E07FE07FFFFFFFFFFFFF 2232
0000000000FF0003FFC0 89S 106 01800001800001800001 388 175 00000000044003800540 268
07C3E00F3CF01EC3781D 705 107 80000180000180000180 515 03800100010001000100 135
00B83R10SC3A125C3414 1115 108 0001800001FFFFFF0000 895 010007C0038001000000 332
590 109 0000FFFFF11FF01FF01F 1324
2C34 182C34102C34002C
3R005C3R00SC3D00BC3E 110 0000000000FF0003FFC0
07C3E00F3CF01EC3781D
705
1115 F01FF01FF83FFC7FFC7F 1611
C37C3F3CFC27C3E427FF 111 00B83R10SC3R105C3410 584 180 FC7FF01FF01FF01FF83F 1503
1450 112 2C34102C35F02C34002C 589 181 FC7FFEFF000000000400 892
E43FFFFC000000000000 798 113 3R005C3R005C3D00BC3E 611 182 0 4 0 0 0 R 0 0 3 4 0 0 0 O 0 0 0 1 0 0 77
FFFFFFFF00FFFC003FF8 1838 114 C37C3F3CFC27C3E427FF 1450 183 0 0 9 0 0 0 7 0 0 0 7 0 0 0 F 0 0 0 0 0 608
001FF0000FE00007C000 709 115 E43FFFFC000000000000 798 184 000000000000FFFFF1FF 1006
03C00003800001800001 456 116 FFFFFFFF00FFFC003FF8 1838 185 F1FFE0FF80FF80FF807F 1996
80000180000180000180 515 117 001FF0000FE00007C000 709 186 E027FC07FE07FF07FE07 1306
00018000018000018000 387 118 03C00003800001800001 456 187 FE07FFFFFFFFFFFF0000 1791
01800001800001800001 388 119 80000180000180000180 515 188
800001800001800001FF 642 120 00018000018000018000 387 189
FFFF00000000000000FF 765 121 01800001800001800001 388
0003FFC00 7C3E00F3CF0 1191 122 800001800001800001FF 642
1EC3781D00B83R105C3R 782 123
105C34102C34102C341F
2C34 0 0 2 C 3 R 0 0 S C 3 R 0 0 S C
415
440
124
125
DUMP: 4 0 . 0 0 0
3D00BC3EC37C3F3CFC27
C3E427FFE4 3FFFFC0000
1044
1515
126 1EC3781D00B83R105C3R
905C34502C34302C3410
782
624
N . ° BYTES: 1.888
00000000FFFFFFFF00FF 2C34002C3R005C3R005C 440
22 I S F E C i n L .

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 h a b r á 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. A h o r a , 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:
trayectoria prestablecida, taba alto. Este incremento primero el cuarto, luego el
cargamos en HL la direc- uno vez convertido en un tercero, y después el segun-
ción de los datos de la tra- número de 16 bits, se lo su d o . En general, si hay N
yectoria. Leemos el valor momos a la c o o r d e n a d a Y gráficos distintos, la canti-
contenido en esa dirección. y guardamos la nueva coor d a d de fases por las que pa-
Si es 127, la trayectoria ha d e a n d a . A continuación saremos será de 2 * N - 2 . Por
finalizado y cargamos en hacemos lo propio con la X eso ADETRA, tras incremen-
HL la dirección inicial p a r a Ya hemos actualizado las tar el contador de fase, le
coordenadas. Ahora vamos comente, lo que se hace en
volverla a repetir. Tanto si restamos ese número. Si el
a pasar a calcular qué grá- ella es averiguar si hay que
hacemos esto como si no, resultado es 0 , el ciclo ha-
fico hay que dibujar, de los dibujar todo el gráfico, o és-
continuamos por N O F I T A . brá terminado y comenza-
varios que puede tener un te se encuentra parcialmen-
A h o r a comprobamos si el remos de nuevo por la fase
sprite, p a r a lo cual tendre- te en la pantalla, y calcular
valor leído es un 126. En es- 0 . Pero antes hemos guar-
mos que tener en cuenta la todos los datos para que
te caso, los dos siguientes d a d o el resultado de la res-
fase ae animación. Por eso luego DIBUJA se encargue
bytes indicarán la nueva di- ta. A h o r a tenemos que cal-
cargamos en E el número ya de dibujar los gráficos.
rección inicial de los gráficos cular qué es el que hay que
total de fases de animación Lo primero que hacemos es
correspondientes al sprite, y dibujar. Si la fase actual es
y en A la fase en la que es- calcular qué tabla de rota-
los pasamos a su lugar en la menor que la cantidad de
taba la última vez. A h o r a ciones de las cuatro existen-
tabla TASPRI, para retroce- gráficos distintos que hay,
saltamos a ADETRA si la tes es la que vamos a utili-
der a continuación a RECU- nos encontramos en la par-
a n i m a c i ó n es d e l t i p o zar. En realidad, lo que cal-
PE y leer un nuevo dato de te que es igual que en la
adelante-atrás. Si es cíclica, culamos es el byte alto de su
la tabla de datos de la tra- animación cíclica, por lo
simplemente incrementamos dirección de inicio (el bajo
yectoria. Cuando nos en- que la fase es igual al núme-
la fase, y si hemos llegado es 0). Tras g u a r d a r esto en
contramos con un dato que ro del gráfico. En caso con-
a la última, la ponemos a 0 . su lugar, comprobamos si la
no es 127 ni 126, llegamos trario, bastará que calcule-
Después saltamos a TRA- c o o r d e n a d a X es positiva y
a TRANOR. Este dato será mos 2 * N - 2 - f a s e actual, pe-
REN. Nótese que en la ani- menor de 256. En este caso
el incremento X, y lo pasa- ro eso es lo que habíamos
mación cíclica, coinciden la saltamos a XPOSIT. En ca-
mos a E, c a r g a n d o A el si- calculado antes, salvo que
fase actual con el gráfico so contrario, si no es mayor
guiente valor que será el in- con signo contrario así que
que hay que dibujar. Esto de —256, retornamos inme-
cremento Y, tras actualizar en PARETR lo recuperamos
quiere decir que si la fase es diatamente, pues el sprite se
el contador de trayectoria, (había sido g u a r d a d o en
0 habrá que dibujar el pri- encuentra fuera de la pan-
saltamos a COCORE don- PARETR+ 1), lo cambiamos
mer gráfico, si es 1, el se- talla. Cuando es negativa
de nos reuniremos con la bi- de signo y continuamos por
gundo, etc. En ADETRA tra- mayor que —256, compro-
furcación hecha en el caso TRAREN como en los otros
tamos la a n i m a c i ó n de bamos si es mayor o igual
de un movimiento en línea casos. En TRAREN, carga-
adelante-atrás. En este tipo que —6, en cuyo caso, el
recta. En este casó saltába- mos DE con la cantidad de
de animación, si por ejem- trozo del gráfico que no se
mos a RECLIN. Aquí, car- memoria que ocupa cada
plo, tenemos cinco gráficos ve en pantalla será menor
gamos en E el incremento X gráfico, y la multiplicamos
de un carácter. Esto quiere
y en A el Y, para entrar en por dos caras p a r a 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 C O C O - 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 HLORIGAT—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á g a r que le corresponde en
construir las direcciones des-
ser igual que el byte de in- ía tabla TABLDI. Y esto es
tino del gráfico en la panta-
cremento, pero el alto, de- todo lo que hace MOVERR.
lla de t r a b a j o y en los atri-
berá ser 0 para un incre-
butos de la misma. Como
mento positivo y 255 p a r a Llegamos a h o r a a CREA- hemos dicho que dibujare-
un incremento negativo. Es-
DA, posiblemente, la subru- mos el gráfico entero, hace-
tina más complicada. Bási-
C O N T R O L DE S P R I T E S m
i3

mos que el ancho del gráfi- es porque el sprite está com- PARTEY. Seguimos a h o r a 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 a b a j o , co-
al ancho del gráfico en sí, y talla, y retornamos ensegui- d e n a d a 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 b r á 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. A h o r a 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 d o n d e 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 p a r a esos tero. En caso contrario, al se le suma 1 y obtenemos el
do 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 g u a r d a r e - 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 g a r 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 tolla 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. A h o r a 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
C O I N p a r a calcular la di- columna, o c u p a r á tantas
rección de la pantalla de columnas como su ancho en
t r a b a j o . Y llegamos a PAR- caracteres, pero en caso
TEY. Aquí se hace lo mismo c o n t r a r i o , o c u p a r á una
que acabamos de hacer con más. A h o r a recuperamos
la X, así que no la vamos a de la pila a DE y HL (que
comentar tan en detalle, si- han sido g u a r d a d o s 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 g u a r d a r
pantalla, no necesitamos HL. Tras meter la dirección
c a l c u l a r n a d a más q u e de atributos en su sitio y
te, para que, como antes, el cuantos scans q u e d a n den- aumentar en 1 el contenido
trozo del primer byte a di- tro, y no cuántos fuera, d é l a variable N U B L B O pa-
bujar que no debe salir en aunque c u a n d o se sale por ra indicar que hay un sprite
pantalla, quede en la co- a r r i b a , igual que cuando más p a r a dibujar, llegamos
lumna extra. Pero si el grá- con la X se salía por la iz- a las líneas que se encargan
fico empieza justo en la po- quierda, h a b r á que modifi- de g u a r d a r en SPARES (re-
sición de un carácter, no ha- car la dirección de comien- cuérdese que DE apunta a
brá ningún byte que quede zo del gráfico, sumándole el SPARES) cada uno de los
a medias entre dos direccio- ancho del gráfico tantas ve- trozos de pantalla d o n d e
nes, o lo que es lo mismo, el ces como scans quedan fue- luego van a ir los sprites.
primer byte a dibujar del ra de la pantalla. Lo único Tampoco necesitan comen-
por la izquierda deben ser
gráfico q u e d a r á completa- que se hace y que no se ha- tarios, pues son práctica-
unos y no ceros. A esta
mente dentro de la panta- cía con la X es calcular mente idénticas a las que to-
coordenada en baja resolu-
lla, por lo que hacemos que cuántas filas de atributos m a b a n estos trozos de SPA-
ción, le sumamos el ancho
BC y HL incrementen en uno ocupa el gráfico. En el caso RES y los c o p i a b a n en la
del gráfico. Si el resultado
es cero o ni siquiera llega, sus valores antes de saltar a
m Veces
° sprite, L co-
bu orlo> En
en la pila w°$ A bardad o
p
OSNUM+ei / -
gráfico y lomÁ 2 ndo
° el un ?<;<; ' • a ,acena- m e r
d Q
^ queCQ e
r
a
n
m o s
'Cosíos °desLn ?en o s e
'
veces hacia /9""ado f8"N) fe es el v T S d e a n
^ o .
de es,e bucle a<nt>0$J*en,r°
6S de
ceder a ef jct , Pr°-
d o
vos. En HL carn ° " e r n ^ Un "UDer dibuia-
m
°yor probtrZ T , a El rección delaráf^arn°sc"'
Com
Prensiónau»„ , " 0 0 0 d e 9 ° Posarlo o ° y f n P n | 0 ' u e "
tar esf<T suh V e P r esen- >oblo X rn " 1° c
rá e
' c o n S
9
R ,
N
'
E
' ^ e -
9 ° m o s la ¿ir ' °r-

9'r°d°Nvecé;£ 2 5 5 t r ó T s y f
" u m e r o de p i x t u ^e'
P'*e/S q u e d e b e -

LISTADO 3
66 7 7 0 0 2 3 7 E F D 7 7 0 1 2 3 C 3 7 8 1003 133 D9010000D90600FD7E00 820
LÍNEA DATOS CONTROL 67 F 4 5 F 2 3 7 E 2 3 F D 7 5 0 D F D 7 4 1287 134 FD23087E23D96F7EB124 1124
68 0 E C 3 R R F 4 F D 7 E 0 R 5 F F D 7 E 1486 135 4E086F78462SB66F08EB 960
1 F33EF1ED4706002100F1 1134 136 R6B37723EBD910E119FD 1470
2 36F22310FB36F21128D5 1164 69 0 B 4 F F E 8 0 3 F 9 F 4 7 F D 6 E 0 6 1134
137 19D979F600EBR6B0773E 1367
3 2100403EC008E5012000 621 70 FD660709FD7506FD7407 1123
138 008S6F8C9567EBD90DC2 1295
4 EDB013E1247CE607200R 1096 71 7 B 4 F F E 8 0 3 F 9 F 4 7 F D 6 E 0 4 1244 139 29F7DD6E0BDD660CDD7E 1312
1117
5 7DC6206F38047CD60867 975 72 F D 6 6 0 5 0 9 F D 7 5 0 4 F D 7 4 0 5 1464 140 0E3284F7ED44C621328D 1170
6 083D20E32100S811E8ED 935 73 F D 7 E 0 C F D 5 E 0 8 C B 5 R C 2 E 7 1278 141 F7DD5E0P16B8DD7E0D08 1146
7 3E18012000EDB0133D20 644 74 F 4 3 C B B 2 0 0 1 R F F D 7 7 0 C C 3 1438 142 06007ER2B3772310F90E 906
8 F7ED5E0E0426F83E0991 1098 75 F D F 4 3 C 5 7 9 3 9 3 C 6 0 2 3 2 F R 1038 143 0009083DC282F7F10E0F 919
9 912E004S1E00571S2806 444 76 F 4 2 8 0 1 7 R F D 7 7 0 C B B 3 8 0 4 1084 144 DD09C3ECF60001FD5E02 1257
10 CB38CB1B18F77024732S 1060 77 3E00ED44FD5E0FFD5610 145 CB23CB23CB23C3RDF7FD 1582
11 2D20EC24240D20E13E01 718 78 C B 2 3 C B 1 2 F D 6 E 0 0 F D 6 6 0 1 1178 146 5E031600R7ED52C9CDC7 IT
12 329DF7RF32815C329CF7 1353 79 R72804471910FDDO7502 916 147 F7C30000FD6E04FD6605 I:
13 F8C93E3FED56ED47C9ED 1646 80 D D 7 4 0 3 C 9 F D 7 E 0 4 4 F E 6 0 6 1239 148 C9FD6E06FD6607C9FD21 1'
14 4BB05C0C280R0DCDB3F2 1044 81 C 6 F 8 D D 7 7 0 9 F D 7 E 0 5 R 7 2 8 1386 149 08CFR7C8D5111100FD19 L:
4D3CC079C606301321E7 985
15
16
010000D003C9DD21B0SC
3O815CDD340008ED4BB0
935
1048
82
83 ED0127D5FD7E02DD7707 1218 150 3D20FBD1C90000000000 7!

17 5C78B92807CDB3F20101 1072 84 H F O D 7 7 0 8 C 3 C 1 F 5 3 7 1 F C B 14 4 5
18 00D8083D20E90BC921B9 980 85 2 F C B 2 F 4 7 F D 8 6 0 2 D 0 C 8 D D 1386
19 F722B7F7219EF722ERF2 1659 86 7 7 0 7 7 8 E D 4 4 D D 7 7 0 8 D D 8 6 1254
20 CDCFF2D021C0F722B7F7 1798 87 02DD77023E00DD8E03DD 993
21 21RRF722ERF278CDB3F7 1711 88 77037921E7ED0127D5E6 1227
1121
22 EB79CDB3F7R7ED527830 1641 89 0 6 2 0 4 D 2 3 0 3 C 3 C 1 F 5 7 9 D 6 1162
23 087C2F677D2F6F2379CD 926 90 0 1 3 8 3 6 C B 3 F C B 3 F C B 3 F F D 1106
24 C7F7C300000000000000 641 91 8 6 0 2 F E 2 1 3 8 2 9 D 6 2 0 D D 7 7 1170
25 00F3F5C5D5E5DDE5D908 1802 92 '08ED44FD8602DD770779 1379
26 F5C5D5E5FDES3R9CF7R7 1994 93 C B 3 F C B 3 F C B 3 F 4 F 2 1 E 8 E D 1140
27 C213F3CDRFF33E01329C 1348 94 8 5 6 F 8 C 9 5 6 7 7 9 0 1 2 8 D 5 8 1 1445
28 F7C39EF32128D1RF329C 1506 95 4 F 8 8 9 1 4 7 C 3 C 1 F 5 F D 7 E 0 2 1462
29 F73R9DF7DD2129D03D28 1313 96 D D 7 7 0 7 R F D D 7 7 0 8 C 3 9 8 F 5 1283
30 4R08DD5E00DD5601DD7E 1052 97 FD7E07R7283B3CC0FD7E
31 0E3244F3O25RF3ED44C6 1261 98 0 6 F D 8 6 0 3 D 0 C 8 D D 7 7 0 6 E D 1387
32 213248F3325EF3DD7E06 1138 99 4 4 F D 8 6 0 3 E 5 D 5 D D 6 E 0 2 D D 1454
33 06000E00EDB00E00EB09 691 100 66031600FD5E02193DC2 756
1502
34 EB3DC243F3DD7E0DDDSE 1475 101 E6F5DD7502DO7403OO7E
35 0BDD560C0E00EDB00E00 771 102 0 6 C 6 0 7 C B 3 F C B 3 F C B 3 F D D 1230
1522
36 EB09EB3DC2S9F30E0FDD 1316 103 7 7 0 D C 3 7 6 F 6 F D 7 E 0 6 F E C 0 1237
37 0908C321F33E01329DF7 1005 104 D0CB3FCB3FCB3FC50121 827
38 1128D1DD2129D0FD2108 1063 105 0 0 3 C 3 D 2 8 0 4 0 9 C 3 1 3 F 6 C 1 1078
39 CF3R815C47R72814C5DS 1194 106 E5D56069112100FD7E06 925
40 CD5FF4D1CD1BF5011100 1248 107 R 7 2 8 0 7 1 9 3 D C 2 2 8 F 6 4 4 4 D 1322
41 FD09C110EFCDE5F6FDE1 1868 108 FD7E06FD8603382CFEC1 945
42 FDE5FFFDE1E1D1C1F108 2091 109 3 0 2 8 F D 7 E 0 3 D D 7 7 0 6 7 9 0 8 1370
43 D9DDE1E1D1C1F1FBED4D 2096 110 F D 4 E 0 6 C B 3 9 C B 3 9 C B 3 9 F D 1196
44 2128D51100400E00D921 631 111 7 E 0 6 F D 8 6 0 3 C 6 0 7 C B 3 F C B 1109
45 E8ED110058010019D906 823 112 3 F C B 3 F 9 1 D D 7 7 0 D 0 8 4 F C 3 1373
46 09EDR0EDR0EDR0EDR0ED 1834 113 7 6 F 6 3 E C 0 F D 9 6 0 6 D D 7 7 0 6 1343
47 R0EDR0EDR0EDR0EDR0ED 1985 114 C 6 0 7 C B 3 F C B 3 F C B 3 F D D 7 7 1014
48 R0EDR0EDR0EDR0EDR0ED 1985 115 0DDD7100DD7001DD6E02 1068
49 R0EDR0EDR0EDR0EDR0ED 198S 116 D D 6 6 0 3 F D 5 E 0 F F D 5 6 1 0 1 9 1219
50 R0EDR0EDR0EDR0EDR0ED 1985 117 D D 7 5 0 4 D D 7 4 0 5 D D S 6 0 7 D D 781
51 O0EDR0EDR0EDR0EDR0ED 1985 118 7 E 0 9 E 6 0 6 2 8 0 1 1 4 D D 7 2 0 E 1457
52 R0EDR0EDR07BD6205F38 1474 119 D 1 E 1 E 5 D D 7 5 0 B D D 7 4 0 C 6 0 1472
53 01142310B67BC6205F38 758 120 6 9 D D 7 E 0 E 3 2 C 8 F 6 3 2 D 6 F 6 1550
54 047RD60857D9EDR0EDR0 1446 121 E 0 4 4 C 6 2 1 3 2 C C F 6 3 2 0 R F 6 1329
55 EDO0EDR0EDR0EDR0EDR0 1985 122 3R9DF73C329DF7DD7E06 517
56 EDR0EDR0EDR0EDR0EDR0 1985 123 0 6 0 0 0 E 0 0 E D B 0 0 E 0 0 0 9 3 D 1290
57 EDR0EDR0EDR0EDR0EDR0 1985 124 20F6E1DD7E0D0E00EDB0
58 EDR0EDFI0EDP0EDFI0EDR0 1985 125 0E00093DC2D5F60E0FDD 987
59 EDR0EDR0EDR0EDR0EDR0 1985 126 0 9 C 9 D D 2 1 2 9 D 0 3 R 9 D F 7 3 D 1236
60 EDR0EDR0EDR0EDR0EDR0 1985 127 C 8 F 5 D D 5 E 0 0 D D 5 6 0 1 D D 6 6 1391
61 2305C2C1F3C9FD7E05FE 1509 128 0 9 2 E F F 7 E 3 2 5 5 F 7 2 4 7 E 2 5 1017
129 322BF7D9DD6E02DD6603
1216
62 7FC8FD7E0957E647DD77 1443
63 0RCB622331FD6E0DFD66 1131 130 E5FDE1DD6E04DD6605OD
1591
1063 DUMP: 4 0 . 0 0 0
64 0E7EFE7F2007FD6E0RFD 1186 131 7E07322FF7ED44C62132
65 660B7EFE7E200E237EFD 1079 132 5BF7DD4E06DD5E081600 988
N . ° BYTES: 1.
CONTROL m
DE SPRITES i 3

último, en DE cargamos el
número de caracteres de
ancho que no vamos a di-
bujar del sprite. Sobre LOS-
C A N se cerrará el bucle pa-
ra cada sean.
Aquí intercambiamos los
registros. A h o r a 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 p a r a
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.
O b t e n e r la segunda parte
del byte y g u a r d a r l a para
su uso con el byte siguiente.
En realidad, sería un poco
más complicado, pues hay
que hacer esto p a r a el byte
del gráfico y p a r a el de la
máscara. El paso descrito
como g u a r d a r el resultado
en pantalla, será en reali-
d a d hacer un A N D 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, p a r a inten-
tar clarificar un poco las co-
sas, vamos a llamar B1, C1,
etc., a los registros del jue-
g o 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
SPECTRUM, AMSTRAD, COMMODORE y MSX

Todo el universo
del Software
mes a mes

vent
- a lo °
C O N T R O L DE SPRITES

y DE el número de bytes que parte del byte anterior y en imaginario byte de másca- cemos el A N D con la pan-
no hoy que dibujar. Para B la de éste p a r a usarlo la ra ( c o l o c a d a anterior- talla y el OR con el gráfico
guardar la segunda parte próxima vez. mente en P O N U D O + 1) y lo metemos en pantalla.
del byte del gráfico, utiliza- A h o r a decrementamos H con la segunda del byte que A h o r a le sumamos a la di-
remos B1 para el gráfico y y ¡untamos 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 S U M V A L + 1 ) .
gunda parte del byte ante- la máscara, hacemos el Por último, sólo nos que-
rior, porque éste no exis- A N D con la pantalla, el OR da volver al ¡uego 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. A h o r a ra nos queda dibujar los
terior, que p a r a 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 DE 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) p a r a la más- parte del gráfico que no ha A T D I R G + 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. A h o r a tenemos nar , en SUMATT + 1, 33-el
debemos cargar en 81 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-
N U M (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 P O S N U M + 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). A h o r a volve- gráfico sea 0 y la máscara de filas a r e l l e n a r . En
mos al juego de registros 2, 255. En P O N U D O ¡unta- ATLAFX se cierra el bucle
e iniciolizamos 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 A N D D, lo ¡unta-
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. A h o r a 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
el p r o g r a m a principal. Lo
único que quedan son los
tres subrutinas anexas, INI-
C I O , DESACT y C O M C H O ,
que son tan sencillas y poco
interesantes y que no mere-
cen una explicación a fon-
do.
LISTADO ENSAMBLADOR C
I I IX 778 INSABO LO A,l
21 «C- 788 LD (NUBLBO),A
3t 798 LD DE,SPARES
41 SPRITES POR 888 LD IX.TABLDI
Si 818 LD IYJASPRI
61 1NTERRUPC1CNES 828 LO A,(NLhSPR)
78 838 LD 8, A
88 POR PABL 0 ARI2A. 848 AND A
98 851 JR 2,NOSPRI
111 848 IlfMIN PUSH BC
118 ORG 42194 878 PUSH DE
121 888 CALL MCVERR
138 898 POP DE
148 BÍTINT 01 988 CALL CREADA
158 PUSH AF 918 LD BC.17
148 PUSH BC 928 ADD 1Y,BC
178 PUSH DE 938 POP BC
188 PUSH HL 948 DJNZ 1WA1N
m PUSH IX 958 CALL DIBUJA
288 EXX 948 NOSPRI POP IY
218 EX AF.AF' 978 PUSH IY
221 PUSH AF 988 RST 54
238 PUSH BC 998 SAL1NT POP IY
248 PUSH DE 1811 POP HL
251 PUSH HL 1818 POP DE
241 PUSH IY 1828 POP BC
278 LD A, (ESTADO) 1838 POP AF
288 AND A 1848 EX AF.AF'
298 JP N2,N(W0LC 1858 EXX
318 CALL VUELCA 1848 POP IX
318 LD A , l 1878 POP HL
328 LD (ESTADO),A 1888 POP OE
338 JP SAL1WT 1898 POP BC
348 1188 POP AF
358 N0V0LC LD HL,SPARES lili El
348 XOR A 1128 RETI
378 LD (ESTADO),A 1138
388 LO A,(NUBLBO) 1148
398 LD IX.TA8L0I 1151 VUELCA LD HL,ORI CSC
demos pokear en las direc-
SUGERENCIAS Y 488 1N60T0 DEC A 1141 LO DE,14384
ciones 62387 y 62388 la di-
ADVERTENCIAS rección de la pantalla del
418 JR 2.1HSAB0 1171 LD C,8
428 EX AF,AP 1188 EXX
o r d e n a d o r d ó n d e quere- 438 LD E,UX<8)
Tal y como está, la zona 1198 LD HL.0R1GAT
mos que empiece, y en 448 LD 0 , ( I X t l ) 1218 LD DE,22528
de pantalla sobre la que se
62396 y 62397 la dirección 458 LD A,(IXH4) 1218 LD BC,25*254
dibujan los sprites es toda la
de atributos. 448 LO (BORPOJ*1),A 1228 LVOLCA EXX
parte superior de ésta, las
478 LD <B0RP0D>l),A 1238 LD B,9
22 líneas, pero no hay ra- Es necesario advertir que 488 NEG 1241 LOPPNU LDI
zón para que la zona usa- si usamos demasiados spri- 498 ADD A,33 1251 LDI
da tenga la altura que que- tes o demasiado grandes, se 588 LO (AWPOHD.A 1241 LDI
ramos. Por .ejemplo, pode- puede producir el bloqueo 518 LD (AUHP0D<l),A 1271 LD)
mos reservar los dos tercios del o r d e n a d o r . La única so- 528 LD A,(IX*4) 1288 LDI
superiores para la pantalla lución a esto, como ya he- 538 LD 6,8 1298 LDI
de juego y utilizar el tercio mos dicho, es cambiar en el 548 B0RP0I LO C,8 1311 LDI
inferior p a r a marcadores y listado Ensamblador la ubi- 558 LDIR 1311 LDI
otras cosas. Cuanto más pe- cación de la zona SPARES. 548 AUMPOI LO C,8 1321 LDI
queña sea la zona destina- 571 EX DE,HL 1331 LDI
da a sprites, mayor será la Por último advertirles a 588 ADD HL.BC 1341 LDI
velocidad a la que vayan los usuarios del Spectrum 598 EX D£,HL 1358 LDI
nuestros programas. Los 128 o + 2 que el p r o g r a m a 488 DEC A 1348 LDI
ajustes que deberemos ha- funcionará perfectamente 418 JP N2.B0RP01 1371 LDI
cer son los siguientes: Si en m o d o 48 K, pero en 128 428 LD A,(1X<!3) 1388 LDI
queremos que la zona en la sólo funcionará si no inten- 438 LD E . d X O I ) 1391 LDI
que aparezcan los sprites tamos interrumpir el pro- 448 LD D,(IX«12) 1481 LDI
tenga un alto de N filas, g r a m a con las interrupcio- 458 B0RP0D LD C|l 1411 LDI
tendremos que hacer POKE nes activadas, pues en este 448 LDIR 1421 LDI
6 2 4 0 0 , X , donde X es igual momento se bloqueará el 478 AWPOD LD C,8 1431 LDI
a N + 1 si N está entre 1 y ordenador. 488 EX DE,HL 1448 LOI
498 ADD HL,8C 1458 LDI
8, a N + 2 si N está entre 9
Esperamos que este pro- 781 EX DE, HL 1448 LDI
y 16, y a N + 3 si N es ma-
g r a m a os sea de utilidad y 718 DEC A 1471 LDI
yor de 16. Si no queremos
consigáis con él hacer pro- 728 JP NZ.80RP00 1488 LDI
que esta zona empiece jus-
gramas de calidad comer- 738 LD C,15 1498 LDI
to a r r i b a de la pantalla po-
cial. 741 ADD IX,BC 1581 LDI
758 EX AF.AF 1511 LDI
744 JP INBOTO 1521 LDI
DE M A N E J O DE PANTALLAS
1531 LD1 229» LD A,(HL) 3858 ¡ 3811 SUB C 457» SRL C
1341 LDI 231» LO (IYH),A 384» CREADA LD A,(lYt4) 382» LD 6,A 4588 SRL C
1558 LD1 2311 INC HL 317» LD C,A 3831 JP PARTEY 459» LD A,(IY»4)
154! LO A,E 232» LD A,(HL) 3» 8» AND 4 384» INTEGE LD A,(lY+2) 4688 ADD A,(]YO)
1578 SUB 32 233» LD (1Y»1),A 319» ADD A,248 385» LD (IX«7),A 441» AOD A,7
158» LD E,A 2341 INC HL 3188 LD <IX»9),A 384» XOR A 442» SRL A
1591 JR C,NOINCD 235» JP RECUPE 311» LO A,(IY*5) 3871 LD (IX»8),A 443» SRL A
me INC D 234» TIHNOR LD E.A 312» AND A 388» JP RECOIN 4448 SRL A
lili NOINCD INC HL 237» INC HL 313» JR 2,XPOSIT 3891 PARTEY LD A,(1Y*7) 445» SiJB C
1621 0JN2 LOPPNU 238» LD A,(HL) 314» INC A 39»8 (NO A 444» LD (1X*13) ,A
1431 LD A,E 239» INC HL 315» RET N2 3911 JR 2,YPOSIT 447» EX AF,AF'
1441 ADD A,32 2411 LO <IYtI3),L 314» LD A,C 392» INC A 4488 LD C,A
1451 LD E,A 241» LD <1Y»14),H 3171 ADD A,4 393» RET N2 4491 JP COYPOS
1441 JR C,SITERC 242» JP COCORE 318» JR NC, NEGARE 394» LD A,<IY«4> 478» NOSCAB LD A,192
1471 LD A,D 243» RECLIN LD A . d Y O D 319» LD HL.0R16AT-1 395» ADD A.ÍIY+3) 471» SUB <1Y»4>
1481 SUB 8 244» LD E,A 3288 LD BC.0R16SC-1 394» RET NC 472» LD (1X44),A
1491 LD D,A 245» LD A,(1Y«11> 321» LD A,(IY*2) 3971 RET 2 473» ADD A,7
i 711 SITERC D(X 244» COCORE LD C,A 322» LD <IX«7),A 398» LD (IX<4),A 474» SRL A
1711 LDI 247» cp 128 3231 XOR A 399» NEG 4751 SRL A
172» LD! 248» CCF 3241 LD <IX»8),A 4888 ADO A,(IY<3> 4741 SRL A
173» 249» SBC A , A 4111 PUSH HL 477» LO <IX«13),A
LDI 325» JP PARTEY
1741 LDI 2511 LD 8,A 4828 PUSH DE 478» COYPOS LD (ix<»),c
324» NEGARE SCF
175» LDI 2511 LD L.dY+4) 327» 4(38 LD L,(IX*2) 479» LD (IX«1),B
RRA
1741 LDI 2521 LD H,(IY»7) 484» LD H,(IX«3> 4888 LD L,(IX«2)
328» SRA A
177» LDI 253» ADO HL, BC 329» SHA A 485» LD 0,1 4818 LD H,(IX*3)
178» LDI 254» LD <IY«4),L 338» LD 8, A 484» LD E,(IY<2) 482» LD E,(IY»15)
179» LDI 255» LD <1Y«7),H 3311 ADD A,(1Y«2) 4171 NESUOI AOD HL.DE 483» LD 0,<mi4)
1811 LDI 254» LD A,E 332» RET NC 4888 DEC A 4848 ADO HL.DE
181» LDI 257» LD C,A 333» RET 2 4»9» JP N2.NESUD1 485» LD (IX»4),L
182» LDI 258» CP 128 334» LD <1X»7),A 411» LD <1X»2),L 484» LD (IXt5),H
183» LDI 259» CCF 335» LD A,8 411» LD (IX«3),H 4871 LO D,(IX»7)
184» LDI 241» SBC A , A 334» NEG 4128 LD A,(IX»4> 488» LD A,(IX*9)
185» LDI 241» LD 8, A 3371 LD (IX«8),A 413» ADD A,7 4898 M 4
184» LDI 2421 LO L,<IY«4> 338» ADD A,<IX»2> 414» SRL A 49Í8 JR 2.SAMU8Í
187» LDI 243» LD H,<1Y«5) 339» LD < JX+2>,A . 415» SRL A 491» INC D
1881 LDI 2441 ADD HL, BC 348» LD A,8 414» SRL A 492» SANUBY LD (IX<I4),D
189» LDI 2451 LD (IY»4),L 3411 AOC A,UX»3) 4171 LO (IX»13), A 493» POP OE
191» LDI 244» LD (IY<5),H 342» LD <1X<3) ,A 418» JP COYPOS 4948 POP HL
191» LDI 247» LD A,(1Y412) 343» LD A,C 419» YPOSIT LO A,(IY«4) 495» PUSH HL
192» LDI 2481 LD E,(IY«8) 3441 LD HL.0R1GAT-1 42»8 CP 192 494» LD (IX<I1),L
1931 LDI 249» BIT 3,0 345» LD BC.0R1GSC-I 421» RET NC 497» LD (IXM2),H
1941 LDI 271» JP N2 .ADETRA 344» AND 4 422» SRL A 4988 LD H.B
195» LDI 271» INC A 3471 JR N2.PARTEY 423» SRL A 499» LD L,C
194» LDI 272» CP E 348» INC HL 424» SRL A 5988 LD A,(IX<14)
197» LDI 273» JR N2 .NOFICI 349» INC BC 425» PUSH BC 5818 LD ÍPUBYSA+D.A
198» LDI 274» XOR A 358» JP PARTEY 424» LD GC ,33 5828 LD <PUATSAO),A
199» LDI 275» NOfICI LD (1Y*12),A 351» XPOSIT LD A.C 4271 INC A 5838 NEC
2MI LDI 274» JP TRAREN 352» SUB 1 428» CAIAIT DEC A 5»48 ADD A,33
291B LDI 277» ADETRA INC A 353» JR C.1NTEGE 429» JR 2,ATCWP 5858 LD <PUSUSA»1),A
2121 LDI 278» LD D,A 354» SRL A 4388 ADO HL.BC 5848 LD (ATSUSA<1),A
213» INC HL 279» SUB E 355» SRL A 431» JP CAWTT 517» LO A,(NUBLBO)
214» DEC B 2811 SUS E 354» SRL A 432» ATCÍNF POP BC 588» INC A
2» 5» JP N2.LVOLW 281» ADO A,2 357» ADO A,(IY«2) 433» PUSH HL _ 519» LD (NUBLBO) ,A
214» RET 282» LD (PARETRtD.A 358» CP 33 4348 PUSH DE 518» LO A,(IX*4)
2871 j 283» JR 2.FMHCI 3591 JR C.INTEGE 435» LO H.B 5111 LD B.»
2181 ¡ 284» LD A,D 348» SUB 32 434» LD L,C 512» PU6YSA LD C.l
2» 9» I W E R R LD A,(IY«5> 285» FIAHC! LD <JY»I2),A 341» LD (IX«8),A 437» LD DE,33 513» LDIR
211* CP 127 284» CP E 342» NEG 4388 LO A,(IYt4) 5148 PtlSUSA LD C,l
211» RET 2 287» JR CJRAREN 343» ADD A,(IY«2) 4391 ANO A 515» ADD HL.BC
212» ID A,(IY«9> 288» PARETR LD A,» 344» LD <1X»7),A 4488 JR 2.PR1FIL 514» DEC A
213» LD D,A 289» NEG 345» REC01N LD A.C 4418 CALFIL AOD HL.DE 517» JR N2.PUBYSA
214» WD 71 29»! TRAREN LO E,(IY«15> 344» SRL A 442» DEC A 518» POP HL
215» LD (IX*1I) ,A 2911 LD D,(1YM4> 3471 SRL A 443» JP N2,CALFIL 519» LD A,(IX«13)
214» BIT 4tD 292» SU E 348» SRL A 444» LD BiH 5288 PUATSA LD C,l
217» JS 2,RECLIN 293» RL D 349» LD C.A 445» LD C,L 521» LDIR
218» LD L,<IY«13) 294» LD L,(IY«») 371» LD HL.0R1GAT 444» PRIF1L LD A,<IY«4) 522» ATSUSA LD C,l
2198 LD H,(IY»I4) 295» LD H,<1Y0) 3711 ADD A.L 4478 AOD A,(IY»3) 523» ADD HL.BC
221» RECUPE LD A,(HL) 294» AND A 372» LD L.A 4488 JR C,MOSCAS 5248 OEC A
221» CP 127 297» JR 2,PRIFAS 373» AOC A.H 4498 CP 193 5251 JP N2,PUATSA
222» JR N2,NOFITA 298» LD B,A 374» SUB L 4511 JR NC.hOSCAB 524» LO C,15
2238 LD L,<1Y»U) 299» HULT1P ADD HL,DE 375» LD H.A 451» LO A,(1Y«3) 527» ADD IX,BC
224» LD H,<1Y«I1) 3111 DJN2 MULT1P 374» LD A,C 452» LD <1X«4),A 528» RET
225» LD A,(HL) 381» PRIFAS LD (1X*2),L 3771 LD BC.ORIGSC 453» LD A,C 529» ¡
224» NOFITA CP 124 312» LD <1X»3),H 378» ADD A.C 4548 EX Af,AF' 5388 ¡
227» JR NZ.TRANOR 3838 RET 3791 LD C.A 4551 LD C,(IY»4) 531» DIBUJA LD IX,TABLDI
2281 INC HL 314» ¡ 388» AOC A,8 454» SRL C 532» LD A,(NUBLBO)
5338 01BLUP DEC A 4858 SUB L 7818 POP HL 7494 LD A,l
4538 RET
5341 RE! l 4841 LD H,A 7828 INC H 7544 LD (NUBLBO) ,A
4548 COOROS CALL 0ITA8S
5351 PUSH AF 4878 EX D€,HL 7838 LD A,H 7514 XOR A
4558 CALPOI JP 1
5341 LD E,(1X<8) 4888 EXX 7848 AND 7 7524 LD (NWSPR) ,A
4548 COOROX LD L,<]Yi4)
5378 LD 0,(1X41) 4898 DEC C 7854 JR NZ,INIPRT 7534 LD (ESTADO),A
4578 LD H,(1Y45)
5388 LD H,(1X49) 4188 JP NZ,LOSCAN 7148 LD A,L 7544 El
4588 RET
5398 LD L ,255 4118 LD L,(1X411) 7878 AOO A,32 7554 RET
4598 COORDY LD L,(IY44)
5488 LO A,(HL) 4128 LD H,(1X412) 7888 LD L,A 7544 |
4488 LD H,<1Y47)
5418 LD (PGNU0041) ,A 4)38 LD A,(IX414) 7898 JR C,INIPRT 7574 1
Mlt RET
5421 INC H 4148 LD (ATDIRG4|),A 7188 LO A,H 7584 DESACT LD A,43
4428 D1TABS LD IY,TASPRI
5438 LD A,(HL) 4158 NE6 7114 SU6 8 7594 W 1
4438 WD A
5448 DEC H 4148 ADD A,33 7121 LO H,A 7488 LD l,A
4448 RET 2
5458 LD (POSNimií.A 4178 LD (SU1ATT4l) 1 A 4458 7138 INIPRT EX AF,AF' 7418 RET
PUSHDE
5448 EXX 4188 LD E,(IX4I8) 4448 LD DE,17 7144 DEC A 7428 ¡
5478 LD L,(IX42> 4198 LO 0,184 7158 JR NZ,INILAP 7438 ¡
4478 S W D 1 S ADD IY,OE
5488 LD H,(1X43) 4288 LD A,(1X413) 7148 LD HL,22528 7448 CHICHO LD BC,(SPRICH)
4481 DEC A
5498 PUSH HL 4218 A7LAFX EX AF,AF' NZ.SIMOIS 7178 LD OE.ORIGAT 7458 INC C
4498 JR
5518 POP IY 4228 ATD1RG LD B,8 4788 POP DE 7188 LD A,24 7448 JR Z.BONTO
5518 LD L,(IX44) 4238 AIBL01 LD A,(HL) 7198 1NATLA LD 8C,32 7478 DEC C
4718 RET
5528 LD H,(1X45) 4248 WD D 7288 LDIR 7488 CALL CHOSUB
4728 |
5538 LD A , (1X47) 4258 DR E 7218 INC DE 7498 LD BC,8
4738 ;
5548 U) (P0SBYT41) ,A 4248 LD (HL),A 7228 DEC A 7788 RET NC
4748 NlfiSPR EOU 23461
5558 NEO 4278 INC HL 7238 JR NZ.INATLA 7714 INC BC
4758 TABL01 EOU 53289
5548 AOO A,33 4288 DJNZ ATBLDI 4748 TASPRI EOU 53888 7244 IH 2 7724 un
5578 LD (SIHJAL41),A 4298 SLTOTT LO C,8 4778 ORIGSC EOU 54548 7258 LO C,4 7734 ;
5588 LD C,(IX44) 4388 ADD HL.BC 7248 LD H,248 7744 BCtHTO LD IX,SPRICH
4788 0RI8AT EOU 48984
5598 LD E,(1X48) 4318 EX AF.AF' 4791 SPARES EOU 53544 7278 LCRTCR LO A,9 7754 LD A,(NWSPR)
5488 LD 0,8 4328 DEC A 7288 SU8 C 7744 BUCHAL INC (1X48)
4888 SPRICH EOU 23728
5418 LOSCAN EXX 4338 JP NZ.ATLAFX 7298 SUB C 7774 EX AF,AF'
4818 ;
5428 POSNIH LO BC,8 4348 POP AF 7388 LD L,8 7788 LD 8C,(SPRICH)
4828 j
5438 EXX 4358 LD C,15 7318 ROTACU LD 6,L 7798 LD A,B
4838 ORO 41953
5448 POSBYT LD 8,8 4348 ADD IX,BC 7324 LD E,8 7888 CP C
4848 INICIO DI
5458 L0BY7S LD A.OY48) 4378 JP D1BLUP 7338 LD D,A 7818 JR Z,SASPRI
4851 LD A,241
5448 INC IY 4388 ; 7348 VERROT DEC D 7828 CALL CHOSUB
4848 LD I,A
5478 EX AF,AF' 4398 ¡ 7358 JR 2.VEREX1 7834 LD BC,1
4878 LD 8,8
5488 LD A,(HL) 4488 ESTADO DEF8 8 7348 SRL B 7848 OCI C
4888 LD HL,41494
5498 INC HL 4418 NUBLBO DEFB 1 7378 RR E 7858 SASPR1 EX AF,AF'
4898 INTCRE LD (HL),242
5788 EXX 4428 j 7388 JR VERROT 7848
4988 INC HL DEC A
5718 LD L,A 4438 ; 7398 VEREXI LD (HL),B 7878 JR NZ.BUCHAL
4918 DJNZ INTCRE
5728 LD A,(HL) 4448 D1NEXS LD E,(IY42) 7448 INC H
4928 LD (HL),242 7888 DEC BC
5738 08 C 4458 SLA E 7418 LD <HL),E
4938 LD DE,ORIGSC 7898 RET
5748 INC H 4448 SLA E 4948 LD HL,14384 7428 DEC H 7988 i
5758 LD C.(HL) 4478 SU) E 7438 DEC L
4958 LD A,192 7918 CHOSUB LO HL,COOROX
5748 EX AF,AF' 4488 JP COMTIN 7448 JR NZ .ROTACU
4948 INILAP EX AF,AF' 7928 LD (CALP0I4|),HL
5778 LD L,A 4498 D1NEYS LD E,(IY43) 7458 INC H
4978 PUSH HL 7938 LD HL.DWEXS
5788 LO A,B 4588 C W T I N LD 0,1 7444 INC H
4988 LD BC, 32 7948 LD (ANCALT4l),HL
5798 LD B.(HL) 4518 ANO A 7478 DEC C
4998 LDIR 7958 CALL CHOREA
5888 DEC H 4528 SBC HL.DE _ 7888 7488 JR NZ,LCRTCR
INC DE 7948 RET NC
5818 OR (HL)
5828 7978 LD HL,COORDY
LD L,A
5838 EX AF,AF' 7988 LD (CALP0I41),HL
7994 LD HL.DINEYS
5848 EX DE,HL
8888 LD (ANCALT4l),HL
5858 ANO (HL)
5848 OR E 8818 CHOREA LD A,B
5878 LD (HL),A 8828 CALL COORDS
5888 INC HL 8838 EX DE.HL
5898 EX DE.HL 8848 LD A,C
5988 EXX 8858 CALL COOROS
5918 DJNZ L06YTS 8844 ANO A
5928 ADD HL,DE 8878 SBC HL.DE
5938 ADD JY.DE 8888 LD A,B
5948 EXX 8898 JR NC.B1ENC0
5958 LD A,C 8188 LO A,H
5948 PttJUDO OR 1 8118 CPL
5978 EX DE.HL 8128 LD H.A
5988 AND (HL) 8134 LD A.L
5998 OR 8 8148 CPL
4881 LD (HL),A 8158 LD L,A
4818 SLIUAL LD A,l 8148 INC HL
4828 ADD A,L 8178 LD A,C
4838 LD L,A 8188 81ENC0 CALL 01TABS
4448 W C A,H 8198 ANCAL7 JP 1

-
6 GRANDES EXITOS EN UNO
MAS UN JUEGO GRAHS(DUET)

j u & q o

irdl
321 E5FECIPIL-
David LÓPEZ GUAITA

MOVIMIENTO
Con esta rutina no
sólo podrás definir
las teclas y mover un
sprite principal por la
pantalla, sino
trasladar gráficos
secundarios al
Y!
^HL
M •
ction es una ru-
tina f o r m a d a
por tres partes
diferenciadas:
FUNCIONAMIENTO
Para describir el funciona-
miento, vamos a hacerlo di-
dirección 6 3 4 5 0 ; en las li-
neas 7 0 - 8 0 el o r d e n a d o r
abre el canal dos de la pan-
talla, llamando a una rutina
mismo tiempo, borrar 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 p r o g r a - un texto a imprimir, en BC la
Definición de teclas.
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 p r o g r a m a . A grandes a la subrutina de la R O M
la posición de un objeto en rasgos, el p r o g r a m a 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 p o r interrupciones ston o redefinir las teclas. Si ya en pantalla, el ordena-
ue imprime en pantalla to- se redefinen las teclas, el or- d o r leerá la primera semifi-
os los gráficos que haya en d e n a d o r chequeará una a la del teclado p a r a 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 o r d e n a d o r al- sabrás, el teclado se divide
usas desde C ó d i g o M á q u i - macenará sus datos en la en ocho semifilas ( f i g . l ) .
na con esta rutina. memoria, y pasará a lo 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
M O V I M I E N T O o 0%
Y TECLADO O O

El registro L con-
tiene el número de
la tecla que esta-
mos redefinien-
d o . 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.
paro después hacer un
primero que se hace es A partir de la línea 7 0 0
I IN A,(FE). Con esto carga-
imprimir otro texto, (líneas empieza la rutina de defini-
remos en la mitad superior
2 5 0 - 2 7 0 ) . Se coloca en la ción propiamente dicha. Se
del registro de direcciones el
dirección de salto de la ru- c a r g a en A el v a l o r
valor del registro A, y en la
tina número 2 el valor de te- 0 1 1 1 1 1 1 1 b . 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-
c a m b i a d o por e r r o r , 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 p r o g r a -
dirección de tabla. Entre la ra vista no parece haber
semifila. ma.
línea 330 y 380 se b o r r a n ninguna relación entre ellos.
Si no hay ninguna tecla Si se ha pulsado la tecla 1
los ocho bytes de la tabla. Pero el poner esos valores
pulsada, el v a l o r es p a r a jugar con el ¡oystick
En esta tabla iremos escri- en binario, observa el resul-
XXXI1111. Si hubiera algu- Kempston, el ordenador irá
biendo los datos de cada te- tado:
na tecla pulsada, el valor de a KEMPS, en el cual simple-
cla seleccionada: byte de 7Fh = 0 1111111b
uno de los cinco primeros mente cambiará una direc-
mayor peso del bus de di- BFh = 1 0 1 1 1 1 1 1 b
bits se pondría a 0 . De esta ción de salto de la rutina de
recciones y valor de la semi- DFh= 11011111b
forma, el primer bit se pon- control del sprite p a r a que
fila si le tecla está pulsada. EFh= 11101111b
dría a cero si pulsáramos la en vez de chequear el tecla-
Después de limpiar la tabla F7h= 11110111b
tecla de la semifila más ale- d o teclee el ¡oystick, y des-
se salta a ESPERA, rutina FBh = 111110 1 I b
jada del centro del teclado, pués volverá al Basic. Si se
entre las líneas 1370 y 1420 F D h = 11111101b
el segundo bit si pulsáramos pulsa la tecla 2
que se encarna de detener FEh= 11111110b
la siguiente tecla, etc. se procede a
la ejecución hasta que no Como pueden observar,
En la rutina, el ordenador observar todo
haya ninguna tecla pulsada. p a r a chequear el teclado se
chequea la semifila 1-5, y si el teclado con
puede c a r g a r en A el valor
hay una tecla pulsada, (1 ó de la semifila, y haciendo
2), sus bits se p o n d r á n a 0 , ocho rotaciones podemos
y el ordenador saltará a las leer todas las semifilas del
.Jecla.do..
Esto es precisamente lo
que ocurre entre las líneas
7 0 0 y 7 9 0 . El p r o g r a m a va
rotando A, y comparando
los valores de la semifila se-
leccionada con 0 0 0 1 1 1 1 I b ;
si alguna tecla está pulsada,
se salta a INTEC.
5FECIPIL-

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 9 7 0 , se observa si en la DE L A S D I R E C C I O N E
semifila hay dos teclas pul- DEL M O V I M I E N T O
sadas al mismo tiempo, y si
Fig. 2
es así, se vuelve hacia el ini-
cio de la redefinición.
En O N M A S C se compa- JOYST, según lo hayamos pantalla del gráfico princi- cc
ran todos los datos de teclas ACTUALIZACIÓN DE definido antes. pal. En 6 5 5 0 1 guardamos p(
ya seleccionadas con los da- POSICIÓN DESPUÉS DE A continuación voy o ex- la posición en el eje X en al- re
tos de la actual, y si se han CHEQUEAR EL TECLADO plicar los datos y las varia- ta resolución y en 6 5 5 0 2 el df
s e l e c c i o n a d o dos teclas bles que usa la rutina, los valor del eje Y también en nc
iguales de nuevo se vuelve Empieza con ZCONTR, cuales empiezan en la direc- alta resolución. Al contrario di
al incio de la rutina de defi- d o n d e verás dos «DEFB». ción 6 5 5 0 0 : de lo que sucede en Basic 4.
nición, en CHECK. Si se han Con ellos se hace en reali- con PLÓT, las coordenadas
6 5 5 0 0 : Variable de un
comprobado todas las ante- d a d un salto a la dirección en la rutina tienen su origen l or
byte SWITCH. Se usa p a r a
riores teclas y ninguna es que en principio es KEYBO. en el extremo superior iz- at
seleccionar entre dos posi-
igual a la anterior se salta a Esta dirección de salto es quierdo, con lo cual la va-
bles formas de impresión
TODOS. Allí se calcula la di- precisamente la que cam- riable Y es distinta. de
del gráfico principal, una
rección en la tabla donde biábamos al seleccionar la 6 5 5 0 3 NUEPOS: Varia- dii
lenta y otra rápida. Las ven-
pondremos los datos de la opción de ¡oystick Kemp- ble de dos bytes que alma-
tajas y desventajas de las pr
tecla que ha sido pulsada. \ ston. Al hacer esto, la ruti- cena la nueva posición del da
rutinas las explicaré más
Al hacer esto, se llama a , na saltará a KEYBO o o tarde. sprite. Es igual que ANPOS, ba
S O N Y , subrutina que pro- 6 5 5 0 1 A N P O S : Variable sólo que NUEPOS almace- ca
duce un ruido. Observa en de dos bytes que almacena na los datos de la nueva po- to
la rutina S O N Y (líneas la anterior posición en la sición. c¡¿
1430-1520) como para 6 5 5 0 5 ATR: Variable de ,
preservar el color del borde un byte. Si tiene un valor de
lo tomamos de la variable distinto de 0 , el p r o g r a m a us<
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 a c a b a r .
M O V I M I E N T O o 0%
Y TECLADO O O

contiene las direcciones de


inicio de los gráficos del per-

SEMIFILAS DEL TECLADO sonaje principal según cual


sea su dirección. Es decir,
que para cada dirección el
o r d e n a d o r buscará en esta
tabla p a r a encontrar el in-
d o del gráfico que corres-
ponde a esa dirección del
objeto. Como esto parece
algo lioso, vamos a poner
un ejemplo. Observa la fi-
gura 2.
En la figura están repre-
sentadas las sumas que se
obtienen para cada movi-
miento del personaje del
contenido de las variables
HORIZ y VERTI. Suponga-
mos que el gráfico se mue-
ve en d i a g o n a l hacia a b a j o
y hacia la izquierda. Enton-
ces, la suma de VERTI y HO-
RIZ sería 12. El o r d e n a d o r
multiplica por dos este da-
to, y lo suma a GRAFIC. La
cambiará los atributos de lo rección horizontal que lleva guardamos la dirección de
posición de memoria resul-
pantalla por los que la figu- el movimiento del gráfico. memorio del último gráfico
tante es el inicio del gráfico
ra con el valor de ATR. Es Es 2 si el movimiento es ha- impreso.
en el cual se representa por
decir, si ATR es 4, el orde- cia la derecha, 0 si no hay 65515 TABLA: Variable
ejemplo a nuestro héroe ca-
nador pondrá los atributos movimiento horizontal y 8 si de dos bytes que almacena
minando hacia a b a j o y ha-
de la pantalla con el valor el movimiento es hacia la iz- la dirección de inicio de la
cia la izquierda.
4. quierda. tabla en la que se g u a r d a n
En cambio, si es cero, el 6 5 5 0 9 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. N o r m a l - 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 D I M E N : Variable p r o g r a m a la utiliza p a r a el p e r o se puede poner en plicación del p r o g r a m a .
de dos bytes; contiene las movimiento vertical. Su va- cualquier zona de la memo- Según esté SWITCH a 1 o
dimensiones del g r á f i c o lor cuando el movimiento es ria. a otro valor, el o r d e n a d o r
principal. En 6 5 5 0 6 guar- hacia a r r i b a 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 ae una tabla que subrutina FASTER. Te pre-
caracteres; en 6 5 5 0 7 el al- jo es 8. guntarás el proqué de ha-
to del sprite en alta resolu- 6 5 5 1 0 A N I D I R : Variable ber puesto dos subrutinas
ción o número de scanes. de dos bytes en la cual que realizan lo mismo. La
respuesta estriba en su pro-
65508 HORIZ: Variable
pio funcionamiento. Cuan-
de un byte. El p r o g r a m a la
d o imprimimos un gráfico
usa para almacenar la di-
en la posición 4 por ejemplo
en horizontal, tenemos que
rotar hacia la derecho cua-
tro veces cada uno de los
bytes del gráfico. Esto hace
que la impresión sea muy
lenta, especialmente cuan-
d o hay que imprimir varios
k'jjp'.''' " V » ' •• •
gráficos y éstos son muy
grandes. La solución a este
problema se encuentra en
FASTER. Esto rutina trabaja
con los gráficos ya rotados.
Supon que quieres imprimir
5PEEIPL

con FASTER un gráfico que guir explicando la rutina de i n t e r r u p c i o n e s . 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 p r o g r a m a 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 p a r a tener DE. A continuación, toman- en la memoria: 6 2 0 0 1 (por
defecto de FASTER es que mayor velocidad y que no d o el valor de buffer se lla- ejemplo)
ocupa mucha más memo- se imprima ningún gráfico ma a PUTTER. 6 2 0 0 1...1
ria, ya que hay que introdu- mientras formamos sus da- Buffer es una variable de 6 2 0 0 1 + 1 Dirección del
cir un gráfico por cada po- tos. El p r o g r a m a carga en un byte situada en la direc- gráfico que queremos impri-
sible posición. N o obstante, BC el alto y el ancho del ción 6 2 0 0 0 . Contiene el nú- mir.
hay algunos casos en los sprite; pone las variables mero de sprites que se de- 6 2 0 0 1 + 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 6 2 0 0 0 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 A N P O S . que se deseen imprimir. sprite en scanes.
gráficos, ya que si el orde- 6 2 0 0 1 + 5 Posición del
Para chequear el teclado, PUTTER es una rutina que
nador al empezar a mover gráfico en la pantalla. Se
se carga en HL el inicio de comienza en la línea 3 9 9 0 ;
el sprite comienza en el pi- pokea primero la posición
la tabla que confine los da- sirve p a r a calcular en qué
xel de c o o r d e n a d a X igual en la coordenada X en pi-
tos de todas las teclas, y se lugar del buffer se deben in-
a 0 , las posibles posiciones xels y después la de la coor-
van c o m p r o b a n d o si esas troducir los siguientes datos.
para X serían 0 , 2, 4, 6. Si denada Y en pixels. Recuer-
X fuera 8, bastanría con in- teclas son pulsadas a h o r a . Para ello toma el valor
da que el origen del sistema
crementar el número de co- Paro ello primero se carga del acumulador y lo multipli-
de coordenadas está situa-
lumna para la impresión. en el acumulador el byte de ca por 7 llamando a MUL-
do en la esquina superior iz-
mayor peso del bus de di- Tl, rutina que hace una mul-
quierda.
Por otro lado, IMPRES im- recciones, luego con el va- tiplicación entre dos núme-
prime en OVER 1 y FASTER lor devuelto por el teclado ros de 16 bits y de¡a 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-
de la tecla predefinida. Si el guardar los gráficos y se lla- te idénticos. Las únicas dife-
En la figura 2 verás los
resultado es de 255, quiere ma a la rutina principal. En rencias es que la dirección
dos gráficos necesarios pa-
decir que la tecla ha sido ella IX toma el valor de HL, de los datos de 6 2 0 0 1 + 3
ra un movimiento que se
pulsada. Entonces llama a y pokea con el valor 2. no a p u n t a r á directamente
desplace de cuatro en cua-
la subrutina de dirección co- al gráfico, sino a una tabla.
tro pixels. Es hora de que te expli- En esta tabla deberán estar
rrespondiente; en ella ob-
O t r a ventaja que tiene que cómo se colocan los da- las direcciones de inicio de
serva si la nueva posición
imprimir con FASTER es que tos para que el impresor por cada gráfico desplazando,
haría que parte del sprite
con IMPRES hay que impri- interrupciones haga una co- según el número de pixels
saliera fuera de la pantalla
mir primero el gráfico en la sa u otra. que se haya separado la
y si es así vuelve a la rutina
anterior posición p a r a bo- En primer lugar se carga posición X de la columna si-
principal. En caso negativo,
rrarlo y después imprimir el en el acumulador buffer y se tuada a su izquierda. Por
cambia NUEPOS con la
nuevo gráfico. Con FASTER multiplica por 7 p a r a hallar ejemplo:
nueva posición y pone H O -
p o d e m o s h a c e r l o impri- 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-
p o n d a . 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, b o r r a r una zona de la
Exceso
pasod el movimiento. Así, todas las teclas. Con la ruti- 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
en dos pixels, necesitará un pantalla.
1 60000
pasos son muy similares, pe-
marco alrededor de toda la
2 60100
ro no hace falta mirar en las Seleccionamos la opción
figura con un ancho de dos 3 60200
teclas de la tabla, basta con que queremos con un núme-
pixels. Entonces, con impri- 4 6 0 3 0 0 , etc
tomar el dato del p o r t 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 C A M B I A . Esta 1 = IMPRESS en la dirección 5 0 0 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 p a r a 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
M O V I M I E N T O o 0%
Y TECLADO O O

después f o r m a d a p o r todas
las direcciones ( 6 0 0 0 0 ,

LISTADO ACTION
6 0 1 0 0 , 6 0 2 0 0 , etc.).
La segunda y único dife-
rencia más es que el ancho
que introduzcas d e b e ser
siempre el del g r á f i c o sin
DUMP: 4 0 . 0 0 0 desplazar, a pesar de que
d e s p l a z a d o ocupe más ca-
A DATOS CONTROL
N . ° BYTES: 1.572 racteres.
3 BORRA
3E02CD011601350011E4 S91 F521E8FF7E23666FF185 1513
D2FEFR246FDSSE235662 1387 62001...3
F8CD3C203EF7DBFECB47
CRF9F7CB4FCR03F8C3E8
1601
1860 6B11E6FF7D127C1312D1 1122 6 2 0 0 1 + 1 Dimensiones
F72131F21122FB732372 1137 C9D5C506004F16001E07 755
C90150001119F9CD3C20 870 CDD0FR1131F219C1D1C9 1599 de la zona que vamos a bo-
2131F2116CF973237221 99S F3DD21E2FFDD4E00DD46 1568
EBFF0608RF772310FC2E 1147 777 r r a r . Primero introducimos
00CDC7F8E57DC6092105 12S1 1395 el ancho en caracteres y
584F06003E20093DC230 579 1320
F8060R7EE67F772310F9 1166 1609 después e l alto en scanes.
1854
3E1685D245F8246F060R 907
1899 H a y que decir que la rutina
7EF680772310F9E13E7F 1333
5F7B0F5FDBFEE61FFE1F 1317 RRFR0BDFCB5FCRDFF9CD 2039 b o r r a p o r bytes y no por
BFFRC3DFF9DD360704DD 1615
C262F8C353F8577BDBFE 174.9 bits. Es decir, si hay un byte
7108DD7009DD730RDD72 1144
E61FFE1FCR24F8570E02 1135 10S6
0604CB67CR7EF8CB2710 1150 0BDD770C2130F234C37B
1513
del que la rutina sólo debe-
F7C386F80DCR50F8CB27 1609 FRDD21FDFDDD3600C321
10EC06004D21EBFF78FE 1232 B4FBDD7501DD74022100 1142 rio b o r r a r un bit, la rutina
1099
04CRRCF87BBECR9DF823 1581 FE01FD00712310FC713E
1970 b o r r a r á t o d o el byte, po-
2304C38CF87R23BEC2R7 1330 FEED4 7ED5EC9F5C5D5DD
E5E50E00DD2131F23R30 1123 niéndolo a 0 .
F869C3S0F80423C38CF8 1498 1563
21EBFF79CB2785D2B7F8 1660 F2B9CR4FFCDD7E00FE02
1703
246F732372CDD1F8692C 1222
CRFFFBFE01CA1DFCFE03
1303
6 2 0 0 1 + 3 Posición e n
CR3BFCC5DD4E01DD4602
7DFE04C224F8C9RFDBFE 1710
DD5E03DD5604DD7E05CD 1186 pantalla de la esquina supe-
2FE61FC2C7F8C906073R 1221 1766
485CCB3FCB3FCB3FD3FE 1427
ERFCC1DDE5E13E0785D2
1719 rior izquierda de la zona a
F7FB246FE5DDE10CC3C0
EE107610F9C9160R0510 891 1555 b o r r a r . Se i n t r o d u c e la
0213011100312E204R4F 319
59535449434B204B454D 724 c o o r d e n a d a X y después la
5053544F4E160C051006 465 5606CD5DFCC1DDE1C3ED
322E20444546494E4S20 587 FBDDE5CSDD4E01DD4602 1491 Y; las dos deben estar en al-
434F4E54524F4C455316 719 DD5E03DD5604DD6E05DD 1186 ta resolución, por pixels.
0R051007444552454348 465 6606CD5RFDC1DDE1C3ED 1727
4 1202020202020202020 353 FBC5DD4E01DD4602DD5E 1356 6 2 0 0 1 + 5 Indiferentes.
20202020160B05100649 261 03DD5604CDR7FCC1C3ED 1563
5P515549455244412016 667 FBAF3230F2FFE1DDE1D1 1901 4 PAINT
0C0510054142414R4F20 419 1601 62001...4
20202020202020202020 320 1273
20202020160005100241 251 D5EID17BCB3BCB3BCB3B 1556 6 2 0 0 1 + 1 Dimensiones.
S25249424120202020C3 691 E607R7CR7DFC0CCD3DFD 1514
6CF9F3DD21E2FFDD4E00 1634 C50600D5EDB0D1C17RE6 1583 Son iguales que en la rutina
DD4601DD360200DD3603 347 07FE07CR94FC14C3R4FC 1501 borra.
00DD21DFFFDD6E00DD66 1386 7BC620DRR2FC5F7RD607 1423
O 1E5DDE121DDFF5E2356 1400 57C3R4FC5F1410DRC97B 1371 6 2 0 0 1 + 3 Posición. Tam-
CB3BCB3BCB3BR7CRB3FC 1586
2373237221EBFF7EDBFE 1421
0CCD3DFDC5RFD5121C0D 1175
bién iguales.
23E61F2FB6FEFFC2R9F9 1646
CD7EFR237EDBFEE61F2F 1523 C2B9FCD1C17RE607FE07 1653 6 2 0 0 1 + 5 Atributo con el
23B6FEFFC2BRF9CD99FR 1963 CRCDFC14C3DDFC7BC620 1700
237EDBFEE61F2F23B6FE 1413 DRDBFC5F7RD60757C3DD 1630 que se va a llenar la zona.
FC5F1410D7C9D5E5D1CD 1655
FFC2CEF9CDRRFRC3DFF9 2196
3DFDD5EID1C9F5CB38CB 1869
El último byte es indiferen-
237EDBFEE61F2F23B6FE 1413
38CB387BE607R7CRF9FC 1545 te.
FFC2DFF9CDBFFR3PDCFF
FE01CR22FR21DFFF2356
2100
1373 0C7RE607R7CR01FD04DB 1201 A h o r a que ya sabes t o d o
3RCB3RCB3RCB3BCB3BCB 1307
2B5E2B722B733R30F2CD 100S
3BD5E1CD2RFDF1614CD5 1624 esto, c o m p r e n d e r á s des-
0FFBESDDE1DD360002CD 1423
E8FRDD7501DD74 02DD71 1494
12130DC216FDD16F7BC6 1160
03DD7004DD7305DD7206 1022
20D225FD145F7D10EBC9
1224
pués el p o r q u é pone esos
7CCB2FCB2FCB2FC65857
2130F2343RE1FFR7C277 1393 7CE6070F0F0F855FC97R 124 7 datos.
FBFBED4D3R30F23CCD0F 1444 CB27CB27E6E0B35F7RE6 957
FBE5DDE5D1DDE1DD36F9 2109 C0CB3FCB3FCB3FF57RE6 1564 Volvamos d o n d e lo deja-
0121E6FF7E23666FDD75 1231 1587
01DD7402DO71FCDD70FD 1512
0757F1B2CBF757C9C5DD
1669 mos: el registro IX tiene la
DD360001DD7103DD7004 950 1662 dirección d o n d e se deben
DD7305DD7206CDE8FRDD 1590 1505
75FODD74FB21E0FF562B 1596 000E00DD7E00C5CB3FCB 1027 c a r g a r los datos.
5E2B722B73DD73FEDD72 1334 1910FR82RE772C5148C1 1104 En la línea 2 4 6 0 , se llama
FF2130F234343AE1FFR7 1387 DD231DC273FD7RRE77D1 1471
C277FBFBED4D79CB27CB 1695 15C87CE607FE07CR9FFD 1457 a TABLER. TABLER suma las
7D936F24C36EFD7D93C6 1447
27CB27C60283D8E521DF 1313
20DRREFD6F7CD60767C3 1431 variables HORIZ y VERTI
FF7BC6025F7321E4FF36 1358
02E1C97BD602D8E521DF 1468 6EFD6F24C36EFDCB3DCB 1535 con el resultado va a una ta-
3DCB3DCDE0FCDDE5D5C1 1862
FF5F7321E4FF3608E1C9 1469
D179C547F51RRE77132C 1225 bla de direcciones de movi-
3E028082FEC0D0E521E0 1462
10F9F147052BFS7CE607 1231 miento. Toma el valor de la
FF90577221E5FF3604E1 1400
C97RD602O8E55721E0FF 1583 1551
7221E5FF3601E1C92100 1145 1814 tabla en el lugar de la suma
1525
003E10C84 32801093FCB 664
1371
multiplicada por dos, y lo
3RCB1BCB21C8103DC2D5 1211
FRC921E4FF7E2386CB27 1504 s e C9000000000000000000 201 g u a r d a en ANTDIR. Enton-
ces, vuelve a la rutina.
38 M F s P E D n L
LISTADO ENSAMBLADOR ACTION
<1 ORS 4345» 7»l CHECK LO A.xiiium 134» CP 4 1958 CP 255 259» RETI
71 LD A,2 71» LD E,A 135» JP NZ.PRE6 194» JP N2,C(NTI 24»» LNT1M LO A.(BUFFER)
81 CALL 5433 72» CHECK] LD A,E 1348 RET 197» CALL DEREC 2411 INC A
91 LD BC ,53 738 RRCA 1378 ESPERA XOR A 198» CCMT1 INC HL 242» CALL PUTTER
111 LD OE.TEXT 74» LD E,A 138» IN A,(254) 1991 LD A,(HL) 2431 PUSH HL
111 CALL I2Í3C 75» IN A,<»FE> 139» CPL 2888 IN A.(IFE) 244» PUSH IX
121 A M O LD A,IF7 741 AND 788811111 141» WD 11F 2818 AND 31 245» POP DE
131 IN A,(«FE) 77» CP 7.8881111! 141» JP N2,ESPERA 2828 CPL 244» POP IX
141 BIT l,A 78» JP NZ.IHTEC 142» RET 213» INC HL 247» LO (IX-7),I
IM JP 2.KEMPS 79» JP CHECK] 143» SCKY LD B,7 2»4» OR (H) 248» U) HL.ANTDIR
MI BIT 1 ,A 811 INTEC LD D,A 1448 LO A,(23424) 2151 CP 255 2491 LD A,<H.r
171 JP 2,OEFIN 81» LD A.E 145» SRL A 284» JP N2.EWERT 2781 INC HL
IM JP AIWO 82» IN A,(»FE) 144» SRL A 217» CALL IZfiUI 2711 H,(H)
LD
191 KEMPS U> HL,SALTO 83» AND 7.8881 lili 147» SRL A 288» E W E R T INC HL 272» LD L,A
211 LD OE.JOYST 84» CP 788811111 148» S W Y 2 Olí! (254),A 2(98 LD A.(HL) 2731 LD (IX4D.L
211 LD <HL),E 85» JF 2.PRE6 1491 XOR X8III8»»! 2111 IN A.Í8FE) 274» LO (1X42),H
221 INC HL 841 LD D,A 158» HALT 211» AND 31 275» <IX-4),C
LO
238 LD (HL),0 87» LD C,2 151» DJNZ SCNY2 212» CPL 274» LD UX-3),8
241 RET 881 LO 8,4 152» RET 213» INC HL 277» LD (IX),1
251 OEFIN LD BC,88 89» DOBLE BIT 4 ,A 153» TEXT 214» OR (HL) 278» LO (1X43) ,C
241 LD DE.TEXT2 911 JP Z,WSC 1541 DEFB 22,11,5,14,2,1 2158 CP 255 279» LD (1X44),B
271 CALL I2Í3C 91» SU A 214» JP NZ.C0NT2 2888
», 1 LO (IX45),E
281 LD HL .SALTO 92» DJNZ DOBLE 155» DEFB 17,1 217» CALL ABAJO 2818 LO (1X441.D
298 LD OE.KEYBO 93» JP (MttSC 1548 OEFM •1. JffíSTlCK K 2 1 M JP CAMBIA 282» CALL TABLER
311 LD (HL),E 94» HASC OEC C B1PST0N' 219» C<NT2 INC HL 283» LO (IX-4),L
311 INC HL 95» JP 2,CHECK 1571 DEFB 22,12,5,14,4 221» LD A,(HL) 2848 LO (1X-5),H
321 LD <HL),D 94» su A 1588 DER1 •2. DEFINE C<K IN A,(lfE) 2851 LO HL.NUEP0S41
338 LD HL .TABLA 97» DJN7 DOBLE TROLES' 2221 AND 31 2848 LD D,(HL)
341 LD 8,8 98» tfUASC LD 6,• 159» TEXT2 DEFB 22,11,5,14,7 223» CPL 287» DEC HL
358 XOR A 99» LD C,L 141» DEFM 'DERECHA 1 224» INC HL 288» LD E,(HL)
341 LIMPIA LO (HL),A 1»«» LD HL.TABLA 141» DEFB 22,11,5,14,4 225» OR («.) 289» OEC HL
371 INC HL 181» CCWPAR LD A,6 142» DEFM •120UIERDA • 224» CP 255 291» LD (HL),0
381 DJNZ LIMPIA 1121 CP 4 143» DEFB 22,12,5,14,5 227» JP N2,CAMBIA 291» DEC HL
398 LD L,l 1831 JP 2.TOOOS 1441 DEFM •ABAJO- 228» CALL ARRIBA 292» LD (HL),E
411 CALL ESPERA 1»4» LD A,E 145» DEFB 22,13,5,14,2 229» CAMBIA LD A.(SMITCH)
293» LO (IX-2),E
411 PffiG 185» CP (HL) 144» DEFM •ARRIBA 2388 CP 1 294» LO (]X-1),D
421 PUSH HL 114» JP 2,POSIB 147» 2CGNTR DEFB 195 231» JP Z.WTIMP
295» LO HL.BUFFER
431 LD A,L 187» INC HL 148» DEFU KEYBO 232» LO HL.NUEPOS 294» INC (HL)
441 AOD A,9 1888 INC HL 1491 KEVBO DI 233» INC HL 297» INC (HL)
451 LO HL,22528*5 189» INC B 178» LO 1X.DIHW 234» LD D,(HL) 298» LD A.(ATR)
44» LD C,A 111» JP CHIPAR 171» LO C,(IX) 235» OEC HL 2998 ANO A
471 LD 8,8 111» POSIB LD A,D 1728 LO B,(1X<I) 234» LD E,(HL) 38!» JP N2.TOPAIN
481 LO A,32 1121 INC HL 1731 LO (IX«2),I 237» DEC HL 3118 ADIOS El
498 SUMA ADO HL.BC 113» CP (HL) 1741 LD (1X<3),I 238» LD (HL),D 382» RET]
511 DEC A 1141 JP N2 .NOCHEC 175» LD 1X.NUEP0S 239» DEC HL 383» DEREC LO A.C
511 JP N2.SIWA 1158 LD L,C 1741 LD L,(IX) 241» LO (HL),E 38 4 8 SU A
521 LD 6,1» 1148 JP CHECK 177» LD H,(IX«1) 2411 LD A,(BUFFER) 3151 SU A
531 NOFLSH LO A,(HL) 117» NOCHEC INC B 1781 PUSH HL 242» CALL PUTTER 3848 su A
541 M Xllllllll 118» INC HL 179» POP IX 243» PUSH HL 3178 ADD A,2
554 LD (HL),A 119» JP CCHPAR 18»l LD HL.WOS 244» POP IX 3» 8» ADO A.E
541 INC HL 121» TODOS LD HL,TABLA 181» LO E,(HL) 245» ID (IX),2 319» REI C
571 DJN2 NOFLSH 1211 LD A.C 182» INC HL 244» CALL TABLER 311» PUSH HL
581 LD A,22 122» SU A 1838 LO D,(HL) 247» LD (IX+1),L 311» LO HL.NUEPOS
59» ADO A,L 123» AOD A.L 184» INC HL 248» LD (1X42),H 312» LD Ají
411 JP NC,NOLLEV 124» JP NC,NOC! 185» LD (HL),E 249» LD (IX»3),C 313» ADD A,2
41» INC H 125» INC H 184» INC HL 25(1 LD (1X*4),B 314» LD E.A
421 NOLLEV LD L,A 124» NOC! LD L,A 187» LD (HL).D 2511 LD (1X45),E 315» LO (HL),E
431 LO 8,11 127» LD (HL),E 1888 LD HL.TABW 252» LD (1X44),D 314» LD HL.HOR12
441 S1FLSH LD A,(HL) 1288 INC HL 189» LD A,(HL) 253» LD HL.BUFFER 3171 LD (HL),2
45» OR 128 129» LD (HL>,0 19»» IN A,(IFE) 254» INC (HL) 318» POP HL
441 LO (HL),A 1311 CALL SINT 191» INC HL 255» LO A,(ATR) 319» RET
47» INC HL 131» LD L,C 192» AND 31 254» UNO A 3288 120UI LD A.E
48» DJN2 SIFLSH 132» me L 193» CPL 257» JP N2.TOPA1N 3211 SUB 2
491 POP HL 133» LD A,L 194» OR (H.) 258» El 322» RET C

m ^ m
M O V I M I E N T O o 0%
Y T E C L A D OOO


3231 PUSH HL 3878 INC HL 4518 U> (IX»11),0 5158 CALL FASTER 5798 AND Z88888I11
3241 LO HL .NUEPOS 3888 LO D.CHL) 4528 LD (IX»12),A 5168 POP BC 5888 AND A
3251 LO E,A 3891 LD H.O 4538 LD HL,BUFFER 5178 POP IX 5818 JP Z,EXACT
3248 LO <HL),E 3911 LD L.E 4548 INC (HL) 5188 JP FOLLOU 5828 INC C
3271 LO HL.HORIZ 3911 LO OE.ANTOIR 4558 JP AOIOS 5198 A W T PUSH IX 5838 EXACT CALL DIRPAD
328» LO (HL),8 3921 LO A.L 4568 ZLALNC LD IX.IFDFO 5288 PUSH BC 5848 FAST PUSH BC
3291 POP HL 3931 LO (DE),A 4571 LO (IX),195 5211 LO C,(IX»I) 5858 U> 8,1
3341 RET 3941 LO A,H 4588 LO HL.INTPR 5228 LO B,(!X»2> 5868 PUSH DE
331» ABAJO LO A,2 3951 INC DE 4598 LO (1X»1),L 5238 LO E,(IX»3) 5878 LDIR
3321 AOD A,8 3968 LO (DE),A 4688 LO (IX»2),H 5248 LO D,(IX»4) 5888 POP DE
3331 AOO A,D 3978 POP DE 4618 LO HL.IFE88 5258 LD L,(IX»5) 5898 POP BC
3348 CP 192 3988 RO 4628 LO BC.888FD 5268 LO H,(IX»4) 5988 LO A,D
3351 RET NC 3998 PUTTER PUSH OE 4638 ESCRIB LO (HL),C 5278 CALL IMPRESS 5918 ANO '/.8S88S1I1
3348 PUSH HL 4888 PUSH BC 4648 INC HL 5288 POP BC 5928 CP 7
3371 LO HL,NUEPOS»1 4111 LO B,l 4658 DJNZ ESCRIB 5298 POP IX 5938 JP zjmi
3388 sue 8 4121 LD C,A 4668 LD (KL),C 5388 JP FOLLOU 5948 INC D
3391 LO D,A 4138 LD 0,1 4678 LD A,8FE 5318 ABORRA PUSH BC 5958 JP FASTI
3488 LO (HL),D 4848 LO E,7 4688 LD I.A 5328 LO C,(IX»1) 5968 TOMi LD A,E
3411 U> HL.VERTI 4151 M I L NULTI 4698 IM 2 5338 LO B,(IX«2) 5978 AOD A,32
3428 10 (HL),4 4161 LO OE,BUFFER» 1 4781 RO 5348 LO E,(IX»3) 5988 JP C,TCH2
3431 POP HL 4878 AOO HL,DE 4718 1NTPR PUSH AF 5358 LD 0,(IX»4) 5998 LD E,A
3441 RET 4888 POP BC 4721 PUSH BC 5368 M L L BORRA 6888 LD A,D
3451 ARRIBA LO A,D 4198 POP DE 4738 PUSH DE 5378 POP BC 4818 SUS 7
34 ¿8 sue 2 4118 un 4748 PUSH IX 5388 JP FOLLOU 4828 LD 0,A
3478 RET C 4111 JOYST DI 4758 PUSH HL 5398 HLUE60 XOR A 4838 JP FASTI
3488 PUSH HL 4128 LO ÍX.DINEN 4768 LD C,8 5488 LO (BUFFER),A 4848 T0H2 LD E,A
3498 LO 0,A 4131 LD C,(1X) 4778 LD IX,BUFFER»! 5418 RST 838 4858 INC D
3518 LO HL.NUEPOS»1 4141 LO B,(]X*I) 4788 QUEDA? LD A,(BUFFER) 5428 POP HL 4848 FASTI DJN2 FAST
3518 LO (HL),0 4151 LD (IX»2),I 4798 CP C 5438 POP IX 4878 RET
3528 LO HL,VERTI 4168 LO (IX»3),8 4888 JP 2.HIUE60 5448 POP DE 6888 BORRA
3531 LO (HL),I 4171 LO IX,NUEPOS 4818 LO A,(IX) 5458 POP BC 4898 LD A,E
3548 PÜP HL 4188 LO L,(IX) 4828 CP 2 5468 POP AF 4188 SRL E
3558 RET 4191 LO H,(1X»1) 4838 JP 2 , AFAST 5478 El 4118 SRL E
3568 HULT] LD HL,t 4288 PUSH HL 4848 CP 1 5488 RETI 4128 SRL E
3571 LO A,16 4218 POP IX 4858 JP Z.AUTT 5498 6SAF1C EOU 45512 4138 ANO A
3588 TRIU BIT t.E 4228 LO HL,ANPOS 4868 CP 3 5588 SUITCH EOU 45588 4148 JP Z.BORRAI
3598 JR Z.TOPI 4238 10 E,(HL) 4871 JP Z.ABORRA 5518 ANPOS EOU 45581 4158 INC C
3411 AOO HL. BC 4248 INC HL 4888 PUSH BC 5528 NUEPOS EOU 45583 4148 B O R M I CALL OIRPAD
3611 TOP! CCF 4258 LD 0,(HL) 4898 LO C,(IX»1) 5538 BUFFER EOU 42888 4178 BORRA2 PUSH BC
3628 SRL 0 4268 INC HL 4988 LD 8,(]X«2) 5548 SALTO EOU 62881 4188 XOR A
3638 RR E 4271 LO (HL),E 4918 U) E,(IX»3) 5558 ATR EOU 65585 4191 PUSH OE
3641 SU C 4288 INC HL 4928 LO D,(IX«4) 5568 D1HEN EOU 65586 4288 M I U N LD (DE),A
3658 Rl B 4298 U> (HL),0 4938 LD A,(IX»5) 5571 HOfilZ EOU 65588 <211 INC E
3668 DEC A 4318 1N A,(223) 4948 M L L PAINT 5588 VERTI EOU 65589 6228 DEC C
3671 JP NZ.TRIU 4318 BIT I.A 4958 POP BC 5598 ANT01R EOU 45518 6238 JP NZ .HILAN
3688 RET 4328 JP 2,J0YST1 4968 FOLLOU PUSH IX 5488 T A B U EOU 65515 6248 POP OE
3698 TA8LER LO HL.HORIZ 4338 CALL OEREC 4978 POP HL 5618 FASTER LD A,E 4258 POP BC
3788 LO A,<HL> 4348 J0YST1 IN A,(223) 4988 LD A,7 5628 ANO X8888811I 4248 LD A,D
3711 INC HL 4358 BIT 1,A 4998 AOO A.L 5638 StA A 4278 ANO '/88888IU
3721 AOO A,(HL) 4368 JP Z.J0YST2 5818 JP NC.PENSE 5448 AOO A,L 4288 CP 7
3731 SU A 4378 CALL 120UI 5818 INC H 5458 JP NC.NAZ 4298 JP Z.T043
3741 PUSH AF 4388 J0YST2 IN A,(223) 5828 PENSE LO L,A 5448 INC H 6388 INC D
3751 LO HL.GRAF1C 4398 BIT 2,A 5838 PUSH HL 5478 HAZ LD L.A 6318 JP B0RRA3
3761 LO A,(HL) 4488 JP Z,J(WST3 5848 POP IX 5488 PUSH DE 6328 TIW3 LD A.E
3771 INC a 4411 CALL ABAJO 5858 INC C 5498 LO E,(HU 6338 AOO A , 3 2
3781 LO H.(HL) 4421 J0YST3 1N A,(223) 5861 JP OUEOA? 5788 INC HL 4348 JP C,TDN4
3791 U) L,A 4431 BIT 3,A 5178 AFAST PUSH IX 5718 LO D.CHL) 4358 LO E.A
3881 POP Af 4441 JP 2.CAN81A 5888 PUSH BC 5721 PUSH DE 4348 LD A.D
3811 AOO A,L 4451 CALL ARRIBA 5898 LD L,(1X»1) 5738 POP HL 4378 SUS 7
3828 NCJA8LI 4468 JP CAMBIA 5188 LD H,(IX»2) 5748 POP OE 4388 LD 0,A
JP
3838 INC H 4471 T O M I N LO (1X«7),4 5118 LO C,(IX»3) 5758 LO A,E 4398 JP B0RRA3
3848 TA8L1 L,A 4481 LO (IX»8),C 5128 LD B,(IX»4) 5748 SRL E 4488 T0H4 LD E.A
LD
3858 PUSH OE 4491 LD (1X«9),B 5138 LD E,(IX»5) 5778 SRL E 6418 INC D
3868 LO E, (HL) 4588 LD (1X»I8),E 5141' LD D,(IX»4) 5788 SRL E 4428 B8PRA3 DJNZ B0RRA2
401 F s p e d h l

¿431 RET 7181 REI 7731 T1H2I LD A,L


¿441 DIRPAN PUSH DE 7191 D1RPA0 LD A,0 7741 SUB
¿451 PUSH * 7111 SLA A 7751 AOD A,32
¿4¿l POP DE 7111 SLA A 77¿l JP C.T0N22
¿471 CALL DIRPAD 7121 ANO ZII1B88BI 7771 LD L.A
¿481 PUSH DE 7131 OR E 7781 LO A,H
¿491 POP HL 7141 LO E,A 7791 sue 7
¿Sil POP DE 7151 LO A,D 7811 LO H,A
¿Sil RET 7I¿I ANO Z11888888 7811 JP IMPR3
¿521 PA1NT PUSH AF 7171 sa A 7821 T0N22 LO L.A
¿531 SSL 8 7161 SRL A 7831 INC H
¿541 SRt B 7191 SRt A 7841 JP INPS3
¿S5I SRL B 7211 PUSH AF 7851 INPR2 SRL L
¿5¿l LO A,E 7211 LD A,D 78¿8 SRL L
¿571 ANO / . « m u ii 7221 WP ¡íllllllll 7871 SRL L
¿581 ANO A 7231 LD D,A 7881 CALL DIRPAN
¿591 JP Z,XEXAC 7241 °rip AF 7898 PUSH IX
¿¿II INC c 7251 «i 0 7911 PUSH DE
¿¿11 XEXAC LD A.0 72¿l sn ¿,A 7911 POP BC
¿¿21 AND Xllllllll 7271 LD D,A 7921 POP DE
¿¿31 AND A 7281 RET 7931 LD A,C
¿¿41 JP 2, YEXAC 7291 1NPRES PUSH BC 7941 IMPR7 PUSH BC
¿¿51 INC B 7381 POP IX 7958 LD B.A
¿¿¿1 YEXAC SRt D 7311 LO A,L 79¿l
¿¿71 SRL D 7321 AND '¿llllllll 7971 PUSH AF
¿¿81 SOL 0 7331 LO 8,A 7981 LDIR LD A,(OE)
¿¿91 SRt E 7341 ANO A 7991 XOR (HL)
¿711 SRt E 7351 JP 2.1NPR2 8111 LO (HL) ,A
¿711 SRL E 73¿l SRL L 8811 INC DE
¿721 PUSH DE 7371 SRL L 8121 INC L
¿731 POP HL 7381 SRL L 8138 DJtf LDIR
¿741 CALL DIRAT 7391 CALL DIRPAN 8141 POP AF
¿751 POP AF 7411 1NPR3 PUSH DE 8151 LD 8,A
¿7¿l 10 K,C 7411 LO D.L 81 ¿1 DEC B
¿771 PA1N1 LO C,H 7421 LD C,l 8171 DEC HL
¿781 PUSH DE 7431 INPR5 LO A,(IX) 8181 PUSH AF
¿791 PAIN2 LD (DE),A 7441 PUSH 8C 8891 LD A,H
¿811 INC DE 7451 1HPR4 SRL A 8111 ANO >1888881 1 1
¿811 OEC C 74 ¿1 RR C 8111 CP 7
¿821 JP N2.PAIN2 7471 DJN2 IHPR4 8121 JP 2,TTN1
¿831 POP DE 7481 A00 A,D 8131 LO A,L
¿841 LO L|A 7491 <CR (HL) 8141 SUB B
¿851 LO A,E 7511 LO (HL),A 8151 LD L,A
¿8¿t
¿871
¿881
A00
JP
INC
A,32
NC,S1NCA
D
7511
752*
7531
INC L
LD
LD
D,C
C,8
81¿l
8171
8181 TTN1
INC H
JP
LD
INPR¿
A,L
DEMO 1
¿891 7541 POP BC 8191 sue 8 5 BORDER 0 INK 7. PRPER 0 C
¿981 S1NCA LD E,A 7551 INC IX 8211 AOD A,32 LERR 21999 FOR a=65500 TO 65520
POKE a.0 NEXT a
¿911 LO A,L 75¿l DEC E 8211 JP C|TTN2 10 POKE 65506,3: POKE 65507,16
¿921 DJN2 PA1NI 7571 JP N 2 , INPR5 8221 LD L.A POKE 65505,4 POKE 65510,56 P
OKE 6 5 5 1 1 , 1 9 9 POKE 65512,80: PO
¿931 7581 LD A,D 8231 LD A,H KE 6 5 5 1 3 , 1 9 5 LORD ""CODE 50000
7591 XOR (HL) 8241 SUB 7 LORD ""CODE 50500 LORD ""CODE
¿941 RET 51000 R P N D O M I Z E USR 63450 RRND
¿951 0 1 M T LD A,H 7¿M LO (HL),A 8251 LD H,A OMIZE USR 6 4 4 0 1
¿9¿l Stt A 7¿ll POP DE 82¿l JP 1NPR¿ 20 RRNDOMIZE USR 63849 PAUSE
1 GO TO 20
¿971 sm A 7¿2I DEC D ' 8271 TTH2 LD L.A 6 0 0 0 FOR R = 50000 TO 50030 STEP 2
7 ¿31 RET 2 8281 INC H r POKE O,68 POKE (Rtl),197 NEX
¿98» SÍ» A T fl GO TO 20
¿991 ACO A,158 7¿4I LD A,H 8291 ]MPR¿ POP AF 6 0 1 0 GO TO 10
7111 LD D,A 7¿5I ANO - / ( l i l i l í 11 8311 POP BC
7111 LO A,H 7¿¿l CP 7 8311 DJN2 1NPR7
7121 ANO 7 7Í7I JP Z.TCM21 8321 RET L I S T A D O 1 . 1 DUMP: 50.090. N.° BYTES: 30
7131 RRCA 7¿88 LD A,L 8331 20U1T LD A,I3F
7141 RRTT 7¿9I SUB E 8341 LD 1.A ÜNEA DATOS CONTROL
7151 RRCA 7711 LD L,A 8351 IN 1 1 38C738C778C758C7B8C7 1499
7711 INC H RET 2 38C798C738C7F8C718C8 1532
71 ¿1 A00 A,L 83¿l
3 38C738C7D8C738C738C7 1435
7171 LD E,A 7721 JP INPR3 8371 ZFLAG
M O V I M I E N T Oo0%
Y T E C L A D OOO

En la línea 2470 comien- gistros, y después se ob- Además, si el exceso de


za a pokeor 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, y a que
menta el contenido de buf- para actualizar el teclado no debe rotar nada.
fer, pora indicar que se ha La rutina Z L A U N C , 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 6 0 8 0 . Comprueba si la
serva si ATR es distinto de 0 , terrupciones en m o d o 2. desde C ó d i g o M á q u i n a , posición está desplazada de
en cuyo caso debería saltar Z L A U N C parece excesiva- puedes quitar esa orden. alguna columna, y s¡ 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 6 1 5 0 . Llama a DIR-
el buffer pora 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 p a r a ción en el archivo de panta-
mirlo. Finalmente, incre- imprimir, el o r d e n a d o r con lla; pone a 0 los bytes de
menta de nuevo el conteni- Una interrupción se fija al pantalla de cada sean; des-
IX apuntando a la dirección
do de buffer, regresa y cargar en el registro I un va- pués recicla la dirección de
del buffer toma el prefijo, y
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 b o r r a r y retorna.
habría que imprimir dos Sin e m b a r g o , 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 p a r a 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 FE00h Cada una de estar rutinas menta el ancho. Llama a Dl-
sición del registro IX, en el hasta FEFFh toda la memo- de p r e p a r a c i ó 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 d e l atributos en base a dos
ría a T O P A I N 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 na empieza a llenar la zo-
Empezaré explicando
y llegamos al impresor por un ¡pINTPR. En INTPR pri- na de los atributos con el
F ASTER. En ella se toma el
interrupciones. mero se salvan todos los re- valor del registro A . Des-
exceso de bits de desplaza-
pués calcula la dirección en
miento con respecto a la co-
el archivo de atributos de-
lumna, se multiplica por 2 y
bajo de la actual posición y
se busca en la tabla. Des-
LISTADO 1.2 DUMP: 51,000 . N." BYTES: 257 pués se carga en HL la di-
lo repite hasta que acaba
con el alto.
rección de comienzo d e l
sprite, y llama a DIRPAD, Aquí finaliza la explica-
rutina que calcula la direc- ción d e l funcionamiento;
ción de la memoria de pan- a h o r a voy a decirte cómo
0180018003C003C007E0 879
07E00FF00FF000000FF0 996 talla donde se debe empe- puedes hacerlo.
0E700F700F700F700F70 634
589 zar a imprimir el sprite. A l
1168 imprimir cada sean, vuelve
a tomar el ancho, calcula la USO DE ACTION
8 0000FEC0ESF0FRFCF2FF 191
9 FRFFE2FCFEF0FEC00000 192 dirección de la pantalla que
10 00000000000008001C00 36 Para empezar, éstas son
está debajo de la anterior
las direcciones para activar
entre las líneas 5 9 0 0 y
13 00FE003E000F00030FF0 589 y desactivar la rutina:
14 0E300EF00E300FB00E30 631 6 0 5 0 y después decremen-
15 0FF000000FF00FF007E0 996 63450 O r i g e n de la ruti-
16 07E003C003C001800180
ta el alto hasta que éste lle-
879 na y dirección donde debes
17 00100038004400DE01C7 562 ga 0 , en cuyo caso vuelve
18 03D60DC40EF81F701FA0 1022 al Basic.
llamar para redefinir teclas.
19 3FC03FC07F007C00F000 1001
20 00000000000000000000 192 63849 Dirección de inicio
21 037F0F613F7DFF7BFF77 1182 IMPRES es muy parecida; de la subrutina de actualiza-
454
556 la diferencia está en que an- ción d e posición con che-
24 7F003FC03FC01FR01F70 971 tes de imprimir cada byte queo del teclado. Si vas a
25 0EF80DC403D601C700D6 1102
26 00440038001000000000 140 tiene que rotarlo, y pasar hacer un movimiento lleva-
parte de él o otros bytes. do por esta rutina deberás
5 P E D n L

llamarla p e r i ó d i c a m e n t e . 6 5 0 1 4 Dirección p a r a Si piensas hacer lo prime- con IMRES entonces debe-


También se encarga de in- desconectar el impresor por ro, d e b e r á 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
6440 1 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 6 2 0 0 1 . En- recciones de los gráficos, (o
to en marcha, no es necesa- p r i m a n 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

D E M O 2p. Te recuerdo que cuando


uses IMPRES, la dirección
dos y añadiéndole GRAFIC.
En el contenido de la posi-
ción de memoria resultante
será la del propio gráfico, y
si usas FASTER la dirección se debe de encontrar la di-
será la de una tabla con las rección de inicio de otra ta-
direcciones de los gráficos bla o del gráfico, según el ti-
desplazados. po de impresión. Cuando es
ODÉ S 1 0 0 0 RRNDOMIZE USR 634S0 otra tabla, es señal de que
R R N D O M I Z E USR 6 4 4 0 1
Si usas la rutina del tecla-
se usa FASTER, y en esa ta-
10 R R N D O M I Z E U S R 6 3 8 4 9 : P R U S E d o , lo primero que debes
bla deben estar las direccio-
hacer es darles a las varia-
nes de inicio de cada gráfi-
bles los contenidos correc-
co desplazado. Para acce-
6010 GO TO 10 tos. Piensa que si trabajas

LISTADO 2.1
65 0 2 4 4 2 2 4 0 0 1 6 D B 6 8 0 0 0 0 0 588
DUMP: 5 0 . 0 0 0 . N." BYTES: 3 0 68 0 0 0 0 0 0 1 B F 7 D 0 0 0 3 B 5 R 0 0 631
223 69 0 0 3 8 F 8 0 0 0 0 0 1 2 0 2 0 0 0 7 F 499
866 1042
.ÍNEA DATOS CONTROL 757 591
576 _ D B 6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 315
172 74 F 0 0 0 0 3 3 C 0 0 0 3 D 0 0 0 0 1 D 6 729
1 44C544CS64CS54CS84CS 1437
2 000074CS0000R4CSB4C5 1051 e 75 0 0 1 C 0 1 8 0 2 3 3 C 4 0 2 4 C F 1 8 6583
8 2

3 0000000094CS38C738C7 855 774.


877 168
E 0 0 0 0 1 F 0 0 F 8 0 0 1 5 7 E 5 0 0 925 511
0 1 F 1 4 F 8 0 0 0 R 0 0 R 8 0 0 0 0 0 747 348
192
264
21 0 0 3 D F B C 0 0 0 7 C F 3 E 0 0 0 3 D 1156
LISTADO 2 . 2 22 0BC00001F80O007C03E0 803
869
162
DUMP: 5 0 . 5 0 0 . N.° BYTES: 129
647
CONTROL 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 28 2 F 1 1 1 0 3 7 B 4 4 0 3 8 3 B 0 0 1 C 522 C000000CF000000F4000 523
29 1 C 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 28 0007S80000700600008C 353
38C7000068C70000R8C7 925 00000000000000010000 948
0 0 0 6 0 0 0 0 0 0 1 9 9 C 0 0 0 0 C 6 385 540
1
9§ 6 32 7 2 0 0 0 3 R 9 C 9 0 0 0 7 6 7 3 1 0 0 64-6 416
498 33
-- 0 2 D C C 4 0 0 0 C 3 B 1 2 0 0 0 B C 4 714 663
948 544 99 F01BÍCD80F7EF0000000 g892
i g

580
1079 168
678 103 00000000000F000001FC 268
39 01D9CC4000873100030E 735 104 F80003DCBC0006C73600 918
10 000098CC0000D8CC0000 776 40 C48002F11100017B4400 776 105 03DFBC000000000007DF 644
11 08CD00O048CD000088CD 831 41 0383300001C1C0000000 568 106 BE000555140007CR3E00 571
12 0000C8CD0000F8CD0000 858 43 00000000000010000000 16 107 02802R00000000000000 172
13 38CE000078CE00000000 588 44 6000000199C0000C6720 S89 109 00000000000000000003
45 003R9C9000767310002D 652 110 C000007F3E0000F72F00 675
46 CC4000C3B12000BC4440 992 0IB1CD8000F7EF000000 997
47 00SED10000E0CC000070 843 112 770
112 113
000001F7EF8001S54S00
01F28F8000R00R800000 812
1127 116 00000000F000001FCF80 606
LISTADO 2 . 3 51 000048081FFFF8200004 650
631
117
118
003DCBC0006C7360003D
FBC000000000007DFBE0
836
1043
285 119 00555140007CR3E00028 781
DUMP: 5 1 . 0 0 0 . N.° BYTES: 1921 0000000001BF7D0003B5 501 120 02R00000000000000000 162
502 122 0F00003CC0000BC0006B
80018038023CC418F324
577
874
746 123
LlNEA DATOS CONTROL 474 124 380C9833D86039DD801C 1017
292 0E000000000000000000
1 00000000000000300000 48 111 0003C000000F30000002
2 0000003C000342C00F7E 462 1091 F000001RE00000600E00
3 F01F3CF80F42F0007E00 1026 __ 0004 8080 _F F F F 8 0 0 2 0 0 9 0 1
_0 1 129 008F3100063CC9000E03 476
4 1F00F8157E501F14F80R 815 64 0040016DB68000221100 535 130 26000CF618000E776000 S49
M O V I M I E N T O o 0%
Y T E C L A D OOO

der o 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 tomor
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 0 0 0 0 .
Para dar color a l sprite
que estás moviendo dale a
ÁTR un valor distinto de 0 ,
con el cual coloreará los
atributos del sprite.

LAS DEMOSTRACIONES
Antes de nada te diré que
te parecerán muy largas de D E M O 3p.
introducir, especialmente la
segunda. Pues bien, para 5 BORDER 0 PRPER 0 INK 7 C
LERR 24999
que puedas seguir viendo la 7 LORD "•CODE 50000 LORD ••"C
ODE 51000 LORD •••CODE 54000 RR
demostración puedes usar NDOMIZE USR 64401
un truco. En el D U M P del 10 FOR d =49000 TO 49120: POKE
R,136: NEXT R FOR R=49080 TO 49
blque de bytes segundo de 120: POKE R,136 NEXT R
la primera demostración in- 20 LET M =4 9005 LET L=49050
30 FOR R=PI TO 0 STEP -0.07: L
troduce tan sólo 32 como ET K= ( 176- ((SIN Rl *30»40) ) POKE
M,K: POKE L,K: LET M=M+1: LET L
duración. De esta manera, -L+1 NEXT R
sólo tendrás que teclear 35 PRINT RT 21,0; —M
cuatro líneas de texto. Des- 40 LET C =USR 54000
pués, sálvalo normalmente
y mientras se ejecute el pro- LISTADO 3.1
g r a m a , haz BREAK y G O
T O 60 0 0 . Así apreciarás el DUMP: 5 0 . 0 0 0 . N.° BYTES: 30
movimiento, aunque el grá-
fico no tomará direcciones
distintas según éste.
Para hacerlo en la segun-
da rutina, deberás introdu-
44 • SFECinL-

cir t a n s ó l o 2 4 líneas d e tex-


to del segundo bloque d e
bytes, y escribir c o m o dura-
ción 240 bytes. Sálvalo, y
después de ejecutar el pro-
grama, h a zBREAK yG O
TO 6000.
E n c u a n t o a l t e m a d e las
demostraciones, la primera
hace e m p l e o d e IMPRES pa-
ra mover p o r la pantalla
u n a f l e c h a c o n las teclas re-
definidas.
<>• >=• < • La s e g u n d a realiza e l m o -
v i m i e n t o d eu nt a n q u e con
u n a l i g e r a a n i m a c i ó n d e los
orugas en el movimiento
horizontal.
La t e r c e r a sirve p a r a mos-
trar c o m o también se pue-
d e n h a c e r c o n esta rutina en
el m o v i m i e n t o d e p e r s o n a -
jes s e c u n d a r i o s , e n este ca-
so c o n animación.
Esta d e m o s t r a c i ó n funcio-
na introduciendo datos di-
LISTADO 3.2 LISTADO 3.3 r e c t a m e n t e e n e l b u f f e r . Re-
presenta a u n ac h i c a c o -
DUMP: 51.000. N.° BYTES: 481 DUMP: 54.000. N." BYTES: 5 5 r r i e n d o y d a n d o saltos. Los
saltos los he c o n s e g u i d o me-
d i a n t e los d a t o s d e u n a fun-
ción seno.

360002DD360150DD3602 689 La c u a r t a y última demos-


0000F000007C00000000 C3F3DD71050C0C7EDD77 1267
00E80001E4 0003C40003 663 tración borra y pinta espa-
0623DD36FF01FB7610ED 1194
840007816007ED6003EC 943 C9000000000000000000 201 cios d e p a n t a l l a al meter da-
00000000008300007000 252
480 tos e n el b u f f e r d e s d e el p r o -
652 pio Basic.
9 800003C00003E0000000 550
11 00000000000A00000055 U n último apunte sobre lo
12
13
800002AA80000157C000
002D8000001E0000000F LISTADO DESENSAM- r u t i n a ; si q u i e r e s u s a r e l c o n -
14 800000000000001D0000 t r o l d e t e c l a d o p e r o c o n dis-
15 001C8000001C80000038 BLADOR DEMO 3.3 tinta velocidad e nel movi-
16 800000380000003F6000 343
17 0 0 1 F 6 0 0 0 0 0 0 0 0 0 0 0 0 0 1 F 158 8381 ora 54818 miento, cambia los valores
18 8000000F800000078000 406
19 00078000000380000003 269 8391 LD HL.49888 numéricos d e las líneas
20 A0000007R00000072000 8481 LD 8,115
21 000D7000000F30000007 3 0 7 0 , 3 1 3 0 , 3 2 1 0 , 3 3 1 0 y
22 8 0 0 0 0 0 0 1 8 0 0 0 0 0 0 0 0 0 0 0 257 8411 LD IX,BUFFER*!
3460 por otro valor.
24 00000022800000556000 343 8428 LD <1X»3>,3
25 00qp«0000015F000000B 602 LD (1X«4),32
8431
26 6000000780000003E000
27 00000000000340000007 8448 LD C,8

D E M O 4p.
28 20000007200000172000 8451 LD (IX),2
29 003780000017F6000008 463
30 F6000000000000040000 250 84Í8 LD (!X<!),88
31 0003E0000003E00000F3 697 8478 LD (IX»2),I95
32 E00000DFD00000FFB800
33 00CF380000801C000000 8488 OEMO DI 10 BORDER 0 PRPER 0 INK 7 C
34 1 4 0 0 0 0 0 0 1 E 0 0 0 0 0 0 1 F 0 0 81 8491 LD (1X*5),C LS CLERR 24999
37 0000R000000558000020 295 2 0 LET C = U S R 6 4 4 0 1 F O R a=0 TO
38 R80000157C000002D800 531 8588 INC C 255 STEP 2 PLOT a,0 DRRU 0,17
39 0001E0000000F8000000 473 8511 INC c 5 NEXT a
40
41
0 0 0 0 0 0 0 1 D 0 0 0 0 0 0 1 C 8 0 0 4 10
0001C800000388000003 343 852» ID «,(«.) 30 F O R a =0 T O 20 LET anc=INT

42 8 0 0 0 0 0 0 3 F 6 0 0 0 0 0 1 F 6 0 0 624 8538 LD (IX«),0


43 000000000001F8000000 249 8541 INC HL
44 F80000007C000000 7C00 496
74 8558 LD (1X-1),I POKE 62003 , a L t POKE 6 2 0 0 4 ,
234 POKE 62005,y POKE 62008,4 POK
8548 El E 62009.anc POKE 6 2 0 1 0 , a U POK
0000ER0000006F000000
857» HftLT E 6 2 0 1 1 . x : POKE 6 2 0 1 2 , y POKE 62
37800000000000000000 0 1 3 , (INT (RND *255) ) POKE 6 2 0 0 0 .
00000000000000000000 8588 DJN2 DEMO 2 PAUSE 1
8598 RET 50 N E X T a
avehtvra
D/ EL
OESTE

' - 28036 MADRID


114-TELEF. (93)
FIGOS DEL M<
48 E S F E C I P L
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

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.
D E T E C C I Ó N DE C H O Q U E S|JJ

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, ocupo 6144d La utilización de esta ruti-
fll^^ que mueva un vertido a fin de explicar lo 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 m o d o 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 registro doble
conocer si dos —o más— de el temo en profundidad, pe- como cabría esperar. HL.

I
estas figuras se han puesto ro para aquellos que nunca La cuestión se complica Una última «pega» quedo
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
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 2 0 4 8 d 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 Pora 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

iHOQUES
tar, a esa dirección p a r a 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 p r o p i a R O M del ordena- 8876d, teniendo en cuenta
d o r , concretamente en la que el valor mínimo —0 —
posición 2 2 A A h —8874d— de la coordenada Y se en-

Enrique LÓPEZ MARTINEZ


SFECinL.

contrará en la última línea La otra posibilidad es bo- g a r á de forma irreversible.


de la pantalla, mientras que r r a r 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 b o r r a n d o 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 p a r p a d e o —muy si- bemos cambiar la ubicación
feccionar nuestra rutina. Y milar, por cierto, al que te- de halt dentro del p r o g r a -
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, p e r o tampoco consi- Desgraciadamente no
una balo, y algo a lo que gue evitarlo. siempre resulta tan sencilla;
disparar. Una cruz, por Por suerte p a r a 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 c o m p r o b a r si el disparo continuar refrescando la riar el valor de H L hasta lo-
y la cruz han colisionado. RAM— hasta que se pro- g r a r 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
p a r p a d e e n jamás, acen- HALT: Paro del Z80
La rutina se encuentra
tuando el efecto de suavi- L D H L , 5 0 0 d : Valor inicial
profundamente comentada
d a d en los desplazamientos; del bucle
en el listado ensamblador,
aunque no movamos las fi- LOPP DEC HL: Decre-
pero no estará de más re-
guras pixel a pixel. mento 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 N Z , L O O P : Si no lo es,
que los gráficos los vamos a
das —lineas 2 0 0 a 220 del continúa d e c r e m e n t a n d o
imprimir utilizando XOR
p r o g r a m a — . En caso con- HL
- u OVER 1 - , con lo cual
a la hora de borrarlos bas- trario el o r d e n a d o r 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
b o r r a d o 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 p a r p a d e o .
D E T E C C I Ó N DE C H O Q U E S |J J

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 C H O - se encargan del movimien- na COMPR, la cual si no se
Q U E ; é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- devuelve al bucle principar-
lo hubiera, respectivamen-
lisis de la rutina, vamos a in- res del p r o g r a m a , que más en caso contrario retorna al
te.
tentar explicar con breve- adelante veremos, y habili- Basic.
dad su funcionamiento. Co- IDEN y DIREC son dos
tar las interrupciones p o r a bytes señalizadores utiliza-
mienza haciendo una llama- poder salir al Basic en caso
da a las subrutinas REVOL dos por ellas. El primero in-
y C R U Z - l í n e a s 450 a 650
de que se confirme una co- dica con un uno la existen- COMPROBACIÓN
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 p a r a este fin.
nombre indica, imprimir el cia. El segundo a d o p t a 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 hocia arriba o una posible colisión entre
tical y horizontal contenidas MCRUZ - l í n e a s 1590 a el «uno» si tiene que hacer- sprites, responde al siguien-
en el registro doble B C . Es- 1 8 7 0 - y MDISP - l í n e a s lo hacia abajo. te esquema:
ta operación resulta impres-
cindible puesto que si no lo
hiciésemos asi, 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 p r o g r a m a
—líneas 40 a 250— el cual
se encarga de chequear el
teclado y llamar a las subru-
tinas A R R I B A - l í n e a s 260 a
350 A B A J O - l í n e a s 360 a
4 4 0 - y disparo (DISP) —lí-
neas 1310 a 1400— o salir
del p r o g r a m o si SYMBOL
SHIFT está pulsada. El retor-
52 5FECII=II_

IX,TABLA—. De este modo,


sería p o s i b l e t e n e r e n
(IX + 0), la o r d e n a d a ; en
I X + 1 ) , la a b s c i s a ; en
I X + 2), la fase, etc.
De cualquier manera, no
parece demasiado práctico
el hacer uso de todo esto en
nuestra rutina, cuando sola-
mente pretendemos q u e
una única bala se desplace
por la pantalla.
Prosiguiendo con la su-
brutina COMPR, intentare-
mos profundizar un poco en
ella, a fin de entender su
funcionamiento, que dista
mucho de ser complicado.
En primer lugar, señalar
algo que de por sí ya resul-
ta bastante obvio para que
un sprite se mueva hacia la
derecha, es preciso incre-
mentar su abscisa tantas
unidades como desplaza-
mientos queremos que efec-
túe —nuestro disparo se
mueve de cuatro en cuatro
pixels—; del mismo modo,
para que lo haga hacia arri-
ba debemos incrementar su
o r d e n a d a . Y decrementar
ambas para que se despla-
ce en sentido contrario.
Partiendo de que el dispa-
ro se realiza desde la iz-
quierda de la pantalla, su
c o o r d e n a d a horizontal ha

LISTADO 1
Las e t i q u e t a s VARI, pantalla, aunque no resulta
VAR2, etc., que pueden ob- demasiado complicado el
servarse en el listado, están hacer que esto no sea así. 1
1S\NK 7 CLS LET P = INT -BNO
referidas a los parámetros Si queremos manejar grá-
verticales y horizontales de ficos, lógicamente debere-
S a f t !8„ ? ? e1 r ; s P Ü x t o S e ? 8 8
cada gráfico y su significa- mos disponer de una tabla p M M H ? ^ ! ? : LET P=P.8:
d o es: en memoria, que nos infor-
me cuál es la situación de
VARI: O r d e n a d a del re- cada uno de ellos —también
volver. puede indicarse su fase y
VAR2: O r d e n a d a d e la color, si los tuviera, o la di-
cruz. rección en que debe despla-
VAR3: O r d e n a d a d e la zarse— a fin de que poda-
bala. mos ¡r moviéndolos secuen-
VAR4: Abscisa de la bala. cialmente, o llegado el ca-
VAR5: Abscisa de la cruz. so, hacer que alguno desa-
parezca.
\li ^ Í Í T S T 2.1; "SYMBOL SMIFT
En nuestro caso, no es po- N o es mala práctica el ac- p
sible efectuar un nuevo dis- ceder a una tabla de este ti- ??§ ysVp!SS? x; PLPS
p a r o hasta que el anterior po, mediante el registro in- " f ^ T u "OTRÁ VEZ?"
haya desaparecido d e la d e x a d o IX — f o r m a t o LD ili s *=" " ™
s E N 0 0
DETECCIÓN DE CHOQUES|JJ

de ser, al menos, igual o un la se encontraría por enci-


cierto número de veces — ma de la cruz, pero sin lle-
nosotros decidimos cuán- g a r a entrar en contacto
tas— mayor que la de la con ella, si es así, podemos
cruz. En tal caso, la sustrac- regresar sin más miramien-
ción entre ambas deberá tos al bucle principal.
ser un número positivo. En cambio, si la resta no
De otro modo, querría dio como resultado un nú-
decir que la bala —horizon- mero positivo, es fácil llegar
talmente— todavía no ha a la conclusión de que el ais-
llegado a la altura de la p a r o se encuentra por de-
cruz. bajo de la cruz. Sólo nos
En el supuesto de que el queda c o m p r o b a r si está a
disparo se moviese de dere- menos de 15 —scans verti-
cha a izquierda, sería nece- cales que ocupa el gráfico
sario seguir los mismos pa- de la cruz, menos uno— po-
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
la cruz, la de la bala, mirar ne de manifiesto la existen- DUMP: 40.000 N.° BYTES: 420
si su resultado es positivo y cia de un choque. De lo con-
obrar en consecuencia. trario se retorna al bucle LINEA DATOS CONTROL
Volviendo al caso que nos principal. 1 CD9E9CCDBE9C3EFBDBFE 18S6
ocupa, lo siguiente es com- 2 CB47CC769C3EF80BFECB 174 1
Para finalizar, es posible 3 4FCC8B9C3EFBDBFECB67 1670
probar cuántas veces es 4 CC249D3E7FDBFEC84FCP 1543
que alguien se pregunte por 5 D19DFB76F3CD649DCD3B 1704
mayor la abscisa del dispa- 6 9DC3R09DCB4FC83P9F9C 1524
qué, en el listado Basic la
ro que la de la cruz. 7 FE97C8CD9E9C3R9F9C3C 1557
abscisa de la cruz es siem- 8 329F9C1813CB47C83R9F 1099
Considerando que esta 9 9CFE17C8CD9E9C3R9F9C 152S
pre un número múltiplo de
última ocupa 16 pixels de 10 3D329F9C06400E081150 615
ocho. 11 C33E10F5C53EBFCDRC22 1379
ancho, si el resultado de la 12 06031RRE77231310F9C1 840
resta fuese, pongamos por La respuesta es muy sim- 13 05F13D20EPC9069S0EE8 117S
14 1180C33E10FSCS3EBFCD 1318
coso, dos. Significaría que el ple: como no está pensado 15 PC2206021PRE77231310 603
16 F9C105F13D20ERC90628 1262
disparo se encuentra dos pi- que se mueva hacia los la- 17 0E20C521E19D11R0C306 1036
xels a la derecha de la po- dos, si intentamos imprimir- 18 021R77132336002310F 7 553
19 79E607280E4 721E19D0E 912
sición actual que ella ocupe. la en una c o o r d e n a d a hori- 20 04CB1E230D20FR10F3C1 1019
En nuestro ejemplo, se ha zontal que no sea múltiplo 21 11E19D3E02F5C53EBFCD 1363
22 RC2206021RRE77231310 603
considerado el número 12 de ocho, el gráfico tenderá
como un valor aceptable, a aparecer en una que si lo
por lo que si la diferencia sea, de lo que se despren-
fuese mayor que esta canti- de que su posición en pan-
dad, se retorna al bucle talla no coincidirá con el va-
principal sin hacer más com- lor asignado a su abscisa,
probaciones. con la consiguiente confu-
En caso contrario, las sión que esto produciría.
coordenadas horizontales Por último, cabe decir que
están y a suficientemente las condiciones impuestas
chequeadas, ocupémonos en el programa para que un
ahora de las verticales. choque se verifique son ab-
El proceso a seguir es muy solutamente arbitrarias, es
similar al anterior: restamos decir, pueden variarse a
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
p a r a hacerles los retoques
tado es positivo y menor de DUMP: 50.000 N . ° BYTES: 82
dos —scans verticales que necesario hasta conseguir
ocupa el gráfico del dispa- que se adapten a nuestras
LÍNEA DATOS CONTRO
ro— querrá decir que la ba- pretensiones.
1 07FC02D803FF63F00144 1143
la se encuentra impresa, co- Se puede afirmar que el 2 10014413FF43F0088003 805
mo máximo, dos posiciones mejor aprendizaje es, sin 3 F0940400R9F800PB0800 988
4 RPC800PP1000RBE000BP 1137
por encima del gráfico de la duda, la práctica y las expe- 5 00008200007C000003C0 449
cruz, con lo cual se hace evi- riencias personales. Confío 6
7
03C003C003C003C003C0
FFFFFFFFFFFFFFFF03C0
975
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 m o d o
fuese mayor de dos, la ba- a ello.
54 15 ^^ EEE C I L m

LISTADO ENSAMBLADOR 448


458
JR
RET
N2.IHPRIH

448 CRU2 LD 6,149 ¡Ordenad 1


II ORG 41888 478 LD C.IE8 ¡Abscisa
28 CALI REVOL ¡ P r i a e r a m p r e s t o n del revolver 488 LD DE.1C388 ¡Oiré ccion del g r á f i c o de l a c r u z
31 CALI CRK la cru z , con over 1 498 LD A,818 ¡Nuaero de scans v e r t i c a l e s
41 PR1NC LO A.8FB ¡Chequea l a t e c l a 11 788 IMPR1 PUSH AF
SI W A,(«FE 718 PUSH BC ¡Guarda coo rdenadas
<1 BIT 8,A ¡Esta f u l ; ada' 728 LO A,IBF ¡ c a l c u l a la d i r e c c i ó n
71 CALL Z.ARRIBH ¡ s i 1 o e s t a , nueve a r r i b a 738 CALL PIXEL ¡del f i e hero de p a n t a l l a
81 L? A.IFP ¡CheiIUH la tecla U 748 LO B,I82
98 IN A,(IFE) 758 12 LD A,(DE) ;E lapr iae
III BIT 1 ( A ¡Esta p u l s ada* 748 XOR (HL) ¡del a i s n o nodo que
111 CALL Z.AWJO ¡Si l o e s t a , nueve abaje 771 LD (HL),A ¡ l a sub r u t i n a Revol
121 LO A.HFB ¡Chequea la tecla T 781 INC HL
131 IN A,(IFE) 798 INC DE
141 BIT 4,A ¡ E s U Puls ada? 888 OJNZ 12
191 CALL Z.OISP ¡Si l o e s t a , dispara 818 POP 8C ¡Recupera c oordenadas y
168 LO A,I7F ¡Chequea Syabol S t i i f t 828 OEC B ¡decreaenta la ordenada hasta
171 IN A,(8FE' 838 POP AF ¡ f i n a l i z a r la mpresion
181 BIT 1,A ¡Esta r u i s ada' 848 DEC A
191 JP Z,CHOQUE ¡Si 1 o e s t a , r e t o r n a al Basic 858 JR N2, IHPR1
288 El ¡Sincroniza co n 848 RET
218 HALT ¡«I b a r r i d o 878 IDIS LO 8,828 ¡Ordenad a del d i s p a r o
228 01 ¡de l a p a n t a t l i 888 LO C.828 ¡Abscisa
238 CALL NCRUZ ¡Nueve 1 a cruz y 898 PUSH BC ¡Guarda coo rdenadas
248 CALL MD1SP ¡el disp a r o , si se ha producido 988 LD HL.BUFER
258 JP C91PR ¡Salta a conprobacion de choque 918 LD DE.IC3A8 ¡Diré ccion del g r á f i c o del d i s p a r o
268 ARRISA BIT l,A;Estapuls ada i a tf> 928 LO 8.882
278 RET 2 ¡Retorna s i l o esta 938 HETE LD A,(DE) ¡Hete 1 os datos en
288 LO A,(VARI> ¡La o rdenada del r e v o l v e r 948 LD (HL),A ¡el buf er e introduce
2«8 CP 197 ;Ha a l e a n : ado el I m i t e s u p e r i o r 7 958 INC DE ¡un cero de spues de cada
388 RET 2 :Er- caso a f i n a t i v o , retorna 948 INC HL ¡ l i n e a a f i n de poder
318 CALL REVOL ¡Borra f • gura a n t e r i o r 978 LO (HL),888 ¡ r o t a r í o s s i l a abscisa
328 LO A,!VARH ¡ I n c r enenta en uno 988 INC HL ¡no fuese u n nuaero
338 INC A ¡ l a orCenada r U 998 OJNZ HETE ¡ a u l t i p l o de ocho
348 LO (VARI' ,A ¡vuel ve a i n t r o d u c i r 1888 LO A,C
358 JP REVOL ¡ l a p n n e la f i g u r a en l a nueva posic 1818 AND 187 ¡Si l o es, sigue s i n
368 ABAJO BIT 8,A ¡Esta p u l ! ada l a 0 1828 JR Z,SIGUE ¡hacer ninguna operacion
378 RET 2 ¡Retorna s i l o esta 1838 LD 8, A
388 LO A,(VARI) ¡La o rdenada del r e v o l v e r
ado el I m i t e i n f e r i o r '
1848 ROI LD HL.BUFER A|
398 CP «17 ¡Ha alean: 1858 LO C.884
488 RET 2 ¡En taso a f i r n a t i v o , retorna 1848 R02 RR (HL) ¡Rota l o s datos del
418 CALL REVOL ¡Borra f igura antigua 1878 INC HL ¡bufer para Sil
428 LO A,(VARI) ¡Tena l a ordenada 1888 DEC C ¡ p o s t e r i o r i npresion
438 DEC A ¡para decren e n t a r l a en uno 1898 JR NZ.R02
448 LO ((MRI > ¡y uo Iver a i n t r o d u c i r l a 1188 OJNZ ROI
458 REVO LO 8.148 ¡Ordenad a del r e v o l v e r 1118 SIGUE POP BC ¡recupera c oordenadas
448 LD C . I 8 8 ¡Abscisa 1128 LD DE,BUFER ¡y l o inprine
478 LO 0E.IC358 ¡Diré ccion del g r á f i c o del revo 1138 LD A,182 ¡Niñero de scans v e r t i c a l e s
488 LO A,818 ¡Niñero de scans v e r t i c a l e s 1148 II40I PUSH AF
4*8 IMPRIN PUSH AF 1158 PUSH BC
588 PUSH 8C ¡Guarda coo rdenadas 1148 LD A.I8F
518 LD A.1BF ¡Calcula la dirección 1178 CALL PIXEL

I
528 CALL PIXEL ¡del ( i c hero de p a n t a l l a 1188 LD B.I82
538 LO 8,183 ¡e m p r i M 1198 ESCR LD A,(DE) ¡ l a p r m e el g r á f i c o
548 IMP8 LD A,(0E) ¡ a e z c l í ndo l o s 1288 XOR (HL) ¡del disp aro aezclando
558 XOR (HL) ¡datos de 1 g r á f i c o con 1218 LD (KL).A ¡el con tenido del
548 LO (HL),A ¡ l o que haya en p a n t a l l a 1221 INC HL ¡bufer con l o que
578 INC HL 1238 INC DE ¡haya en pa ntalla
588 INC OE 1248 OJNZ ESCR
598 0*2 1MP8 1258 POP BC
488 POP BC ¡Recupera c condenadas y 1248 DEC B
418 DEC 8 ¡decreaenta l a ordenada 1278 POP AF
428 POP AF ¡basta c o » letar la figura 1288 DEC A
438 DEC A 1298 JR NZ.IHDI
D E T E C C I Ó N DE C H O Q U E S |J J

RET 1438 CP 194 ¡ I m i t e na x i n o , es p r e c i s o


MSP ID A,(IDEN) ¡Hay ya un d i s p a r o efectuado? 1441 JR NC.FIND ¡canbi ar el s e n t i d o
CP •81 ¡En caso a firnativo 1458 PUSH Af ¡Guarda ord enada
RET NZ ¡ r e t o r n a 1441 CALL CRU2 ¡borra la f i g u r a actual
LD A,«81 ¡Ahora s i ha de haberlo 1478 POP AF ¡recupera o rdenada
LD (IDEM),A ¡y l o hace constar 1488 AOD A, 183 ¡ l a incr enenta en t r e s
LD A,(VARI i ¡ T a » l a ordenada del r e v o l v e r 1498 LD <VAR2),A ; mpr tne ta cruz
SUB 18? ¡ p a n ó i c r m e n t a r l a en dos e 1711 CALL CRU2 ¡en su nu eva p o s i c i o n y
LD <VAR3),A ¡ m t r o d u c i r l a t n l a de! disparo 1711 RET ¡ r e t o r n a
CALL JDIS ; Iitpr iití su g r á f i c o y 1721 FIND LD A , l ¡ I n d i c a qu e l a cruz
RET ¡re torna 1731 LD (DIREC),A ¡se nueve hacia abajo
MDISP LD A,(IDEN) ¡Hay un disparo 1748 RET
CP 188 ¡en paula) la? 1758 ABA LD A,(VAR2) ¡ l a o rdenada de la c r u i
RET Z ¡Retorna s i no l o hay 1741 CP NIA ¡ha a l e a n ; ado el l i m t e i n f e r i o r ?
1 LD A,(UAR4> ¡So a bscisa ha alcanzado 1778 JR C.F1ND2 ¡Si es a s i , c m b i a su s e n t i d o
CP ( F l ¡el v a l o r naxino? 1788 PUSH AF ¡Guarda la ordenada,
JR NC,BORRA ¡Si e s a s i , r e s t a b l e c e paranetr 1798 CALL CRU? ¡Borra la anterior figura
M I L IDIS ¡Borra la figura anterior 1888 POP AF ¡recupera o rdenada
LD A,«MR4> ¡ i n c r m e n t a su 1818 SUB •83 ¡ l a d e c r m enta en
ADD A,184 ¡abscisa en c u a t r o 1828 LO (VAR2I.A ¡ t r e s unidades
LD (VAR4),A ¡unid ades, 1838 CALL CRUZ ¡ l a m p r i ne de nuevo y
CALL 101S ¡ l a i n p n ne en l a nueva p o s i c i o n 1848 RET ¡ r e t o r n a
RET ¡y r e t o r n a 1858 F1N02 XOR A ¡Ahora l a cr n i ha de
PORRA CALL 1DIS ¡Borra gr á t i c o del d i s p a r o 1841 LO !D1REC>,A ¡nov erse hacia a r r i b a
LD A,128 ¡restaur a su abscisa 1878 RET
LD « M 4 ) , A ¡e in d i c a Que ya 1388 «SUBRUTINA DE CHOQUE"
XOR A ¡puede produ cirse 1890 CCHPR LD A,(IDEN) ¡Hay un d i s p a r o
LD <IDEN),A ¡un n uevo disparo 1918 CP •00 ¡en pantal la?
RET 1910 JR Z,VUELVE ¡Si n o l o hay r e t o r n a
NCRU2 LD A,<DIREC) ¡Si e l indicador de s e n t i d o 1920 LD A,(VAR5) ¡Rest a a l a abscisa
CP 188 ¡es un nun ero d i s t i n t o de 0 1?30 LD 8,A ¡del dispa ro
JR NÍ,ABA ¡ l a cru i se nueve hacia abajo 1940 LD A,<VAR4) ¡ l a d e la crui
LD A,(UAR2) ¡Si S u ordenada ha alcanzado el 1950 SBC A,6 ¡ s i el res u t t a d o no es un nunero p o s i t i v o
1940 JR C,VUELVE ¡ r e t o rna
1970 CP I0C ¡Si l o es, ha de ser nenor de doce
I'88 JR NC,VUELVE ¡En caso c o n t r a r i o r e t o r n a
1998 LD A,iVAR2) ¡Rest a a l a ordenada
2880 LD B,A ¡del dispa ro
2818 LD A,!VAR3) ¡ l a d e la cruz
2820 SBC A,B ¡Si el res u l t a d o no es p o s i t i v o
2830 JR C,N0 ¡ s a l t a i la «ubrut ma No
2848 CP «02 ¡Si es pos i t i v o , pero nayor de dos
2058 JR NC,VUELVE ¡ r e t orna
2048 JR CHOOUE ¡ s i es n e n o r , se d e t e c t a un choque
2078 NO LD A,«VAR3> ¡Rest a a l a ordenada
2880 LD 8,A ¡de l a cru z
2098 LD A,!VAR2> ¡ l a d el d i s p a r o
2188 S8C A.8 ¡ s i el res u l t a d o es
21 It CP I8F ¡nenor de q u i n c e , se detecta un choque
2128 JR NC,VUELVE ¡ s i es nayor r e t o r n a
2130 CHOOUE XOR A ¡Restaura e l byte
2148 LD (IDENi.A ¡iden t i f i c a d o r del
2154 LD A,120 ¡disparo , repone e l v a l o r
2148 LD (VAR4),A ¡ i n i c i a l de su abscisa
2178 El ¡ h a b i l i t a las interrupciones
2188 RET ¡y r e t o r n a al Basic
2198 VUELVE JP PR1NC ¡Regresa al bucle p r i n c i p a l
2288 DIREC DEFB 18
2218 IDEN OEFB 80
2228 BUFER DEFS 14
2238 PIXEL EOU 8674
2248 VARI EQU 48895
2258 VAR2 EOU 48127
2248 VAR3 EOU 40159
2278 VAR4 EOU 40141
2280 VAR5 EOU 48129
Recorta o copia este cupón y envíalo a Hobby Press, S.A. Apartado de Correos n? 8. 28100 Alcobendas (Madrid).
Deseo reciba en mi domicilio as antas de MICROHOBBY que a continuación indica al precio de 625 ptas. cada una. Cada cinta lleva grabados los programas pubhcados por MICROHOBBY durante
cuatro números consecutivos (1 al 4, 5 al 8, 9 al 12, etc.)
Números al Números . al _ Números ai _ Números al
Nombre Apellidos Fecha de Nacimiento
Domicilio Localidad Provincia C. total Teléfono
Forras da pago (Para agüizar tu wivío. 88 importante que indiques ei código postal)
G latón bancario adjunto a nombre de Hobby Press. S.A : ] Giro Postal a nombre de Hobby Press. &A.. n°
• Contra reembolso Isupgne 125 ptas más de tratos de envío y es válido sólo para Esparta)
• Tarjeta de crédito n° LLJLG U í I ILl 1 JU i j i I (Sólo para pedidos superiores a 1.500 ptas.)
Visa • Master Card • American Express • Fecha de caducidad de la tarjeta Nombre de»títjlar(si e$ distinto) Fecha y firma
(Si lo deseas puedes solitarias por teléfono (911 734 65 00)
C/. Duque de Sesto, 50. 28009 Madrid (Metro O'Donnell o Goya)
Tel. (91) 2 7 5 9 6 16 - 2 7 4 7 5 0 2

„ c r R A t l S A ELEGIR

SPECTRUM PLUS +
PTAS. PTAS. CASCOS MÚSICA STEREO
875 XEVIUS .. 875 19.800 PTS (ind. IVA).
875 10th F R A M E . . 1.200
875 LEADERBOARD . . 1.200
875 EXPRESS RAIDER .. 875
875 ACE OF ACES . . 1.200 PTAS.I
875 IMPOSSABALL .. 875
ARKANOID 875 SIGMA 7 .. 875 Iquick SHOT I
875 BAZZOKA BILL .. 875 quick SHOT
QUICK Miu. H -
875 D R A G O N ' S LAIR II .. 875 Iquick shot ii t u r b o
1.750 SHADOW SKIMMER .. 875 SHOT 2 595
quick " , , n T
2.250 (Incluido regalo calculadora) KONIX (mictoswrtcn) _ ig5
|ÍTERFACÍSPEC^ J

I M P R E S O R A S 2 0 % D T O . S O B R E P.V.P.
CABLES E INTERFACES
20% DTO. SOBRE RV.P.

CADENA MUSICAL 27.900 PTS.


VIDEO VHS AKAI 79.900 PTS.
RADIOCASSETTE STEREO 6.895 PTS.

RATÓN PARA AMSTRAD Y COMMODORE CON SOFTWARE 4.900 PTS.


K z ÓPTICO SPECTRUNI
PEDIDOS CONTRA REEMBOLSO SIN GASTOS S K z ÓPTICO AMSTRAD
DE ENVlO (si es inferior a 1.200 ptas. se cargarán
S t a ^ e s p e c t r u m ....
150 ptas). LLAMA POR TELÉFONO. ADELANTAS TRES DÍAS TU PEDIDO TELF. (91) 274 75 02 I MICRODRIVE • _ r n
191) 275 96 16 ARCHIVADOR DISCO 3. • • •
(Durante las 24 horas)
RALENTIZADORDii^l-
SERVICIO TÉCNICO REPARACIÓN TARIFA FIJA: 3.600 PTAS.
(incluida provincias sin gastos envío)
CASSETTE ESPECIAL ORDENADOR
CASSETTE ESPECIAL ORDENADOR 3.495 PTAS. Y 3.995 PTAS. 3.495 PTS. Y 3.995 PTS.
COMPATIBLE PC I B M 640 K
2 BOCAS 360 K
C O M M O D O R E 128 54.900
M O N I T O R FÓSFORO VERDE
C O M M O D O R E 128 + TECL. M U S I C A L . . . . 57.900
149.900 PTAS. (inclido IVA)

¡¡PRECIOS EXCEPCIONALES PARA TU AMSTRAD!!


Tiendas y Distribuidores, pidan lista de precios al mayor. CI. Galatea, 25 28042 MADRID telef. (91) 274 75 03
A la hora de
adentrarnos en el
mundo de la
programación resulta
imprescindible Rafael MA RQUEZ PARRA

conocer las diferentes


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

•a», ara f a c i l i t a r su Cuando ya están dibuja- Cuando ya lo hayamos he-


comprensión va- dos hay que almacenarlos cho, hemos de construir una
flg^F mos a guiarnos por en memoria. Estos gráficos tabla que nos indique qué
K un programa ejem- no se almacenan como los gráfico hay en cada panta-
• pío. Si observáis G D U , sino por scanes, es lla. Le llamaremos T A B L A
detenidamente cada paso, decir, primero la primera fi- DE P A N T A L L A .
dentro de muy poco podréis la de bytes de la primera lí- El primer byte de la tabla
diseñar fácilmente vuestros nea de caracteres que com- indica el número de objetos
propios mapeados. Hemos ponen el gráfico, después la que hay en ella (no se cuen-
elegido para ejemplificar segunda fila de la primera tan las paredes, puertas, te-
nuestra rutina el m a p e a d o línea de caracteres y así cho, suelo, escaleras ni el te-
de una casa. hasta completar todo el jado con la ventana que
La hemos diseñado de gráfico. (Fig. 1). hay en él, ya que éstos reci-
f o r m a que quepa en nueve Con todos los gráficos ya ben un tratamiento diferen-
pantallas del televisor. En almacenados hay que cons- te).
cada una p o d r á n verse dos truir una tabla con las ca- Después de este byte vie-
pisos y tendrá tres habita- racterísticas de cada uno. A nen cuatro más p o r a cada
ciones en el plano horizon- esta tabla le llamaremos objeto. El primero es el nú-
tal; por tanto estará com- T A B L A DE G R Á F I C O S . mero de identificación del
puesta por 18 lugares distin- Cada gráfico ocupa cuatro gráfico, que es la posición
tos. Para hacerlo más real, bytes de la tabla. El prime- que ocupa en la TABLA DE
el último piso lo convertire- ro indica el número de bits G R Á F I C O S . El s e g u n d o
mos en el tejado de la casa de ancho, el segundo el nú- byte indica la posición ver-
y será una zona donde no mero de bits (o scanes) de tical del objeto y el tercero
se p o d r á acceder. alto, el tercero y el cuarto la posición horizontal (estos
A h o r a hay que diseñar contienen la dirección don- valores se toman con pan-
gráficos para a d o r n a r el in- de está almacenado. (Fig. talla en alta resolución;
terior. Deben ser lo más va- 2). igual que el PLOTy DRAW).
riados posible y p o d r á n es- A h o r a hay que distribuir El último byte indica el co-
tar en más de una habita- los objetos por las habita- lor del gráfico y se halla de
ción. ciones a nuestro gusto. la siguiente manera: CO-
MACP"AD¿ 5 9
LOR DE TINTA + COLOR Entre las líneas 720 y 0 0
DEL P A P E L * 8 = BRILLO* está la TABLA DE DATOS
64 +FLASH* 128. que contiene la dirección de
Por tonto, si en uno 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 8 5 0 - 8 7 0 : Papel negro y
longitud de 13 bytes, el pri- tinta blanca.
mero el contador de objetos 8 8 0 - 9 1 0 : 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 T A B L A D E D A - 9 2 0 - 9 3 0 : Se pone a 0 la
T O S . 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. 9 4 0 - 9 5 0 : Se inicializa a
A h o r a ya está desarrolla- 1 la variable
do todo lo necesario p a r a FORMA. Pue-
empezar a explicar las ruti- TRBLfi DE PBNTftLLB
de contener un
nas que lo realizan. número del 1 III 70 J
También haremos que un al 8. Cada uno Oh í J Zh UJ
HUI nú 0/ ÜO
pequeño personaje pueda corresponde a no <n H(J H(J h
visitar todas las habitacio- un gráfico dis- iri- OI) OH O N uiü
nes de lo casa. tinto del muñe- mui n o H(- HH 0 )
7 " ) ir «>ir 11)11 j t i
co. - i t n HUI uu oo 00
9 6 0 - 9 7 0 : Se a l m a c e n a ZU PÜ lU a i 0
en PANT el nú-
EXPLICACIÓN mero de habi-
DEL PROGRAMA taciones donde
se encuentra el TBBLR DE GRAFICOS
Empieza en la línea 100 m u ñ e c o . Las
con un salto a SEGUIR. En- habitaciones se
tre las líneas 120 y 260 es- numeran de iz-
tán las etiquetas utilizadas quierda a de-
por el p r o g r a m a . recha y de arri-
Entre las líneas 280 y 7 0 0 ba a bajo em-
se encuentra la TABLA DE pezando por
GRÁFICOS. 1.
i
TÉCNICAS w m
DEL M A P E A D O O I

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 2 0 2 0 - 2 0 4 0 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
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 2 8 , 0 , 0 , 6 2 , 0 , ba si se está en la prime-
0 , 1 2 7 , 0 , 0 , 1 2 7 , 0 , 0 , 8 5 , 0 , 0 , 1 2 7 , 0 , 0
, 1 0 9 , 0 , 0 , 1 2 7 , 0 , 0 , 1 2 7 , 0 , 0 , 6 2 , 0 , 1 , en las dos ra pantalla
221,128,5,227,224,13,24 7,176,13, primeras salta a TE-
235,184,14,255,184,31,255,124,31 pantallas JADO.
, 2 5 5 , 2 5 2 , 6 3 , 2 5 5 , 2 5 4 , 6 1 , 2 5 5 , 2 2 2 , 1 y si es así
24 , 85 , 206 , 124 , 255 , 142 , 120 , 255 , 20 2170-2250: I m p r i m e
6,249,255,197,209,255,231,224,12 se salta a una pared,
7 , 14.3 , 1 1 3 , 1 4 0 , 1 1 0 , 1 1 3 , 2 4 3 , 2 2 4 , 3 3 CONT2. una puerta
, 2 4 3 , 2 2 4 , 1 , 2 4 3 , 2 2 4 , 1 , 2 4 3 , 2 2 4 , 1 , 2
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.
, 2 4 0 , 2 , 2 2 5 , 2 0 8 , 3 , 3 3 , 4 8 , 2 , 1 6 1 , 8 0 , una puerta 2260-2280: Si no esta-
3 , 9 7 , 4 8 , 2 , 1 9 2 , 2 0 8 , 3 , 6 4 , 1 7 6 , 2 , 1 9 2 en el piso
, 2 0 8 , 5 , 6 4 , 1 6 8 , 1 0 , 1 9 2 , 2 1 2 , 2 1 , 1 2 8 , mos en las 3
106,14,0,28,192 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 impri- alto y salta tejado.
M O D O 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 tal mente. ga si está en primir cinco
de impresión Entre 1100 la pantalla filas de grá-
no imprimi- 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
en la panta- 2470-2490: Imprime la
ras correspondientes a cada 1140-1170: Se imprime
lla 3 salta a ventana del
pantalla que no sean obje- el g r á f i c o
TRES. tejado.
tos, como paredes, puertas, del techo y
etc. Para imprimirlos se car- 1600 •1750: I m p r i m e 2500-2550 Si estamos
se llama a
dos puertas, en la pan-
ga en DE la dirección que SUBI.
ocupa el gráfico en la TA- dos paredes talla 4 ó 7
1180-1210: Se c a m b i a
BLA DE GRÁFICOS y en HL y un mu- salta a ESC,
la coorde-
el comienzo de los datos ro. Salta a sino a
nada Y pa-
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-
la pantalla 1790 1850: Si estamos ra.
Después se llama a SITUA
que introduce los valores en otro gráfico en la panta- 2590-2640: Si estamos
las etiquetas para que pue- del t e c h o . 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.
1 0 3 0 - 1 0 5 0 : 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. imprimir 8 1920 1940: Si estamos ra.
5PECIPL

2 6 8 0 - 2 7 3 0 : Si estamos c o l o c a los
en la panta- datos de los
lla 7 impri- gráficos en
me un mu- las etiquetas
ro. para que
En SIG comienza la rutina pueda utili-
que lee los datos de las pan- zarlos la ru-
tallas y crea las habitacio- tina d e im-
nes. presión.
2 7 6 0 : Se carga en A el
número de panta-
Carga la anchura del grá-
fico en A N C H O , la altura
LISTADO 2
lla donde está el en ALTO; el byte bajo de la
(RUTINAS)
muñeco. dirección donde está alma-
2 7 7 0 : Se carga en B pa- cenado en INFER y el alto 1 C311C4101840D7101871 880
ra hacer un bucle. en SU PER; la c o o r d e n a d a Y 2 D71018R2D70820D3D720 1130
3 20F4D7181875D81018BE 1102
2 7 8 0 - 2 8 1 0 : Se calcula la en POSY, la X en POSX y los 4 D82008EFD8102010D920 1024
posición d e atributos en COLOR. Luego 5 1051D9181092D92818C3 976
910
6 D920083CDR0820SDDR18
la pantalla llama a IMPRI que dibuja el 7 107EDR1810RFDR1810E0 1057
851
en la TABLA gráfico y retorna. Los datos 8 DR101811DB101842DB20
1082
9 1073DB1810B4DB2020E5
DE DATOS. que hay entre las líneas 10 DB182066DC1010C7DC10
1064

2 8 2 0 - 2 8 6 0 : Se pasa la 3360 y 3610 sirven p a r a 11 18E8DC101819DD18184R


12 DD101893DD2010C4DD10
dirección de imprimir las puertas, pare- 13 1805DE181836DE28187F 766
14 DE1018F8DE201029DF20 1076
la TABLA des, etc. El primer byte es la 15 186RDF1010CBDF1018EC 1087
DE DATOS posición Y, el segundo la X 16 DF10181DE008204EE020 890
17 206FE01818F0E0101839
de la panta- y el tercero el color del grá- 18 E110186PE1CCRFDDRFF2
lla donde fico. Los datos que hay en- 19 RF07B028B059B07EB097
20 B0C0B03E02CD01163E07
está el regis- tre las líneas 3630 y 3 7 0 0 21 328D5C32485C3E603292
22 E23E7F3291E2RF3294E2
tro HL. indican la dirección donde 23 3C3293E23E083290E2CD 1178
están almacenadas las figu- 24 6B0D3E01D3FE3206SB21 828
2 8 7 0 - 2 8 8 0 : Carga en B 25 9BC61177C3CD2DC&0608 1146
ras p a r a crear el movimien- 26 C5CD00FRC13R045BC620
el n ú m e r o
to del muñeco. 27 32045B10F1219EC6116F
de gráficos 28 C3CD2DC6CD6FC43ERF32 1442
29 0S5BCD6FC418120608C5 861
a imprimir. Las primeras 4 son d e l 30 CD00FRC13R045BC62032 1081
1238
2 8 9 0 : Se guarda el regis- movimiento a la derecha y 31
32
045B10F1C93R90E2FE03
2835FE062831FE09282D 790
tro B para no per- las 4 últimas a la izquierda. 33 2156C61187C3CD2DC621 1145
34 59C611EBC3CD2DC63R90 1384
der su contenido. La figura 1 y 3 de cada sen- 35 E2FE03385C215CC611EB 1206
tido son iguales. 36 C3CD2DC6215FC61187C3 1316
2 9 0 0 - 2 9 3 0 : Se carga en 37 CD2DC618482189C61173
B el número 3 7 2 0 - 3 8 0 0 : Pone los da- 38 C3CD2DC63R90E2FE0328
39 2F218CC611EBC3CD2DC6
de identifi- tos iniciales 40 2156C61187C3CD2DC621
cación d e l del muñe- 41 92C611EBC3CD2DC62195
42 C61187C3CD2DC6218FC6
primer grá- co. Llama a 43 1173C3CD2DC618092198
44 C61173C3CD2DC63R90E2
fico. BFORMque 45 FE012835FE042831FE07
2 9 4 0 - 2 9 9 0 : Halla la po- busca la for- 46 28202162C61187C3CD2D
47 C62168C6115FC3CD2DC6
sición de los ma que le 48 3R90E2FE0338142165C6
1150
datos d e l correspon- 49
50
1187C3CD2DC6216BC611
5FC3CD2DC618443R90E2 1258
gráfico a de. Después 51 FE02283D217RC61173C3 1037
52 CD2DC6217DC61187C3CD 1356
imprimir en se llama a 53 2DC62180C6115FC3CD2D 1159
la tabla d e PCOOR que 54 C63R90E2FE01281B2165 1082
55 C61187C3CD2DC62183C6 1355
gráficos. c o l o c a las 56 115FC3CD2DC62186C611 1137
1444
3 0 0 0 : Imprime el gráfi- coordena- 57
58
73C3CD2DC63R90E2FE04
303111D7C32177C6CD2D 1124
co. das del mu- 59 C60605C50608C5CD00FR
60 C13R045BC62032045B10
3 0 1 0 : Recupera el con- ñeco p a r a 61 F13R0S5BD6103205SBC1
que pueda 62 10E32174C611CBC3CD20 1255
tador y repite si 63 C63R90E2FE042806FE07 1191
aún faltan más. utilizarlas la 64 28021809216EC611EFC3 867
65 CD2DC63R90E2FE062806 1182
3 0 3 0 - 3 0 6 0 : La p a n t a - rutina d e
66 FE09280218092171C611
lla y a está impresión, y 67 63C3CD2DC63R90E2FE07
68 20092IR1C61173C3CD2D 1010
completa y por último 69 C63R90E24711FDC31313 1200
se almace- lo imprime. 70 10FC1R6F131R677E47CS 947
615
na en me- 3 8 3 0 - 3 8 6 0 : Si se ha pul-
71
72
237E2347114FC3131313
1310FRCD2DC6C110EC21 1211
73 004011B88801001BEDB0 842
moria. sado la tecla 74 C3B4C6F31R32075B131R 1035
3 0 7 0 : Salta a SEGU2. Z se salta a 75 320858131R320R5B131R

3 0 9 0 - 3 3 3 0 : Esta rutina PULIZ.


T É C N I C A S j r 4%
DEL M A P E A D O O O

3870-3900: Sise ha pul-


s a d o l a X se
salta a PUL-
DE.
3910-3940: Si se h a pul-
sado Space
se llama a
PSALT.
3950-3980: Si se h a p u l -
sado ENTER
vuelve al
DUMP: 50000 BASIC.
N . ° BYTES: 1 . 4 7 2 3 9 9 0 : C a r g a en A el v a -
lor d e SALTO.
4000-4010: Si n o e s 0
320B5B7E32055B237E32
045B237E32095BE5CD00 840 es que el
FRE1FBC95FF8063FF844 1655 muñeco h a
87F844R7F8065F0006R7 1140
00063F004 48700448 710 491 d e e s t a r su-
433FD043977802RF0002 855 biendo por-
5F00163F00063F0844R7 492
08448700163FF0165FF0 893 que se ha
44R7F01687F04487F806 1329
5FF0161F00166700283F 616 pulsado la
001640D771D740D7R2D7 1285 t e c l a d e sal-
6RE1ECDF6RE11DE03E10 1452
32075B3E1832085B3E07 to y pasa a
32095BCDE0C7CDF5C7CD SUBIR.
00FR3EFEDBFECB4F2824 1397
1420 4020: Si e s 0 hay que
1782
FECB47C83R94E2B7C2RF 1712 c o m p r o b a r si t i e n e
C7CC1EC818D43R92E23D 1360 que bajar porque
4F3R91E2D61747CSCDRR 1388
22CD05C8C11RFE44CR80 no hay suelo de-
C8FE1628C7FE432009CD
CE22CDD52DB720BR3R93 1309 b a j o s u y o , y se h a -
E23CFE09D4DRC7FE05DC 16S7 ce u n a l l a m a d a a
100 DRC73293E2CDE0C73R92 1672
101 E2D6023292E2CD10C8CD 1490 BAJAR.
102 F5C7010500CD3D1F1890 915
103 1366 4 0 3 0 : C i e r r a el b u c l e so-
104. 1303 bre TECLAS.
105 1RFE44CRCCC8FE16CRDC 1652
106 C6FE43200RCOCE22CDD5 1424 P U L I Z . A q u i s e l l e g a si s e
107 2DB7C2DCC63R93E23CFE 1585
108 978 ha pulsado para mover a la
109 1456 izquierda.
1137 4 1 4 0 : Se l l a m a a BA-
110 10C8CDF5C7010500CD3D
111 1FC3DCC63R94E2B7C03C 1511
1175
4060-4120: Se s a c a n las TRIB. Esta rutina
112 3294E23E053295E2C93R
113 95E23D3295E2B7200932 1135 coordena- necesita tener e n
1609 das del mu- HL una dirección
1473
F5C7010500CD3D1FC3CC 1146 ñeco y se del archivo d e
117 C6C93E053293E2C93R93 1295
1154 actualizan p a n t a l l a y a l a sa-
118 E221R2C647232310FC7E
119 723 para com- l i d a d e v u e l v e la di-
1001
5BCD00FRC97C0F0F0FE6 1146 probar qué rección d e atribu-
122 03F6S8575DC9F321B888 1314
974
h a y a su iz- tos e n e l registro
123 110040010018EDB0FBC9
124 3R92E24F3R91E2D6184 7 1247 q u i e r d a . Se DE d e l a posición
125 C5CDRR22CO05C8C11RFE 1489
1282 g u a r d a n las a p u n t a d a por HL.
28C8FE16C8FE432008CD
CE22CDDS2DB7C03R92E2 1508 n u e v a s
1227 4 1 6 0 : C a r g a e n A el c o n -
128 C60F4F3R91E2D6184 7C5
129 CDRR22CD05C8C11RFE28 1332 coordena- tenido d e DE, es
130 C8FE16C8FE432008CDCE 1448 das en BC y
131 22CDD52OB7C03R91E2D6 1515 decir, el color del
132 023291E2CD10C8CDF5C7 1493 éste e n la carácter que hay a
133 010500CD3D1F189E3R90 687
E2FE012814FE042810FE 1109 pila. la izquierda d e l
134 884
135 07280C3D3290E23EE832 muñeco.
92E2C335C43R91E2FE5F 1594 4 1 3 0 : Se l l a m a a u n o r u -
136 1142
137 38153R90E2D6033290E2 tina d e la ROM. 4170-4180: Si e s t e v a l o r
3E373291E23E123292E2 1040
138 1267 Esta r u t i n a necesi- es 6 8 , es
139 C335C43R90E2C6033290
E23E123292E23E9F3291 1144
140 1398 ta las coordena- que hay una
141 E2C335C43R90E2FE0628
10FE09280C3C3290E23E 873 das e nel registro puerta. En-
142 0R3292E2C335C43R91E2 1305
143 FE5F38133E573291E23E 1056 BC y a la salida d a t o n c e s se sal-
144 DE3292E2CD10C8CDF5C7 1714
145 en HL la dirección ta a PUEIZ.
C3CCC63E7F3291E23EDE
146 1491 del punto que se- 4180-4200: Si e s 2 2 e s
147 1687
ñalan las coorde- que hay un
nadas. muro, en-
SPECinL

LISTADO 4
(GRÁFICOS) DUMP: 55.104 N . ° BYTES: 2< I

LINEA DATOS CONTROL 134 DFB5FBDFB5FBDFB5FB0F


FFFFFC3FFC003FFC3FFD 1708 2188203
0 3 8 0 0 7 C 0 0 6 S E 0 F F F 0 F F E 969 FFBFFC3FFDE3BFFC3FFD 2000 135 B5FBDFB5FBDFB5FBDFB5 214620c
0 F 8 0 0 3 E 0 0 1 C 0 0 1 8 0 0 1 8 0 821 FFBFFC1FFDFFBFF803C4 1875 136 FBDFB5FBDFB5FBDFR5F8 2200202
0 2 C 0 0 2 C 0 0 6 E 0 0 6 E 0 0 6 6 0 950 0023C003C7FFE3C003C0 137 DFR5FBDFRSFBDFR5FBDF 2140204
0 2 4 0 0 2 4 0 0 3 C 0 0 3 8 0 0 1 8 0 587 0003C003C00003C003C0 138 R5FBDFB5FBDFB5FBDFB5 2130205
0 1 8 0 0 1 C 0 0 1 E 0 0 0 0 0 8 0 0 3 550 0003C003C00003C003C0 780 139 FBDFB5FBDFB5FBDFB5FB 2216205
8 0 0 7 C 0 0 6 S E 0 F F F 0 F F E 0 F 981 0003C003C00003C003C0 780 140 DFB5FBDFB5FBC03403FF 181220'!
8 0 0 3 E 0 0 1 C 0 0 1 8 0 0 1 8 0 0 F 821 00030003C00003C003C0 780 141 FFFFE7FFE71800181800 1299205
C0134.02767779F67E703 1032 0003C003C00003C003C0 780 142 181800180007E003C001 499 2fí
C 0 0 1 E 0 0 6 7 0 0 7 7 8 0 6 1 8 0 E 706 0003C003C00003C003C0 780 143 800180018009905999D9 998 ¡18
1 8 0 C 1 C 0 F 1 E 0 0 0 0 0 0 0 3 8 0 240 0003C000FFFFFFFFFFFF 1725 17638J-J
144 98D998D99BD3CBCDB342 186 2 1 ;
0 7 C 0 0 6 5 E 0 F F F 0 F F E 0 F 8 0 981 FFFFFFFFFFFF3800001C 1614 145 423C3C00000000000000
0 3 E 0 0 1 C 0 0 1 8 0 0 1 S 0 0 3 C 0 373 3800001C3800001C3000 216 869 |i:
1 C 6 0 2 7 D 7 7 3 C F 6 7 C 7 0 7 C 0 1201 146 07E0081037E437DC0830 146021'
000C3000000C00FFFFFF 837 147 63CE58165RDRB6DB760R
0 7 0 0 0 6 E 0 0 6 F 0 0 6 3 0 1 C 3 0 613 00F7F7F700FFFFFF00EF 174S 1550 21
1 8 1 C 1 E 1 E 0 0 0 0 0 0 F 0 F 0 F 0 832 148 96D9E0077FFE9FF9R003 1739gl«
EFEF00FFFFFF00F7F7F7 1984 149 B6DBB6DRB6DR36DR36D4
F 0 F 0 F 0 F 0 F 0 F 0 F 0 F 0 F 0 F 0 2400 00FFFFFF00EFEFEFEF00 1721 950 21
F 0 F 0 F 3 F D F 1 F D F 3 F 0 F 0 F 0 2433 150 16D016D00RD0000FF011 115821E
1842 151 882184418249929189R1 182621^
F 0 F 0 F 0 F 0 F 0 F 0 F 0 F 0 F 0 0 0 2160 2298
0 0 0 0 0 0 F F 0 0 0 0 0 0 F F 0 0 0 0 510 152 818181FFFFFFFF8181R1 137422(
2304 153 91918189918589898585 1409 22:
0 0 F F 0 0 0 0 0 0 F F 0 0 0 0 0 0 F F 765 857
0 0 0 0 0 0 F F 0 0 0 0 0 0 F F 0 0 0 0 S10 154 818381FFFF0000FFFF00 156l|i;
88 55SSC00003FFFFFF00FF 1385 155 00FFFFFFFF000FFFF01F 196l||-
0 0 F F 0 0 0 0 F F F F 0 0 0 0 F F F F 1275
0 0 0 0 F F F F 0 0 0 0 F F F F 0 0 0 0 1020 89 FFFFC00003BFFFFDBF80 156 FFF83FFFFC3FFFFC3FFF 1926||
FFFF0000FFFF0000FFFF 1530 90 FDBFBEFDBF7F7D8F497D 157 FC3FFFFC3FFFFC1FFFF8 1422||;
0000FFFF00FFFFC100FF 1468 91 BF7F7DBF5D7DBF637DBF 1458 158 1C003843FFC2BDFFBDBD 1674 |2(
F F 2 B 0 0 F F F C 5 5 0 0 F F F R R 3 1558 92 7F7DBFBEFDBF80FDBFFF 1904 159 FFBDBDFFBDBC003O5DFF 1314 | |
00FFE50500FFC8RB00FF 1370 93 FDC00003FFFFFF007000 1325 160 BR3DFFBC3C003C3DFFBC 1586||
D 1 4 5 0 0 F F R 2 R 3 F F F F 8 5 4 1 1566 94 00F8003CF8000C70004E 758 161 3DFFBC3DFFBC3FFFF80C 348 |2
FFFF22R3FFFF4141FFFF 1857 95 70204E70F07E 70E03C71 1209 162 00301E00781E00780000 423 |3<
2 8 8 B F F F F 5 5 4 5 F F F F R R R 3 1686 96 C0132 3C0182360 182030 702 163 0007E008101428124812 442 |3
F F F F S S 5 5 F F F F F F F F 0 0 0 0 1700 97 18201818201818200C18 252 164 481248124812480R500R 486 |3;
0 0 7 C 0 0 0 0 F R 0 0 0 0 F D 0 0 0 0 627 98 20061800040000004410 150 165 500810042004201FF81F 436 |3
F R 0 0 0 0 F D 0 0 0 0 F R 0 0 0 0 F D 1006 99 CC19CC199C1D9C1D9C0D 997 166 F800000C300C300C3008 598 |3
0000FR0000FP1FFEFR3F 1101 100 B80DB30F70077002E003 8S6 167 1008100810081000FFFF 1725 |3,
FEFD3FFEFR3FFEFD3FFE 1961 101 E003C01FF800001FF800 977 168 FFFFFFFFFFFFC0000003
F R 0 0 0 1 F D 1 5 S 5 F R 2 R R B F D 1326 102 001FF81FF81FF81FF80F 1131 169 DFFFFFFBDFFFF24BCFFF 2241 231
3 F F F F R 3 F F F F D 3 F F F F R 3 F 1770 103 F007E007E00001000080 831 170 F24BC7FFF24BC3F0124B 1616
F F F O 0 C 0 0 0 C 1 E 0 0 1 E 1 E 0 0 622 104 01000080010000800100 259 171 D1F0124BD8FFF248DC70 1662 |3<
1E000000003800380038 198 105 00800100008001000080 386 172 124BDE70124BC0000003 715 |3
0 0 3 8 0 0 3 8 0 0 3 8 0 0 1 8 0 0 1 8 £16 106 01000080010003800SC0 458 173 FFFFFFFFFFFFFFFFFFFF 2550
0 0 1 8 0 0 1 8 0 0 1 8 1 F E 8 1 F E 8 598 107 0BR017D02FE87FF47E7C 1302 174 FFFF 004 0024 0 0 2 6 0 0 6 7 0 856
0 0 1 8 1 F F 8 1 8 1 8 1 8 1 8 1 8 1 8 447 108 0180018000155555002R 491 175 0E781E3FFC1FF81FF81B 1064 24
10081008 100810081008 1 2 0 109 RRRRE07FFFFFF0FFE7FF 2182 176 D83DBC5FF65FF6DFF7DF 184024
0 0 F F F F F F F F 0 0 0 0 0 0 0 1 4 0 1085 110 08FFDBFE08FFE7FE04FF 1743 177 F76E77F7EF7BDE3DBC3E
10080500000001000000 30 111 FFFE0400000004F5FFRE 1191 178 7C1FF80FF003C0000000 853
0 1 4 0 1 0 0 8 0 5 0 0 0 0 0 0 0 1 F F 350 112 04F5FFRE04F5FFRE04F5 1605 179 000000F60001F 78003F7 872 |J!
F F F F F F 0 0 F F F F 8 0 0 1 8 0 0 1 1533 113 F F RE 04 00000004 F5FF RE 1111 180 C007F7E00F81F0186618
3 0 0 1 8 0 0 1 8 0 0 1 8 0 0 1 F F F F 1026 114 04FSFFRE04F5FFRFF800 1605 181 34242C642426D824181F
8 1 0 1 3 1 0 1 8 1 0 1 8 1 0 1 8 1 0 1 650
6 1 3 | í
115
8 1 0 1 8 1 0 1 F F F F 3 0 0 1 8 0 0 1 1028 116
0000180000187C00007C
00187C0018380018003E
296 182 E7F80000001000081FE7 7 6 5 I I
183 F8102408142408142428 468 II 1
8 0 0 1 8 0 0 1 8 0 0 1 8 0 0 1 8 0 0 1 645 117 1838223C7C227EFE2260 184 1224C81124081024081F 406 ||
F F F F 8 1 0 1 8 1 0 1 8 1 0 1 8 1 0 1 1030 118 06226EF6146E06086EFE 904 185 FFF80000007FFFFE7FFF 1521 ||'
810181I»1O¿«J1810100FF 775 119 0860FE087EFE3E7E00FF 1189 186 FE7FFFFE001C00FF0038 1229 II
F F F F F F 0 0 0 0 8 0 0 1 0 0 0 0 8 0 1022 120 FFFFFFD55SS5SSFFFFFF 1998 187 1C03FFC038080FFFF010 1068 ||'
0 1 0 0 0 0 3 0 0 1 0 0 0 0 8 0 0 1 0 0 2S9 121 FF04000020FBFFFFDF52 1357 188 083FFFFC1008FFFFFF10 1383 ||
0 0 8 0 0 1 0 0 0 0 8 0 0 1 0 0 0 0 8 0 386 122 RRRR8C3000000R500000 618 189 17000000E837FFFFFFEC 1311 ||
0 1 F F F F F F F F 0 0 8 0 0 0 8 0 0 0 1277 123
8 0 0 0 8 0 0 0 8 0 0 0 8 0 0 0 8 0 0 0 640 124
0C31FFFFSR51FFFF8C31
C0038R51BFFD8C31BFFD
1489
1491
190 37FFFFFFEC37FFFFFFEC 2112 | |
8 0 0 0 8 0 0 0 8 0 0 0 8 0 0 0 8 0 F F 39S 191 37FFFFFFEC17FFFFFFE8 2076 ||
125 8R51BFFD8C31BFFD8R51 1515 192 00000000007FFFFFFFFE 1146 ||
F F F F F F 0 0 F F F F F F 8 0 1 8 0 1 1683 126 8FFD8C31C0038R51FFFF 1557 193 FFFFFFFFFFFFFFFFFFFF 2550 ||
8 0 1 8 0 1 8 0 1 8 0 1 8 0 1 8 0 1 8 0 587 127 8C31FFF88R51FFF08C31 159S 194 FFFFFFFFFFFFFFFFFFFF 2550 ||
1801801801FFFFFFFFFF 1453 128 FFFF8R51C0038C31BFFD 1557 2SS0 I g
F F 8 0 1 8 0 1 8 0 1 8 0 1 8 0 1 8 0 1 714 195 FFFFFFFFFFFFFFFFFFFF
129 8R51BFFD8C31BFFD8R51 1515 196 F3FFFFFFCFFFFFFFFFFF 2490 |l
8 0 1 8 0 1 8 0 1 8 0 1 8 0 1 8 0 1 F F 714 130
F F F F 0 0 F F F F F F F F F F F F F F 2295 131
BFFD8C31BFFD8R51BFFD
8C31C0038R51FFFF8C31
1740
1302
197
198
0C000000300C00000030
0C0000003000018003C0
120 25
F F F F F F 0 O 0 0 0 0 0 0 0 0 3 F F F 1083 132 FFFF8RF9FFFF9F00FFFF 384 2|
199 03C003C007E007E00180 981 2 6
133 FFFFFFFFC03403DFB5FB 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-
4210-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 á c u l o . Se
calera. la de la calculado- de A es uno, toma en A
4230: Se llama a la ruti- es que ha el valor de
00007FFE781E7BDE7R5E
7BDE700E700E700E700E
700E700EFFDEDEDEDEDE
DEDEDEDEDEDEDEDEDEDE
DEDEDEDEDED2D2D2D2CC
CCCCCCDEDEDEDEEDEDED
EDEDEDEDEDEDEDEDEDED
EDEDEDEDEDEDED2D2D2D
2DCCCCCCCCEDEDEDED00
FFFFFFFFFFFFFFFFFFFF
FFFF000000003EFBEFBC
3EF00FBC000FF0002F3F
FCF42EFEFF7401FCFF80 1803
3BFRFFDC3BF6FFDC03F7 1814
7FC02BF7BDD42BF7B1D4 4330-4340: Se a l m a c e -
03B7CDC03B3BEDDC3B5B
1689
1308 na la nue- LISTADO 5 (DATOS)
DDDC036BFDC02B73FBD4 1617 va forma y
1432
1430
DUMP: 4 5 0 0 0
se llama a
829 N . ° BYTES: 285
1293 BFORM.
7O0000FBEFFBEF000000 1105 4350-4370: Decrementa 04142F2806142F500S13 288
01C003E07R60FFF07FF0 1500 5F7804104FB007050F4F 596
01F007C0038001800180 829 la coorde- 3006135F60021B376007 451
03F002C8E6E4F9EEE7E6 18S1 1D4F88031E4FC0040521 590
814 nada X del
601 372805185F5003203748 461
muñeco ylo 07173F80040737R80208 465
C003E07R60FFF07FF001 1500 1R9F480317879806104F 684
F007C003800180018003 831 a l m a c e n a 3005 ID3F30051D2F3005 327
C00638E8E4F3CEE3E603 1626 135F80041B3778021R57 563
782 de nuevo en
E000E007600F600C600C B8070C127F20052R7F48 626
38381878780000000F0F 406 COORX. 0718R770030C7F680607 569
0F0F0F0F0F0F0F0F0F0F 150 7FR0071R94C8041E4F38 837
0F0F0FCFBF8FBFCF0F0F 1014 4 3 8 0 : Se l l a m a a REST 07293748022447700623 437
0F0F0F0F0F0F0F0F0F0F 150 376806063790021E4FR8 649
765 que imprime la
00FF000000FF000000FF 0709297F480518R77804 576
000000FF000000FF0000 510 pantalla que había 207F7006217FR0021787 757
00FF000000FF000000FF 76S C8071R57200712374005 501
000000FFFF0000FFFF00 1020 sido a l m a c e n a d a .
1275 135F68031C3788060613 471
00FFFF0000FFFF0000FF 4 3 9 0 : Se l l a m a a P C O O R . R77802127FR8030D3F30 729
FF0000FFFF0000FFFF00 1275 07114F68050C3760060B 392
00FFFF000083FFFF00D4. 1363 4FB0070R127F480218R7 682
FFFF00RR3FFF00CSSFFF 1545 780316877007127FR002 706
00R0R7FF00DS13FF00R2 1231 19373805193748061937 379
8BFF00C54SFF0082R1FF 1461 . 5806135F7804154FB807 623
FFC544FFFF8282FFFFD1 2009 1 0D3FB0030R0F97300629 526
14FFFFP2RRFFFFC555FF 1909 7F480218R778040C7F68 759
FFRRRRFFFFFFFFFFFF00 2125 1 0706 7 F 9 8 0 2 1 0 9 7 B 0 0 6 0 B 654
3E00005F0000BFO0005F 443
0000BF0000SF00008F00 477
00SF0000BF0000SF7FF8 756
BF7FFC5F7FFCBF7FFCSF 1709
7FFCBF8000SFRRR88FD5 1535
545FFFFCBFFFFC5FFFFC 1986
BFFFFC30003078007878 1154
00780000001C001C001C 204
001C001C001C00180018 132
00180018001800 17F817 366
671 4400-4410: Se h a c e u n a
F818001FF81818181818
18100810081008100810 136 pausa lla-
TO.J, n
1141 9040 FO5 '°
080001C003E07R60FFF0 1
7FF001F007C003800180 9050 K S F mando a
0180034.0034007600 760 una rutina
06600240024003C001C0
01800180038007800000 de la ROM
y c o n el va-
lor d e espe-
ra en BC.
4420: Se s a l t a a V O L V .
4450-4510: Se calculan
F O R M A y se las coorde-
incremento. nadas q u e
4290-4300: Si es mayor h a y a la de-
i l . ;;
que mueve recha del
se llama a muñeco.
CAMB1. BRJO 4520-4530: Se h a l l a el
4 3 1 0 - 4 3 2 0 : Si e s m e n o r OLTO color que
que 5 se hay en esas
llama a coordena-
CAMB1. das.
66 SFECIPJL.

4 5 6 0 - 4 5 7 0 : Si hay una contendrá M A a 5 y re- das.


puerta salta un 1 y se re- torna. 5 6 3 0 - 5 6 7 0 : Si es un te-
a PUEDE. torna. 5 1 6 0 - 5 2 1 0 : Halla la di- cho o un
4 8 6 0 - 4 8 7 0 : Pone SALTO rección don- suelo se re-
4 5 8 0 - 4 5 9 0 : Si h a y un
a 1. de se en- torna, ya
muro salta a
4 8 8 0 - 4 9 0 0 : Se carga en c u e n t r a el que el mu-
VOLV.
CONT el gráfico de la ñeco no de-
4 6 0 0 - 4 6 1 0 : Si no h a y número de forma del be caer.
una escale- veces q u e muñeco que 5 6 8 0 - 5 6 9 0 : Si no es el
ra salta a h a b r á que hay que im- color de una
CONT9. incrementar primir. escalera sal-
4 6 2 0 - 4 6 5 0 : Si ha choca- la c o o r d e - 5 2 2 0 - 5 2 7 0 : La almace- ta a
d o con una n a d a Y del na en las eti- CONT12.
escalera se muñeco. Se quetas que 5 7 0 0 - 5 7 3 0 : Si está to-
salta a retorna. utiliza la ru- cando la es-
VOLV. SUBIR: Aquí se llega si tina de im- c a l e r a re-
4 6 6 0 - 4 6 9 0 : Si el valor SALTO contiene 1. presión y re- torna.
de FORMA 4 9 3 0 - 4 9 5 0 : Decrementa torna. 5 7 4 0 - 5 9 4 0 : Realiza lo
es menor el contador 5 2 9 0 - 5 3 4 0 : Coloca las mismo pero
que 5 salta de veces coordena- para las
a CONTÓ. que hay que dos del mu- coordena-
4 7 0 0 - 4 7 1 0 : Se carga 1 hacer subir ñeco en las das que hay
en A y se al- al muñeco. etiquetas d e b a j o del
macena en 4 9 6 0 - 4 9 7 0 : Si no es 0 que utiliza la muñeco y a
FORMA. salta a rutina de su derecha.
4720: Se llama a BFORM. CONT7. impresión, 5 9 5 0 - 5 9 7 0 : Decrementa
4 9 8 0 - 4 9 9 0 : Si no es 0 se lo imprime y la c o o r d e -
4 7 3 0 - 4 7 5 0 : Se incremen- p o n e SAL- retorna. nada Y y se
ta la coor- T O a 0 y se 5 3 6 0 - 5 4 4 0 : 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 0 0 0 : Se vuelve a TE- atributos de pantalla,
4 7 6 0 : Imprime la panta- CLAS. una direc- llama A
lla. 5 0 1 0 - 5 0 3 0 : Incrementa ción del ar- PCOOR,
4770: Se llama a PCOOR. la c o o r d e - chivo de hace una
4 7 8 0 - 4 7 9 0 : Se r e a l i z a nada Y del pantalla. pausa y cie-
una pausa. muñeco y 5 4 6 0 - 5 5 8 0 : Calcula las rra el bucle
4 8 0 0 : Salto a VOLV. se almace- coordena- s o b r e BA-
4 8 3 0 - 4 8 5 0 : Aquí se lle- na. das que hay JAR
ga si se ha 5 0 4 0 : Recupera la pan- d e b a j o del 6 0 5 0 - 6 1 1 0 : Si está en la
p u l s a d o la talla. muñeco en pantalla 1,
tecla de sal- 5 0 5 0 : 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. 5 5 9 0 - 5 6 2 0 : Halla el co- 6 1 2 0 - 6 1 3 0 : Decrementa
taba saltan- 5 0 8 0 : Vuelve a teclas. lor de estas el n ú m e r o
d o , SALTO 5 1 2 0 - 5 1 4 0 : Pone FOR- coordena- de pantallas
y lo almace-
na en PANT.
6140-6160 A c t u a l i z a
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 Disminuye
el n ú m e r o
de pantalla
en 3.
11 ¡H»HfHliHIHif(» 518 DEFB 14,14,199,228 1818 OUI (254),A
6230-6270 Actualiza 21 528 DEFB 14,24,232,228 1828 LO (NODO),A
las coorde- 3 1 ;« R U T I N A DE APEADO 531 DEFB 14,24,25,221 1838 LO KL.SUEL

nadas del 41 548 DEFB 24,24,74,221 1848 LD DE,SUELO

muñeco y 51 551 DEF8 14,24,147,221 1858 CALL S I T U A


DEF8 32,14,194,221
salta a EMP. ¿1 548 1848 LD B,8
578 OEFB 14,24,5,222 1878 REP1 PUSH BC
6280-6350 Aumenta en 71 ORO 58888
81 ENT 58888 588 V E N I A N D E F B 24,24,54,222 1888 CALL 1MPRI
3 el número
98 598 OEFB 48,24,127,222 1898 POP 8C
de p a n t a -
111 JP SESU1R 488 DEFB 14,24,248,222 1188 LO A,(POSX)
lla, se ac- 111 418 T E J A D DEF8 32,14,41,223 1118 AOD A,32
tualizan las 128 IMPRI EQU 44888 428 OEFB 32,24,184,223 1128 LD (POSX),A
coordena- 131 PANT EQU 58888 438 DEFB 14,14,283,223 1138 DJN2 REPI
das del mu- 141 COOKY EOU 58881 448 DEFB 14,24,234,223 1148 LO HLJECH
ñeco y salta 151 C O O R X EQU 58882 458 DEFB 14,24,29,224 1158 LO DEJECHO
a EMP. 148 FOR» EQLL 588 8 3 448 P U E R T A D E F B 8,32,78,224 1148 CALL SITUA

6380-6420: Si está en la 171 SALTO EOU 58884 478 ESCAL DEFB 32,32,111,224 1178 CALL SUBI

pantalla 6 ó 188 con EOU 58885 488 DEFB 24,24,248,224 1188 LD A,175

9 salta a \n POSX EQU 23388 498 DEFB 14,24,57,225 1198 LO (POSY),A


2 8 1 POSY EQU 23381 788 OEFB 14,24,184,225 1288 CALL SUBI
CONT13.
218 N O D O EOU 23382 718 1218 JR coni
6430-6470 Aumenta el 228 A N C H O EOU 23383 728 D P A N DEFB 284,175 1228 SUBI LD 8,8
número de 231 ALTO EQU 23384 738 OEFB 221,175 1238 R E P 2 P U S H BC
pantalla, se 248 C O L O R EOU 23385 748 DEFB 242,175 1248 CALL IMPRI
actualizan 251 1NFER EQU 23384 758 OEFB 7,174 1258 POP BC
las coorde- 248 S U P E R EQU 23387 748 DEFB 4 8 , 1 7 4 1248 LO A.(POSX)
nadas del 271 778 DEF8 89,174 1278 ADO A,32
muñeco y se 288 T A B L A DEFB 14,24,44,215 788 DEF8 124,174 1281 LO (POSX),A
vuelve a 298 OEFB 14,24,113.215 798 DEFB 151,174 1298 DJN2 REP2
388 DEFB 14,24,142,215 888 DEFB 192,174
EMP. 1388 «ET
31 i P U E R T 2 O E F B 8 , 3 2 , 2 1 1 , 2 1 5 818 1318 comí LO A,(PANT)
6480-6500 Si el muñe- 328 E S C A L 2 D E F B 32,32,244,215 828 1328 CP 3
co está en 331 OEFB 24,24,117,214 838 S E G U I R L D A,2 1338 JR 2 ,MUR02
el piso de 348 DEFB 14,24,191,214 848 CALL 11481 1348 CP 4
abajo salta 351 TECHO OEFB 32,8,239,214 858 LD A,7 1358 JR 7.MUR02
a CONT5. 348 MURO DEFB 14,32,14,217 848 LD (23493),A 1348 CP 9

Actualiza 371 SUELO OEFB 32,14,81,217 878 LD (23424),A


6510-6570 DEFB 24,14,144,217
1378 JR 2.NUR02
388 888 LD A,94
las coorde- 1388 LO HL.PARI
398 OEFB 48,24,195,217 898 LD (COORX),A 1398 LO DE,PARED
nadas, recu- 488 DEFB 32,8,48.218 988 LO A,127 1488 CALL S I T U A
pera la pan- 411 PARED DEFB 8,32,93,218 918 LD (COORY).A 1418 LD HL.PUEL
talla, llama 428 DEFB 24,14,124,218 928 XOR A 1428 LD DE,PUERTA
a PCOOR y 438 OEFB 24,14,175,218 938 LD (SALTO),A 1438 CALL SITUA
se vuelve a 448 DEFB 24,14,224.218 948 INC A 1448 LO A,(PANT)
TECLAS. 458 DEFB 14,24,17,219 958 LO (F0MA),A 1458 CP 3
6580-6640 Actualiza 448 DEFB 14,24,44,219 948 LO A,8 1448 JR C,«NT2
las coorde- 478 DEFB 32,14,115,219 978 LD (PANT),A 1478 LO HL,PUE2
488 DEFB 24,14,188,219
nadas, lla- 988 1488 LO DE,PUERTA
498 DEFB 32,32,229,219 998 E M P CALL 3435
ma a REST, 1498 CALL SITUA
588 OEFB 24,32,182,228 1888 LD A,1 LD HL.PAR2
llama a 1588

PCOOR y
vuelve a TE-
CLAS.
1511 LD DE,PARED 2tl» JR TEJADO 251» CP 4 3(18 POP BC 3518 PUE4 DEFB 147,8,48
1321 CALL SITUA 2128 MUR LD A,(PMT) 252» JR 2,ESC 382» DJNZ OTRA 352» HUR2 DEFB 135,i,22
1531 JR CCMT2 2» 3» CP 2 253» CP 7 3(38 LO HL,14384 3538 MUR3 DEFB 43,248,22
1541 HUSO? LD HL.HUR3 2848 JR 2,TEJADO 254» JR Z.ESC 38 4 8 LD OE,35888 3548 PUE7 DEFB 95,248,48
1551 LD DE,MURO 2» 5» LD HL.HURI 255» JR CCNI4 3»5» LD BC.49I2 1558 HUR4 DEFB 147,248,22
1341 CALL SITUA 2848 LD DE,MURO 254» ESC LD HL.ESCI 384» LDIR 354» PUES DEFB 135,248,48
1571 LD A,(PAÑI) 2878 CALI SITUA 257» LO DE.ESCAL 3«7( JP SE6U2 357» PAR4 DEFB 135,248,4
1581 CP 3 288» LO HL.PAR5 258» CALL SITUA 3888 358» MUR5 DEFB 95,248,22
1591 JR 2,TRES 289» 259» CÜNT4 LO
LD DE,PARED A,(PANT) 3891 SITUA DI 359» SUEL DEFB 31,8,22
1488 LD HL.PUE7 2188 CALL SITUA 2411 CP 4 311» LO A,(OE) 348» TECH DEFB 113,8,48
1411 LD DE,PUERTA 211» LD HL.PUE5 241» JR Z.ESCB 311» LD (ANCHO),A 341» HUR4 DEFB 43,i,22
1421 CALL SITUA 212» LO DE.PUERT2 242» CP 9 312» D C DE 342»
1431 LD HL.PARI CALL SITUA
213» 243» JR Z.ESCB 313» LD A,(OE) 343» FIGURA DEF8 44,215
1441 LO DE,PARED 2148 LD A,(PANT) 244» JR C0NT5 314» LD (ALTO),A 3448 DEFB 113,215
1451 CALL SITUA 215» CP 1 245» ESC8 LD HL.ESC2 3158 INC DE 345» DEFB 44,215
1441 LD HL.PUE8 214» JR Z,TEJADO 244» LD DE.ESCAL2 314» LO A,(DE) 344» DEF8 142,215
1471 LD DE,PUERTA 217» LD HL.PAR4 247» CALL SITUA 317» LO (INFER),A 347» DEFB 1*4,225
1488 CALL SITUA 218» LD DE,PARED 248» CIXT5 LD A,(PANT) 3188 INC DE 348» DEFB 234,223
1491 LD HL.PAR4 219» CALL SITUA 249» CP 7 319» LD A,(OE) 349» DEFB 114,225
1711 LD DE,PARED 22»» LD HL.PUE4 2711 JR N2.SI6 3288 LO (SUPER),A 371» DEF8 29,224
1711 CALL SITUA 221» LD DE.PUER12 271» LO HL,MURA 3218 ID A,(HL) 3711
1721 LD HL.HUR4 222» CALL SITUA 272» LD DE,MURO 322» LD (POSY),A 372» SEGU2 LD A,14
1738 LD DE,MURO 223» LO HL.MUR2 273» CALL SITUA 323» INC HL 3731 LD (ANCHO) ,A
1741 CALL SITUA 224» LD DE.HURO 274» 324» LD A,(HL) 3741 LD A,24
1758 JR C0HT2 225» CALL SITUA 275» 325» LD <P0SX),A 375» LD (ALTO),A
1741 TRES LD HL.MUR3 224» TEJADO LD A.IPANT) 274» SI6 LO A,(PAÑI) 324» INC HL 374» LD A,7
1771 LD DE,MURO 227» CP 4 277» LD 8, A 327» LO A , ( X I ) 377» LD (COLOR), A
1781 CALL SITUA 228» JR NC,C(KT3 278» LO DE.DPAN-2 328» LD (COLOR),A 378» CALL BFORN
1798 C0NT2 LD A,(PANT) 229» LD DE .TEJAD 279» BUC1 INC DE 329» PUSH HL 379» CALL PCOOR
1811 CP 1 231» LD HL.TEJ 2888 INC DE 33»» CALL IMPR1 3888 CALL 1MPR1
1811 JR Z,MUR 231» CALL SITUA 2811 DJNZ BUC1 331» POP HL 381»
1828 CP 4
232» LD B.5 282» LO A,(DE) 332» El 382»
1838 JR Z.NUR
233» REP3 PUSH 8C 283» LD L,A 333» RET 383» TECLAS LD A.IFE
1848 CP 7 2848
234» LO B.8 INC DE 334» 3848 IN A,(»FE)
1854 JR 2,HUR
233» REP4 PUSH BC 285» LD A,(DE) 335» 385» BIT 1 ,A
1848 LD HL.PAR3
234» CALL 1HPRI 2848 LO H,A 334» PARI DEFB 95,248,4 384» JR 2,PULI2
1871 LD DE,PARED
237» POP BC 287» LD A,(HL) 337» PUEI DEFB 43,248,48 3878 LO A.IFE
1888 CALL SITUA 238» LD A,(POSO 288» LO B,A 338» PUE2 DEFB 135,248,48 388» IN A,(IFE)
1898 LD HL.PUE3 289» OTRA
239» ADO A,32 PUSH BC 339» PAP2 DEFB 147,248,4 389» BIT 2,A
1988 LO DE.PUERT2 298»
2488 LD (POSSO.A INC HL 348» PAR3 DEFB 95,8,4 3988 JR 2.PULOE
1911 CALL SITUA 291» LD
2418 DJN2 REP4 A,(HL) 341» PAR4 DEFB 147,1,4 3918 VOLV LD A.I7F
192» LD A,(PANT) 242» LO A,(POSY) 292» INC HL 342» PUE3 DEFB 43,1,48 392» IN A,(»FE)
193» CP 3 243» SUB 14 293» LD B.A 343» PUE4 DEFB 135,8,48 393» BIT Í,A
194» JR C.NUR 2448 LD (POSY),A 294» DE,TABtA-4
LD 344» ESCI DEFB 135,14,47 394» CALL Z.PSALT
1951 LD HL.PAR4 245» POP BC 295» BUC2 DE
INC 343» ESC 2 DEFB 43,288,47 395» LD A.IBF
1948 LD DE,PARED 244» DJN2 REP3 294» INC OE 344» VEN! DEFB 151,128,2 394» IN A,(»FE)
197» CALL SITUA 247» LD HL.VENT 297» INC DE 347» TEJ DEFB 175,»,2 397» BIT *,A
198» LD HL.PUE4 2488 LO DE, VOTAN 298» INC DE 348» HURI DEFB 95,8,22 398» RET Z
1998 LO DE.PUERT2 249» CALL SITUA 299» DJNZ BUC2 349» PAR 5 DEF8 43,1,4 399» LD A,(SALTO)
2)88 CALI SITUA 2588 CHÍT3 LO A.(PANT) 38 8 8 CALL SITUA 3588 PUE5 DEFB 43,8,48 4111 OR A
TÉCNICAS
DEL M A P E A D O O V

4818 CALL 81F30


4828 JR BAJAR
4838
48 4 8
4858 PUEJ2 LD A,(PANT)
4848 CP 1

FIG. 2 48 78
4888
JR
CP
2,CtHTI8
4
4898 JR Z,C0NTI8
7 , 224 , 3 , 192 , 1, 128 , 1, 128 , 1, 128 , 9 ,
144 , 8 9 , 1 5 3 , 2 1 7 , 1 5 5 , 2 1 7 , 1 5 5 , 2 1 7 , 1 4188 CP 7
55 , 2 1 1 , 203 , 205 , 179 , 66 , 66 , 60 , 60 , 0 4118 JR 2,C(WTI8
,0,0,0,0 4128 OEC A
4138 LD (PAWT),A
4148 LO A,232
4111 JP N2,SUBIR 4158 LO (COORX),A
4518 PUSH 8C 5818 CCNT7 LD A,(COORY) 5518 El
4148 JP EHP
4121 CW.L 2,BAJAR 4528 CALL 8874 5828 ADO A,2 5528 RET
4178 C0WT18 LD A,(COORY)
4838 JR TECLAS 4538 CALL BATRI 5(38 LO (COORY) ,A 5538
4188 CP 95
4148 4548 POP BC 5848 CALL REST 5548 BAJAR LD A,(COORX)
4198 JR c,canil
4858 4558 LO A,(DE) 5858 CALL PCOOR 5558 LD C,A
4288 LD A,(PANT)
4848 P U U 2 LO A,(COORX) 4541 CP 48 5848 LD BC,5 5548 LO A,(COORY)
4211 sue 3
4878 OEC A 4578 JP 2,PUEDE 5(78 CALL SIF3D 5578 SUB 24
4228 LD (PAWT),A
4888 LO C,A 4588 CP 22 5888 JP TECLAS 5588 LD 6,A
4238 LD A,55
4898 LO A , (COORY) 4598 JP 2,VOLV 5898 RET 5598 PUSH BC
4248 LD (COORY),A
4188 SU8 23 4488 CP 47 5188 5488 CALL 8874
4258 LD A,18
4118 LO B,A 4418 JR N2.C0NT9 5118 5418 CALL BATRI
4248 LO (COORX),A
4128 PUSH BC 4428 CALL 8918 5128 CAM8I LD A,5 5428 POP BC
4278 JP B P
4138 CALL 8874 4438 CAL 11733 5131 LO ( F O W A ) ,A 5438 LD A,(DE)
4288 CtKTll LO A,(PANT)
4148 CALL BATR1 4448 OR A 5148 RET 5448 CP 48
4298 AOO A,3
4158 POP BC 4458 JP N2.V0LV 5151 5458 RET 2
4388 LO (PANT) ,A
4148 LO A,(0£) 4448 C(NT9 LO A , (FORMA) 5148 B F O m LO A,(FORMA) 5448 CP 22
4318 LD A,18
4178 CP 48 4478 INC A 5178 LO HL,FIGURA-2 5478 RET 2
4328 LO (COORX),A
4188 JP 2.PUEI2 4488 CP 5 5188 LO B,A 5488 CP 47
4338 LD A,159
4198 CP 22 4498 JR C.CCNT4 5198 BUC3 INC HL 5498 JR N2,C0NTI2
4348 LO (COORY), A
4288
4218
JR
CP
2,VOLV
47
4788
4718 C0NT4
LD
LD
A,1
(FORMA),A
5288 INC HL 5788 CALL 8918
CALL 11733
4358 JP Bt
5211 DJN2 BUC3 5718
4348
4228 JR N2.C0NT8 4728 CALL 8 F 0 W 5228 LD A,(HL) 5721 OR A
4378
4238 CALL 8918 4738 LD A,(COORX) 5238 LO (INFER).A 5738 RET N2
4388 PUEDE LD A.IPANT)
4248 CALL 11733 4748 AOD A,2 5248 INC HL 5748 CCNTI2 LD A,(COORX)
4398 CP 4
4258 OR A 4758 LD (COORX) ,A 5238 LD A,(HL) 5758 AOO A,15
4488 JR 2,C0MTI3
4248 JR N2.VOLV 4748 CALL REST 5248 LO (SUPER).A 5748 LD C.A
4418 CP 9
4278 C0NT8 LO A.IFORW 4771 CALL PCOOR 5278 RET 5778 LD A,(COORY)
4428 JR 2,CCNTI3
4288 INC A 4788 LD 8C,5 5288 5788 SU8 24
4431 INC A
4298 CP 9 4798 CALL 81F3D 5298 PCOOR LO A,(COORX) 5771 LD 8,A
4448 LD (PANT) ,A
4388 CALL NC.CAMBI 4888 JP VOLV 5388 LO (POSX),A 5888 PUSH BC
4458 U> A,18
4318 CP 5 4818 5318 LD A,(COORY) 5818 CALL 8874
4448 LD (COORX),A
4328 CALL C.CAHBI 4828 5328 LO (POSY) ,A 5828 M L L BATRI
4471 JP BTP
4338 LO (FORMA) ,A 4838 PSALT LO A , (SALTO) 5338 CALL IHPR1 5838 POP BC
4488 CCMT13 LD A,(COORY)
4348 CALL BFORM 4848 OR A 5348 RET 5848 LD A,(OE)
4498 CP 95
4358 LO A,(COORX) 4858 RET N2 5358 5858 CP 48
4588 JR C.CCNT15
4348 SUS 2 4848 INC A 5348 BATRI LO A,H 5848 RET 2
4518 LD A,87
4378 LO (COORX),A 4878 LO (SALTO),A 5378 RUCA 5878 CP 22
4528 LD (COORY),A
4388 CALL REST 4888 LO A,5 5388 RRCA 5888 RET 2
4538 LO A , 222
4398 CALL PCOOR 4898 LO (CONT),A 5398 RRCA 5898 CP 47
4548 LO (COORX),A
4488 LO BC ,5 4988 RET 5488 ANO 3 5988 JR N2.CCNTI4
4558 CALL REST
4418 CALL 81F30 4918 5418 OR 858 5911 CALL 8918
4541 CALL PCOOR
4428 JR VOLV 4928 5428 LD D,A 5928 CALL 11733
4578 JP TECLAS
4438 4938 SU81R LO A,(CONT) 5438 LO E,L 5938 OR A
4588 CCNT15 LO A,127
4448 4948 OEC A 5448 RET 5948 RET N2
4598 LO (COORY),A
4458 PULOE LO A,(COORX) 4958 LD (CCNT),A 5458 5958 CCNT14 LO A,(COORY)
4448 AOD A,14 4948 OR A 5448 REST DI 5948 sue 2 4488
4411
LD
U)
A,222
(COORX),A
4478 LO C,A 4978 JR N2.C0NT7 5478 LD HL,35888 5978 LD (COORY),A
4428 CALL REST
4488 LD A,(COORY) 4988 LD (SALTO),A 5488 LD DE,14384 5988 CALL REST
4438 CALL PCOOR
4498 SUB 23 4998 CALL 8AJAR 5498 LD 8C.49I2 5998 CALL PCOOR
4448 JP TECLAS
4588 LD 8,A 5888 JP TECLAS 5588 LD1R 4888 LD 8C,5
gráficas
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.

H
emos eliminado
de esta g u í a
aquellos pro-
gramas que no
han superado el
nivel de calidad establecido.
Creemos que esta selección
beneficiará tanto a los mu-
chos asiduos a los p r o g r a -
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 o r d e n a d o r .
"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, ioystick o recu-
rrir al teclado. Además de
ser el único p r o g r a m a 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 f o r m a 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:
PRINT, permite sacar una
copio por impresora de la
pantalla, eligiendo el tama-
ño y justificando a nuestro
antojo a derecha o izquier-
da.
G U Í A DE
UTILIDADES 73

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 p a r a modifi-
car los atributos con los que
trabajemos, cambiando co-
lor de tinto, papel o b o r d e
y detallando brillo, flash, in-
verse, etc.
PAINT, podremos elegir
para dibujar entre lápiz,
spray y brocha, modifican-
d o la configuración dentro
de un submenú de dieciseis
especificaciones.
MISC, incluye un variado
submenú f o r m a d o por sien-
te opciones que permiten
desde b o r r a r la pantalla,
crear un rejilla de los atribu-
tos u observar la pantalla
completa.
U N D O , elimina la última
operación realizada en la
pantalla.
W I N 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.
M A G N I F Y , 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
t a m a ñ o y grosor de los ca-
racteres.
SHAPES, sirve para crear
figuras.
Como veis estamos ante
un p r o g r a m a muy comple-
to, de fácil manejo, que
cumple a la perfección su
objetivo prioritario, emular
a Miguel Ángel con un so-
fisticado método.
"MELBOURNE D R A W "
É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 joystick, 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, b o r r a
e invierte. A su vez el cursor
puede cuatriplicarse d a n d o
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 g a m a de colores y
atributos. Un p r o g r a m a de
fácil manejo, con grandes
posibilidades.
g u i a de - y e
UTILIDADES / D

"LEONARDO"
«Leonardo» es un progra-
ma de dibujo p a r a 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 ¡oystick 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 g r a n variedad de te-
clas a utilizar.
"THE ARTIST"
Este p r o g r a m a 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
p o d r á n t r a b a j a r 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 a b a r c a n 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
de antemano el t a m a ñ 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 b o r r a r la última pantalla c a r g a d a previa- cos que serán delimitados
o p e r a c i ó n r e a l i z a d a en mente, con la consiguiente gracias a una tecla. Podre-
pantalla e insertar texto. a m p l i a c i ó n o reducción. mos rellenar también las fi-
El segundo menú presen- También desde este menú guras con g r a n rapidez.
G U I A DE
UTILIDADES / /

nuestro trabajo. Al igual


'DRAWER' que la posibilidad de mane-
jar dos parrillas guía p a r a
Este programa no presen-
distinguir la posición de los
ta grandes diferencias con
caracteres. Presenta tam-
el resto de los programas
bién la opción de Fill, que
analizados manejados des-
permite rellenar eligiendo
de un menú en la parte in-
entre diez tramas diferen-
ferior de la pantalla. Como
tes.
os indicamos el manejo es
«Drawer» admite la posi-
semejante, un elevado nú-
bilidad de almacenar en
mero de teclas van d a n d o
memoria la pantalla sobre
paso a las diferentes opcio-
la que trabajamos. Un da-
nes de que consta.
to interesante que hace de
El cursor puede estar en «Drawer» un buen progra-
cuatro modos: pintar, inver- 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- cado, permitiendo realizar
te también realizar scrolls en nuevas experimentaciones
pantalla o introducir textos. en el campo del diseño.
La ampliación de una parte
de la pantalla es un detalle
a tener en cuenta, ya que
facilita considerablemente

Arriaza, hecho una


computadora. Dedicado en
cuerpo y alma al ordenador,
y a la informática. Haciendo
radio chip... estilo Cope.

) j J i !(> I n ) Y i K A

RADIO POPULAR
,. de chip a chip
"PAINT PLUS"
Todos los usuarios de
Spectrum interesados en al-
guna medida en los progra-
mas de diseño gráfico cono-
cerán el «Paint Box», uno de
los primeros programas que
aparecieron. «Paint Plus»,
basado en este p r o g r a m a ,
perfecciona muchas de las
opciones de su predecesor.
Presenta un menú con
cuatro opciones. El editor
de U D G 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 c a r g a r
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, O r -
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 a y u d a que
solucionará en parte el pro-
blema de memorizar un ele-
v a d o número de teclas. Sin
e m b a r g o 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.
G U Í A DE « a
UTILIDADES / V

"DYNAMIC GRAPHICS"
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 p r o g r a m a s se
complementan para dar co-
mo resultado una útil herra-
mienta de g r a n calidad. El
primer p r o g r a m a 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 p r o g r a m a
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.
caracter, utilizar un caracter Por una parte permitir des-
como un U D G , dividir la de el ordenador la creación
ventana o g r a b a r 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 hoce que mu-
el primer programa, grabar chos de los programas de
lo subrutina, autodestruir el dibujo admitan que a la ho-
p r o g r a m a , ir al Basic y ra de manejarse la sustitu-
crear la subrutina. ción del teclado o el joystick
El p r o g r a m a «Drawmas- por periféricos especialmen-
ter», especialmente creado te creados para hacer más
para dibujar, permite que el c ó m o d o su uso. Sin duda
cursor esté en cuatro modos son los ratones y los lápices
diferentes: d r a w , erase, ópticos los que se ajustan a
over y trans. Podremos de- este cometido.
limitar el número de pixels A M X M O U S E 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 iconos de las opciones
con tinta una parte del dibu- del software que lo admi-
jo y c a r g a r 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- p a r a su utilización.
ma de dibujo es algo limita- Los lápices ópticos permi-
do, c o m p a r a d o con otros ten trabajar sobre la panta-
programas del mercado, sin lla en lugar del papel. Des-
e m b a r g o combinados for- tacan el lápiz óptico Inves-
man una interesante utili- trónica y lápiz óptico DK
d a d gráfica. Tronics.
GET, p a r a leer el teclado
"BETA BASIC" sin usar ENTER, de forma si-
milar a INKEY $.
«Beta Basic» es una am-
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
p r o g r a m a r y trabajar con el o comandos introducidos
o r d e n a d o r . Añade 26 nue- carácter a carácter.
vas instrucciones y diez fun- O N , permite hacer un
ciones. Además se introdu- G O T O o G O S U B a un nú-
cen mejoras en algunos co- mero de línea particular,
mandos y se han a ñ a d i d o dependiendo de una situa-
algunos rasgos como cursor ción d a d a .
parpadeante y un break pa- PLOT, p a r a trazar una
ra C ó d i g o M á q u i n a . 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 p r o g r a m a .
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 p r o g r a m a 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 n u m e r a c i ó n
automática de líneas.
BREAK, especial p a r a
C/M.
CLOCK, controla la ope-
ración de un reloj de 24 ho-
ras con a l a r m a .
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
lineas de un bloque delimi-
tado del p r o g r a m a .
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 d o b l e
poke, utilizando la dirección
especificada y la siguiente.
EDIT, permite editar un
número de línea.
G U I A DE o m
UTILIDADES O I

ñas informativas, etc. Tam- "GENS Y M O N S "


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 p a r a todos aquellos
gráficos y atributos ha sido que se inicien en el mundo
potenciado con comandos de la p r o g r a m a c i ó n .
p a r a alterar los valores de «Gens» es un poderoso
los atributos y almacenar o ensamblador del Z80, el mi-
modificar bloques de gráfi- croprocesador del Spec-
cos. También permite el lla- trum; su principal caracterís-
mamiento a subrutinas pre- tica es la diferencia de ma-
viamente definidas. «Mega- nejo respecto a otros en-
basic» p r o p o r c i o n a , al mis- sambladores disponibles,
mo tiempo, dos modos dis- que le convierten en un pro-
tintos p a r a producir soni- g r a m a profesional por su
dos. extensión y sus amplias po-
«Megabasic» c o n t i e n e , sibilidades.
además de la ampliación, Un ensamblador, básica-
un segundo p r o g r a m a de- mente es una herramienta
n o m i n a d o «Megaspectrum que permite p r o g r a m a r en
Sprites» especialmente dise- C ó d i g o M á q u i n a de forma
ñado para el tratamiento de muy sencilla, trabajando de
gráficos en pantalla. Po- m o d o complementario con
d r á n definirse formas, colo- el relocalizable desensam-
res, desplazamientos y velo- blador Mons. Sustituye el
cidad de animación, visua- árido sistema binario, por
"MEGABASIC" 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 p r o g r a m a
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 p r o g r a m a r . «Me- vez almacenados los datos
gabasic», como bien indica de unos 20 K de memoria.
su nombre, incorpora al Ba-
sic del Spectrum nuevos co-
mandos que se introducirán
tecleando directamente el
nombre; diferencia respec-
to a otros programas que
contenían en las teclas ori-
ginarias los nuevos coman-
dos.
«Megabasic» tiene un sis-
tema ae edición muy com-
pleto que incluye la posibi-
lidad de desplazar el cursor
horizontal y verticalmente,
b o r r a r líneas, copiar algu-
nas para transpasarlas a la
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, b o r r a d o ,
scrolls con diferentes venta-
G U Í A DE
UTILIDADES O l

objeto. El «Gens» es tam- Muchas son las opciones


bién totalmente reubicable, de este ensamblador, pero
es decir, podemos Hacer c o m o analizar detenida-
que funcione instalándolo mente cada una de ellas su-
en cualquier zona de la me- pondría escribir de nuevo
moria; esta es la ventaja un libro de instrucciones, co-
que le sitúa por encima de mo el que a c o m p a ñ a a am- * H I S O F T G E N S 3 M f i S S E M B L E R l
otros ensambladores, ya bos programas, nos limita Z X S P E C T R U M
que evita la posibilidad de remos a señalar que algu
que coincidan en una misma ñas de ellas son: ensambla o i. l f i s h i s r e s í c u s d
dirección el programa sobre je rápido, producir un lista Pass i e r r o r s ae
el que trabajamos y el en- do de la tabla de símbolos,
samblador o el desensam- no generar ningún c ó d i g o P a s s s e r r o r s : 0 3
blador. objeto y dirigir el listado del
El «Gens» se caracteriza ensamblador a la impreso- T a fc> i . e used: 13 fi-orn
por la rapidez en la ejecu-
ción, y añade otras venta-
jas, como incluir un ensam-
b l a d o condicional, muchos
comandos del ensamblador
y una tabla de símbolos bi-
naria.

CODE
Todos los usuarios intere-
sados en la p r o g r a m a c i ó n
en C ó d i g o Máquina cono-
cerán sin duda el popular
paquete monitor/ensambla-
d o r Editas, d e la casa
MACHINE
Gremlins. Este paquete ha
sido actualizado p o r esta
misma compañía y ha d a d o
lugar a la nueva versión
3.1, que recibe el nombre
globar de «The Code M a -
chine», pudiendo ser a d a p -
tados ambos p r o g r a m a s a
casi todos los modelos de in-
terface de impresora.
El editor e n s a m b l a d o r
trabaja en modo 40 colum-
nas divididos en distintos
campos. El primero permite
introducir los comandos y permitirá estudiar y trabajar Dos herramientas impres-
renumerar las líneas; el se- mandos de edición más uti-
sobre nuestras propias ruti- cindibles para adentrarnos
gundo para la utilización de lizados son: LIST, EDIT,
ñas reubicarlas o analizar en el mundo de a progra-
etiquetas; el tercero destina- A U T O , N E W , RETURN,
las rutinas de otros p r o g r a - moción de uno f o r m a mu-
d o a los nemónicos y el últi- R E N U M y DELETE.
mas cho más asequible.
mo para operandos. Los co- El p r o g r a m a monitor nos
875 PTS. CADA UNO, NUEVO PRECIO DINAMIC

DINAMIC SOFTWARE. Plua de España,18.


Torre de Madrid. 29-1,280$,Madrid.
Pedidos contra reembolso (de luntSV.iiernes.
de 10 a 2 \ deiaS horas): Telélo n o f f l w 7887.
Tiendas y Distribuidores: Teléfono 191)4473410.

También podría gustarte