PPU reset logic

Reset Pad

RES = NOT(/RES);
RC = RES | RESET_FF;
RESET_FF = RC & NOT(RESCL);

Ну или так:
if (RES) RESET_FF = 1;
if (RESCL) RESET_FF = 0;
RC = RESET_FF;

/RES: input reset pad
RES: internal reset control line
RC: register clear control line
RESCL: clear reset flip/flop
RESET_FF: reset flip/flop

Контрольная линия RC ("очистить регистры") будет активна до тех пор, пока PPU не сгенерирует сигнал RESCL (очистить защелку RESET). Сделано это для того, чтобы если сигнал сброса возник посреди кадра, то регистры были бы в статусе "сброса" до конца текущего кадра и весь следующий (в H/V логике добавлена специальная задержка).

Это гарантирует что все регистры очистятся правильно и контекст PPU будет снова девственно чистым.

В связи с этим каждая игра NES имет вначале следующий код:

WAIT_VBLANK1 
   LDA PPU_STATUS 
   BPL WAIT_VBLANK1  

WAIT_VBLANK2 
   LDA PPU_STATUS 
   BPL WAIT_VBLANK2 

Это связано как раз с логикой сброса PPU. Необходимо подождать 2 кадра, для того чтобы PPU "стабилизировал" свое внутреннее состояние.