Théorie de l'émulation NES de base - je suis coincée
Question
À l'avance, je m'excuse pour la mise en temps ouverte et la dissidence générale de cette question, car d'être honnête ma connaissance du sujet est très inégalée et je trouve qu'il est difficile de décrire même mon problème.Je ne voulais vraiment pas poster, mais je suis complètement et complètement coincé.
J'ai commencé un émulateur NES.Il est interprété (donc pas de recoms dynamique).
guichet automatique Il peut charger et mapper des roms (mapper 0 ROM) et exécuter le code init jusqu'à où je dois faire face aux interruptions et au PPU.C'est là que je suis coincé.
Voici un exemple de sortie de mon guichet automatique EMU.L'exécution commence à 8000 et j'ai frappé une boucle infinie à 800a où je ne sais pas comment progresser de là.
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)
Donc, ma question est que quelqu'un puisse s'il vous plaît expliquer
La solution
Il y a des émulateurs là-bas, avez-vous regardé leurs sources pour la réponse?Habituellement, ceux-ci sont écrits pour la performance et pas très lisibles, mais vous pourriez trouver une tirée pour vous faire aller.Le code attend-il une interruption doit être exécuté et avez-vous exécuté cette interruption?Il se peut que l'interruption modifie l'adresse de retour et permet au programme de continuer?La boucle infinie est-elle un peu dans un registre?ou est-ce une branche inconditionnelle à soi?