From 45244d168d1c883bdb6c2e5d8c1d3da7adbcbc58 Mon Sep 17 00:00:00 2001 From: Pedro de Oliveira Date: Tue, 12 Aug 2014 04:56:18 +0100 Subject: [PATCH] =?UTF-8?q?J=C3=A1=20funciona=20mas=20n=C3=A3o=20est=C3=A1?= =?UTF-8?q?=20perfeito=20:-D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scroller2/main.asm | 17 +++++++++++++++++ scroller2/main.tap | Bin 377 -> 511 bytes scroller2/scroll_esquerda.asm | 29 ++++++++++++++++------------- scroller2/scroll_text.asm | 13 ++++++++++--- 4 files changed, 43 insertions(+), 16 deletions(-) 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 7d1455a05597fda807bfbf95cba9f012cf3863ff..9e0f8e7ba6621e0f7691f60120a432d010a582d2 100644 GIT binary patch delta 285 zcmey#^q+Y`c$6U@1A}2H1Fxho0|RqzVrHIRNn(M5LK~w&DMJHe2jhQ+^+q-^N6%K3 zo|P!GV=&@~u`($A$DzOh;Tn`GI(VGTD+3DJ7#Wn>F`msXwc?2R$Dna};*{z23jUr7 zVV+@*3jPXCu6}Nw&W?(T3_xHfcHNEvgseo%{xK*pY4BKy0T~*sTB2nV%!(bQbx+k8 z@-;OzLt+&fY$VUdmf20X{!qCNsDueDuOwP_l8r+!;(wixvarCflORJG_&9(L%q>&O zEIZp(rj=QyVqukAW&;%ARd{m}$Un*`&+yhuDZA_-n?jv#trbXhzA delta 150 zcmey*{F7-yxUB&n1A{>+1Fxho0|RqzVrHIRNn(M50s|vZu%Vra@&9@wo0y|#V@vHA zj5uP>z9_Y0JnL6##S!z5LF3KDjnn<~7=Xa)Y3V-(1ttw1t7kxl2CLT7QVC|o?9#fY wY7F_BnwlZ8iVQZAXI0AVCR~50TnALb1eRBNT6&U=LonihoshDyz^{{w0Oa;Dp#T5? 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