mirror of https://github.com/falsovsky/z80.git
57 lines
1.7 KiB
NASM
57 lines
1.7 KiB
NASM
tmpScroll1 db 0,0
|
|
ultimoaddr db 0,0
|
|
videoAddr equ 4840h ; Endereço de Memoria Video da Linha 10
|
|
|
|
; Rotina de scroll de texto da direita para a esquerda pixel a pixel
|
|
scrolla
|
|
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
|
|
|
|
; Loop1
|
|
scrolla_0
|
|
ld (tmpScroll1), hl ; Guarda o valor de HL em tmp1
|
|
call scrolla_1 ; Scrolla
|
|
ld hl, (tmpScroll1) ; Le o valor de tmp1 para HL
|
|
|
|
inc h ; Incrementa H, mas como estamos a trabalhar com um
|
|
; endereço de 16bits, na realidade vai adicionar
|
|
; $100 a HL
|
|
; Isto vai fazer com que a segunda rotina seja
|
|
; chamada com os seguintes endereços em tmp1
|
|
; videoAddr, videoAddr+$100 videoAddr+$200,
|
|
; ..., videoAddr+$700
|
|
|
|
dec c ; Decrementa o contador C
|
|
jr nz, scrolla_0 ; Se C != 0 corre novamente o Loop1
|
|
ret
|
|
|
|
; Segunda rotina
|
|
scrolla_1
|
|
ld hl, (tmpScroll1) ; Le o argumento tmp1 para HL
|
|
|
|
; Soma $20 ao endereço para começar no fim da linha, tudo à direita
|
|
push bc
|
|
ld bc, 20h
|
|
adc hl, bc
|
|
|
|
; Guarda o endereço do fim da linha em (ultimoaddr)
|
|
ld (ultimoaddr), hl
|
|
pop bc
|
|
|
|
ld b, 21h
|
|
|
|
; Loop2
|
|
scrolla_2
|
|
ld a, (hl)
|
|
rla
|
|
ld (hl), a
|
|
dec hl
|
|
djnz scrolla_2
|
|
|
|
ld hl, (ultimoaddr)
|
|
ld a, (hl)
|
|
rra
|
|
ld (hl), a
|
|
ret
|