Заранее, я приношу извинения за открытый endedness и общую слабую слабость этого вопроса, потому что, чтобы быть честным мое знание темы очень неоднородно и мне трудно даже описать мою проблему. Я действительно не хотел отправлять, но я полностью и крайне застреваю.
Я запустил эмулятор NES. Это интерпретировало (так никакой динамический recomp).
Банкомат это может загрузить и отобразить шумные игры (картопостроитель 0 шумных игр) и выполнить право кода init туда, где я должен иметь дело с прерываниями и PPU. Это - то, где я застреваю.
Вот вывод в качестве примера от моего банкомата страуса эму. Выполнение начинается в 8 000, и я поразил бесконечный цикл в 800a, где я понятия не имею, как прогрессировать оттуда.
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)
Таким образом, мой вопрос, может кто-то объяснять основы 1 повторения посредством рендеринга PPU для меня, включая вещи как количество цикла, прерывания и т.д. (т.е. потяните одни целые 240 экранов строки развертки и перейдите на следующее).
Существуют эмуляторы. Вы искали ответ в их источниках? обычно они написаны для повышения производительности и не очень удобочитаемы, но вы можете найти лакомый кусочек, который поможет вам начать работу. ожидает ли код выполнения прерывания и выполнили ли вы это прерывание? Может быть, прерывание изменяет адрес возврата и позволяет программе продолжить работу? опрашивает ли бесконечный цикл бит в регистре? или это безусловная ветвь по отношению к себе?