From c582c8eac830e47c5add58418be179987571a8cb Mon Sep 17 00:00:00 2001 From: Pedro de Oliveira Date: Tue, 12 Aug 2014 03:29:15 +0100 Subject: [PATCH] Moar crap --- scroller/scroll_text.asm | 42 +++++++++++++++++++++++++++++----------- 1 file changed, 31 insertions(+), 11 deletions(-) diff --git a/scroller/scroll_text.asm b/scroller/scroll_text.asm index 330cfe0..aaeadb6 100644 --- a/scroller/scroll_text.asm +++ b/scroller/scroll_text.asm @@ -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