Pergunta

Antecipadamente, peço desculpas pela abertura e pela insolência geral desta questão, porque, para ser sincero, meu conhecimento do assunto é muito irregular e estou achando difícil até mesmo descrever meu problema.Eu realmente não queria postar, mas estou completa e totalmente preso.

Eu comecei um emulador de NES.É interpretado (portanto, não há recompra dinâmica).

Atm ele pode carregar e mapear roms (mapeador 0 roms) e executar o código init até onde eu tenho que lidar com interrupções e PPU.É aí que estou preso.

Aqui está um exemplo de saída do meu emu atm.A execução começa em 8.000 e atingi um loop infinito em 800a, onde não tenho ideia de como progredir a partir daí.

8002: LDA #$10    ; read immediate value to set PPU control registers 
8004: STA $2000   ; store value 
8007: LDX #$FF    ; load immediate value into X register 
8009: TXS         ; store X register into stack 
800a: LDA $2002   ; read PPU flags into accumulator (set N flag based on bit 7) 
800d: BPL         ; test N flag, branch to 800a if not positive, (N is set) 
800a: LDA $2002
800d: BPL
800a: LDA $2002
800d: BPL
800a: LDA $2002
800d: BPL
etc, etc etc (inf loop)

Minha pergunta é: alguém pode explicar o básico de 1 iteração através de uma renderização PPU para mim, incluindo coisas como contagem de ciclos, interrupções, etc.desenhe uma tela inteira de 240 linhas de varredura e passe para a próxima).

Foi útil?

Solução

Existem emuladores por aí, você já consultou as fontes para obter a resposta?geralmente eles são escritos para desempenho e não são muito legíveis, mas você pode encontrar um boato para começar.o código está aguardando a execução de uma interrupção e você executou essa interrupção?Pode ser que a interrupção modifique o endereço de retorno e permita que o programa continue?o loop infinito está pesquisando um pouco em um registro?ou é um ramo incondicional para si mesmo?

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top