Separar as rotinas em ficheiros diferentes para incluir só o que interessa

This commit is contained in:
Pedro de Oliveira 2014-08-10 22:37:26 +01:00
parent 68ddbe88d2
commit 5655a98af2
8 changed files with 147 additions and 146 deletions

16
scroller/delay.asm Normal file
View File

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

View File

@ -55,136 +55,9 @@ mainloop
exit
pop bc ; Tira o BC da Stack
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
; 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
;INCLUDE "scroll_pc.asm"
INCLUDE "scroll_pixel.asm"
INCLUDE "delay.asm"
; 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

View File

@ -1,19 +1,15 @@
delay EQU 07596H
delay_loop1 EQU 0759BH
delay_loop2 EQU 07599H
delay_start EQU 07597H
delay EQU 075CAH
delay_loop1 EQU 075CFH
delay_loop2 EQU 075CDH
delay_start EQU 075CBH
exit EQU 07594H
mainloop EQU 07580H
mystr EQU 07530H
printa_ate_255 EQU 07575H
scrolla EQU 075A5H
scrollaPC EQU 075D9H
scrollaPC_0 EQU 075DEH
scrollaPC_1 EQU 075ECH
scrollaPC_2 EQU 075F7H
scrolla_0 EQU 075AAH
scrolla_1 EQU 075B8H
scrolla_2 EQU 075CCH
scrolla EQU 07596H
scrolla_0 EQU 0759BH
scrolla_1 EQU 075A9H
scrolla_2 EQU 075BDH
start EQU 0756DH
tmpScroll1 EQU 07568H
tmpScroll2 EQU 0756CH

Binary file not shown.

View File

@ -28,14 +28,14 @@
<Settings>
<ScorePanel>
<Alignment>1</Alignment>
<Layout>0</Layout>
<Layout>1</Layout>
<Show>false</Show>
<AllowOverlap>false</AllowOverlap>
<XOverlap>0</XOverlap>
<YOverlap>0</YOverlap>
</ScorePanel>
<ScreenLayout>
<DontIntersectTiles>false</DontIntersectTiles>
<DontIntersectTiles>true</DontIntersectTiles>
<SnapToGrid>true</SnapToGrid>
<GridWidth>8</GridWidth>
<GridHeight>8</GridHeight>
@ -82,6 +82,9 @@
</Settings>
<Files>
<File>game.asm</File>
<File>scroll_pixel.asm</File>
<File>delay.asm</File>
<File>scroll_pc.asm</File>
</Files>
</CodeEditor>
</TommyGunProject>

View File

@ -28,14 +28,14 @@
<Settings>
<ScorePanel>
<Alignment>1</Alignment>
<Layout>0</Layout>
<Layout>1</Layout>
<Show>false</Show>
<AllowOverlap>false</AllowOverlap>
<XOverlap>0</XOverlap>
<YOverlap>0</YOverlap>
</ScorePanel>
<ScreenLayout>
<DontIntersectTiles>false</DontIntersectTiles>
<DontIntersectTiles>true</DontIntersectTiles>
<SnapToGrid>true</SnapToGrid>
<GridWidth>8</GridWidth>
<GridHeight>8</GridHeight>
@ -82,6 +82,9 @@
</Settings>
<Files>
<File>game.asm</File>
<File>scroll_pixel.asm</File>
<File>delay.asm</File>
<File>scroll_pc.asm</File>
</Files>
</CodeEditor>
</TommyGunProject>

53
scroller/scroll_pc.asm Normal file
View File

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

57
scroller/scroll_pixel.asm Normal file
View File

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