Teoria dell'emulazione di base NES - Sono bloccato
Domanda
In anticipo, mi scuso per la chiusura aperta e il disastro generale del desiderio di questa domanda, perché ad essere onesti, la mia conoscenza dell'argomento è molto chiazzata e sto trovando difficile anche descrivere il mio problema.Non volevo davvero pubblicare, ma sono completamente e completamente bloccato.
Ho iniziato un emulatore NES.È interpretato (quindi nessun record dinamico).
ATM può caricare e mappare le ROM (Mapper 0 Rom) ed eseguire il codice iniziale fino a dove devo affrontare gli interrupt e la PPU.È lì che sono bloccato.
Ecco un esempio di emissione dal mio ATM EMU.L'esecuzione inizia a 8000, e colpisco un ciclo infinito a 800a dove non ho idea di come progredire da 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)
.
Quindi la mia domanda è, può qualcuno per favore spiegare Le basi di 1 iterazione attraverso una PPU rendono per me, comprese cose come il numero del ciclo, gli interrupt ecc. (cioè disegnare un intero schermo di scansione 240 e spostarsi suil prossimo).
Soluzione
Ci sono emulatori là fuori, hai guardato le loro fonti per la risposta?Di solito quelli sono scritti per le prestazioni e non molto leggibili ma potresti trovare un tidbit per farti andare.Il codice in attesa di un'interruzione da eseguire e che hai eseguito quell'interruzione?Potrebbe essere che l'interrupt modifica l'indirizzo di ritorno e consente al programma di continuare?Il ciclo infinito è un po 'un po' in un registro?O è un ramo incondizionato a sé?