Skip to content

DEZ80: Nivel 2

Juan Gonzalez-Gomez edited this page Oct 4, 2021 · 151 revisions

Índice

Introducción

Nivel 2: Práctica

Vídeo 2.P01: Introducción al nivel 2

Click to see the youtube video

Introducción a todo lo que se va a ver en este segundo nivel

Vídeo 2.P02: Anima tus píxeles

Click to see the youtube video

Este vídeo consta de 3 actividades (Retos)

Sólo se pueden usar estas instrucciones:

Instrucción Código máquina Tamaño Descripción
LD A, ## 3E ## 2 bytes Cargar un valor en el registro A
LD (##%%),A 32 %% ## 3 bytes Almacenar A en la posición de memoria indicada
LD HL, ##%% 21 %% ## 3 bytes Cargar un valor en el registro HL
LD (##%%),HL 22 %% ## 3 bytes Almacenar HL en las posiciones #### y #### + 1
JR ## 18 FE 2 bytes Bucle infinito
HALT 76 1 byte Parar el procesador hasta que llegue interrupción
JP ##%% C3 %% ## 3 bytes Saltar a la dirección ## %%

El resto de instrucciones del Z80 se puede consultar en esta tabla: https://clrhome.org/table/#

  • Reto 1.1: Animar un pixel
  • Reto 1.2: Barra de progreso
  • Reto 1.3: Animar un sprite

Los retos se resuelven en el siguiente apartado, después de que Fran resuelva el Reto 1.1

Vídeo 2.P03: EJEMPLO: Reto 1.1: Animación de un pixel

Click to see the youtube video

Reto 1.1: Animar un pixel

  • Descripción: Animar un pixel que se mueva por las 4 primeras posiciones. Repetición infinita. Mínimo 0.1 segundos por fotograma
  • Este reto se resuelve en el Vídeo 2.P03

Para hacer la animación del pixel tenemos que guardar en la dirección C000 los bytes 0x88, 0x44, 0x22 y 0x11 que se corresponden con el pixel rojo en su recorrido hacia la derecha

La frecuencia de refresco del monitor es de 50Hz. Es decir, que se pinta un fotograma nuevo cada 20ms. Esto significa que para que se vea bien el movimiento hay que pintar el pixel y esperar al menos 20ms para que se pinte. Luego se guarda el nuevo valor de la animación y se espera otros 20ms...

El algoritmo sería algo como esto:

  • Pintar pixel (88)
  • wait 20ms (tiempo que tarda en pintarse el fotograma)
  • Pintar pixel (44)
  • wait 20ms
  • Pintar pixel (22)
  • wait 20ms
  • Pintar pixel (11)

Como restricción del reto me dicen que cada fotograma tiene que estar al menos 0.1 segundos = 100ms = 100.000µs

Es decir, que el algoritmo a implementar debe ser este:

  • Pixel 1
  • wait 100ms
  • Pixel 2
  • wait 100ms
  • Pixel 3
  • wait 100ms
  • Pixel 4
  • wait 100ms
  • Salta al principio

La instrucción halt espera a que llegue una interrupción. Tarda aproximadamente 3ms (más o menos). Por ello para lograr un retraso de 100ms hay que ejecutar al menos 30 instrucciones halt

  • Código máquina: 3E 88 32 00 C0 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 3E 44 32 00 C0 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 3E 22 32 00 C0 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 3E 11 32 00 C0 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 C3 00 40

  • Programa desensamblado:

ld a,#88
ld (#c000),A
halt
...
halt

ld a,#44
ld (#c000),A
halt
...
halt

ld a,#22
ld (#c000),A
halt
...
halt

ld a,#11
ld (#c000),A
halt
...
halt

JP #4000
  • Resultado:

Reto 1.2: Barra de progreso

  • Descripción: Animación de una barra de probreso de 4 pixeles (4x1). Se mueve de izquierda a derecha y tiene que sacar todos los colores
  • Bonus: Adicto al pixel: Si la barra de progreso mide más de 4 pixeles

La secuencia utilizada es la siguiente: primero una barra cyan, despues una amarilla, despues una rojo y por último la azul (fondo) para volver al estado inicial. La barra de progreso de cada color tiene 4 fotogramas

Fotograma Cyan Amarillo rojo Fondo
1 08 87 8F 77
2 0C C3 CF 33
3 0E E1 EF 11
4 0F F0 FF 00
  • Código máquina: 3E 08 32 00 C0 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 3E 0C 32 00 C0 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 3E 0E 32 00 C0 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 3E 0F 32 00 C0 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 3E 87 32 00 C0 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 3E C3 32 00 C0 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 3E E1 32 00 C0 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 3E F0 32 00 C0 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 3E 8F 32 00 C0 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 3E CF 32 00 C0 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 3E EF 32 00 C0 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 3E FF 32 00 C0 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 3E 77 32 00 C0 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 3E 33 32 00 C0 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 3E 11 32 00 C0 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 3E 00 32 00 C0 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 C3 00 40

  • Programa desensamblado:

(Cada halt son en realidad 30 halts)

LD A,#08
LD (#C000),A
HALT
LD A,#0C
LD (#C000),A
HALT
LD A,#0E
LD (#C000),A
HALT
LD A,#0F
LD (#C000),A
HALT

LD A,#87
LD (#C000),A
HALT
LD A,#CE
LD (#C000),A
HALT
LD A,#E1
LD (#C000),A
HALT
LD A,#F0
LD (#C000),A
HALT

LD A,#8F
LD (#C000),A
HALT
LD A,#CF
LD (#C000),A
HALT
LD A,#EF
LD (#C000),A
HALT
LD A,#FF
LD (#C000),A
HALT

LD A,#77
LD (#C000),A
HALT
LD A,#33
LD (#C000),A
HALT
LD A,#11
LD (#C000),A
HALT
LD A,#00
LD (#C000),A
HALT

JP #4000
  • Resultado:

  • Bus: Barra de progreso de 8 pixeles de largo

En este caso hay que hacer dos escrituras, en las posiciones C000 y C0001. Ahora cada barra de progreso tendrá 8 fotogramas (el doble)

Fotograma Cyan Amarillo rojo Fondo
1 08 00 87 0F F8 F0 77 FF
2 0C 00 C3 0F FC F0 33 FF
3 0E 00 E1 0F FE F0 11 FF
4 0F 00 F0 0F FF F0 00 FF
5 0F 08 F0 87 FF F8 00 77
6 0F 0C F0 C3 FF FC 00 33
7 0F 0E F0 E1 FF FE 00 11
8 0F 0F F0 F0 FF FF 00 00
  • Código máquina: 21 08 00 22 00 C0 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 21 0C 00 22 00 C0 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 21 0E 00 22 00 C0 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 21 0F 00 22 00 C0 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 21 0F 08 22 00 C0 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 21 0F 0C 22 00 C0 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 21 0F 0E 22 00 C0 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 21 0F 0F 22 00 C0 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 21 87 0F 22 00 C0 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 21 C3 0F 22 00 C0 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 21 E1 0F 22 00 C0 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 21 F0 0F 22 00 C0 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 21 F0 87 22 00 C0 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 21 F0 C3 22 00 C0 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 21 F0 E1 22 00 C0 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 21 F0 F0 22 00 C0 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 21 F8 F0 22 00 C0 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 21 FC F0 22 00 C0 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 21 FE F0 22 00 C0 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 21 FF F0 22 00 C0 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 21 FF F8 22 00 C0 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 21 FF FC 22 00 C0 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 21 FF FE 22 00 C0 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 21 FF FF 22 00 C0 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 21 77 FF 22 00 C0 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 21 33 FF 22 00 C0 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 21 11 FF 22 00 C0 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 21 00 FF 22 00 C0 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 21 00 77 22 00 C0 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 21 00 33 22 00 C0 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 21 00 11 22 00 C0 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 21 00 00 22 00 C0 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 C3 00 40

  • Programa desensamblado:

LD HL,#0008
LD (#C000),HL
HALT
LD HL,#000C
LD (#C000),HL
HALT
LD HL,#000E
LD (#C000),HL
HALT
LD HL,#000F
LD (#C000),HL
HALT
LD HL,#080F
LD (#C000),HL
HALT
LD HL,#0C0F
LD (#C000),HL
HALT
LD HL,#0E0F
LD (#C000),HL
HALT
LD HL,#0F0F
LD (#C000),HL
HALT

LD HL,#0F87
LD (#C000),HL
HALT
LD HL,#0FCE
LD (#C000),HL
HALT
LD HL,#0FE1
LD (#C000),HL
HALT
LD HL,#0FF0
LD (#C000),HL
HALT
LD HL,#87F0
LD (#C000),HL
HALT
LD HL,#C3F0
LD (#C000),HL
HALT
LD HL,#E1F0
LD (#C000),HL
HALT
LD HL,#F0F0
LD (#C000),HL
HALT

LD HL,#F0F8
LD (#C000),HL
HALT
LD HL,#F0FC
LD (#C000),HL
HALT
LD HL,#F0FE
LD (#C000),HL
HALT
LD HL,#F0FF
LD (#C000),HL
HALT
LD HL,#F8FF
LD (#C000),HL
HALT
LD HL,#FCFF
LD (#C000),HL
HALT
LD HL,#FEFF
LD (#C000),HL
HALT
LD HL,#FFFF
LD (#C000),HL
HALT

LD HL,#FF77
LD (#C000),HL
HALT
LD HL,#FF33
LD (#C000),HL
HALT
LD HL,#FF11
LD (#C000),HL
HALT
LD HL,#FF00
LD (#C000),HL
HALT
LD HL,#7700
LD (#C000),HL
HALT
LD HL,#3300
LD (#C000),HL
HALT
LD HL,#1100
LD (#C000),HL
HALT
LD HL,#0000
LD (#C000),HL
HALT

  • Resultado:

Reto 1.3: Animar un sprite

  • Descripción: Animar un sprite de tamaño 4x4 como mínimo.
  • Bonus: Fotogramaster: Animación con más de 4 fotogramas
  • Bonus: Cambiazos: Sólo escribir en la memoria de vídeo los bytes que cambien en cada fotograma

El sprite es un pulsador de 4x5 pixeles, que se guarda en las direcciones C000, C800 D000, D800 y E000. Estos son los fotogramas:

Fotograma 1:

Dir Colores Valor
C000 AAAA F0
C800 FCCF 06
D000 FCCF 06
D800 ACCA 96
E000 RCCR 9F
  • Código máquina: 3E F0 32 00 C0 3E 06 32 00 C8 3E 06 32 00 D0 00 3E 96 32 00 D8 3E 9F 32 00 E0 C3 00 40

Fotograma 2 y 4:

Dir Colores Valor
C000 0000 00
C800 AAAA F0
D000 FCCF 06
D800 ACCA 96
E000 RCCR 9F
  • Código máquina: 3E 00 32 00 C0 3E F0 32 00 C8 3E 06 32 00 D0 00 3E 96 32 00 D8 3E 9F 32 00 E0 C3 00 40

** Fotograma 3**:

Dir Colores Valor
C000 0000 00
C800 0000 00
D000 AAAA F0
D800 ACCA 96
E000 RCCR 9F
  • Código máquina: 3E 00 32 00 C0 3E 00 32 00 C8 3E F0 32 00 D0 00 3E 96 32 00 D8 3E 9F 32 00 E0 C3 00 40

  • El código máquina completo es: 3E F0 32 00 C0 3E 06 32 00 C8 3E 06 32 00 D0 00 3E 96 32 00 D8 3E 9F 32 00 E0 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 3E 00 32 00 C0 3E F0 32 00 C8 3E 06 32 00 D0 00 3E 96 32 00 D8 3E 9F 32 00 E0 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 3E 00 32 00 C0 3E 00 32 00 C8 3E F0 32 00 D0 00 3E 96 32 00 D8 3E 9F 32 00 E0 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 3E 00 32 00 C0 3E F0 32 00 C8 3E 06 32 00 D0 00 3E 96 32 00 D8 3E 9F 32 00 E0 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 C3 00 40

  • Programa desensamblado:

LD A,#F0
LD (#C000),A
LD A,#06
LD (#C800),A
LD A,#06
LD (#D000),A
LD A,#96
LD (#D800),A
LD A,#9F
LD (#E000),A
HALT
...
LD A,#00
LD (#C000),A
LD A,#F0
LD (#C800),A
LD A,#06
LD (#D000),A
LD A,#96
LD (#D800),A
LD A,#9F
LD (#E000),A
HALT
...

LD A,#00
LD (#C000),A
LD A,#00
LD (#C800),A
LD A,#F0
LD (#D000),A
LD A,#96
LD (#D800),A
LD A,#9F
LD (#E000),A
HALT
...

LD A,#00
LD (#C000),A
LD A,#F0
LD (#C800),A
LD A,#06
LD (#D000),A
LD A,#96
LD (#D800),A
LD A,#9F
LD (#E000),A
HALT
...
JP #4000
  • Resultado:

  • Tamaño del programa: 226 Bytes

Bonus: Cambiazo

  • Primero se pinta la parte estática del fotograma y en cada fotograma sólo la dinámica

  • En el sprite generado, la parte estática son 2 bytes y la dinámica 3

  • Se ha actualizado el sprite

  • Código máquina: 3E FF 32 00 D8 3E FF 32 00 E0 3E F0 32 00 C0 3E 06 32 00 C8 3E 06 32 00 D0 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 3E 00 32 00 C0 3E F0 32 00 C8 3E 06 32 00 D0 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 3E 00 32 00 C0 3E 00 32 00 C8 3E F0 32 00 D0 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 3E 00 32 00 C0 3E F0 32 00 C8 3E 06 32 00 D0 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 C3 00 40

  • Programa desensamblado:

LD A,#FF
LD (#D800),A
LD A,#FF
LD (#E000),A

LD A,#F0
LD (#C000),A
LD A,#06
LD (#C800),A
LD A,#06
LD (#D000),A
HALT
...

LD A,#00
LD (#C000),A
LD A,#F0
LD (#C800),A
LD A,#06
LD (#D000),A
HALT
...

LD A,#00
LD (#C000),A
LD A,#00
LD (#C800),A
LD A,#F0
LD (#D000),A
HALT
...

LD A,#00
LD (#C000),A
LD A,#F0
LD (#C800),A
LD A,#06
LD (#D000),A
HALT
...

JP #4000
  • Tamaño: 193 bytes
  • Resultado:

Vídeo 2.P04: Reto: Ponlos en movimiento

Click to see the youtube video

Reto 2.1: Disparo láser

  • Descripción: Movimiento de 4 en 4 píxeles. Al menos 5 fotogramas. 0.3 segundos por fotograma
  • Bonus: Super16Bits: Usar las instrucciones 21 y 22 para pintar en pantalla

Hay 5 fotogramas, que se mueven de 4 en 4 píxeles. Por tanto la bala se tendrá que escribir en las posiciones: C000, C001, C002, C003 y C004. Cada fotograma debe permanecer en pantalla 0.3 segundos. Por tanto habrá que utilizar unas 100 instrucciones halt

Para pintar el fotograma hay que borrar primero el anterior y luego pintar el nuevo.

  • Código máquina: 3E 00 32 04 C0 3E FF 32 00 C0 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 3E 00 32 00 C0 3E FF 32 01 C0 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 3E 00 32 01 C0 3E FF 32 02 C0 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 3E 00 32 02 C0 3E FF 32 03 C0 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 3E 00 32 03 C0 3E FF 32 04 C0 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 C3 00 40

  • Tamaño del programa: 240 bytes

  • Programa desensamblado:

LD A,#00
LD (#C004),A
LD A,#FF
LD (#C000),A
HALT
...
LD A,#00
LD (#C000),A
LD A,#FF
LD(#C001),A
HALT
...
LD A,#00
LD (#C001),A
LD A,#FF
LD(#C002),A
HALT
...
LD A,#00
LD (#C002),A
LD A,#FF
LD(#C003),A
HALT
...
LD A,#00
LD (#C003),A
LD A,#FF
LD(#C004),A
HALT
...
JP #4000
  • Resultado:

Bounus: Super16Bits

  • Utilizar las instrucciones 21 y 22 (ld hl,#valor, ld (#dir),hl)

  • Código máquina: 21 00 00 22 04 C0 21 FF 00 22 00 C0 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 21 00 00 22 00 C0 21 FF 00 22 01 C0 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 21 00 00 22 01 C0 21 FF 00 22 02 C0 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 21 00 00 22 02 C0 21 FF 00 22 03 C0 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 21 00 00 22 03 C0 21 FF 00 22 04 C0 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 C3 00 40

  • Programa desensamblado:

LD HL,#0000
LD (#C004),HL
LD HL,#00FF
LD (#C000),HL
HALT
...
LD HL,#0000
LD (#C000),HL
LD HL,#00FF
LD (#C001),HL
HALT
...
LD HL,#0000
LD (#C001),HL
LD HL,#00FF
LD (#C002),HL
HALT
...
LD HL,#0000
LD (#C002),HL
LD HL,#00FF
LD (#C003),HL
HALT
...
LD HL,#0000
LD (#C003),HL
LD HL,#00FF
LD (#C004),HL
HALT
...
JP #4000

Reto 2.2: Trampa

  • Descripción: La parte izquierda de la trama (estática) es de 4x2 y la parte derecha (dinámica) de 16x2. Se usan 3 fotogramas de subida y 3 de bajada
  • Bonus: Potenciador: Hacer la trampa más grande (más ancha o más larga)
  • Bonus: Optimizador: Cada fotograma sólo puede ocupar 32 bytes. El tamaño total debe ser menor de 32 * fotogramas

Cada fotograma tiene 5 bytes por file. La primera columna contiene los bytes estáticos, que no cambian

Fotograma Dir +00 +01 +02 +03 +04
1 C000 FD 00 00 00 FC
1 C800 FB 00 00 00 F8
2 C000 FD 00 00 FC F0
2 C800 FB 00 00 F8 F0
3 C000 FD 00 FC F0 F0
3 C800 FB 00 F8 F0 F0
4 C000 FD FC F0 F0 F0
4 C800 FB F8 F0 F0 F0
5 C000 FD 00 FC F0 F0
5 C800 FB 00 F8 F0 F0
6 C000 FD 00 00 FC F0
6 C800 FB 00 00 F8 F0
  • Código máquina: 3E FD 32 00 C0 3E FB 32 00 C8 21 00 00 22 01 C0 21 00 FC 22 03 C0 21 00 00 22 01 C8 21 00 F8 22 03 C8 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 21 00 00 22 01 C0 21 FC F0 22 03 C0 21 00 00 22 01 C8 21 F8 F0 22 03 C8 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 21 00 FC 22 01 C0 21 F0 F0 22 03 C0 21 00 F8 22 01 C8 21 F0 F0 22 03 C8 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 21 FC F0 22 01 C0 21 F0 F0 22 03 C0 21 F8 F0 22 01 C8 21 F0 F0 22 03 C8 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 21 00 FC 22 01 C0 21 F0 F0 22 03 C0 21 00 F8 22 01 C8 21 F0 F0 22 03 C8 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 21 00 00 22 01 C0 21 FC F0 22 03 C0 21 00 00 22 01 C8 21 F8 F0 22 03 C8 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 76 C3 00 40

  • Tamaño del programa:: 702

  • Programa desensamblado:

LD A,#FD
LD (#C000),A
LD A,#FB
LD (#C800),A

LD HL, #0000
LD (#C001),HL
LD HL, #FC00
LD (#C003),HL
LD HL, #0000
LD (#C801),HL
LD HL, #F800
LD (#C803),HL
HALT
...

LD HL, #0000
LD (#C001),HL
LD HL, #F0FC
LD (#C003),HL
LD HL, #0000
LD (#C801),HL
LD HL, #F0F8
LD (#C803),HL
HALT
...

LD HL, #FC00
LD (#C001),HL
LD HL, #F0FC
LD (#C003),HL
LD HL, #F8F0
LD (#C801),HL
LD HL, #F0F0
LD (#C803),HL
HALT
...

LD HL, #F0FC
LD (#C001),HL
LD HL, #F0F0
LD (#C003),HL
LD HL, #F0F8
LD (#C801),HL
LD HL, #F0F0
LD (#C803),HL
HALT
...

LD HL, #FCF0
LD (#C001),HL
LD HL, #F0F0
LD (#C003),HL
LD HL, #F8F0
LD (#C801),HL
LD HL, #F0F0
LD (#C803),HL
HALT
...

LD HL, #0000
LD (#C001),HL
LD HL, #F0FC
LD (#C003),HL
LD HL, #0000
LD (#C801),HL
LD HL, #F0F8
LD (#C803),HL
HALT
...
  • Resultado:

Bonus: Optimizador

  • Dibujar la parte estática: 3E FD 32 00 C0 3E FB 32 00 C8

  • Fotograma 1: 21 00 00 22 01 C0 21 00 FC 22 03 C0 21 00 00 22 01 C8 21 00 F8 22 03 C8 3E 64 76 3D 20 FC

  • Fotograma 2: 21 00 00 22 01 C0 21 00 FC 22 03 C0 21 00 00 22 01 C8 21 00 F8 22 03 C8 3E 64 76 3D 20 FC

  • Fotograma 3: 21 00 FC 22 01 C0 21 F0 F0 22 03 C0 21 00 F8 22 01 C8 21 F0 F0 22 03 C8 3E 64 76 3D 20 FC

  • Fotograma 4: 21 FC F0 22 01 C0 21 F0 F0 22 03 C0 21 F8 F0 22 01 C8 21 F0 F0 22 03 C8 3E 64 76 3D 20 FC

  • Fotograma 5: 21 00 FC 22 01 C0 21 F0 F0 22 03 C0 21 00 F8 22 01 C8 21 F0 F0 22 03 C8 3E 64 76 3D 20 FC

  • Fotograma 6: 21 00 00 22 01 C0 21 FC F0 22 03 C0 21 00 00 22 01 C8 21 F8 F0 22 03 C8 3E 64 76 3D 20 FC

  • Codigo máquina: 3E FD 32 00 C0 3E FB 32 00 C8 21 00 00 22 01 C0 21 00 FC 22 03 C0 21 00 00 22 01 C8 21 00 F8 22 03 C8 3E 64 76 3D 20 FC 21 00 00 22 01 C0 21 00 FC 22 03 C0 21 00 00 22 01 C8 21 00 F8 22 03 C8 3E 64 76 3D 20 FC 21 00 FC 22 01 C0 21 F0 F0 22 03 C0 21 00 F8 22 01 C8 21 F0 F0 22 03 C8 3E 64 76 3D 20 FC 21 FC F0 22 01 C0 21 F0 F0 22 03 C0 21 F8 F0 22 01 C8 21 F0 F0 22 03 C8 3E 64 76 3D 20 FC 21 00 FC 22 01 C0 21 F0 F0 22 03 C0 21 00 F8 22 01 C8 21 F0 F0 22 03 C8 3E 64 76 3D 20 FC 21 00 00 22 01 C0 21 FC F0 22 03 C0 21 00 00 22 01 C8 21 F8 F0 22 03 C8 3E 64 76 3D 20 FC C3 00 40

  • Tamaño: 192 bytes

  • Programa desensamblado:

LD A,#FD
LD (#C000),A
LD A,#FB
LD (#C800),A

LD HL, #0000
LD (#C001),HL
LD HL, #FC00
LD (#C003),HL
LD HL, #0000
LD (#C801),HL
LD HL, #F800
LD (#C803),HL
LD A,#100
HALT
DEC A
JR nz,#FC

LD HL, #0000
LD (#C001),HL
LD HL, #F0FC
LD (#C003),HL
LD HL, #0000
LD (#C801),HL
LD HL, #F0F8
LD (#C803),HL
LD A,#100
HALT
DEC A
JR nz,#FC

LD HL, #FC00
LD (#C001),HL
LD HL, #F0FC
LD (#C003),HL
LD HL, #F8F0
LD (#C801),HL
LD HL, #F0F0
LD (#C803),HL
LD A,#100
HALT
DEC A
JR nz,#FC

LD HL, #F0FC
LD (#C001),HL
LD HL, #F0F0
LD (#C003),HL
LD HL, #F0F8
LD (#C801),HL
LD HL, #F0F0
LD (#C803),HL
LD A,#100
HALT
DEC A
JR nz,#FC

LD HL, #FCF0
LD (#C001),HL
LD HL, #F0F0
LD (#C003),HL
LD HL, #F8F0
LD (#C801),HL
LD HL, #F0F0
LD (#C803),HL
LD A,#100
HALT
DEC A
JR nz,#FC

LD HL, #0000
LD (#C001),HL
LD HL, #F0FC
LD (#C003),HL
LD HL, #0000
LD (#C801),HL
LD HL, #F0F8
LD (#C803),HL
LD A,#100
HALT
DEC A
JR nz,#FC
JP #4000

Reto 2.3: Pelota con gravedad

  • Descripción: Animación de una pelota de 4x4 píxeles. Se mueve 4 píxeles hacia abajo y rebota volviendo a su posición original. Debe botar encima de la letra "A". La instrucción 21 sólo se puede usar 1 vez en todo el programa. Hay que usar las instrucciones 36 y 26.

  • Bonus: Acelerado: La pelota debe variar su velocidad: más rápido cerca del suelo y más lento en la parte superior

El sprite de la pelota es el siguiente:

Linea Valor
1 66
2 F9
3 F9
4 66

En el primer experimento lo dibujamos en la dirección C000:

  • Experimento 1: 21 00 C0 36 66 26 C8 36 F9 26 D0 36 F9 26 D8 36 66 18 FE
LD HL,#C000
LD (HL),66

LD H,#C8
LD (HL),F9

LD H,#D0
LD (HL),F9

LD H,#D8
LD (HL),66

Para dibujar la bola encima de la A hay que usar la dirección C002. Sólo hay que cambiar la primera instrucción:

  • Experimento 2: Bola encima de la A: 21 02 00 26 C0 36 66 26 C8 36 F9 26 D0 36 F9 26 D8 36 66 18 FE
LD HL,#0002

LD H,#C0
LD (HL),66

LD H,#C8
LD (HL),F9

LD H,#D0
LD (HL),F9

LD H,#D8
LD (HL),66

LD H,#E0
LD (HL),00
LD H,#E8
LD (HL),00
LD H,#F0
LD (HL),00
LD H,#F8
LD (HL),00
  • Resultado:

Para hacer la animación completa hay que que pintar fotogramas de 4x8 píxeles. En esta tabla se muestran todos:

Línea Fot-1 Fot-2 Fot-3 Fot-4 Fot-5 Fot-6 Fot-7 Fot-8
1 66 00 00 00 00 =Fot-4 =Fot-3 =Fot2
2 F9 66 00 00 00
3 F9 F9 66 00 00
4 66 F9 F9 66 00
5 00 66 F9 F9 66
6 00 00 66 F9 F9
7 00 00 00 66 F9
8 00 00 00 00 66
  • Fotograma 1:
21 02 00
26 C0 36 66 
26 C8 36 F9
26 D0 36 F9
26 D8 36 66
26 E0 36 00
26 E8 36 00
26 F0 36 00
26 F8 36 00
  • Cod. Fot1: 21 02 00 26 C0 36 66 26 C8 36 F9 26 D0 36 F9 26 D8 36 66 26 E0 36 00 26 E8 36 00 26 F0 36 00 26 F8 36 00

  • Fotograma 2:

26 C0 36 00 
26 C8 36 66
26 D0 36 F9
26 D8 36 F9
26 E0 36 66
26 E8 36 00
26 F0 36 00
26 F8 36 00
  • Cod. Fot2: 26 C0 36 00 26 C8 36 66 26 D0 36 F9 26 D8 36 F9 26 E0 36 66 26 E8 36 00 26 F0 36 00 26 F8 36 00

  • Fotograma 3:

26 C0 36 00 
26 C8 36 00
26 D0 36 66
26 D8 36 F9
26 E0 36 F9
26 E8 36 66
26 F0 36 00
26 F8 36 00
  • Cod. Fot3: 26 C0 36 00 26 C8 36 00 26 D0 36 66 26 D8 36 F9 26 E0 36 F9 26 E8 36 66 26 F0 36 00 26 F8 36 00

  • Fotograma 4:

26 C0 36 00 
26 C8 36 00
26 D0 36 00
26 D8 36 66
26 E0 36 F9
26 E8 36 F9
26 F0 36 66
26 F8 36 00
  • Cod. Fot4: 26 C0 36 00 26 C8 36 00 26 D0 36 00 26 D8 36 66 26 E0 36 F9 26 E8 36 F9 26 F0 36 66 26 F8 36 00

  • Fotograma 5:

26 C0 36 00 
26 C8 36 00
26 D0 36 00
26 D8 36 00
26 E0 36 66
26 E8 36 F9
26 F0 36 F9
26 F8 36 66
  • Cod. Fot5: 26 C0 36 00 26 C8 36 00 26 D0 36 00 26 D8 36 00 26 E0 36 66 26 E8 36 F9 26 F0 36 F9 26 F8 36 66

  • Rutina de Wait: 3E F0 76 3D 20 FC

  • Código final: 21 02 00 26 C0 36 66 26 C8 36 F9 26 D0 36 F9 26 D8 36 66 26 E0 36 00 26 E8 36 00 26 F0 36 00 26 F8 36 00 3E F0 76 3D 20 FC 26 C0 36 00 26 C8 36 66 26 D0 36 F9 26 D8 36 F9 26 E0 36 66 26 E8 36 00 26 F0 36 00 26 F8 36 00 3E F0 76 3D 20 FC 26 C0 36 00 26 C8 36 00 26 D0 36 66 26 D8 36 F9 26 E0 36 F9 26 E8 36 66 26 F0 36 00 26 F8 36 00 3E F0 76 3D 20 FC 26 C0 36 00 26 C8 36 00 26 D0 36 00 26 D8 36 66 26 E0 36 F9 26 E8 36 F9 26 F0 36 66 26 F8 36 00 3E F0 76 3D 20 FC 26 C0 36 00 26 C8 36 00 26 D0 36 00 26 D8 36 00 26 E0 36 66 26 E8 36 F9 26 F0 36 F9 26 F8 36 66 3E F0 76 3D 20 FC 26 C0 36 00 26 C8 36 00 26 D0 36 00 26 D8 36 66 26 E0 36 F9 26 E8 36 F9 26 F0 36 66 26 F8 36 00 3E F0 76 3D 20 FC 26 C0 36 00 26 C8 36 00 26 D0 36 66 26 D8 36 F9 26 E0 36 F9 26 E8 36 66 26 F0 36 00 26 F8 36 00 3E F0 76 3D 20 FC 26 C0 36 00 26 C8 36 66 26 D0 36 F9 26 D8 36 F9 26 E0 36 66 26 E8 36 00 26 F0 36 00 26 F8 36 00 3E F0 76 3D 20 FC

  • Programa desensamblado:

LD HL,#0002
LD H,#C0
LD (HL),#66
LD H,#C8
LD (HL),#F9
LD H,#D0
LD (HL),#F9
LD H,#D8
LD (HL),#66
LD H,#E0
LD (HL),#00
LD H,#E8
LD (HL),#00
LD H,#F0
LD (HL),#00
LD H,#F8
LD (HL),#00
LD A,#F0
HALT
DEC A
JR NZ,#FC

LD H,#C0
LD (HL),#00
LD H,#C8
LD (HL),#66
LD H,#D0
LD (HL),#F9
LD H,#D8
LD (HL),#F9
LD H,#E0
LD (HL),#66
LD H,#E8
LD (HL),#00
LD H,#F0
LD (HL),#00
LD H,#F8
LD (HL),#00
LD A,#F0
HALT
DEC A
JR NZ,#FC

LD H,#C0
LD (HL),#00
LD H,#C8
LD (HL),#00
LD H,#D0
LD (HL),#66
LD H,#D8
LD (HL),#F9
LD H,#E0
LD (HL),#F9
LD H,#E8
LD (HL),#66
LD H,#F0
LD (HL),#00
LD H,#F8
LD (HL),#00
LD A,#F0
HALT
DEC A
JR NZ,#FC

LD H,#C0
LD (HL),#00
LD H,#C8
LD (HL),#00
LD H,#D0
LD (HL),#00
LD H,#D8
LD (HL),#66
LD H,#E0
LD (HL),#F9
LD H,#E8
LD (HL),#F9
LD H,#F0
LD (HL),#66
LD H,#F8
LD (HL),#00
LD A,#F0
HALT
DEC A
JR NZ,#FC

LD H,#C0
LD (HL),#00
LD H,#C8
LD (HL),#00
LD H,#D0
LD (HL),#00
LD H,#D8
LD (HL),#00
LD H,#E0
LD (HL),#66
LD H,#E8
LD (HL),#F9
LD H,#F0
LD (HL),#F9
LD H,#F8
LD (HL),#66
LD A,#F0
HALT
DEC A
JR NZ,#FC

LD H,#C0
LD (HL),#00
LD H,#C8
LD (HL),#00
LD H,#D0
LD (HL),#00
LD H,#D8
LD (HL),#66
LD H,#E0
LD (HL),#F9
LD H,#E8
LD (HL),#F9
LD H,#F0
LD (HL),#66
LD H,#F8
LD (HL),#00
LD A,#F0
HALT
DEC A
JR NZ,#FC

LD H,#C0
LD (HL),#00
LD H,#C8
LD (HL),#00
LD H,#D0
LD (HL),#66
LD H,#D8
LD (HL),#F9
LD H,#E0
LD (HL),#F9
LD H,#E8
LD (HL),#66
LD H,#F0
LD (HL),#00
LD H,#F8
LD (HL),#00
LD A,#F0
HALT
DEC A
JR NZ,#FC

LD H,#C0
LD (HL),#00
LD H,#C8
LD (HL),#66
LD H,#D0
LD (HL),#F9
LD H,#D8
LD (HL),#F9
LD H,#E0
LD (HL),#66
LD H,#E8
LD (HL),#00
LD H,#F0
LD (HL),#00
LD H,#F8
LD (HL),#00
LD A,#F0
HALT
DEC A
JR NZ,#FC

JP #4000
  • Resultado:

Bonus: Gravedad

En vez de tiempo constante entre fotogramas, voy a hacer que el tiempo de espera entre fotogramas sea variable, hasta que la pelota llegue al suelo. Voy a probar con estos tiempos: 240, 120, 60, 30, 15, que en hexadecimal es: F0, 78, 3C, 1E, 0F

  • Código final: 21 02 00 26 C0 36 66 26 C8 36 F9 26 D0 36 F9 26 D8 36 66 26 E0 36 00 26 E8 36 00 26 F0 36 00 26 F8 36 00 3E F0 76 3D 20 FC 26 C0 36 00 26 C8 36 66 26 D0 36 F9 26 D8 36 F9 26 E0 36 66 26 E8 36 00 26 F0 36 00 26 F8 36 00 3E 78 76 3D 20 FC 26 C0 36 00 26 C8 36 00 26 D0 36 66 26 D8 36 F9 26 E0 36 F9 26 E8 36 66 26 F0 36 00 26 F8 36 00 3E 3C 76 3D 20 FC 26 C0 36 00 26 C8 36 00 26 D0 36 00 26 D8 36 66 26 E0 36 F9 26 E8 36 F9 26 F0 36 66 26 F8 36 00 3E 1E 76 3D 20 FC 26 C0 36 00 26 C8 36 00 26 D0 36 00 26 D8 36 00 26 E0 36 66 26 E8 36 F9 26 F0 36 F9 26 F8 36 66 3E 0F 76 3D 20 FC 26 C0 36 00 26 C8 36 00 26 D0 36 00 26 D8 36 66 26 E0 36 F9 26 E8 36 F9 26 F0 36 66 26 F8 36 00 3E 1E 76 3D 20 FC 26 C0 36 00 26 C8 36 00 26 D0 36 66 26 D8 36 F9 26 E0 36 F9 26 E8 36 66 26 F0 36 00 26 F8 36 00 3E 3C 76 3D 20 FC 26 C0 36 00 26 C8 36 66 26 D0 36 F9 26 D8 36 F9 26 E0 36 66 26 E8 36 00 26 F0 36 00 26 F8 36 00 3E 78 76 3D 20 FC C3 00 40

  • Resultado:

Voy a probar con estos valores de tiempos: 80, 40, 20, 10, 08

  • Código final: 21 02 00 26 C0 36 66 26 C8 36 F9 26 D0 36 F9 26 D8 36 66 26 E0 36 00 26 E8 36 00 26 F0 36 00 26 F8 36 00 3E 80 76 3D 20 FC 26 C0 36 00 26 C8 36 66 26 D0 36 F9 26 D8 36 F9 26 E0 36 66 26 E8 36 00 26 F0 36 00 26 F8 36 00 3E 40 76 3D 20 FC 26 C0 36 00 26 C8 36 00 26 D0 36 66 26 D8 36 F9 26 E0 36 F9 26 E8 36 66 26 F0 36 00 26 F8 36 00 3E 20 76 3D 20 FC 26 C0 36 00 26 C8 36 00 26 D0 36 00 26 D8 36 66 26 E0 36 F9 26 E8 36 F9 26 F0 36 66 26 F8 36 00 3E 10 76 3D 20 FC 26 C0 36 00 26 C8 36 00 26 D0 36 00 26 D8 36 00 26 E0 36 66 26 E8 36 F9 26 F0 36 F9 26 F8 36 66 3E 08 76 3D 20 FC 26 C0 36 00 26 C8 36 00 26 D0 36 00 26 D8 36 66 26 E0 36 F9 26 E8 36 F9 26 F0 36 66 26 F8 36 00 3E 10 76 3D 20 FC 26 C0 36 00 26 C8 36 00 26 D0 36 66 26 D8 36 F9 26 E0 36 F9 26 E8 36 66 26 F0 36 00 26 F8 36 00 3E 20 76 3D 20 FC 26 C0 36 00 26 C8 36 66 26 D0 36 F9 26 D8 36 F9 26 E0 36 66 26 E8 36 00 26 F0 36 00 26 F8 36 00 3E 40 76 3D 20 FC C3 00 40

Vídeo 2.P05: Práctica: Repeticiones

Click to see the youtube video

En el vídeo se muestra un ejemplo de repetición: Hacer un parpadeo de una barra de 4 píxeles. Se hace que parpadee 20 veces y que termine. Se pide como ejercicio que se haga el programa pero ocupando menos de 32 bytes, utilizando repeticiones

Hay dos bucles anidados. Uno para contar las 20 repeticiones del LED (0x14), y otro interno para generar las pausas con Halt. El valor inicial para estas pausas será de 64 (0x40)

  • Código máquina: 3E 14 21 FF FF 22 00 C0 06 40 76 05 20 FC 21 00 00 22 00 C0 06 40 76 05 20 FC 3D 20 E5 18 FE

  • Código desensamblado:

LD A, #14
LD HL, #FFFF
LD (#C000),HL

LD B,#40
HALT
DEC B
JR nz,FC

LD HL,#0000
LD (#C000),HL

LD B,#40
HALT
DEC B
JR nz,FC

DEC A
JR nz,-29
JR FE
  • Tamaño del programa: 31 bytes
  • Resultado: Al cabo de 20 repeticiones se termina (aunque el gif animado luego vuelve a empezar)

Vídeo 2.P06: Reto: Dibuja y anima a lo grande

Click to see the youtube video

Reto 3.1: Suelo de 4x4

  • Descripción: Dibujar un suelo de 4x4 píxeles que sea "Tileable". Utilizar la instrucción 36 (LD (HL),**)

De momento voy a usar el mismo suelo que propone Fran

Linea Dir Valor
1 C000 FF
2 C800 A5
3 D000 5A
4 D800 FF
  • Código máquina: 21 00 C0 36 FF 26 C8 36 A5 26 D0 36 5A 26 D8 36 FF 18 FE

  • Código desensamblado:

LD HL,#C000
LD (HL),#FF
LD H,#C8
LD (HL),#A5
LD H,#D0
LD (HL),#5A
LD H,#D8
LD (HL),#FF
JR FE
  • Resultado:

Reto 3.2: Suelo de 4x320

  • Descripción: Dibujar un suelo de 4x320 pixeles utilizando la baldosa del reto 3.1. Se debe colocar mediante la repetición de esa baldosa. El código debe ser único

  • Bonus: Minimalista30. El código debe ocupar menos de 30 bytes

  • Bonus: Profundidades. Que el suelo ocupe más de 4 píxeles de alto

Modificamos el código anterior para que se escriba en H el valor C0. Sólo con cambiar el valor de L se conseguirá pintar baldosas por la derecha. Usamos el acumulador para contar 80 caracteres (0x50). Habrá que hacer 80 repeticiones para pintar el suelo

  • Código máquina: 21 A0 00 3E 50 26 C0 36 FF 26 C8 36 A5 26 D0 36 5A 26 D8 36 FF 23 3D 20 EC 18 FE
  • Tamaño: 26 bytes (Bonus Minimalista30 conseguido)
LD HL,#00A0
LD A,#50

LD H,#C0
LD (HL),#FF
LD H,#C8
LD (HL),#A5
LD H,#D0
LD (HL),#5A
LD H,#D8
LD (HL),#FF

INC HL
DEC A
JR nz, EC
JR FE
  • Resultado:

Reto 3.3: Suelo y cielo

  • Descripción: Dibujar un cielo a partir de un tile de 16x4 pixeles. Se debe utilizar el código de los retos anteriores
  • Bonus:Pixelador: Hacer que el cielo tenga más de 4 pixeles de ancho
Linea Dir Valor
1 C0 F0
2 C8 5A
3 D0 A5
4 D8 1E
5 E0 0F
6 E8 0A
7 F0 05
8 F8 08

El cielo lo empezamos a dibujar después de terminar con el suelo, pero el proceso de dibujo es el mismo:

  • Código máquina: 21 00 00 3E 50 26 C0 36 F0 26 C8 36 5A 26 D0 36 A5 26 D8 36 1E 26 E0 36 0F 26 E8 36 0A 26 F0 36 05 26 F8 36 08 23 3D 20 DC 18 FE

  • Programa desensamblado:

LD HL,#0000
LD A,#50

LD H,#C0
LD (HL),#F0
LD H,#C8
LD (HL),#5A
LD H,#D0
LD (HL),#A5
LD H,#D8
LD (HL),#1E
LD H,#E0
LD (HL),#0F
LD H,#E8
LD (HL),#0A
LD H,#F0
LD (HL),#05
LD H,#F8
LD (HL),#08

INC HL
DEC A
JR nz,DC
  • Resultado (parcial):

Ahora hacemos lo mismo pero borrando la parte central. Se puede hacer pintando 00s a tope o bien con bucles anidados...

  • **Código máquina: 21 50 00 3E 50 26 C0 36 00 26 C8 36 00 26 D0 36 00 26 D8 36 00 26 E0 36 00 26 E8 36 00 26 F0 36 00 26 F8 36 00 23 3D 20 DC 18 FE

  • Programa desensamblado:

LD HL,#0050
LD A,#50

LD H,#C0
LD (HL),#00
LD H,#C8
LD (HL),#00
LD H,#D0
LD (HL),#00
LD H,#D8
LD (HL),#00
LD H,#E0
LD (HL),#00
LD H,#E8
LD (HL),#00
LD H,#F0
LD (HL),#00
LD H,#F8
LD (HL),#00

INC HL
DEC A
JR nz,DC

  • Resultado:

Hacemos ahora el programa completo. Primero se pinta el cielo, luego la parte central y por último el suelo

  • Cielo: 21 00 00 3E 50 26 C0 36 F0 26 C8 36 5A 26 D0 36 A5 26 D8 36 1E 26 E0 36 0F 26 E8 36 0A 26 F0 36 05 26 F8 36 08 23 3D 20 DC

  • Cielo 2: 3E 50 26 C0 36 00 26 C8 36 00 26 D0 36 00 26 D8 36 00 26 E0 36 00 26 E8 36 00 26 F0 36 00 26 F8 36 00 23 3D 20 DC

  • Suelo: 21 A0 00 3E 50 26 C0 36 FF 26 C8 36 A5 26 D0 36 5A 26 D8 36 FF 23 3D 20 EC 18 FE

  • Código máquina final: 21 00 00 3E 50 26 C0 36 F0 26 C8 36 5A 26 D0 36 A5 26 D8 36 1E 26 E0 36 0F 26 E8 36 0A 26 F0 36 05 26 F8 36 08 23 3D 20 DC 3E 50 26 C0 36 00 26 C8 36 00 26 D0 36 00 26 D8 36 00 26 E0 36 00 26 E8 36 00 26 F0 36 00 26 F8 36 00 23 3D 20 DC 21 A0 00 3E 50 26 C0 36 FF 26 C8 36 A5 26 D0 36 5A 26 D8 36 FF 23 3D 20 EC 18 FE

Reto 3.4: Disparo + explosión

  • Descripción: Dibujar el personaje de 8x8 que dispara una bala que se mueve hasta el final de la pantalla y al final hay una animación de explosión

  • Bonus: Animador: Animar el personaje que dispara. Poner un enemigo que se muere

Al terminar de dibujar el escenario, pasamos a dibujar el personaje:

Linea Dir Valores
1 C0 70 80
2 C8 D5 00
3 D0 77 08
4 D8 05 7F
5 E0 06 04
6 E8 70 80
7 F0 40 80
8 F8 60 60
  • Código máquina: 21 70 80 22 50 C0 21 D5 00 22 50 C8 21 77 08 22 50 D0 21 05 7F 22 50 D8 21 06 04 22 50 E0 21 70 80 22 50 E8 21 40 80 22 50 F0 21 60 60 22 50 F8

  • Programa desensamblado:

LD HL, #8070
LD (#C050),HL
LD HL, #00D5
LD (#C850),HL
LD HL, #
LD (#D050),HL
LD HL, #
LD (#D850),HL
LD HL, #8070
LD (#E050),HL
LD HL, #
LD (#E8050),HL
LD HL, #
LD (#F050),HL
LD HL, #
LD (#F850),HL
  • Siguiente parte: Animación de la bala: Hay que hacer que vaya desde la dirección D852 Hasta el final (78 posiciones). Hay que hacer un bucle para que se repita 79 veces el movimiento de la bala

  • Código máquina: 21 52 D8 3E 4E 36 F0 06 10 76 05 20 FC 36 00 23 3D 20 F2

  • Programa desensamblado:

LD HL,#D852
LD A,#4E

LD (HL),#F0

LD B,#80
HALT
DEC B
JR nz,FC

LD (HL),#00
INC HL
DEC A
JR nz,F2
  • Ultima parte: Animación de la explosión

Hay que imprimir en la última posición los 6 sprites de la animación

Dir Valor1 Valor2 Valor3 Valor4 Valor5 Valor6
D0 00 99 98 81 08 00
D8 66 64 42 04 00 00
E0 66 62 24 02 00 00
E8 00 99 91 18 01 00
  • Código máquina: 21 9F D0 36 00 26 D8 36 66 26 E0 36 66 26 E8 36 00 3E 40 76 3D 20 FC 21 9F D0 36 99 26 D8 36 64 26 E0 36 62 26 E8 36 99 3E 40 76 3D 20 FC 21 9F D0 36 98 26 D8 36 42 26 E0 36 24 26 E8 36 91 3E 40 76 3D 20 FC 21 9F D0 36 81 26 D8 36 04 26 E0 36 02 26 E8 36 18 3E 40 76 3D 20 FC 21 9F D0 36 08 26 D8 36 00 26 E0 36 00 26 E8 36 01 3E 40 76 3D 20 FC 21 9F D0 36 00 26 D8 36 00 26 E0 36 00 26 E8 36 00 3E 40 76 3D 20 FC 18 FE

  • Programa desensamblado:

LD HL,#D09F
LD (HL), #00
LD H,#D8
LD (HL), #66
LD H,#E0
LD (HL), #66
LD H,#E8
LD (HL), #00

LD A,#40
HALT
DEC A
JR nz,FC

LD HL,#D09F
LD (HL), #99
LD H,#D8
LD (HL), #64
LD H,#E0
LD (HL), #62
LD H,#E8
LD (HL), #99

LD A,#40
HALT
DEC A
JR nz,FC

LD HL,#D09F
LD (HL), #98
LD H,#D8
LD (HL), #42
LD H,#E0
LD (HL), #24
LD H,#E8
LD (HL), #91

LD A,#40
HALT
DEC A
JR nz,FC

LD HL,#D09F
LD (HL), #81
LD H,#D8
LD (HL), #04
LD H,#E0
LD (HL), #02
LD H,#E8
LD (HL), #18

LD A,#40
HALT
DEC A
JR nz,FC

LD HL,#D09F
LD (HL), #08
LD H,#D8
LD (HL), #00
LD H,#E0
LD (HL), #00
LD H,#E8
LD (HL), #01

LD A,#40
HALT
DEC A
JR nz,FC

LD HL,#D09F
LD (HL), #00
LD H,#D8
LD (HL), #00
LD H,#E0
LD (HL), #00
LD H,#E8
LD (HL), #00
JP #4000
  • Código máquina Final: 21 00 00 3E 50 26 C0 36 F0 26 C8 36 5A 26 D0 36 A5 26 D8 36 1E 26 E0 36 0F 26 E8 36 0A 26 F0 36 05 26 F8 36 08 23 3D 20 DC 3E 50 26 C0 36 00 26 C8 36 00 26 D0 36 00 26 D8 36 00 26 E0 36 00 26 E8 36 00 26 F0 36 00 26 F8 36 00 23 3D 20 DC 21 A0 00 3E 50 26 C0 36 FF 26 C8 36 A5 26 D0 36 5A 26 D8 36 FF 23 3D 20 EC 21 70 80 22 50 C0 21 D5 00 22 50 C8 21 77 08 22 50 D0 21 05 7F 22 50 D8 21 06 04 22 50 E0 21 70 80 22 50 E8 21 40 80 22 50 F0 21 60 60 22 50 F8 21 52 D8 3E 4E 36 F0 06 10 76 05 20 FC 36 00 23 3D 20 F2 21 9F D0 36 00 26 D8 36 66 26 E0 36 66 26 E8 36 00 3E 40 76 3D 20 FC 21 9F D0 36 99 26 D8 36 64 26 E0 36 62 26 E8 36 99 3E 40 76 3D 20 FC 21 9F D0 36 98 26 D8 36 42 26 E0 36 24 26 E8 36 91 3E 40 76 3D 20 FC 21 9F D0 36 81 26 D8 36 04 26 E0 36 02 26 E8 36 18 3E 40 76 3D 20 FC 21 9F D0 36 08 26 D8 36 00 26 E0 36 00 26 E8 36 01 3E 40 76 3D 20 FC 21 9F D0 36 00 26 D8 36 00 26 E0 36 00 26 E8 36 00 3E 40 76 3D 20 FC C3 00 40

  • Resultado:

Video 2.P07: Práctica: Posiciones variables

Click to see the youtube video

  • Ejemplo: Movimiento de la barra del Arkanoid. Dirección: C730. Animar el movimiento para que vaya a la derecha y luego a la izquierda

  • Dibujo del arcanoid completo en la posición C730. Hay que dibujarlo por columnas (de 4 bits). La primera columna y la última contendrá todo ceros para borrar el anterior arkanoid que puede haber

21 30 C7 26 C7 36 00 26 CF 36 00 26 D7 36 00 26 DF 36 00 23 26 C7 36 77 26 CF 36 FF 26 D7 36 FF 26 DF 36 77 23 26 C7 36 0F 26 CF 36 0F 26 D7 36 0F 26 DF 36 0F 23 26 C7 36 0F 26 CF 36 0F 26 D7 36 0F 26 DF 36 0F 23 26 C7 36 EE 26 CF 36 FF 26 D7 36 FF 26 DF 36 EE 23 26 C7 36 00 26 CF 36 00 26 D7 36 00 26 DF 36 00

LD HL, #C730
LD H,#C7
LD (HL), #00
LD H,#CF
LD (HL), #00
LD H,#D7
LD (HL), #00
LD H,#DF
LD (HL), #00

INC HL
LD H,#C7
LD (HL), #77
LD H,#CF
LD (HL), #FF
LD H,#D7
LD (HL), #FF
LD H,#DF
LD (HL), #77

INC HL
LD H,#C7
LD (HL), #77
LD H,#CF
LD (HL), #FF
LD H,#D7
LD (HL), #FF
LD H,#DF
LD (HL), #77

INC HL
LD H,#C7
LD (HL), #EE
LD H,#CF
LD (HL), #FF
LD H,#D7
LD (HL), #FF
LD H,#DF
LD (HL), #EE

INC HL
LD H,#C7
LD (HL), #00
LD H,#CF
LD (HL), #00
LD H,#D7
LD (HL), #00
LD H,#DF
LD (HL), #00

JR FE

Ahora lo metemos en un bucle, incrementando HL. Usamos un contador inicializado a 34 (0x22)

LD A, #4C
;-- Pintar arkanoid (codigo anterior)
DEC L
LD B, #08
HALT
DEC B
JR NZ, FC

DEC A
INC HL
JP NZ,#4005 (JR NZ,8C)
  • Código máquina: 3E 4C 21 30 C7 26 C7 36 00 26 CF 36 00 26 D7 36 00 26 DF 36 00 23 26 C7 36 77 26 CF 36 FF 26 D7 36 FF 26 DF 36 77 23 26 C7 36 0F 26 CF 36 0F 26 D7 36 0F 26 DF 36 0F 23 26 C7 36 0F 26 CF 36 0F 26 D7 36 0F 26 DF 36 0F 23 26 C7 36 EE 26 CF 36 FF 26 D7 36 FF 26 DF 36 EE 23 26 C7 36 00 26 CF 36 00 26 D7 36 00 26 DF 36 00 2D 2D 2D 2D 2D 06 08 76 05 20 FC 3D 23 20 8C 3E 4C 26 C7 36 00 26 CF 36 00 26 D7 36 00 26 DF 36 00 23 26 C7 36 77 26 CF 36 FF 26 D7 36 FF 26 DF 36 77 23 26 C7 36 0F 26 CF 36 0F 26 D7 36 0F 26 DF 36 0F 23 26 C7 36 0F 26 CF 36 0F 26 D7 36 0F 26 DF 36 0F 23 26 C7 36 EE 26 CF 36 FF 26 D7 36 FF 26 DF 36 EE 23 26 C7 36 00 26 CF 36 00 26 D7 36 00 26 DF 36 00 2D 2D 2D 2D 2D 06 08 76 05 20 FC 2D 3D 20 8C C3 00 40

  • Resultado:

Video 2.P08: Reto: Domina las repeticiones

Click to see the youtube video

Reto 4.1: Repetición periódica

  • Descripción: se tienen 2 tiles (0 y 1). Hay que repetirlas con el patrón 00000000010000000001... 9 veces el tipo 0 y una el tipo 1
  • Bonus: Múltiple: Mínimo 3 tipos de tiles. Mínio dos de ellos se tienen que repetir 4 veces

Primero dibujamos 9 tiles del tipo 0:

  • Código máquina: 21 A0 00 3E 09 26 C0 36 FF 26 C8 36 A5 26 D0 36 5A 26 D8 36 FF 23 3D 20 EC
  • Programa desensamblado:
LD HL,#00A0
LD A,#9

LD H,#C0
LD (HL),#FF
LD H,#C8
LD (HL),#A5
LD H,#D0
LD (HL),#5A
LD H,#D8
LD (HL),#FF

INC HL
DEC A
JR nz, EC
JR FE

Y ahora dibujamos la tile 1, que es toda roja: 26 C0 36 FF 26 C8 36 FF 26 D0 36 FF 26 D8 36 FF 18 FE

LD H,#C0
LD (HL),#FF
LD H,#C8
LD (HL),#FF
LD H,#D0
LD (HL),#FF
LD H,#D8
LD (HL),#FF
  • El primer patrón completo es la unión de los anteriores: 21 A0 00 3E 09 26 C0 36 FF 26 C8 36 A5 26 D0 36 5A 26 D8 36 FF 23 3D 20 EC 26 C0 36 FF 26 C8 36 FF 26 D0 36 FF 26 D8 36 FF 18 FE

Ahora hay que meterlo en otro bucle:

LD B,8
Codigo anterior
INC HL
DEC B
JR nz,D5
  • Código máquina: 06 08 21 A0 00 3E 09 26 C0 36 FF 26 C8 36 A5 26 D0 36 5A 26 D8 36 FF 23 3D 20 EC 26 C0 36 FF 26 C8 36 FF 26 D0 36 FF 26 D8 36 FF 23 05 20 D4 18 FE

  • Resultado:

Reto 4.2: Enemigos

  • Descripción: 21 enemigos de 3 tipos. Patrón: 123123123... Tiles de 8x8
  • Bonus: De3En3: Patrón: 111222333

Lo siguiente es dibujar el cielo y la parte central...

  • Código máquina: 21 00 00 3E 50 26 C0 36 F0 26 C8 36 5A 26 D0 36 A5 26 D8 36 1E 26 E0 36 0F 26 E8 36 0A 26 F0 36 05 26 F8 36 08 23 3D 20 DC 3E 50 26 C0 36 00 26 C8 36 00 26 D0 36 00 26 D8 36 00 26 E0 36 00 26 E8 36 00 26 F0 36 00 26 F8 36 00 23 3D 20 DC 06 08 21 A0 00 3E 09 26 C0 36 FF 26 C8 36 A5 26 D0 36 5A 26 D8 36 FF 23 3D 20 EC 26 C0 36 FF 26 C8 36 FF 26 D0 36 FF 26 D8 36 FF 23 05 20 D4 18 FE
LD HL,#0000
LD A,#50

LD H,#C0
LD (HL),#F0
LD H,#C8
LD (HL),#5A
LD H,#D0
LD (HL),#A5
LD H,#D8
LD (HL),#1E
LD H,#E0
LD (HL),#0F
LD H,#E8
LD (HL),#0A
LD H,#F0
LD (HL),#05
LD H,#F8
LD (HL),#08

INC HL
DEC A
JR nz,DC

LD HL,#0050
LD A,#50

LD H,#C0
LD (HL),#00
LD H,#C8
LD (HL),#00
LD H,#D0
LD (HL),#00
LD H,#D8
LD (HL),#00
LD H,#E0
LD (HL),#00
LD H,#E8
LD (HL),#00
LD H,#F0
LD (HL),#00
LD H,#F8
LD (HL),#00

INC HL
DEC A
JR nz,DC

LD B,8
LD HL,#00A0
LD A,#9

LD H,#C0
LD (HL),#FF
LD H,#C8
LD (HL),#A5
LD H,#D0
LD (HL),#5A
LD H,#D8
LD (HL),#FF

INC HL
DEC A
JR nz, EC
JR FE


INC HL
DEC B
JR nz,D5
  • Ahora toca dibujar el personaje:

21 70 80 22 50 C0 21 D5 00 22 50 C8 21 77 08 22 50 D0 21 05 7F 22 50 D8 21 06 04 22 50 E0 21 70 80 22 50 E8 21 40 80 22 50 F0 21 60 60 22 50 F8

  • Programa desensamblado:
LD HL, #8070
LD (#C050),HL
LD HL, #00D5
LD (#C850),HL
LD HL, #
LD (#D050),HL
LD HL, #
LD (#D850),HL
LD HL, #8070
LD (#E050),HL
LD HL, #
LD (#E8050),HL
LD HL, #
LD (#F050),HL
LD HL, #
LD (#F850),HL

El código copleto hasta ahora es:

  • Código máquina: 21 00 00 3E 50 26 C0 36 F0 26 C8 36 5A 26 D0 36 A5 26 D8 36 1E 26 E0 36 0F 26 E8 36 0A 26 F0 36 05 26 F8 36 08 23 3D 20 DC 3E 50 26 C0 36 00 26 C8 36 00 26 D0 36 00 26 D8 36 00 26 E0 36 00 26 E8 36 00 26 F0 36 00 26 F8 36 00 23 3D 20 DC 06 08 21 A0 00 3E 09 26 C0 36 FF 26 C8 36 A5 26 D0 36 5A 26 D8 36 FF 23 3D 20 EC 26 C0 36 FF 26 C8 36 FF 26 D0 36 FF 26 D8 36 FF 23 05 20 D4 21 70 80 22 50 C0 21 D5 00 22 50 C8 21 77 08 22 50 D0 21 05 7F 22 50 D8 21 06 04 22 50 E0 21 70 80 22 50 E8 21 40 80 22 50 F0 21 60 60 22 50 F8 18 FE

  • Estos son los villanos:

  • Dibujo del tile 1:
Linea Valor 1 Valor 2
1 23 0C
2 01 48
3 00 49
4 FF F0
5 10 E8
6 00 C8
7 00 0C
8 01 02
LD HL,#0060

LD H,#C0
LD (HL),#23
LD H,#C8
LD (HL),#01
LD H,#D0
LD (HL),#00
LD H,#D8
LD (HL),#FF
LD H,#E0
LD (HL),#10
LD H,#E8
LD (HL),#00
LD H,#F0
LD (HL),#00
LD H,#F8
LD (HL),#0
  • Código máquina: 21 60 00 26 C0 36 23 26 C8 36 01 26 D0 36 00 26 D8 36 FF 26 E0 36 10 26 E8 36 00 26 F0 36 00 26 F8 36 01

  • Código máquina: 23 26 C0 36 0C 26 C8 36 48 26 D0 36 49 26 D8 36 F0 26 E0 36 E8 26 E8 36 C0 26 F0 36 0C 26 F8 36 02

  • Diubjo malo 2:

Linea Valor 1 Valor 2
1 23 AE
2 34 E1
3 71 F4
4 73 F6
5 70 F0
6 61 BC
7 30 E0
8 06 03
  • Código máquina: 23 26 C0 36 23 26 C8 36 34 26 D0 36 71 26 D8 36 73 26 E0 36 70 26 E8 36 61 26 F0 36 30 26 F8 36 06

  • Código máquina: 23 26 C0 36 AE 26 C8 36 E1 26 D0 36 F4 26 D8 36 F6 26 E0 36 F0 26 E8 36 BC 26 F0 36 E0 26 F8 36 03

  • Diubjo malo 3:

Linea Valor 1 Valor 2
1 80 80
2 50 EC
3 F5 D4
4 77 EE
5 F5 FB
6 74 F9
7 FF FF
8 EF 3F
  • Código máquina: 23 26 C0 36 80 26 C8 36 50 26 D0 36 F5 26 D8 36 77 26 E0 36 F5 26 E8 36 74 26 F0 36 FF 26 F8 36 EF

  • Código máquina: 23 26 C0 36 80 26 C8 36 EC 26 D0 36 D4 26 D8 36 EE 26 E0 36 FB 26 E8 36 F9 26 F0 36 FF 26 F8 36 3F

  • Borrar el último: 23 26 C0 36 00 26 C8 36 00 26 D0 36 00 26 D8 36 00 26 E0 36 00 26 E8 36 00 26 F0 36 00 26 F8 36 00

  • Código máquina de los 3 enemigos (Patrón): 21 60 00 26 C0 36 23 26 C8 36 01 26 D0 36 00 26 D8 36 FF 26 E0 36 10 26 E8 36 00 26 F0 36 00 26 F8 36 01 23 26 C0 36 0C 26 C8 36 48 26 D0 36 49 26 D8 36 F0 26 E0 36 E8 26 E8 36 C0 26 F0 36 0C 26 F8 36 02 23 26 C0 36 23 26 C8 36 34 26 D0 36 71 26 D8 36 73 26 E0 36 70 26 E8 36 61 26 F0 36 30 26 F8 36 06 23 26 C0 36 AE 26 C8 36 E1 26 D0 36 F4 26 D8 36 F6 26 E0 36 F0 26 E8 36 BC 26 F0 36 E0 26 F8 36 03 23 26 C0 36 80 26 C8 36 50 26 D0 36 F5 26 D8 36 77 26 E0 36 F5 26 E8 36 74 26 F0 36 FF 26 F8 36 EF 23 26 C0 36 80 26 C8 36 EC 26 D0 36 D4 26 D8 36 EE 26 E0 36 FB 26 E8 36 F9 26 F0 36 FF 26 F8 36 3F

LD HL,#0060
LD A,7

Enemigos
INC HL
DEC A
JR NZ,XX
  • Código máquina: 21 6F 00 3E 07 26 C0 36 23 26 C8 36 01 26 D0 36 00 26 D8 36 FF 26 E0 36 10 26 E8 36 00 26 F0 36 00 26 F8 36 01 23 26 C0 36 0C 26 C8 36 48 26 D0 36 49 26 D8 36 F0 26 E0 36 E8 26 E8 36 C0 26 F0 36 0C 26 F8 36 02 23 26 C0 36 23 26 C8 36 34 26 D0 36 71 26 D8 36 73 26 E0 36 70 26 E8 36 61 26 F0 36 30 26 F8 36 06 23 26 C0 36 AE 26 C8 36 E1 26 D0 36 F4 26 D8 36 F6 26 E0 36 F0 26 E8 36 BC 26 F0 36 E0 26 F8 36 03 23 26 C0 36 80 26 C8 36 50 26 D0 36 F5 26 D8 36 77 26 E0 36 F5 26 E8 36 74 26 F0 36 FF 26 F8 36 EF 23 26 C0 36 80 26 C8 36 EC 26 D0 36 D4 26 D8 36 EE 26 E0 36 FB 26 E8 36 F9 26 F0 36 FF 26 F8 36 3F 23 3D C2 05 40

  • Ahora lo reunificamos todo. Primero la parte del reto anterior: 21 00 00 3E 50 26 C0 36 F0 26 C8 36 5A 26 D0 36 A5 26 D8 36 1E 26 E0 36 0F 26 E8 36 0A 26 F0 36 05 26 F8 36 08 23 3D 20 DC 3E 50 26 C0 36 00 26 C8 36 00 26 D0 36 00 26 D8 36 00 26 E0 36 00 26 E8 36 00 26 F0 36 00 26 F8 36 00 23 3D 20 DC 06 08 21 A0 00 3E 09 26 C0 36 FF 26 C8 36 A5 26 D0 36 5A 26 D8 36 FF 23 3D 20 EC 26 C0 36 FF 26 C8 36 FF 26 D0 36 FF 26 D8 36 FF 23 05 20 D4 21 70 80 22 50 C0 21 D5 00 22 50 C8 21 77 08 22 50 D0 21 05 7F 22 50 D8 21 06 04 22 50 E0 21 70 80 22 50 E8 21 40 80 22 50 F0 21 60 60 22 50 F8

  • Esto está en la dirección 40AE:

21 6F 00 3E 07 26 C0 36 23 26 C8 36 01 26 D0 36 00 26 D8 36 FF 26 E0 36 10 26 E8 36 00 26 F0 36 00 26 F8 36 01 23 26 C0 36 0C 26 C8 36 48 26 D0 36 49 26 D8 36 F0 26 E0 36 E8 26 E8 36 C0 26 F0 36 0C 26 F8 36 02 23 26 C0 36 23 26 C8 36 34 26 D0 36 71 26 D8 36 73 26 E0 36 70 26 E8 36 61 26 F0 36 30 26 F8 36 06 23 26 C0 36 AE 26 C8 36 E1 26 D0 36 F4 26 D8 36 F6 26 E0 36 F0 26 E8 36 BC 26 F0 36 E0 26 F8 36 03 23 26 C0 36 80 26 C8 36 50 26 D0 36 F5 26 D8 36 77 26 E0 36 F5 26 E8 36 74 26 F0 36 FF 26 F8 36 EF 23 26 C0 36 80 26 C8 36 EC 26 D0 36 D4 26 D8 36 EE 26 E0 36 FB 26 E8 36 F9 26 F0 36 FF 26 F8 36 3F 23 3D C2 B3 40

La dirección donde se pinta el sprite con los enemigos es la dirección 40AE

Código final: 21 00 00 3E 50 26 C0 36 F0 26 C8 36 5A 26 D0 36 A5 26 D8 36 1E 26 E0 36 0F 26 E8 36 0A 26 F0 36 05 26 F8 36 08 23 3D 20 DC 3E 50 26 C0 36 00 26 C8 36 00 26 D0 36 00 26 D8 36 00 26 E0 36 00 26 E8 36 00 26 F0 36 00 26 F8 36 00 23 3D 20 DC 06 08 21 A0 00 3E 09 26 C0 36 FF 26 C8 36 A5 26 D0 36 5A 26 D8 36 FF 23 3D 20 EC 26 C0 36 FF 26 C8 36 FF 26 D0 36 FF 26 D8 36 FF 23 05 20 D4 21 70 80 22 50 C0 21 D5 00 22 50 C8 21 77 08 22 50 D0 21 05 7F 22 50 D8 21 06 04 22 50 E0 21 70 80 22 50 E8 21 40 80 22 50 F0 21 60 60 22 50 F8 21 6F 00 3E 07 26 C0 36 23 26 C8 36 01 26 D0 36 00 26 D8 36 FF 26 E0 36 10 26 E8 36 00 26 F0 36 00 26 F8 36 01 23 26 C0 36 0C 26 C8 36 48 26 D0 36 49 26 D8 36 F0 26 E0 36 E8 26 E8 36 C0 26 F0 36 0C 26 F8 36 02 23 26 C0 36 23 26 C8 36 34 26 D0 36 71 26 D8 36 73 26 E0 36 70 26 E8 36 61 26 F0 36 30 26 F8 36 06 23 26 C0 36 AE 26 C8 36 E1 26 D0 36 F4 26 D8 36 F6 26 E0 36 F0 26 E8 36 BC 26 F0 36 E0 26 F8 36 03 23 26 C0 36 80 26 C8 36 50 26 D0 36 F5 26 D8 36 77 26 E0 36 F5 26 E8 36 74 26 F0 36 FF 26 F8 36 EF 23 26 C0 36 80 26 C8 36 EC 26 D0 36 D4 26 D8 36 EE 26 E0 36 FB 26 E8 36 F9 26 F0 36 FF 26 F8 36 3F 23 3D C2 B3 40

  • Este es el resultado:

Reto 4.3: Enemigos animados

  • Descripción: Animación de los enemigos. De 4 en 4 píxeles. 0.5seg por fotograma
  • Bonus: BillyJean
  • Bonus: SuperAnimador

El algoritmo es este:

Pintar universo

LD D, #6F (Posicion inicial)
LD C,#03 (contador de animacion)

Siguiente_fotograma:
LD L,D
LD A,7
Dibujar:
Pintar sprite (posicion dada por L)
(El sprite debe pintar 00 al final)
INC HL
DEC A
JP NZ,Dibujar
Bucle de espera (con registro B)  
DEC D
DEC C
JP NZ,siguiente_fotograma
JP #4000
  • Pintar universo: 21 00 00 3E 50 26 C0 36 F0 26 C8 36 5A 26 D0 36 A5 26 D8 36 1E 26 E0 36 0F 26 E8 36 0A 26 F0 36 05 26 F8 36 08 23 3D 20 DC 3E 50 26 C0 36 00 26 C8 36 00 26 D0 36 00 26 D8 36 00 26 E0 36 00 26 E8 36 00 26 F0 36 00 26 F8 36 00 23 3D 20 DC 06 08 21 A0 00 3E 09 26 C0 36 FF 26 C8 36 A5 26 D0 36 5A 26 D8 36 FF 23 3D 20 EC 26 C0 36 FF 26 C8 36 FF 26 D0 36 FF 26 D8 36 FF 23 05 20 D4 21 70 80 22 50 C0 21 D5 00 22 50 C8 21 77 08 22 50 D0 21 05 7F 22 50 D8 21 06 04 22 50 E0 21 70 80 22 50 E8 21 40 80 22 50 F0 21 60 60 22 50 F8

  • Inicialización: 16 6F 0E 1E

  • Siguiente fotograma: Dir: 40B2: 6A 3E 07

  • Dibujar sprite: 26 C0 36 23 26 C8 36 01 26 D0 36 00 26 D8 36 FF 26 E0 36 10 26 E8 36 00 26 F0 36 00 26 F8 36 01 23 26 C0 36 0C 26 C8 36 48 26 D0 36 49 26 D8 36 F0 26 E0 36 E8 26 E8 36 C0 26 F0 36 0C 26 F8 36 02 23 26 C0 36 23 26 C8 36 34 26 D0 36 71 26 D8 36 73 26 E0 36 70 26 E8 36 61 26 F0 36 30 26 F8 36 06 23 26 C0 36 AE 26 C8 36 E1 26 D0 36 F4 26 D8 36 F6 26 E0 36 F0 26 E8 36 BC 26 F0 36 E0 26 F8 36 03 23 26 C0 36 80 26 C8 36 50 26 D0 36 F5 26 D8 36 77 26 E0 36 F5 26 E8 36 74 26 F0 36 FF 26 F8 36 EF 23 26 C0 36 80 26 C8 36 EC 26 D0 36 D4 26 D8 36 EE 26 E0 36 FB 26 E8 36 F9 26 F0 36 FF 26 F8 36 3F 26 C0

  • Repeticion de enemigos: 23 3D C2 B5 40

  • Borrar ultimo sprite: 36 00 26 C8 36 00 26 D0 36 00 26 D8 36 00 26 E0 36 00 26 E8 36 00 26 F0 36 00 26 F8 36 00

  • Bucle de espera: 06 80 76 05 20 FC

LD B,#80
halt
DEC B
JR nz,FC
  • Repetir siguiente fotograma: 15 0D C2 B2 40
DEC D
DEC C
JP NZ,siguiente_fotograma
  • Fin: Volver a comenzar: C3 00 40
JP #4000
  • Código máquina final: 21 00 00 3E 50 26 C0 36 F0 26 C8 36 5A 26 D0 36 A5 26 D8 36 1E 26 E0 36 0F 26 E8 36 0A 26 F0 36 05 26 F8 36 08 23 3D 20 DC 3E 50 26 C0 36 00 26 C8 36 00 26 D0 36 00 26 D8 36 00 26 E0 36 00 26 E8 36 00 26 F0 36 00 26 F8 36 00 23 3D 20 DC 06 08 21 A0 00 3E 09 26 C0 36 FF 26 C8 36 A5 26 D0 36 5A 26 D8 36 FF 23 3D 20 EC 26 C0 36 FF 26 C8 36 FF 26 D0 36 FF 26 D8 36 FF 23 05 20 D4 21 70 80 22 50 C0 21 D5 00 22 50 C8 21 77 08 22 50 D0 21 05 7F 22 50 D8 21 06 04 22 50 E0 21 70 80 22 50 E8 21 40 80 22 50 F0 21 60 60 22 50 F8 16 6F 0E 1E 6A 3E 07 26 C0 36 23 26 C8 36 01 26 D0 36 00 26 D8 36 FF 26 E0 36 10 26 E8 36 00 26 F0 36 00 26 F8 36 01 23 26 C0 36 0C 26 C8 36 48 26 D0 36 49 26 D8 36 F0 26 E0 36 E8 26 E8 36 C0 26 F0 36 0C 26 F8 36 02 23 26 C0 36 23 26 C8 36 34 26 D0 36 71 26 D8 36 73 26 E0 36 70 26 E8 36 61 26 F0 36 30 26 F8 36 06 23 26 C0 36 AE 26 C8 36 E1 26 D0 36 F4 26 D8 36 F6 26 E0 36 F0 26 E8 36 BC 26 F0 36 E0 26 F8 36 03 23 26 C0 36 80 26 C8 36 50 26 D0 36 F5 26 D8 36 77 26 E0 36 F5 26 E8 36 74 26 F0 36 FF 26 F8 36 EF 23 26 C0 36 80 26 C8 36 EC 26 D0 36 D4 26 D8 36 EE 26 E0 36 FB 26 E8 36 F9 26 F0 36 FF 26 F8 36 3F 23 26 C0 00 3D C2 B5 40 36 00 26 C8 36 00 26 D0 36 00 26 D8 36 00 26 E0 36 00 26 E8 36 00 26 F0 36 00 26 F8 36 00 06 80 76 05 20 FC 15 0D C2 B2 40 C3 00 40

  • Este es el resultado:

Video 2.P09: Desafío: Crea tu animación

Click to see the youtube video

Estos son los sprites:

  • Algoritmo:
    • Dibujar universo
    • Animación de la bala
      • Pinta bala
      • Pausa
      • Borrar bala
      • Incrementar posicion (HL)
      • Repetir las veces necesarias hasta que la bala alcance al enemigo
    • Animación de la explosión
      • Pintar fotograma 1
      • wait
      • ...
      • Pintar fotograma 6
      • wait
      • Incrementar posicion (HL)
      • Repetir tantas veces como enemigos
    • Pintar personaje emocionado
      • wait
      • Pintar personaje inicial
      • Terminar

Implementación de las diferentes partes:

  • Pintar universo: 21 00 00 3E 50 26 C0 36 F0 26 C8 36 5A 26 D0 36 A5 26 D8 36 1E 26 E0 36 0F 26 E8 36 0A 26 F0 36 05 26 F8 36 08 23 3D 20 DC 3E 50 26 C0 36 00 26 C8 36 00 26 D0 36 00 26 D8 36 00 26 E0 36 00 26 E8 36 00 26 F0 36 00 26 F8 36 00 23 3D 20 DC 06 08 21 A0 00 3E 09 26 C0 36 FF 26 C8 36 A5 26 D0 36 5A 26 D8 36 FF 23 3D 20 EC 26 C0 36 FF 26 C8 36 FF 26 D0 36 FF 26 D8 36 FF 23 05 20 D4 21 70 80 22 50 C0 21 D5 00 22 50 C8 21 77 08 22 50 D0 21 05 7F 22 50 D8 21 06 04 22 50 E0 21 70 80 22 50 E8 21 40 80 22 50 F0 21 60 60 22 50 F8 21 6F 00 3E 07 26 C0 36 23 26 C8 36 01 26 D0 36 00 26 D8 36 FF 26 E0 36 10 26 E8 36 00 26 F0 36 00 26 F8 36 01 23 26 C0 36 0C 26 C8 36 48 26 D0 36 49 26 D8 36 F0 26 E0 36 E8 26 E8 36 C0 26 F0 36 0C 26 F8 36 02 23 26 C0 36 23 26 C8 36 34 26 D0 36 71 26 D8 36 73 26 E0 36 70 26 E8 36 61 26 F0 36 30 26 F8 36 06 23 26 C0 36 AE 26 C8 36 E1 26 D0 36 F4 26 D8 36 F6 26 E0 36 F0 26 E8 36 BC 26 F0 36 E0 26 F8 36 03 23 26 C0 36 80 26 C8 36 50 26 D0 36 F5 26 D8 36 77 26 E0 36 F5 26 E8 36 74 26 F0 36 FF 26 F8 36 EF 23 26 C0 36 80 26 C8 36 EC 26 D0 36 D4 26 D8 36 EE 26 E0 36 FB 26 E8 36 F9 26 F0 36 FF 26 F8 36 3F 23 3D C2 B3 40

  • Animación de la Bala: 0E 1D 21 52 D8 3E FF 77 06 10 76 05 20 FC 3E 00 77 23 0D 20 F0

LD C,#1F
LD HL,#D852

;-- Pintar bala
LD A,#FF
LD (HL),A

;-- Pausa
LD B,#10
HALT
DEC B
JR nz,#FC

;-- Borrar bala
LD A,#00
LD (HL),A

;-- Repetir
INC HL
DEC C
JR nz,#F0
  • Animación de la explosión

  • Fotogramas:

Linea F1 F2 F3 F4 F5 F6
1 00 00 00 00 00 00
2 00 00 00 00 00 00
3 00 99 98 81 08 00
4 66 64 42 04 00 00
5 66 62 24 02 00 00
6 00 99 91 14 01 00
7 00 00 00 00 00 00
8 00 00 00 00 00 00
  • Código máquina. Fotograma 1: 3E 15 26 C0 36 00 26 C8 36 00 26 D0 36 00 26 D8 36 00 26 E0 36 00 26 E8 36 00 26 F0 36 00 26 F8 36 00 23 26 C0 36 00 26 C8 36 00 26 D0 36 00 26 D8 36 66 26 E0 36 66 26 E8 36 00 26 F0 36 00 26 F8 36 00 06 10 76 05 20 FC
LD A,#15 ;-- Repeticiones de las explosiones
LD H,#C0 (Direccion 0x4194)
LD (HL),#00
LD H,#C8
LD (HL),#00
LD H,#D0
LD (HL),#00
LD H,#D8
LD (HL),#00
LD H,#E0
LD (HL),#00
LD H,#E8
LD (HL),#00
LD H,#F0
LD (HL),#00
LD H,#F8
LD (HL),#00
INC HL

LD H,#C0
LD (HL),#00
LD H,#C8
LD (HL),#00
LD H,#D0
LD (HL),#00
LD H,#D8
LD (HL),#66
LD H,#E0
LD (HL),#66
LD H,#E8
LD (HL),#00
LD H,#F0
LD (HL),#00
LD H,#F8
LD (HL),#00

;-- Pausa
LD B,#20
HALT
DEC B
JR nz,#FC
  • Código máquina. Fotograma 2: 26 C0 36 00 26 C8 36 00 26 D0 36 99 26 D8 36 64 26 E0 36 62 26 E8 36 99 26 F0 36 00 26 F8 36 00 06 10 76 05 20 FC

  • Fotograma 3: 26 C0 36 00 26 C8 36 00 26 D0 36 98 26 D8 36 42 26 E0 36 24 26 E8 36 91 26 F0 36 00 26 F8 36 00 06 10 76 05 20 FC

  • Fotograma 4: 26 C0 36 00 26 C8 36 00 26 D0 36 81 26 D8 36 04 26 E0 36 02 26 E8 36 14 26 F0 36 00 26 F8 36 00 06 10 76 05 20 FC

  • Fotograma 5: 26 C0 36 00 26 C8 36 00 26 D0 36 08 26 D8 36 00 26 E0 36 00 26 E8 36 01 26 F0 36 00 26 F8 36 00 06 10 76 05 20 FC

  • Fotograma 6: 26 C0 36 00 26 C8 36 00 26 D0 36 00 26 D8 36 00 26 E0 36 00 26 E8 36 00 26 F0 36 00 26 F8 36 00 06 10 76 05 20 FC

  • Repeticion: 23 3D C2 94 41

INC HL
DEC A
JP NZ,#xxxx
  • Pintar personaje en victoria: ``

Sprintes:

L V1 V2
1 30 E0
2 E8 B9
3 3B EF
4 1F 47
5 03 0E
6 30 E0
7 30 60
8 30 60
  • Dibujo personaje victoria: 21 30 E0 22 50 C0 21 E8 B9 22 50 C8 21 3B EF 22 50 D0 21 1F 47 22 50 D8 21 03 0E 22 50 E0 21 03 0E 22 50 E8 21 30 60 22 50 F0 21 30 60 22 50 F8 06 80 76 05 20 FC
LD HL, #E030
LD (#C050),HL
LD HL, #B9E8
LD (#C850),HL
LD HL, #EF3B
LD (#D050),HL
LD HL, #471F
LD (#D850),HL
LD HL, #0E03
LD (#E050),HL
LD HL, #0E03
LD (#E850),HL

LD HL, #6030
LD (#F050),HL
LD HL, #6030
LD (#F850),HL

;-- Pausa
LD B,#80
HALT
DEC B
JR nz,#FC

JP #4000
  • Programa prueba: 21 00 00 3E 50 26 C0 36 F0 26 C8 36 5A 26 D0 36 A5 26 D8 36 1E 26 E0 36 0F 26 E8 36 0A 26 F0 36 05 26 F8 36 08 23 3D 20 DC 3E 50 26 C0 36 00 26 C8 36 00 26 D0 36 00 26 D8 36 00 26 E0 36 00 26 E8 36 00 26 F0 36 00 26 F8 36 00 23 3D 20 DC 06 08 21 A0 00 3E 09 26 C0 36 FF 26 C8 36 A5 26 D0 36 5A 26 D8 36 FF 23 3D 20 EC 26 C0 36 FF 26 C8 36 FF 26 D0 36 FF 26 D8 36 FF 23 05 20 D4 21 70 80 22 50 C0 21 D5 00 22 50 C8 21 77 08 22 50 D0 21 05 7F 22 50 D8 21 06 04 22 50 E0 21 70 80 22 50 E8 21 40 80 22 50 F0 21 60 60 22 50 F8 21 6F 00 3E 07 26 C0 36 23 26 C8 36 01 26 D0 36 00 26 D8 36 FF 26 E0 36 10 26 E8 36 00 26 F0 36 00 26 F8 36 01 23 26 C0 36 0C 26 C8 36 48 26 D0 36 49 26 D8 36 F0 26 E0 36 E8 26 E8 36 C0 26 F0 36 0C 26 F8 36 02 23 26 C0 36 23 26 C8 36 34 26 D0 36 71 26 D8 36 73 26 E0 36 70 26 E8 36 61 26 F0 36 30 26 F8 36 06 23 26 C0 36 AE 26 C8 36 E1 26 D0 36 F4 26 D8 36 F6 26 E0 36 F0 26 E8 36 BC 26 F0 36 E0 26 F8 36 03 23 26 C0 36 80 26 C8 36 50 26 D0 36 F5 26 D8 36 77 26 E0 36 F5 26 E8 36 74 26 F0 36 FF 26 F8 36 EF 23 26 C0 36 80 26 C8 36 EC 26 D0 36 D4 26 D8 36 EE 26 E0 36 FB 26 E8 36 F9 26 F0 36 FF 26 F8 36 3F 23 3D C2 B3 40 0E 1D 21 52 D8 3E FF 77 06 10 76 05 20 FC 3E 00 77 23 0D 20 F0 3E 15 26 C0 36 00 26 C8 36 00 26 D0 36 00 26 D8 36 00 26 E0 36 00 26 E8 36 00 26 F0 36 00 26 F8 36 00 23 26 C0 36 00 26 C8 36 00 26 D0 36 00 26 D8 36 66 26 E0 36 66 26 E8 36 00 26 F0 36 00 26 F8 36 00 06 10 76 05 20 FC 26 C0 36 00 26 C8 36 00 26 D0 36 99 26 D8 36 64 26 E0 36 62 26 E8 36 99 26 F0 36 00 26 F8 36 00 06 10 76 05 20 FC 26 C0 36 00 26 C8 36 00 26 D0 36 98 26 D8 36 42 26 E0 36 24 26 E8 36 91 26 F0 36 00 26 F8 36 00 06 10 76 05 20 FC 26 C0 36 00 26 C8 36 00 26 D0 36 81 26 D8 36 04 26 E0 36 02 26 E8 36 14 26 F0 36 00 26 F8 36 00 06 10 76 05 20 FC 26 C0 36 00 26 C8 36 00 26 D0 36 08 26 D8 36 00 26 E0 36 00 26 E8 36 01 26 F0 36 00 26 F8 36 00 06 10 76 05 20 FC 26 C0 36 00 26 C8 36 00 26 D0 36 00 26 D8 36 00 26 E0 36 00 26 E8 36 00 26 F0 36 00 26 F8 36 00 06 10 76 05 20 FC 23 3D C2 94 41 21 30 E0 22 50 C0 21 E8 B9 22 50 C8 21 3B EF 22 50 D0 21 1F 47 22 50 D8 21 03 0E 22 50 E0 21 03 0E 22 50 E8 21 30 60 22 50 F0 21 30 60 22 50 F8 06 80 76 05 20 FC C3 00 40

  • Resultado final:

Resumen de instrucciones

Tabla de instrucciones

Instrucción Código máquina Tamaño Descripción
LD A, ## 3E ## 2 bytes Cargar un valor en el registro A
LD B, ## 06 ## 2 bytes Cargar un valor en el registro B
LD D, ## 16 ## 2 bytes Cargar un valor en el registro D
LD C, ## 0E 2 bytes Cargar un valor en el registro C
LD L,D 6A 1 byte L=D
LD (##%%),A 32 %% ## 3 bytes Almacenar A en la posición de memoria indicada
LD HL, ##%% 21 %% ## 3 bytes Cargar un valor en el registro HL
LD (##%%),HL 22 %% ## 3 bytes Almacenar HL en las posiciones #### y #### + 1
LD H,** 26 ** 2 bytes Almacener un valor en H
LD (HL),** 36 ** 2 bytes Almacenar un valor en la dirección indicada por HL
LD (HL),A 77 1 byte Almacenar A en la direccion indicada por HL
INC HL 23 1 byte Incrementar el registro HL
DEC A 3D 1 byte Decrementar el acumulador A
DEC H 25 1 byte Decrementar el registro H
DEC L 2D 1 byte Decrementar el registro L
DEC D 15 1 byte Decrementar el registro D
DEC E 1D 1 byte Decrementar el registro E
DEC B 05 1 byte Decrementar el registro B
DEC C 0D 1 byte Decrementar el registro C
JR ## 18 FE 2 bytes Bucle infinito
JR nz,** 20 ** 2 bytes Saltar si no cero
JR nc,** 30 ** 2 bytes Saltar si acarreo
JR z, ** 28 ** 2 bytes Saltar si cero
JR c, ** 38 ** 2 bytes Saltar si acarreo
HALT 76 1 byte Parar el procesador hasta que llegue interrupción
JP ##%% C3 %% ## 3 bytes Saltar a la dirección ## %%
JP nz, ##%% C2 %% ## 3 bytes Saltar a la dirección ## %% si no cero
JP nc, ##%% D2 %% ## 3 bytes Saltar a la dirección ## %% si no acarreo
JP z, ##%% CA %% ## 3 bytes Saltar a la dirección ## %% si cero
JP c, ##%% DA %% ## 3 bytes Saltar a la dirección ## %% si hay acarreo
JP p, ##%% F2 %% ## 3 bytes Saltar a la dirección ## %% si resultado positivo
JP m, ##%% FA %% ## 3 bytes Saltar a la dirección ## %% si resultado negativo

Clone this wiki locally