Вопрос

заранее, я прошу прощения за открытую экономность, и общую пожелание этого вопроса, потому что, честно говоря, мои знания о теме очень пятнистые, и я трудно даже описать мою проблему.Я действительно не хотел публиковать, но я полностью и полностью застрял.

Я начал эмулятор 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 рендеринг для меня, включая такие вещи, как вещами, прерывания и т. Д.следующий).

Это было полезно?

Решение

Есть эмуляторы там, вы смотрели на их источники для ответа?Обычно те, которые написаны для производительности и не очень читаемы, но вы можете найти тидбит, чтобы вы могли идти.Является ли код в ожидании выполнения прерывания, и вы выполняете это прерывание?Возможно, это прерывание изменяет адрес возврата и позволяет продолжать программу?Бесконечная петель опрокинут немного в реестре?Или это безусловная ветвь для себя?

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top