mirror of https://github.com/falsovsky/z80.git
Separar as rotinas em ficheiros diferentes para incluir só o que interessa
This commit is contained in:
parent
68ddbe88d2
commit
5655a98af2
|
|
@ -0,0 +1,16 @@
|
||||||
|
; Rotina de delay variavel, conforme o valor definido em A antes de a chamar
|
||||||
|
; Ripada do Paradise Café
|
||||||
|
delay
|
||||||
|
push bc
|
||||||
|
delay_start
|
||||||
|
ld c, 20
|
||||||
|
delay_loop2
|
||||||
|
ld b, 0
|
||||||
|
delay_loop1
|
||||||
|
djnz delay_loop1 ; b--, se b != 0 corre novamente o loop1
|
||||||
|
dec c ; c--
|
||||||
|
jr nz, delay_loop2 ; Se c != 0 corre o loop2
|
||||||
|
dec a ; a--
|
||||||
|
jr nz, delay_start ; Se a != 0 volta ao inicio da rotina
|
||||||
|
pop bc
|
||||||
|
ret
|
||||||
|
|
@ -55,136 +55,9 @@ mainloop
|
||||||
exit
|
exit
|
||||||
pop bc ; Tira o BC da Stack
|
pop bc ; Tira o BC da Stack
|
||||||
ret ; Sai para o BASIC
|
ret ; Sai para o BASIC
|
||||||
|
|
||||||
; Rotina de delay variavel, conforme o valor definido em A antes de a chamar
|
|
||||||
; Ripada do Paradise Café
|
|
||||||
delay
|
|
||||||
push bc
|
|
||||||
delay_start
|
|
||||||
ld c, 20
|
|
||||||
delay_loop2
|
|
||||||
ld b, 0
|
|
||||||
delay_loop1
|
|
||||||
djnz delay_loop1 ; b--, se b != 0 corre novamente o loop1
|
|
||||||
dec c ; c--
|
|
||||||
jr nz, delay_loop2 ; Se c != 0 corre o loop2
|
|
||||||
dec a ; a--
|
|
||||||
jr nz, delay_start ; Se a != 0 volta ao inicio da rotina
|
|
||||||
pop bc
|
|
||||||
ret
|
|
||||||
|
|
||||||
; 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
|
;INCLUDE "scroll_pc.asm"
|
||||||
; endereço de 16bits, na realidade vai adicionar
|
INCLUDE "scroll_pixel.asm"
|
||||||
; $100 a HL
|
INCLUDE "delay.asm"
|
||||||
; 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 $1F ao endereço para começar no fim da linha, tudo à direita
|
|
||||||
push bc
|
|
||||||
;ld bc, 1Fh
|
|
||||||
ld bc, 20h
|
|
||||||
adc hl, bc
|
|
||||||
|
|
||||||
; Guarda o endereço do fim da linha em (ultimoaddr)
|
|
||||||
ld b, h
|
|
||||||
ld c, l
|
|
||||||
ld (ultimoaddr), bc
|
|
||||||
pop bc
|
|
||||||
|
|
||||||
ld b, 1Fh ; Numero de vezes que a rotina vai correr
|
|
||||||
ld b, 21h ; Numero de vezes que a rotina vai correr
|
|
||||||
|
|
||||||
|
|
||||||
; 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
|
|
||||||
|
|
||||||
; Antiga
|
|
||||||
|
|
||||||
; Rotina de scroll de texto da direita para a esquerda
|
|
||||||
; Ripada do Paradise Café
|
|
||||||
scrollaPC
|
|
||||||
ld hl, videoAddr ; Endereço de Memoria Video a ser manipulado
|
|
||||||
ld c, 8 ; Numero de vezes que a rotina vai correr
|
|
||||||
; 8 porque é o numero de pixels a scrollar
|
|
||||||
|
|
||||||
; Loop1
|
|
||||||
scrollaPC_0
|
|
||||||
ld (tmpScroll1), hl ; Guarda o valor de HL em tmp1
|
|
||||||
call scrollaPC_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, scrollaPC_0 ; Se C != 0 corre novamente a Loop1
|
|
||||||
ret
|
|
||||||
|
|
||||||
; Segunda rotina
|
|
||||||
scrollaPC_1
|
|
||||||
ld hl, (tmpScroll1) ; Le o argumento tmp1 para HL
|
|
||||||
ld b, 1Fh ; Numero de vezes que a rotina vai correr
|
|
||||||
; $1F porque cada linha tem 32 bytes
|
|
||||||
|
|
||||||
ld d, h ; DE = HL
|
|
||||||
ld e, l ;
|
|
||||||
|
|
||||||
ld a, (hl) ; Le o valor dos 8 pixeis no endereço definido em HL
|
|
||||||
ld (tmpScroll2), a ; Guarda o valor em tmp2
|
|
||||||
; Isto vai guardar o valor dos 8 pixels mais à
|
|
||||||
; esquerda, que posteriormente vão ser postos o
|
|
||||||
; mais à direita
|
|
||||||
|
|
||||||
; Loop2
|
|
||||||
scrollaPC_2
|
|
||||||
inc hl ; Incrementa a posicao na memoria grafica definida
|
|
||||||
; em HL
|
|
||||||
|
|
||||||
ld a, (hl) ; Le o valor dos proximos 8 pixeis
|
|
||||||
ld (de), a ; Guarda-os na posição anterior
|
|
||||||
inc de ; Incrementa DE, fica com o mesmo valor de HL
|
|
||||||
djnz scrollaPC_2 ; b--, se b != corre novamente o Loop2
|
|
||||||
|
|
||||||
ld a, (tmpScroll2) ; Le o valor dos 8 pixeis guardados inicialmente
|
|
||||||
ld (de), a ; Mete-os na posição mais à direita
|
|
||||||
ret
|
|
||||||
|
|
||||||
end start
|
end start
|
||||||
|
|
|
||||||
|
|
@ -1,19 +1,15 @@
|
||||||
delay EQU 07596H
|
delay EQU 075CAH
|
||||||
delay_loop1 EQU 0759BH
|
delay_loop1 EQU 075CFH
|
||||||
delay_loop2 EQU 07599H
|
delay_loop2 EQU 075CDH
|
||||||
delay_start EQU 07597H
|
delay_start EQU 075CBH
|
||||||
exit EQU 07594H
|
exit EQU 07594H
|
||||||
mainloop EQU 07580H
|
mainloop EQU 07580H
|
||||||
mystr EQU 07530H
|
mystr EQU 07530H
|
||||||
printa_ate_255 EQU 07575H
|
printa_ate_255 EQU 07575H
|
||||||
scrolla EQU 075A5H
|
scrolla EQU 07596H
|
||||||
scrollaPC EQU 075D9H
|
scrolla_0 EQU 0759BH
|
||||||
scrollaPC_0 EQU 075DEH
|
scrolla_1 EQU 075A9H
|
||||||
scrollaPC_1 EQU 075ECH
|
scrolla_2 EQU 075BDH
|
||||||
scrollaPC_2 EQU 075F7H
|
|
||||||
scrolla_0 EQU 075AAH
|
|
||||||
scrolla_1 EQU 075B8H
|
|
||||||
scrolla_2 EQU 075CCH
|
|
||||||
start EQU 0756DH
|
start EQU 0756DH
|
||||||
tmpScroll1 EQU 07568H
|
tmpScroll1 EQU 07568H
|
||||||
tmpScroll2 EQU 0756CH
|
tmpScroll2 EQU 0756CH
|
||||||
|
|
|
||||||
Binary file not shown.
|
|
@ -28,14 +28,14 @@
|
||||||
<Settings>
|
<Settings>
|
||||||
<ScorePanel>
|
<ScorePanel>
|
||||||
<Alignment>1</Alignment>
|
<Alignment>1</Alignment>
|
||||||
<Layout>0</Layout>
|
<Layout>1</Layout>
|
||||||
<Show>false</Show>
|
<Show>false</Show>
|
||||||
<AllowOverlap>false</AllowOverlap>
|
<AllowOverlap>false</AllowOverlap>
|
||||||
<XOverlap>0</XOverlap>
|
<XOverlap>0</XOverlap>
|
||||||
<YOverlap>0</YOverlap>
|
<YOverlap>0</YOverlap>
|
||||||
</ScorePanel>
|
</ScorePanel>
|
||||||
<ScreenLayout>
|
<ScreenLayout>
|
||||||
<DontIntersectTiles>false</DontIntersectTiles>
|
<DontIntersectTiles>true</DontIntersectTiles>
|
||||||
<SnapToGrid>true</SnapToGrid>
|
<SnapToGrid>true</SnapToGrid>
|
||||||
<GridWidth>8</GridWidth>
|
<GridWidth>8</GridWidth>
|
||||||
<GridHeight>8</GridHeight>
|
<GridHeight>8</GridHeight>
|
||||||
|
|
@ -82,6 +82,9 @@
|
||||||
</Settings>
|
</Settings>
|
||||||
<Files>
|
<Files>
|
||||||
<File>game.asm</File>
|
<File>game.asm</File>
|
||||||
|
<File>scroll_pixel.asm</File>
|
||||||
|
<File>delay.asm</File>
|
||||||
|
<File>scroll_pc.asm</File>
|
||||||
</Files>
|
</Files>
|
||||||
</CodeEditor>
|
</CodeEditor>
|
||||||
</TommyGunProject>
|
</TommyGunProject>
|
||||||
|
|
|
||||||
|
|
@ -28,14 +28,14 @@
|
||||||
<Settings>
|
<Settings>
|
||||||
<ScorePanel>
|
<ScorePanel>
|
||||||
<Alignment>1</Alignment>
|
<Alignment>1</Alignment>
|
||||||
<Layout>0</Layout>
|
<Layout>1</Layout>
|
||||||
<Show>false</Show>
|
<Show>false</Show>
|
||||||
<AllowOverlap>false</AllowOverlap>
|
<AllowOverlap>false</AllowOverlap>
|
||||||
<XOverlap>0</XOverlap>
|
<XOverlap>0</XOverlap>
|
||||||
<YOverlap>0</YOverlap>
|
<YOverlap>0</YOverlap>
|
||||||
</ScorePanel>
|
</ScorePanel>
|
||||||
<ScreenLayout>
|
<ScreenLayout>
|
||||||
<DontIntersectTiles>false</DontIntersectTiles>
|
<DontIntersectTiles>true</DontIntersectTiles>
|
||||||
<SnapToGrid>true</SnapToGrid>
|
<SnapToGrid>true</SnapToGrid>
|
||||||
<GridWidth>8</GridWidth>
|
<GridWidth>8</GridWidth>
|
||||||
<GridHeight>8</GridHeight>
|
<GridHeight>8</GridHeight>
|
||||||
|
|
@ -82,6 +82,9 @@
|
||||||
</Settings>
|
</Settings>
|
||||||
<Files>
|
<Files>
|
||||||
<File>game.asm</File>
|
<File>game.asm</File>
|
||||||
|
<File>scroll_pixel.asm</File>
|
||||||
|
<File>delay.asm</File>
|
||||||
|
<File>scroll_pc.asm</File>
|
||||||
</Files>
|
</Files>
|
||||||
</CodeEditor>
|
</CodeEditor>
|
||||||
</TommyGunProject>
|
</TommyGunProject>
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,53 @@
|
||||||
|
; Rotina de scroll de texto da direita para a esquerda
|
||||||
|
; Ripada do Paradise Café
|
||||||
|
scrollaPC
|
||||||
|
ld hl, videoAddr ; Endereço de Memoria Video a ser manipulado
|
||||||
|
ld c, 8 ; Numero de vezes que a rotina vai correr
|
||||||
|
; 8 porque é o numero de pixels a scrollar
|
||||||
|
|
||||||
|
; Loop1
|
||||||
|
scrollaPC_0
|
||||||
|
ld (tmpScroll1), hl ; Guarda o valor de HL em tmp1
|
||||||
|
call scrollaPC_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, scrollaPC_0 ; Se C != 0 corre novamente a Loop1
|
||||||
|
ret
|
||||||
|
|
||||||
|
; Segunda rotina
|
||||||
|
scrollaPC_1
|
||||||
|
ld hl, (tmpScroll1) ; Le o argumento tmp1 para HL
|
||||||
|
ld b, 1Fh ; Numero de vezes que a rotina vai correr
|
||||||
|
; $1F porque cada linha tem 32 bytes
|
||||||
|
|
||||||
|
ld d, h ; DE = HL
|
||||||
|
ld e, l ;
|
||||||
|
|
||||||
|
ld a, (hl) ; Le o valor dos 8 pixeis no endereço definido em HL
|
||||||
|
ld (tmpScroll2), a ; Guarda o valor em tmp2
|
||||||
|
; Isto vai guardar o valor dos 8 pixels mais à
|
||||||
|
; esquerda, que posteriormente vão ser postos o
|
||||||
|
; mais à direita
|
||||||
|
|
||||||
|
; Loop2
|
||||||
|
scrollaPC_2
|
||||||
|
inc hl ; Incrementa a posicao na memoria grafica definida
|
||||||
|
; em HL
|
||||||
|
|
||||||
|
ld a, (hl) ; Le o valor dos proximos 8 pixeis
|
||||||
|
ld (de), a ; Guarda-os na posição anterior
|
||||||
|
inc de ; Incrementa DE, fica com o mesmo valor de HL
|
||||||
|
djnz scrollaPC_2 ; b--, se b != corre novamente o Loop2
|
||||||
|
|
||||||
|
ld a, (tmpScroll2) ; Le o valor dos 8 pixeis guardados inicialmente
|
||||||
|
ld (de), a ; Mete-os na posição mais à direita
|
||||||
|
ret
|
||||||
|
|
@ -0,0 +1,57 @@
|
||||||
|
; 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 $1F ao endereço para começar no fim da linha, tudo à direita
|
||||||
|
push bc
|
||||||
|
;ld bc, 1Fh
|
||||||
|
ld bc, 20h
|
||||||
|
adc hl, bc
|
||||||
|
|
||||||
|
; Guarda o endereço do fim da linha em (ultimoaddr)
|
||||||
|
ld b, h
|
||||||
|
ld c, l
|
||||||
|
ld (ultimoaddr), bc
|
||||||
|
pop bc
|
||||||
|
|
||||||
|
ld b, 1Fh ; Numero de vezes que a rotina vai correr
|
||||||
|
ld b, 21h ; Numero de vezes que a rotina vai correr
|
||||||
|
|
||||||
|
|
||||||
|
; 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
|
||||||
Loading…
Reference in New Issue