Pregunta

Por adelantado, me disculpo por la finalización abierta y la lavadora general de esta pregunta, porque es honesto, mi conocimiento del tema es muy parcial y me parece difícil incluso describir mi problema.Realmente no quería publicar, pero estoy completamente y completamente estancado.

He comenzado un emulador NES.Es interpretado (por lo que no hay recompra dinámica).

ATM Puede cargar y mapear ROM (Mapper 0 ROM) y ejecutar el código de inicio hasta donde tengo que lidiar con las interrupciones y la PPU.Ahí es donde estoy atascado.

Aquí hay una salida de ejemplo de mi EMU ATM.La ejecución comienza en 8000, y llegué a un bucle infinito a 800A, donde no tengo idea de cómo progresar desde allí.

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)

Entonces, mi pregunta es, ¿puede alguien explicar los conceptos básicos de 1 iteración a través de una PPU para mí, incluidas las cosas como el recuento de ciclos, las interrupciones, etc. (es decir, dibuje una pantalla completa de 240 escáneres y se mueva hacia arribael siguiente).

¿Fue útil?

Solución

Hay emuladores por ahí, ¿ha visto sus fuentes para la respuesta?Por lo general, los están escritos para el rendimiento y no son muy legibles, pero es posible que pueda encontrar un tidbit para que lo haga.¿Está el código esperando que se ejecute una interrupción y ha ejecutado esa interrupción?Puede ser que la interrupción modifica la dirección de retorno y permite que el programa continúe?¿El bucle infinito es un votinoso un poco en un registro?¿O es una rama incondicional para sí mismo?

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top