Banner
  • Nosso banner:
    SMW Tech

Parceiros
SMW Central



Forumeiros

Login

Esqueci minha senha

Últimos assuntos
» A semana de tutoriais
Hoje à(s) 00:19 por Vitor Vilela

» Lunar Magic 2.01!
Ontem à(s) 21:59 por Manuz, major Flare

» Novos updates em breve
19/5/2012, 11:19 por Felipe H2

» My english isn't better now?
19/5/2012, 11:07 por Vitor Vilela

» Imagens e Vídeos de sua hack!
17/5/2012, 08:51 por Felipe H2

» Recomende um jogo
10/5/2012, 10:31 por Felipe H2

» Random Bar, Random Conversa
9/5/2012, 17:17 por Felipe H2

» Super Mario Bros. Classics
9/5/2012, 13:56 por Felipe H2

» Desculpe, mas
9/5/2012, 13:53 por Felipe H2

Estatísticas
Temos 88 usuários registrados
O último usuário registrado atende pelo nome de paulomario

Os nossos membros postaram um total de 2285 mensagens em 269 assuntos

V-Blank OVERFLOW D=

Ver o tópico anterior Ver o tópico seguinte Ir em baixo

V-Blank OVERFLOW D=

Mensagem por Vitor Vilela em 22/2/2012, 10:47

