Вообщем победил логику работы H/V, результаты ниже.
Что интересного обнаружил:
- H тикает от 0 до 340 (всего 341 пиксель), V тикает от 0 до 261 (всего 262 строки).
- Счёт пикселей самой первой строки начинается с 1, потому что 0й пиксель на самом деле рендерится, начиная с H=329.
- Количество видимых пикселей 256, но размер "картинки" NTSC немного больше. Связано это с тем, что после видимых пикселей выводится так называемый "front porch" (черный край).
- PPU начинает работу непосредственно с рендеринга пикселей. После отображения видимых пикселей выводится вначале front porch, а потом back porch, которая включает в себя hblank и colorburst. Значения когда что начинается в H следующие:
0: не понятно, типа заглушки чтоли
1-256: видимые пиксели
257-279: front porch
271-328: back porch (как видно у них происходит пересечение)
280-304: hblank
309-323: color burst
329-340: начало выборки и рендеринга 0го пиксела следующей строки
Напоминаю структуру композитного NTSC-сигнала:

Чуть позже выложу табличку с командами H/V логики остальному чипу, для каждого значения H.
-- 16 ноя 2012, 14:22 --
Немного пояснений:
H/V - текущие значения счетчиков
далее идут названия команд H/V - это те самые контрольные линии, которые расползаются по всему чипу и управ. Расшифровка команд после таблицы.
Самая первая строка:
H:1 V:0 I/OAM2 F/NT VIS PICTURE
H:2 V:0 I/OAM2 F/NT VIS PICTURE
H:3 V:0 I/OAM2 F/AT VIS PICTURE
H:4 V:0 I/OAM2 F/AT VIS PICTURE
H:5 V:0 I/OAM2 F/TA VIS PICTURE
H:6 V:0 I/OAM2 F/TA VIS PICTURE
H:7 V:0 I/OAM2 F/TB VIS PICTURE
H:8 V:0 I/OAM2 F/TB VIS PICTURE
H:9 V:0 I/OAM2 F/NT VIS PICTURE
H:10 V:0 I/OAM2 F/NT VIS PICTURE
H:11 V:0 I/OAM2 F/AT VIS PICTURE
H:12 V:0 I/OAM2 F/AT VIS PICTURE
H:13 V:0 I/OAM2 F/TA VIS PICTURE
H:14 V:0 I/OAM2 F/TA VIS PICTURE
H:15 V:0 I/OAM2 F/TB VIS PICTURE
H:16 V:0 I/OAM2 F/TB VIS PICTURE
H:17 V:0 I/OAM2 F/NT VIS PICTURE
H:18 V:0 I/OAM2 F/NT VIS PICTURE
H:19 V:0 I/OAM2 F/AT VIS PICTURE
H:20 V:0 I/OAM2 F/AT VIS PICTURE
H:21 V:0 I/OAM2 F/TA VIS PICTURE
H:22 V:0 I/OAM2 F/TA VIS PICTURE
H:23 V:0 I/OAM2 F/TB VIS PICTURE
H:24 V:0 I/OAM2 F/TB VIS PICTURE
H:25 V:0 I/OAM2 F/NT VIS PICTURE
H:26 V:0 I/OAM2 F/NT VIS PICTURE
H:27 V:0 I/OAM2 F/AT VIS PICTURE
H:28 V:0 I/OAM2 F/AT VIS PICTURE
H:29 V:0 I/OAM2 F/TA VIS PICTURE
H:30 V:0 I/OAM2 F/TA VIS PICTURE
H:31 V:0 I/OAM2 F/TB VIS PICTURE
H:32 V:0 I/OAM2 F/TB VIS PICTURE
H:33 V:0 I/OAM2 F/NT VIS PICTURE
H:34 V:0 I/OAM2 F/NT VIS PICTURE
H:35 V:0 I/OAM2 F/AT VIS PICTURE
H:36 V:0 I/OAM2 F/AT VIS PICTURE
H:37 V:0 I/OAM2 F/TA VIS PICTURE
H:38 V:0 I/OAM2 F/TA VIS PICTURE
H:39 V:0 I/OAM2 F/TB VIS PICTURE
H:40 V:0 I/OAM2 F/TB VIS PICTURE
H:41 V:0 I/OAM2 F/NT VIS PICTURE
H:42 V:0 I/OAM2 F/NT VIS PICTURE
H:43 V:0 I/OAM2 F/AT VIS PICTURE
H:44 V:0 I/OAM2 F/AT VIS PICTURE
H:45 V:0 I/OAM2 F/TA VIS PICTURE
H:46 V:0 I/OAM2 F/TA VIS PICTURE
H:47 V:0 I/OAM2 F/TB VIS PICTURE
H:48 V:0 I/OAM2 F/TB VIS PICTURE
H:49 V:0 I/OAM2 F/NT VIS PICTURE
H:50 V:0 I/OAM2 F/NT VIS PICTURE
H:51 V:0 I/OAM2 F/AT VIS PICTURE
H:52 V:0 I/OAM2 F/AT VIS PICTURE
H:53 V:0 I/OAM2 F/TA VIS PICTURE
H:54 V:0 I/OAM2 F/TA VIS PICTURE
H:55 V:0 I/OAM2 F/TB VIS PICTURE
H:56 V:0 I/OAM2 F/TB VIS PICTURE
H:57 V:0 I/OAM2 F/NT VIS PICTURE
H:58 V:0 I/OAM2 F/NT VIS PICTURE
H:59 V:0 I/OAM2 F/AT VIS PICTURE
H:60 V:0 I/OAM2 F/AT VIS PICTURE
H:61 V:0 I/OAM2 F/TA VIS PICTURE
H:62 V:0 I/OAM2 F/TA VIS PICTURE
H:63 V:0 I/OAM2 F/TB VIS PICTURE
H:64 V:0 EVAL I/OAM2 F/TB VIS PICTURE
H:65 V:0 F/NT VIS PICTURE
H:66 V:0 S/EV F/NT VIS PICTURE
H:67 V:0 F/AT VIS PICTURE
H:68 V:0 F/AT VIS PICTURE
H:69 V:0 F/TA VIS PICTURE
H:70 V:0 F/TA VIS PICTURE
H:71 V:0 F/TB VIS PICTURE
H:72 V:0 F/TB VIS PICTURE
H:73 V:0 F/NT VIS PICTURE
H:74 V:0 F/NT VIS PICTURE
H:75 V:0 F/AT VIS PICTURE
H:76 V:0 F/AT VIS PICTURE
H:77 V:0 F/TA VIS PICTURE
H:78 V:0 F/TA VIS PICTURE
H:79 V:0 F/TB VIS PICTURE
H:80 V:0 F/TB VIS PICTURE
H:81 V:0 F/NT VIS PICTURE
H:82 V:0 F/NT VIS PICTURE
H:83 V:0 F/AT VIS PICTURE
H:84 V:0 F/AT VIS PICTURE
H:85 V:0 F/TA VIS PICTURE
H:86 V:0 F/TA VIS PICTURE
H:87 V:0 F/TB VIS PICTURE
H:88 V:0 F/TB VIS PICTURE
H:89 V:0 F/NT VIS PICTURE
H:90 V:0 F/NT VIS PICTURE
H:91 V:0 F/AT VIS PICTURE
H:92 V:0 F/AT VIS PICTURE
H:93 V:0 F/TA VIS PICTURE
H:94 V:0 F/TA VIS PICTURE
H:95 V:0 F/TB VIS PICTURE
H:96 V:0 F/TB VIS PICTURE
H:97 V:0 F/NT VIS PICTURE
H:98 V:0 F/NT VIS PICTURE
H:99 V:0 F/AT VIS PICTURE
H:100 V:0 F/AT VIS PICTURE
H:101 V:0 F/TA VIS PICTURE
H:102 V:0 F/TA VIS PICTURE
H:103 V:0 F/TB VIS PICTURE
H:104 V:0 F/TB VIS PICTURE
H:105 V:0 F/NT VIS PICTURE
H:106 V:0 F/NT VIS PICTURE
H:107 V:0 F/AT VIS PICTURE
H:108 V:0 F/AT VIS PICTURE
H:109 V:0 F/TA VIS PICTURE
H:110 V:0 F/TA VIS PICTURE
H:111 V:0 F/TB VIS PICTURE
H:112 V:0 F/TB VIS PICTURE
H:113 V:0 F/NT VIS PICTURE
H:114 V:0 F/NT VIS PICTURE
H:115 V:0 F/AT VIS PICTURE
H:116 V:0 F/AT VIS PICTURE
H:117 V:0 F/TA VIS PICTURE
H:118 V:0 F/TA VIS PICTURE
H:119 V:0 F/TB VIS PICTURE
H:120 V:0 F/TB VIS PICTURE
H:121 V:0 F/NT VIS PICTURE
H:122 V:0 F/NT VIS PICTURE
H:123 V:0 F/AT VIS PICTURE
H:124 V:0 F/AT VIS PICTURE
H:125 V:0 F/TA VIS PICTURE
H:126 V:0 F/TA VIS PICTURE
H:127 V:0 F/TB VIS PICTURE
H:128 V:0 F/TB VIS PICTURE
H:129 V:0 F/NT VIS PICTURE
H:130 V:0 F/NT VIS PICTURE
H:131 V:0 F/AT VIS PICTURE
H:132 V:0 F/AT VIS PICTURE
H:133 V:0 F/TA VIS PICTURE
H:134 V:0 F/TA VIS PICTURE
H:135 V:0 F/TB VIS PICTURE
H:136 V:0 F/TB VIS PICTURE
H:137 V:0 F/NT VIS PICTURE
H:138 V:0 F/NT VIS PICTURE
H:139 V:0 F/AT VIS PICTURE
H:140 V:0 F/AT VIS PICTURE
H:141 V:0 F/TA VIS PICTURE
H:142 V:0 F/TA VIS PICTURE
H:143 V:0 F/TB VIS PICTURE
H:144 V:0 F/TB VIS PICTURE
H:145 V:0 F/NT VIS PICTURE
H:146 V:0 F/NT VIS PICTURE
H:147 V:0 F/AT VIS PICTURE
H:148 V:0 F/AT VIS PICTURE
H:149 V:0 F/TA VIS PICTURE
H:150 V:0 F/TA VIS PICTURE
H:151 V:0 F/TB VIS PICTURE
H:152 V:0 F/TB VIS PICTURE
H:153 V:0 F/NT VIS PICTURE
H:154 V:0 F/NT VIS PICTURE
H:155 V:0 F/AT VIS PICTURE
H:156 V:0 F/AT VIS PICTURE
H:157 V:0 F/TA VIS PICTURE
H:158 V:0 F/TA VIS PICTURE
H:159 V:0 F/TB VIS PICTURE
H:160 V:0 F/TB VIS PICTURE
H:161 V:0 F/NT VIS PICTURE
H:162 V:0 F/NT VIS PICTURE
H:163 V:0 F/AT VIS PICTURE
H:164 V:0 F/AT VIS PICTURE
H:165 V:0 F/TA VIS PICTURE
H:166 V:0 F/TA VIS PICTURE
H:167 V:0 F/TB VIS PICTURE
H:168 V:0 F/TB VIS PICTURE
H:169 V:0 F/NT VIS PICTURE
H:170 V:0 F/NT VIS PICTURE
H:171 V:0 F/AT VIS PICTURE
H:172 V:0 F/AT VIS PICTURE
H:173 V:0 F/TA VIS PICTURE
H:174 V:0 F/TA VIS PICTURE
H:175 V:0 F/TB VIS PICTURE
H:176 V:0 F/TB VIS PICTURE
H:177 V:0 F/NT VIS PICTURE
H:178 V:0 F/NT VIS PICTURE
H:179 V:0 F/AT VIS PICTURE
H:180 V:0 F/AT VIS PICTURE
H:181 V:0 F/TA VIS PICTURE
H:182 V:0 F/TA VIS PICTURE
H:183 V:0 F/TB VIS PICTURE
H:184 V:0 F/TB VIS PICTURE
H:185 V:0 F/NT VIS PICTURE
H:186 V:0 F/NT VIS PICTURE
H:187 V:0 F/AT VIS PICTURE
H:188 V:0 F/AT VIS PICTURE
H:189 V:0 F/TA VIS PICTURE
H:190 V:0 F/TA VIS PICTURE
H:191 V:0 F/TB VIS PICTURE
H:192 V:0 F/TB VIS PICTURE
H:193 V:0 F/NT VIS PICTURE
H:194 V:0 F/NT VIS PICTURE
H:195 V:0 F/AT VIS PICTURE
H:196 V:0 F/AT VIS PICTURE
H:197 V:0 F/TA VIS PICTURE
H:198 V:0 F/TA VIS PICTURE
H:199 V:0 F/TB VIS PICTURE
H:200 V:0 F/TB VIS PICTURE
H:201 V:0 F/NT VIS PICTURE
H:202 V:0 F/NT VIS PICTURE
H:203 V:0 F/AT VIS PICTURE
H:204 V:0 F/AT VIS PICTURE
H:205 V:0 F/TA VIS PICTURE
H:206 V:0 F/TA VIS PICTURE
H:207 V:0 F/TB VIS PICTURE
H:208 V:0 F/TB VIS PICTURE
H:209 V:0 F/NT VIS PICTURE
H:210 V:0 F/NT VIS PICTURE
H:211 V:0 F/AT VIS PICTURE
H:212 V:0 F/AT VIS PICTURE
H:213 V:0 F/TA VIS PICTURE
H:214 V:0 F/TA VIS PICTURE
H:215 V:0 F/TB VIS PICTURE
H:216 V:0 F/TB VIS PICTURE
H:217 V:0 F/NT VIS PICTURE
H:218 V:0 F/NT VIS PICTURE
H:219 V:0 F/AT VIS PICTURE
H:220 V:0 F/AT VIS PICTURE
H:221 V:0 F/TA VIS PICTURE
H:222 V:0 F/TA VIS PICTURE
H:223 V:0 F/TB VIS PICTURE
H:224 V:0 F/TB VIS PICTURE
H:225 V:0 F/NT VIS PICTURE
H:226 V:0 F/NT VIS PICTURE
H:227 V:0 F/AT VIS PICTURE
H:228 V:0 F/AT VIS PICTURE
H:229 V:0 F/TA VIS PICTURE
H:230 V:0 F/TA VIS PICTURE
H:231 V:0 F/TB VIS PICTURE
H:232 V:0 F/TB VIS PICTURE
H:233 V:0 F/NT VIS PICTURE
H:234 V:0 F/NT VIS PICTURE
H:235 V:0 F/AT VIS PICTURE
H:236 V:0 F/AT VIS PICTURE
H:237 V:0 F/TA VIS PICTURE
H:238 V:0 F/TA VIS PICTURE
H:239 V:0 F/TB VIS PICTURE
H:240 V:0 F/TB VIS PICTURE
H:241 V:0 F/NT VIS PICTURE
H:242 V:0 F/NT VIS PICTURE
H:243 V:0 F/AT VIS PICTURE
H:244 V:0 F/AT VIS PICTURE
H:245 V:0 F/TA VIS PICTURE
H:246 V:0 F/TA VIS PICTURE
H:247 V:0 F/TB VIS PICTURE
H:248 V:0 F/TB VIS PICTURE
H:249 V:0 F/NT VIS PICTURE
H:250 V:0 F/NT VIS PICTURE
H:251 V:0 F/AT VIS PICTURE
H:252 V:0 F/AT VIS PICTURE
H:253 V:0 F/TA VIS PICTURE
H:254 V:0 F/TA VIS PICTURE
H:255 V:0 F/TB VIS PICTURE
H:256 V:0 E/EV EVAL F/TB VIS PICTURE
H:257 V:0 F/NT PAR/O /FO PICTURE SYNC FRPORCH
H:258 V:0 F/NT PAR/O /FO PICTURE SYNC FRPORCH
H:259 V:0 PAR/O /FO PICTURE SYNC FRPORCH
H:260 V:0 PAR/O /FO PICTURE SYNC FRPORCH
H:261 V:0 PAR/O /FO PICTURE SYNC FRPORCH
H:262 V:0 PAR/O /FO PICTURE SYNC FRPORCH
H:263 V:0 PAR/O /FO PICTURE SYNC FRPORCH
H:264 V:0 PAR/O /FO PICTURE SYNC FRPORCH
H:265 V:0 F/NT PAR/O /FO PICTURE SYNC FRPORCH
H:266 V:0 F/NT PAR/O /FO PICTURE SYNC FRPORCH
H:267 V:0 PAR/O /FO PICTURE SYNC FRPORCH
H:268 V:0 PAR/O /FO PICTURE SYNC FRPORCH
H:269 V:0 PAR/O /FO PICTURE SYNC FRPORCH
H:270 V:0 PAR/O /FO PICTURE SYNC FRPORCH
H:271 V:0 PAR/O /FO SYNC FRPORCH BKPORCH
H:272 V:0 PAR/O /FO SYNC FRPORCH BKPORCH
H:273 V:0 F/NT PAR/O /FO SYNC FRPORCH BKPORCH
H:274 V:0 F/NT PAR/O /FO SYNC FRPORCH BKPORCH
H:275 V:0 PAR/O /FO SYNC FRPORCH BKPORCH
H:276 V:0 PAR/O /FO SYNC FRPORCH BKPORCH
H:277 V:0 PAR/O /FO SYNC FRPORCH BKPORCH
H:278 V:0 PAR/O /FO SYNC FRPORCH BKPORCH
H:279 V:0 PAR/O /FO SYNC FRPORCH BKPORCH
H:280 V:0 SC/CNT PAR/O /FO BKPORCH
H:281 V:0 SC/CNT F/NT PAR/O /FO BKPORCH
H:282 V:0 SC/CNT F/NT PAR/O /FO BKPORCH
H:283 V:0 SC/CNT PAR/O /FO BKPORCH
H:284 V:0 SC/CNT PAR/O /FO BKPORCH
H:285 V:0 SC/CNT PAR/O /FO BKPORCH
H:286 V:0 SC/CNT PAR/O /FO BKPORCH
H:287 V:0 SC/CNT PAR/O /FO BKPORCH
H:288 V:0 SC/CNT PAR/O /FO BKPORCH
H:289 V:0 SC/CNT F/NT PAR/O /FO BKPORCH
H:290 V:0 SC/CNT F/NT PAR/O /FO BKPORCH
H:291 V:0 SC/CNT PAR/O /FO BKPORCH
H:292 V:0 SC/CNT PAR/O /FO BKPORCH
H:293 V:0 SC/CNT PAR/O /FO BKPORCH
H:294 V:0 SC/CNT PAR/O /FO BKPORCH
H:295 V:0 SC/CNT PAR/O /FO BKPORCH
H:296 V:0 SC/CNT PAR/O /FO BKPORCH
H:297 V:0 SC/CNT F/NT PAR/O /FO BKPORCH
H:298 V:0 SC/CNT F/NT PAR/O /FO BKPORCH
H:299 V:0 SC/CNT PAR/O /FO BKPORCH
H:300 V:0 SC/CNT PAR/O /FO BKPORCH
H:301 V:0 SC/CNT PAR/O /FO BKPORCH
H:302 V:0 SC/CNT PAR/O /FO BKPORCH
H:303 V:0 SC/CNT PAR/O /FO BKPORCH
H:304 V:0 SC/CNT PAR/O /FO BKPORCH
H:305 V:0 F/NT PAR/O /FO BKPORCH
H:306 V:0 F/NT PAR/O /FO BKPORCH
H:307 V:0 PAR/O /FO BKPORCH
H:308 V:0 PAR/O /FO BKPORCH
H:309 V:0 PAR/O /FO BKPORCH BURST
H:310 V:0 PAR/O /FO BKPORCH BURST
H:311 V:0 PAR/O /FO BKPORCH BURST
H:312 V:0 PAR/O /FO BKPORCH BURST
H:313 V:0 F/NT PAR/O /FO BKPORCH BURST
H:314 V:0 F/NT PAR/O /FO BKPORCH BURST
H:315 V:0 PAR/O /FO BKPORCH BURST
H:316 V:0 PAR/O /FO BKPORCH BURST
H:317 V:0 PAR/O /FO BKPORCH BURST
H:318 V:0 PAR/O /FO BKPORCH BURST
H:319 V:0 PAR/O /FO BKPORCH BURST
H:320 V:0 PAR/O /FO BKPORCH BURST
H:321 V:0 F/NT BKPORCH BURST
H:322 V:0 F/NT BKPORCH BURST
H:323 V:0 F/AT BKPORCH BURST
H:324 V:0 F/AT BKPORCH
H:325 V:0 F/TA BKPORCH
H:326 V:0 F/TA BKPORCH
H:327 V:0 F/TB BKPORCH
H:328 V:0 F/TB BKPORCH
H:329 V:0 F/NT PICTURE
H:330 V:0 F/NT PICTURE
H:331 V:0 F/AT PICTURE
H:332 V:0 F/AT PICTURE
H:333 V:0 F/TA PICTURE
H:334 V:0 F/TA PICTURE
H:335 V:0 F/TB PICTURE
H:336 V:0 F/TB PICTURE
H:337 V:0 0/HPOS EVAL F/NT /FO PICTURE
H:338 V:0 0/HPOS EVAL F/NT /FO PICTURE
H:339 V:0 0/HPOS EVAL /FO PICTURE
H:340 V:0 0/HPOS EVAL /FO PICTUREОстальные строки начинаются так:
H:0 V:1 /FO PICTURE
H:1 V:1 I/OAM2 F/NT VIS PICTURE
H:2 V:1 I/OAM2 F/NT VIS PICTURE
.... и дальше понеслась душа по кочкам
Полный список команд H/V логики:
CLIP_O, CLIP_B: команды обрезания левых 8 пикселей бекгрануда / спрайтов (clipping)
0/HPOS: очистить счетчики H в спрайтовой FIFO (спрайтовая FIFO - это специальная схема, которая выдает наружу смешанный цвет 8 текущих спрайтов)
EVAL: сравнение спрайтов в процессе
PAR/O: выборка паттернов для спрайтов
VIS: PPU ренедерит видимые пиксели (НЕ относится к front porch)
BLNK: картинка не видна (vblank) или выключена контрольными регистрами
RESCL: сбросить reset flip/flop
S/EV, E/EV: точное значение пока не известно, но первая испольняется перед началом сравнения спрайтов, а вторая - вконце
I/OAM2: инициализировать дополнительную OAM (32 байта, которые используются для временного хранения 8 текущих спрайтов)
SC/CNT: обновить регистры скроллинга.
F/NT, F/AT, F/TA, F/TB, /FO: команды выборки данных из памяти. NT - name table, AT - attribute table, TA - tile #0, TB - tile #1, /FO - активна когда PPU выбирает паттерны для спрайтов
PICTURE, BURST, SYNC : команды управления видеотрактом
/BPORCH :back porch (внутренняя команда, наружу не идет)
/FPORCH :front porch (внутренняя команда, наружу не идет)
/INT: выход /INT (прерывание VBlank)
Таким образом H/V - это черный ящик, который в зависимости от текущего значения H и V выдает различные команды.
На вход к нему поступает минимальное количество управляющих линий:
- PPU control register bits: OBCLIP, BGCLIP (для упраления командами clippinga), BLACK (выключить отрисовку видимых пикселей), VBL (отключить генерацию /INT)
- /R2 and /DBE bus enablers (for DB7), для получения текущего состояния vblank (бит 7 регистра $2002)
Несколько слов о контрольной линии "BLACK".
- Эта линия активна только в том случае, когда выключены бекграунд И спрайты. То есть на экране вообще ничего нет.
- Команда BLNK (blank) - это на самом деле комбинация BLACK и VBLANK. То есть команда BLNK активна во время VBLANK (когда естественно на экране ничего нет), а также если картинка отключена полностью (BLACK=1)
BLNK влияет на работу PPU следующим образом:
- часть контрольных линий с H/V счетчиков просто отсекаются, в результате чего наружу не идут команды управления другими блоками, ответственными за отрисовку
- эта линия дополнительно разводится по остальным блокам и просто отключает их, для экономии электричества и энергии Вселенной.
Больше тут сказать особо нечего, можно двигаться дальше ) На очереди "безспрайтовый" PPU. То есть я ставлю задачу вывести задний фон, игнорируя все блоки, которые занимаются сравнением и наложением спрайтов.
Исходный код тут:
http://code.google.com/p/breaks/source/ ... sPPU/PPU.c