Основные теории эмуляции NES - я застрял
Вопрос
заранее, я прошу прощения за открытую экономность, и общую пожелание этого вопроса, потому что, честно говоря, мои знания о теме очень пятнистые, и я трудно даже описать мою проблему.Я действительно не хотел публиковать, но я полностью и полностью застрял.
Я начал эмулятор NES.Это интерпретируется (так что нет динамического ремешка).
ATM Это может загрузить и отображать роммы (Mapper 0 RoMs) и выполнить код init, прямо до того, как мне нужно иметь дело с прерываниями и PPU.Вот где я застрял.
Вот пример вывода из моего EMU ATM.Исполнение начинается с 8000, и я ударил бесконечную петлю на 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 рендеринг для меня, включая такие вещи, как вещами, прерывания и т. Д.следующий).
Решение
Есть эмуляторы там, вы смотрели на их источники для ответа?Обычно те, которые написаны для производительности и не очень читаемы, но вы можете найти тидбит, чтобы вы могли идти.Является ли код в ожидании выполнения прерывания, и вы выполняете это прерывание?Возможно, это прерывание изменяет адрес возврата и позволяет продолжать программу?Бесконечная петель опрокинут немного в реестре?Или это безусловная ветвь для себя?