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).

È stato utile?

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é?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top