From 600f9035d05edd5705f508aaab942da91dd3272b Mon Sep 17 00:00:00 2001 From: Pedro de Oliveira Date: Mon, 11 Aug 2014 10:02:00 +0100 Subject: [PATCH] =?UTF-8?q?Documenta=C3=A7=C3=A3o=20e=20optimiza=C3=A7?= =?UTF-8?q?=C3=A3o?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scroller/clear.asm | 31 ++++++++++++++++++------------- scroller/main.asm | 23 ++++++++++++++--------- scroller/main.tap | Bin 388 -> 384 bytes scroller/scroll_direita.asm | 7 +++---- scroller/scroll_esquerda.asm | 4 ++-- scroller/scroll_text.asm | 1 + 6 files changed, 38 insertions(+), 28 deletions(-) create mode 100644 scroller/scroll_text.asm diff --git a/scroller/clear.asm b/scroller/clear.asm index 85ddcef..b85f1ed 100644 --- a/scroller/clear.asm +++ b/scroller/clear.asm @@ -1,3 +1,8 @@ +attr_p equ 5c8dh; Endereço que contem as cores permanentes +bordcr equ 5c48h; Endereço que contem a cor da borda +rom_limpa_ecra equ 0dafh; Rotina da ROM que limpa o ecrã +rom_define_borda equ 2294h; Rotina da ROM que define a borda + ; Cores ; Numero | Binario | Nome ; 0 | 000 | Preto @@ -18,23 +23,23 @@ ; Então para definir o flash desligado, o brightness ligado com o ; fundo a preto e o texto a amarelo fica-se com: -; 01000110 = 70 -; 01000000 = 64 - Tudo preto -; 01000111 = 71 - Fundo preto Texto Branco -screen_attribute db 71 +; 01000110 = 70 = $46 +; 01000000 = 64 = $40 - Tudo preto +; 01000111 = 71 = $47 - Fundo preto Texto Branco +screen_attribute equ 47h ; Valor de 0 a 7 -border_attribute db 0 +border_color equ 00h clear_screen - ld a, (screen_attribute) - ld (23693), a ; Variavel de sistema que permite definir + ld a, screen_attribute + ld (attr_p), a ; Variavel de sistema que permite definir ; o ink, paper, brightness e flash - call 3503 ; Chama a função da ROM para fazer clear - ; screen + call rom_limpa_ecra ; Clear screen - ld a, (border_attribute) - call 8859 ; Chama a função da ROM para actualizar - ; a border com o valor que está em A - ; O valor fica guardado em 23624 + ld a, border_color ; Cor do border + call rom_define_borda+7 + ; Chama a rotina da ROM para actualizar a borda, mas salta 7 + ; bytes à frente, porque são para ler o valor da borda do + ; BASIC. O valor fica guardado em 23624. ret diff --git a/scroller/main.asm b/scroller/main.asm index 3092c17..d57b967 100644 --- a/scroller/main.asm +++ b/scroller/main.asm @@ -1,6 +1,11 @@ org 30000 -tv_flag equ 5C3Ch +tv_flag equ 5c3ch ; Endereço que contem flags da tv +last_k equ 5c08h ; Contem a ultima tecla pressionada +; Video RAM +LINHA9 equ 4820h +LINHA10 equ 4840h +LINHA11 equ 4860h ; 16 é para definir o INK ; 17 é para definir o PAPER @@ -40,22 +45,22 @@ printa_ate_255 jr printa_ate_255 ; Volta ao inicio da rotina mainloop - ld a, 0 ; O endereço $5C08 tem o valor ASCII da ultima tecla - ld (5C08h), a ; pressionada, vamos limpar isso + ld a, 0 + ld (last_k), a ; Limpa o valor da ultima tecla pressionada - ld hl, 4820h ; Linha 9 + ld hl, LINHA9 call scroll_direita - ld hl, 4840h ; Linha 10 + ld hl, LINHA10 call scroll_esquerda - ld hl, 4860h ; Linha 11 + ld hl, LINHA11 call scroll_direita ld a, 1 call delay ; Chama a rotina de delay(1) - ld a, (5C08h) ; Se o valor em $5C08 ainda for 0, é porque ainda - cp 0 ; não se pressionou nenhuma tecla, por isso... - jr Z, mainloop ; repete + ld a, (last_k) ; Se o valor da ultima tecla pressionada ainda + cp 0 ; for 0, é porque ainda não se pressionou nenhuma + jr Z, mainloop ; tecla, por isso... repete exit pop bc ; Tira o BC da Stack diff --git a/scroller/main.tap b/scroller/main.tap index ec068f5280085042f77a633affed2963a15d224c..274741060cac4b0099014f34c0b0245cd88d0316 100644 GIT binary patch delta 74 zcmV-Q0JZ;w1AqgNZU_efFm(WcfC-UyG71lNJ^%(5Pf*Prk+P*JK1VW*T+OcyJ^;;| gBFRTS7T0*!J^~>Su8o=>Px# delta 53 zcmZo*ZegB~$HC2LP|DEI!#lCeh)b}{j)6_gKj5t5#7#^2+!?I+%Zz$s&aUUR5-6LT J$SB8n9RQOA57z(y diff --git a/scroller/scroll_direita.asm b/scroller/scroll_direita.asm index eef7fbc..07ac826 100644 --- a/scroller/scroll_direita.asm +++ b/scroller/scroll_direita.asm @@ -1,8 +1,7 @@ -;videoAddr2 equ 4820h ; Linha 9 -;videoAddr2 equ 4920h ; Faz o mesmo, tenho de entender porque -;videoAddr2 equ ; Linha 11 +;videoAddr2 equ 4820h ; Linha 9 +;videoAddr2 equ 4920h ; Faz o mesmo, tenho de entender porque -addractual2 db 0,0 +addractual2 db 0,0 primeiroaddr db 0,0 ; Rotina de scroll de texto da esquerda para a direita pixel a pixel diff --git a/scroller/scroll_esquerda.asm b/scroller/scroll_esquerda.asm index adb9fff..bebe15e 100644 --- a/scroller/scroll_esquerda.asm +++ b/scroller/scroll_esquerda.asm @@ -1,8 +1,8 @@ ;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 +addractual1 db 0,0 +ultimoaddr db 0,0 ; Rotina de scroll de texto da direita para a esquerda pixel a pixel ; O endereço inicial tem de vir em HL diff --git a/scroller/scroll_text.asm b/scroller/scroll_text.asm new file mode 100644 index 0000000..896bd70 --- /dev/null +++ b/scroller/scroll_text.asm @@ -0,0 +1 @@ +text db "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Proin commodo metus sed orci fermentum, id mattis quam suscipit." \ No newline at end of file