Documentação e optimização

This commit is contained in:
Pedro de Oliveira 2014-08-11 10:02:00 +01:00
parent dcc4b36525
commit 600f9035d0
6 changed files with 38 additions and 28 deletions

View File

@ -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

View File

@ -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

Binary file not shown.

View File

@ -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

View File

@ -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

1
scroller/scroll_text.asm Normal file
View File

@ -0,0 +1 @@
text db "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Proin commodo metus sed orci fermentum, id mattis quam suscipit."