Utiliza un par de trucos interesantes para hacerlo más corto.
Código: Seleccionar todo
; draw bitmap lines
REPT 3
REPT 2
ld a, (hl) ; pintar los bytes 1 a 6
ld (de), a
inc hl ; siguiente byte
inc d ; siguiente línea (lo podemos hacer dos veces seguidas
; porque sabemos que empezamos en línea par)
ENDM
; ajuste de la dirección destino
; se hace cada dos líneas. Se puede haber incrementado el tercio
ld a, d ; ver si hemos pasado frontera de línea (scan)
and 7
jr nz, $+11 ; no. Ir al siguiente "lda a,(hl)"
ld a, e ; byte con la fila+columna
sub -32 ; le sumamos una fila más. C = 0 si la fila fue la última del tercio
ld e, a
sbc a, a ; A = A - A - C. A = $00 en caso de cambio de tercio. $FF en otro caso
and -8 ; A = A & $F8. A = $00 en caso de cambio de tercio. $F8 en otro caso
add a, d ; nuevo valor de tercio ajustado a uno menos si no hubo cambio de tercio
; D queda igual en caso de cambio de tercio (ya fue incrementado en el último "inc d")
ld d, a
ENDM
ld a, (hl) ; pintar el byte 7
ld (de), a
inc hl ; siguiente byte
inc d ; siguiente línea
ld a, (hl) ; pintar el byte 8
ld (de), a
Hay otra parte para mostrar teselas. Aquí no hay comprobaciones ya que se sabe que se pinta siempre en múltiplo de caracteres.
Código: Seleccionar todo
; draw bitmap lines
REPT 8
pop de
ld a, e
add a, b
ld e, a
ldi
ld a, (hl)
ld (de), a
inc hl
dec e
inc d
ldi
ldi
ENDM