Estou com um gigante problema, eu coloquei alguns blocos de gelos do Ersanio (download: http://www.smwcentral.net/download.php?id=344&type=blocks) e quando uso a planta de fogo para quebrar ele, dá v-blank overflow (quando cerca de 1 frame fica totalmente com F-blank ou Force Blank, enfim, Tela da morte) e não sei o que fazer já que desativei a ExAnimation que tinha, 0 sprites dinâmicos, nenhum VWF Dialogues, mas mesmo assim o V-Blank Overflow é muito grande.

Aqui tem um log que dumpei para terem uma idéia -- invés do NMI terminar na V-Count < 262, ele termina no V-Count=15.
http://dl.dropbox.com/u/16203903/ANewYay/Master_Hands/vblank%20overflow.txt

Alguém tem idéia?

Vitor Vilela
Administrador
Administrador

Mensagens: 382
Pontos: 978
Data de inscrição: 03/10/2011
Idade: 13
Localização: EEPROM
Humor: Fail

http://smwtech.forum-livre.com

Voltar ao Topo Ir em baixo

Re: V-Blank OVERFLOW D=

Mensagem por Sr. Unde em 22/2/2012, 16:42

Se os blocos funcionarem normalmente em uma hack normal sem tudo que voce colocou, obviamente é algo que você fez de errado/está interferindo. O que? Não sei. Provavelmente é algo com a mudança de um bloco para outro.

Sr. Unde
Estrela Mágica
Estrela Mágica

Mensagens: 142
Pontos: 449
Data de inscrição: 03/10/2011
Idade: 12
Localização: Somewhere
Humor: Relativo de mais

http://undefinied3smwblog.blogspot.com/ e http://www.youtube.com/user/undefinied3?feature=mhee

Voltar ao Topo Ir em baixo

Re: V-Blank OVERFLOW D=

Mensagem por Vitor Vilela em 23/2/2012, 09:34

Não tenho muita idéia a razão, mas depois de olhar melhor, os blocos estão meio 'bugados':

- A fireball não desaparece e as vezes fica quicando igual a um bola mas sem o kiko.
- O smoke não aparece no local correto, aparece em lugares randoms
- nenhum sound effect [não sei se tem realmente]

Só algumas observações:

- Eu usei o manual block inserter e por causa disso tive que converter todos
- O bloco que estou usando é 32x32 que quebra quando a fireball toca


Enfim, aqui estão os codes para reforçar:

TopLeft:
Código:
Block500:

.PlayerBelow
.PlayerAbove
.PlayerSides
.PlayerTopCorner
.PlayerBodyInside
.PlayerHeadInside
.SpriteVert
.SpriteHoriz
.CapeTouch
RTS

.FireballTouch

; ======================================================================
; ======================================================================

   PHY
   PHB
   PHK
   PLB

   STZ $170B,x      ; \ Erase fireball
   JSR SUB_SMOKE      ; / Show smoke effect

   REP #$20
   LDY #$06

.MakingLoop1
   LDA #$0025
   STA $03

   JSR MAP16CHANGEOHDEAR

   LDA $98
   CLC
   ADC.w .TilePositionY1-$02,y
   STA $98
   LDA $9A
   CLC
   ADC.w .TilePositionX1-$02,y
   STA $9A


   DEY
   DEY
   BPL .MakingLoop1
   SEP #$20

   PLB
   PLY
.Return
   RTS

.TilePositionX1
dw $0010,$FFF0,$0010
.TilePositionY1
dw $0000,$0010,$0000


; Library
; Smoke Me

; ======================================================================
; ======================================================================

SUB_SMOKE:
   LDY #$03      ; \ find a free slot to display effect
FINDFREE:
   LDA $17C0,y      ;  |
   BEQ FOUNDONE      ;  |
   DEY         ;  |
   BPL FINDFREE      ;  |
   RTS         ; / return if no slots open

FOUNDONE:
   LDA #$01      ; \ set effect to smoke
   STA $17C0,y      ; /

   LDA $1715,x      ; \ set y pos of smoke
   STA $17C4,y      ; /

   LDA $171F,x      ; \ set x pos of smoke
   STA $17C8,y      ; /

   LDA #$18      ; \ set smoke duration
   STA $17CC,y      ; /
   RTS


; Library
; Map16 Change

MAP16CHANGEOHDEAR:
         PHP
         REP #$30
         PHY
         PHX
         TAX
         LDA $03
         PHA
         JSR SUB_8034
         PLA
         STA $03
         PLX
         PLY
         PLP
         RTS

RETURN18:      PLX
         PLB
         PLP
         RTS

SUB_8034:      PHP
         SEP #$20
         PHB
         LDA #$00
         PHA
         PLB
         REP #$30
         PHX
         LDA $9A
         STA $0C
         LDA $98
         STA $0E
         LDA #$0000
         SEP #$20
         LDA $5B
         STA $09
         LDA $1933
         BEQ NO_SHIFT
         LSR $09
NO_SHIFT:      LDY $0E
         LDA $09
         AND #$01
         BEQ HORIZ
         LDA $9B
         STA $00
         LDA $99
         STA $9B
         LDA $00
         STA $99
         LDY $0C
HORIZ:         CPY #$0200
         BCS RETURN18
         LDA $1933
         ASL A
         TAX
         LDA $BEA8,x
         STA $65
         LDA $BEA9,x
         STA $66
         STZ $67
         LDA $1925
         ASL A
         TAY
         LDA ($65),y
         STA $04
         INY
         LDA ($65),y
         STA $05
         STZ $06
         LDA $9B
         STA $07
         ASL A
         CLC
         ADC $07
         TAY
         LDA ($04),y
         STA $6B
         STA $6E
         INY
         LDA ($04),y
         STA $6C
         STA $6F
         LDA #$7E
         STA $6D
         INC A
         STA $70
         LDA $09
         AND #$01
         BEQ NO_AND
         LDA $99
         LSR A
         LDA $9B
         AND #$01
         BRA LABEL52
NO_AND:         LDA $9B
         LSR A
         LDA $99
LABEL52:      ROL A
         ASL A
         ASL A
         ORA #$20
         STA $04
         CPX #$0000
         BEQ NO_ADD
         CLC
         ADC #$10
         STA $04
NO_ADD:         LDA $98
         AND #$F0
         CLC
         ASL A
         ROL A
         STA $05
         ROL A
         AND #$03
         ORA $04
         STA $06
         LDA $9A
         AND #$F0
         LSR A
         LSR A
         LSR A
         STA $04
         LDA $05
         AND #$C0
         ORA $04
         STA $07
         REP #$20
         LDA $09
         AND #$0001
         BNE LABEL51
         LDA $1A
         SEC
         SBC #$0080
         TAX
         LDY $1C
         LDA $1933
         BEQ LABEL50
         LDX $1E
         LDA $20
         SEC
         SBC #$0080
         TAY
         BRA LABEL50
LABEL51:      LDX $1A
         LDA $1C
         SEC
         SBC #$0080
         TAY
         LDA $1933
         BEQ LABEL50
         LDA $1E
         SEC
         SBC #$0080
         TAX
         LDY $20
LABEL50:      STX $08
         STY $0A
         LDA $98
         AND #$01F0
         STA $04
         LDA $9A
         LSR A
         LSR A
         LSR A
         LSR A
         AND #$000F
         ORA $04
         TAY
         PLA
         SEP #$20
         STA [$6B],y
         XBA
         STA [$6E],y
         XBA
         REP #$20
         ASL A
         TAY
         PHK
         PER MAP16_RETURN-$01
         PEA $804C
         JML $00C0FB
MAP16_RETURN:      PLB
         PLP
         RTS


TopRight:
Código:
Block501:

.PlayerBelow
.PlayerAbove
.PlayerSides
.PlayerTopCorner
.PlayerBodyInside
.PlayerHeadInside
.SpriteVert
.SpriteHoriz
.CapeTouch
RTS
.FireballTouch

; ======================================================================
; ======================================================================

   PHY
   PHB
   PHK
   PLB

   STZ $170B,x      ; \ Erase fireball
   JSR SUB_SMOKE      ; / Show smoke effect

   REP #$20
   LDY #$06

.MakingLoop1
   LDA #$0025
   STA $03

   JSR MAP16CHANGEOHDEAR

   LDA $98
   CLC
   ADC.w .TilePositionY1-$02,y
   STA $98
   LDA $9A
   SEC
   SBC.w .TilePositionX1-$02,y
   STA $9A


   DEY
   DEY
   BPL .MakingLoop1
   SEP #$20

   PLB
   PLY
.Return
   RTS

.TilePositionX1
dw $0010,$FFF0,$0010
.TilePositionY1
dw $0000,$0010,$0000


Bottom Left:
Código:
Block502:

.PlayerBelow
.PlayerAbove
.PlayerSides
.PlayerTopCorner
.PlayerBodyInside
.PlayerHeadInside
.SpriteVert
.SpriteHoriz
.CapeTouch
RTS
.FireballTouch


; ======================================================================
; ======================================================================

   PHY
   PHB
   PHK
   PLB

   STZ $170B,x      ; \ Erase fireball
   JSR SUB_SMOKE      ; / Show smoke effect

   REP #$20
   LDY #$06

.MakingLoop1
   LDA #$0025
   STA $03

   JSR MAP16CHANGEOHDEAR

   LDA $98
   SEC
   SBC.w .TilePositionY1-$02,y
   STA $98
   LDA $9A
   CLC
   ADC.w .TilePositionX1-$02,y
   STA $9A


   DEY
   DEY
   BPL .MakingLoop1
   SEP #$20

   PLB
   PLY
.Return
   RTS

.TilePositionX1
dw $0010,$FFF0,$0010
.TilePositionY1
dw $0000,$0010,$0000


Bottom Right:
Código:
Block503:

.PlayerBelow
.PlayerAbove
.PlayerSides
.PlayerTopCorner
.PlayerBodyInside
.PlayerHeadInside
.SpriteVert
.SpriteHoriz
.CapeTouch
RTS
.FireballTouch


; ======================================================================
; ======================================================================

   PHY
   PHB
   PHK
   PLB

   STZ $170B,x      ; \ Erase fireball
   JSR SUB_SMOKE      ; / Show smoke effect

   REP #$20
   LDY #$06

.MakingLoop1
   LDA #$0025
   STA $03

   JSR MAP16CHANGEOHDEAR

   LDA $98
   SEC
   SBC.w .TilePositionY1-$02,y
   STA $98
   LDA $9A
   SEC
   SBC.w .TilePositionX1-$02,y
   STA $9A


   DEY
   DEY
   BPL .MakingLoop1
   SEP #$20

   PLB
   PLY
.Return
   RTS

.TilePositionX1
dw $0010,$FFF0,$0010
.TilePositionY1
dw $0000,$0010,$0000


Note que parte do código do TopLeft é compartilhado com os outros.

Vitor Vilela
Administrador
Administrador

Mensagens: 382
Pontos: 978
Data de inscrição: 03/10/2011
Idade: 13
Localização: EEPROM
Humor: Fail

http://smwtech.forum-livre.com

Voltar ao Topo Ir em baixo

Re: V-Blank OVERFLOW D=

Mensagem por Vitor Vilela em 26/2/2012, 21:06

Ninguém? Esse problema que estou tendo é realmente de prioridade máxima e já estou vários dias esperando por resposta. Creio que seja caso de vida ou morte da minha hack, pois pra que uma hack de gelo sem blocos de gelos? =(

Vitor Vilela
Administrador
Administrador

Mensagens: 382
Pontos: 978
Data de inscrição: 03/10/2011
Idade: 13
Localização: EEPROM
Humor: Fail

http://smwtech.forum-livre.com

Voltar ao Topo Ir em baixo

Re: V-Blank OVERFLOW D=

Mensagem por DiscoMan em 26/2/2012, 21:09

Cara se o problema é no V-blank, creio que os blocos não sejam o problema (a menos que o uso deles na hora cause isso) mas se não, o problema está em alguma coisa no NMI ou no IRQ ou até mesmo na rotina dos gráficos em geral, algo que está estourano o V-blank, afirmo isso pois tenho o mesmo problema, porém eu arrumei reduzindo a rotina gráfica em alguns ciclos, foram poucos mas resolveu um pouco além de ter deixado mais eficiente.

Olhe o código gráfico Vitor, as vezes tem algo que não tá eficiente OU rodando eficientemente.

DiscoMan
Estrela Mágica
Estrela Mágica

Mensagens: 246
Pontos: 2704
Data de inscrição: 09/10/2011
Localização: Studio 54

Voltar ao Topo Ir em baixo

Re: V-Blank OVERFLOW D=

Mensagem por Vitor Vilela em 26/2/2012, 21:13

Bem, não sei muito o porque da V-Blank overflow, mas descobri alguns problemas extras:

- Os smokes aparecem em lugares random invés próximo dos blocos
- A fireball não é apagada
- As vezes a fireball fica quicando sem parar.

Caso queria ver o code dos blocos, está lá em cima. Só lembrando que converti do BTSD para a versão mais recente do Manual Block Inserter e esse bloco é o ice 32x32 que não se divide em 4 e é do Ersanio.

Vitor Vilela
Administrador
Administrador

Mensagens: 382
Pontos: 978
Data de inscrição: 03/10/2011
Idade: 13
Localização: EEPROM
Humor: Fail

http://smwtech.forum-livre.com

Voltar ao Topo Ir em baixo

Re: V-Blank OVERFLOW D=

Mensagem por DiscoMan em 26/2/2012, 21:16

Creio que pode arrumar o Smoke, só que ao invés de LDY #$03, tente LDY #$00 o resto ainda tenho que olhar mais tarde, mas porque usar o patch ao invés do tool? Creio que ele seja um pouco bugado, na minha opinião.

EDIT: Tente otimizar um pouco o código, trocando PER por PEAs, JSRs por JMPs (quando possível) e tente não usar 16-bit mode quando possível também.

DiscoMan
Estrela Mágica
Estrela Mágica

Mensagens: 246
Pontos: 2704
Data de inscrição: 09/10/2011
Localização: Studio 54

Voltar ao Topo Ir em baixo

Re: V-Blank OVERFLOW D=

Mensagem por Vitor Vilela em 26/2/2012, 21:22

Não uso o BTSD porque ele não é compatível com o SA-1 Memory Mapping e também ele as vezes dá conflito de RATS com o Sprite Tool e outros.

Sobre o LDY #$00...

[testando]

Nenhum efeito. Aliás, ficar com LDY #$00 é errado já que esse loop serve para achar um free slot de smoke na OAM e/ou Smoke Table.

Vitor Vilela
Administrador
Administrador

Mensagens: 382
Pontos: 978
Data de inscrição: 03/10/2011
Idade: 13
Localização: EEPROM
Humor: Fail

http://smwtech.forum-livre.com

Voltar ao Topo Ir em baixo

Re: V-Blank OVERFLOW D=

Mensagem por DiscoMan em 26/2/2012, 21:26

Errado não é, o código cria sprites de fumaça extra, por isso usei LDY #$00 e não me deu nenhum problema, pelo menos tente reduzir pra LDY #$01, deixe-me mostar o código:

Código:
Smoke:
SUB_SMOKE1:  LDY #$00                ; \ find a free slot to display effect
FINDFREE1:    LDA $17C0,y            ;  |
            BEQ FOUNDONE1      ;  |
            DEY                      ;  |
            BPL FINDFREE1        ;  |
            RTS                      ; / return if no slots open

FOUNDONE1:    LDA #$01                ; \ set effect graphic to smoke graphic
            STA $17C0,y            ; /
            LDA #$1B                ; \ set time to show smoke
            STA $17CC,y            ; /
            LDA $94              ; \ load generator x position and store it for later
            STA $17C8            ; /
            LDA $95              ; \ load generator x position and store it for later
            STA $17C9            ; /
            LDA $96              ; \ smoke y position = generator y position
        SEC                    ; |
        SBC #$F5          ; |
            STA $17C4          ; /
            LDA $97            ; \ smoke y position = generator y position
        SEC            ; |
        SBC #$F5        ; |
            STA $17C5          ; /
RTS


Sim, usei LDY #$00...

Ou então o problema pode ser no patch, mas entretanto, você poderia usar o BTSD, fazer um hijack na rotina que é a mesma desse patch, e carregar a mesma rotina só que usando o SA-1, seria mais demorado mas também compatível, em minha opinião.

Ou use FastROM...

DiscoMan
Estrela Mágica
Estrela Mágica

Mensagens: 246
Pontos: 2704
Data de inscrição: 09/10/2011
Localização: Studio 54

Voltar ao Topo Ir em baixo

Re: V-Blank OVERFLOW D=

Mensagem por Vitor Vilela em 26/2/2012, 21:53

Sem efeitio... Agora vou mostrar um vídeo [não listado] para ve o que acontece:



DOUBLE POST EDIT por justiça!

Descobri o problema do smoke e da fireball! Era problema do patch de imamelia, pois antes de executar o code o X era modificado e assim dava invalid pointer quando chega. Para corrigir, basta colocar um:

lda $03,s
tax

antes do

JMP ($0006)

------------------------------------
Mas a questão em si ainda não está resolvida. Os blocos ice 32x32 continuam a dar um pequeno V-Blank overflow. Não sei se é algo relacionado a Map16Change, já que os 16x16 não tem isso (invés tem um lda : sta : jsl para gerar um empty tile)

Vitor Vilela
Administrador
Administrador

Mensagens: 382
Pontos: 978
Data de inscrição: 03/10/2011
Idade: 13
Localização: EEPROM
Humor: Fail

http://smwtech.forum-livre.com

Voltar ao Topo Ir em baixo

Re: V-Blank OVERFLOW D=

Mensagem por DiscoMan em 27/2/2012, 17:23

Percebo que no code você usa muito código 16-bit, tente reduzir a quantidade de bits utilizado, é óbvio que algumas rotinas terão de usar 16-bit mas em geral, tente não usá-lo quando NÃO necessário.

DiscoMan
Estrela Mágica
Estrela Mágica

Mensagens: 246
Pontos: 2704
Data de inscrição: 09/10/2011
Localização: Studio 54

Voltar ao Topo Ir em baixo

Re: V-Blank OVERFLOW D=

Mensagem por Vitor Vilela em 27/2/2012, 19:40

Que nada cara, 16-bit mode já é melhor que 8-bit mode. Exemplo:

lda $8c
sta $00
lda $8d
sta $01
lda $8e
sta $02

essa code leva 18 cycles para transferir os dados em $8c-$8e para $00-$02. No modo 16-bit:

lda $8c
sta $00
ldy $8e
sta $02

já esse aqui gasta 14 cycles. Não estou incluindo SEP/REP já que se fosse assim, também teria que botar um SEP para 8-bit, né?

Ah e descobri finalmente o problema do v-blank overflow. Depois de olhar, acho que o VWF Dialogues, LM 1.7x VRAM Opt e o SA-1 Interface gasta bastante cycles. Vou tentar otimizar o código. Então, creio que já está solucionado esse problema mais desgastante que já tive em todo SMW Hacking. Obrigado pela grande ajuda.

Vitor Vilela
Administrador
Administrador

Mensagens: 382
Pontos: 978
Data de inscrição: 03/10/2011
Idade: 13
Localização: EEPROM
Humor: Fail

http://smwtech.forum-livre.com

Voltar ao Topo Ir em baixo

Ver o tópico anterior Ver o tópico seguinte Voltar ao Topo


Permissão deste fórum:
Você não pode responder aos tópicos neste fórum