diff --git a/scroller2/main.asm b/scroller2/main.asm index 8782ec3..ebd09b7 100644 --- a/scroller2/main.asm +++ b/scroller2/main.asm @@ -7,6 +7,9 @@ k_cur equ $5c5b ; Contem a posição do cursor - TODO: Usar isto ; Depois de meter a 10,6 (y,x) fica com ; $5d16 +LINHA10 equ $4840 +aids db $0 + start xor a ; O mesmo que LD a, 0 ld (tv_flag), a ; Directs rst 10h output to main screen. @@ -16,11 +19,24 @@ start call clear_screen ; Limpa o ecrã + call scroll_text mainloop ld a, $0 ld (last_k), a ; Limpa o valor da ultima tecla pressionada + ld a, (aids) + cp $8 + jr nz, s_e call scroll_text + ld a, 0 + ld (aids), a + +s_e + ld hl, LINHA10 + call scroll_esquerda + ld a, (aids) + inc a + ld (aids), a ld a, $1 call delay ; Chama a rotina de delay(1) @@ -36,5 +52,6 @@ exit INCLUDE "delay.asm" INCLUDE "clear.asm" INCLUDE "scroll_text.asm" +INCLUDE "scroll_esquerda.asm" end start diff --git a/scroller2/main.tap b/scroller2/main.tap index 7d1455a..9e0f8e7 100644 Binary files a/scroller2/main.tap and b/scroller2/main.tap differ diff --git a/scroller2/scroll_esquerda.asm b/scroller2/scroll_esquerda.asm index cb88b4f..6c41c97 100644 --- a/scroller2/scroll_esquerda.asm +++ b/scroller2/scroll_esquerda.asm @@ -1,16 +1,15 @@ -;videoAddr equ 4840h ; Endereço de Memoria Video da Linha 10 -;videoAddr equ 4940h ; Faz o mesmo, tenho de entender porque - addractual1 db 0,0 ultimoaddr db 0,0 +aids2 db 0 ; Rotina de scroll de texto da direita para a esquerda pixel a pixel ; O endereço inicial tem de vir em HL scroll_esquerda -; ld hl, videoAddr ; Endereço de Memoria Video a ser manipulado ld c, $8 ; Numero de vezes que a rotina vai correr ; 8 é o numero de linhas de pixeis a scrollar + ld a, 0 + ld (aids2), a ; Loop1 scroll_esquerda_0 ld (addractual1), hl ; Guarda o valor de HL em tmp1 @@ -25,6 +24,10 @@ scroll_esquerda_0 ; videoAddr, videoAddr+$100 videoAddr+$200, ; ..., videoAddr+$700 + ld a, (aids2) + inc a + ld (aids2), a + dec c ; Decrementa o contador C jr nz, scroll_esquerda_0; Se C != 0 corre novamente o Loop1 ret @@ -43,15 +46,6 @@ scroll_esquerda_1 ld b, $20 ; Numero de vezes que vai correr -; Vai começar por fazer um rotate left à coluna mais à direita, e -; guarda o bit que se perde na carry, que vai ser usado como o -; bit 0 do proximo rotate left que for executado. - -; Se no rotate da coluna mais à esquerda se perdeu alguma coisa, -; então é para passar para a coluna mais a direita. -; Se depois do ultimo rotate o carry estiver definido, faz-se um -; OR ao bit 0 da coluna mais à direita. - ; Loop2 scroll_esquerda_2 ld a, (hl) ; Faz um rotate left aos 8 pixels no @@ -61,6 +55,15 @@ scroll_esquerda_2 dec hl ; Anda uma coluna para a esquerda djnz scroll_esquerda_2 ; Se ainda nao chegou ao fim, repete + ld a, (aids2) + ld d, $0 + ld e, a + ld hl, udg_start + add hl, de + ld a, (hl) + rla + ld (hl), a + ld hl, (ultimoaddr) ; Le o valor do endereço da coluna ld a, (hl) ; mais à direita, em A diff --git a/scroller2/scroll_text.asm b/scroller2/scroll_text.asm index 6583764..4926fc5 100644 --- a/scroller2/scroll_text.asm +++ b/scroller2/scroll_text.asm @@ -1,4 +1,4 @@ -text db "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Proin commodo metus sed orci fermentum, id mattis quam suscipit.", 0 +text db "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Proin commodo metus sed orci fermentum, id mattis quam suscipit OI VIVA O BENFICA!!", 0 chars equ $5c36 ; Endereço 256 ($100) bytes abaixo da fonte (2 bytes) ; Contem $3c00 inicialmente @@ -17,6 +17,13 @@ text_pos db 0,0 char_pos db 0 scroll_text + ld a, 22 + rst $10 + ld a, 0 + rst $10 + ld a, 0 + rst $10 + ; 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 @@ -61,7 +68,7 @@ scroll_text_loop 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 ; Se for 0 estamos no fim da string + cp $0 ; Se for 0 estamos no fim da string jr z, reset ; Reset à posição jr the_end ; Continua reset @@ -80,4 +87,4 @@ copia_para_udg_loop inc hl ; Incrementa ambos inc de djnz copia_para_udg_loop ; b--, se b != 0 salta - ret \ No newline at end of file + ret