mirror of https://github.com/falsovsky/z80.git
Já funciona mas não está perfeito :-D
This commit is contained in:
parent
2441814043
commit
45244d168d
|
|
@ -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
|
||||
|
|
|
|||
Binary file not shown.
|
|
@ -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
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
ret
|
||||
|
|
|
|||
Loading…
Reference in New Issue