Moar crap

This commit is contained in:
Pedro de Oliveira 2014-08-12 03:29:15 +01:00
parent 95c1bf6944
commit c582c8eac8
1 changed files with 31 additions and 11 deletions

View File

@ -12,17 +12,31 @@ udg equ $5c7b ; Endereço do primeiro user-defined graphics (2 bytes)
udg_start equ $ff58 ; User-defined characters, vai até $ffff
; São acessiveis com o caracter $90 até $a4
letra_pos db 0,0
text_pos db 0,0
scroll_text
; Verificar se o valor de text_pos já foi alguma vez alterado
ld a, (text_pos) ; Le o primeiro byte
cp 0 ; Se for 0 é a primeira vez senão
jr nz, segundo_byte ; vou verificar o segundo byte
jr z, first_run
segundo_byte
ld a, (text_pos+1) ; Le o segundo byte
cp 0 ; Se for 0 é a primeira vez
jr z, first_run
ld hl, (text_pos) ; Senão usa o valor de (text_pos)
jr scroll_text_loop
first_run
; Primeira vez a correr, usa o endereço de text
ld hl, text ; Endereço do primeiro chr
scroll_text_loop
; Por exemplo, a primeira letra é um L. No ASCII do
; Spectrum o valor dela é $4C e com esse valor pretendo
; chegar a $3E60 que é onde está a font dela
ld a, (hl) ; Le chr da string - $4C incialmente
ld a, (hl) ; Le chr da string - $4C inicialmente
push hl ; Guarda a posição na string na stack
ld h,0 ; H = 0
@ -31,28 +45,34 @@ scroll_text_loop
add hl, hl ; $4C + $4C = $98
add hl, hl ; $98 + $98 = $130
add hl, hl ; $130 + $130 = $260
ld d, h
ld e, l ; DE = HL
ld hl, font_start
add hl, de ; $3C00 + $260 = $3E60
ld (letra_pos), hl ; Guarda o valor em letra_pos
call copia_para_udg ; Copia a letra para o UDG#1
ld a, $90 ; Imprime UDG#1
rst $10
pop hl ; Tira a posição da string da stack
pop hl ; Tira a posição na string da stack
inc hl ; Anda para a frente
ld a, (hl) ; Le o proximo valor
cp 0 ; Ve se já estamos no fim
jr nz, scroll_text_loop ; Repete no proximo chr da string
cp 0 ; Se for 0 estamos no fim da string
jr z, reset ; Reset à posição
jr the_end ; Continua
reset
ld hl, text ; Mete a posição na string a 0
the_end
ld (text_pos), hl ; Guarda a posição
ret
copia_para_udg
ld b, $8 ; Copiar 8 bytes, cada letra são 8x8
ld hl, (letra_pos) ; Posição da font da letra a copiar
ld b, $8 ; Copiar 8 bytes, cada letra são 8x8
ld de, udg_start ; Destino
copia_para_udg_r
ld a, (hl) ; Le origem