Сообщения без ответов | Активные темы Текущее время: 28 мар 2024, 14:06



Ответить на тему  [ Сообщений: 411 ]  На страницу Пред.  1 ... 3, 4, 5, 6, 7, 8, 9 ... 21  След.
 Очень низкоуровневый эмулятор 6502 / NES 
Автор Сообщение
Сообщение 14 ноя 2012, 17:26
Профиль
Аватара пользователя

Зарегистрирован:
24 июл 2007, 06:54
Сообщения: 492
Откуда: Embedded
Просто сделали надежный сброс. Поэтому и пишут, что нужно ждать пару кадров (отслеживать по NMI), прежде чем программировать PPU. Все просто, оказалось.

Растактовку можешь свести в таблицу? Я про развертку кадра и сигналов по двум матрицам H и V.

_________________
Tried so hard and got so far, but in the end, it doesn't even matter...


Сообщение 14 ноя 2012, 18:26
Профиль ICQ WWW
Аватара пользователя

Зарегистрирован:
24 июл 2007, 10:41
Сообщения: 570
Как раз этим вопросом занимаюсь (что и когда происходит при разных значениях H/V).

-- 14 ноя 2012, 22:11 --

По поводу сброса PPU: http://breaknes.com/info/9


Сообщение 15 ноя 2012, 10:47
Профиль
Аватара пользователя

Зарегистрирован:
24 июл 2007, 06:54
Сообщения: 492
Откуда: Embedded
org писал(а):
По поводу сброса PPU: http://breaknes.com/info/9

Именно.

_________________
Tried so hard and got so far, but in the end, it doesn't even matter...


Сообщение 15 ноя 2012, 13:50
Профиль ICQ WWW
Аватара пользователя

Зарегистрирован:
24 июл 2007, 10:41
Сообщения: 570
Несколько продвинулся в понимании H/V логики:
Код:
left PLA (H select): count from 0 to 340 (341 pixels total)

Line    876543210   Decimal Exception Modifier  Functional
0       100010111   279                         Colorburst/sync
1       100000000   256                         Colorburst/sync
2       001000001   65      DB/OAM              OAM/EVAL
3       X00000XXX                               Object/Background clipping
4       0XXXXXXXX               [??]            Object/Background clipping
5       1010100XX   336-339                     OAM FIFO clear H.position

6       000111111   63                          EVAL ready (secondary OAM init done)
7       X11111111   255                         to data reader, counter controls ???
8       000XXXXXX                               OAM buffer control ?

9       100XXXXXX           DB/OAM              PAR/D
10      0XXXXXXXX           DB/OAM  [??]        /VIS
11      XXXXXX00X           DB/OAM              OAM+data reader
12      XXXXXX11X                               !!! these are tied together
13      XXXXXX10X                               !!!

14      1X100XXXX           DB/OAM              !!!
15      0XXXXXXXX           DB/OAM              !!!
16      XXXXXX01X                               !!! these are tied together
17      100001110   270                         Some latch +
18      101001000   328                         + Some latch -> output to V logic

19      100010111   279                         Scroll update + to Render
20      100110000   304                         Scroll update + to Render
21      101000011   323                         Colorburst/sync
22      100110100   308                         Colorburst/sync

23      101010100   340                         V-counter enable

right PLA (V select): count from 0 to 261 (262 scanlines total)

Line    876543210    Decimal                    Functional
0       X11110111    247                        to Render
1       X11110100    244                        to Render

2       100000101    261                        + Some latch, color buffer enabler?
3       X11110001    241                        + Some latch, color buffer enabler?
4       X11110001    241                        Control [3]  /INT
5       000000000    0                          flip/flop, modifier [??] out, cleared by  ...
6       X11110000    240                        ... this one
7       100000101    261                        DB/OAM out
8       100000101    261                        RESCL (clear reset flip/flop)


Также начал эмуляцию PPU:
http://code.google.com/p/breaks/source/ ... sPPU/PPU.c


Сообщение 16 ноя 2012, 14:07
Профиль ICQ WWW
Аватара пользователя

Зарегистрирован:
24 июл 2007, 10:41
Сообщения: 570
Вообщем победил логику работы 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


Сообщение 16 ноя 2012, 22:55
Профиль
Аватара пользователя

Зарегистрирован:
24 июл 2007, 06:54
Сообщения: 492
Откуда: Embedded
Отключение лишних блоков при отключении рендера нужны для того, чтобы можно было со стороны процессора беспрепятственно работать с ресурсами PPU, у них счетчик адреса рендера используется и для обращения процессором ($2006).

_________________
Tried so hard and got so far, but in the end, it doesn't even matter...


Сообщение 18 ноя 2012, 02:01
Профиль ICQ WWW
Аватара пользователя

Зарегистрирован:
24 июл 2007, 10:41
Сообщения: 570
Хоть я и убит сегодня наглухо, но полную схемку PPU всё же доделал.

Изображение Изображение

Осталось узнать назначение всего 3 (!) контрольных линий, ну и ещё кое-где переименовать старые названия, например линия "BLNK" раньше называлась "DB/OAM". Но в целом связи между транзисторами правильные, так что логически - это завершенная схема. И что самое главное - я понимаю как это работает! :D

Bonus: эту схемку я ещё не выкладывал. Адресный декодер (маленькая схемка, находится в самом низу чипа)
Изображение
Декодер всё же присутствует, я совсем забыл, что PPU кроме чтения NT/AT умеет ещё и наружу писать (в эти самые NT/AT), так что декодер ему необходим. Ну и дополнительно в этой схеме находится какая-то логика, на которую всем пох.


Сообщение 18 ноя 2012, 17:46
Профиль
Аватара пользователя

Зарегистрирован:
24 июл 2007, 06:54
Сообщения: 492
Откуда: Embedded
Коли все ясно, давай нарисуем узлы в логическом эквиваленте, обычной логикой.

_________________
Tried so hard and got so far, but in the end, it doesn't even matter...


Сообщение 18 ноя 2012, 23:29
Профиль ICQ WWW
Аватара пользователя

Зарегистрирован:
24 июл 2007, 10:41
Сообщения: 570
Посмотри исходники PPU:
http://code.google.com/p/breaks/source/ ... sPPU/PPU.c

сложно такое в Verilog перевести ? Или нужно как-то адаптировать их?

По поводу логической схемы - никогда такое не делал, хз как подступиться даже) И надо ли оно?

И кстати без трансов ты никак не обойдешся, там очень много "transfer gates" - это когда транзистор соединяет два конца шины. И статические защелки с плавающим затвором тоже на базе трансов. Такого в логических элекментах никак не нарисуешь.

-- 19 ноя 2012, 01:02 --

Все схемы PPU теперь будут лежать тут:
http://code.google.com/p/breaks/wiki/G2C02


Сообщение 19 ноя 2012, 08:03
Профиль
Аватара пользователя

Зарегистрирован:
24 июл 2007, 06:54
Сообщения: 492
Откуда: Embedded
Во первых:
Изображение
Это я хочу сказать, что в C я не очень, читаю со словарем. Во вторых, схема рисуется просто, тебе нужно только подписать, как кучка транзисторов работает в группе. Например, если это двоичный счетчик - то нет необходимости описывать каждый каскад, достаточно сказать, что это счетчик на n разрядов, с предустановкой или нет. Касаемо шинных формирователей, ты тоже не прав: такой транзистор мы рассматриваем как tri-state (ну или pull-up/down).

_________________
Tried so hard and got so far, but in the end, it doesn't even matter...


Сообщение 19 ноя 2012, 09:33
Профиль ICQ WWW
Аватара пользователя

Зарегистрирован:
24 июл 2007, 10:41
Сообщения: 570
Нет, я не про pullups, я про вот такие штуки:
Изображение

пока транзистор выполняющий роль "transfer gate" открыт (PCLK=1), затвор получает заряд (или разряжается).
На следующий такт (PCLK=0) мы получаем "плавающий затвор" - заряд сохраняется на манер конденсатора и транзистор всё равно открыт, если на затворе есть заряд.

как такое логическими элементами представить?

-- 19 ноя 2012, 09:12 --

Как инвертированный tri-state можно изобразить?

Изображение

-- 19 ноя 2012, 09:13 --

Если да, то как обозначить что этот вентиль имеет элемент памяти? (статическая защелка)


Сообщение 19 ноя 2012, 10:14
Профиль
Аватара пользователя

Зарегистрирован:
24 июл 2007, 06:54
Сообщения: 492
Откуда: Embedded
Тактируемый триггер. Это же просто. Только, такие узлы надо рассматривать в целом, а не отдельные транзисторы. Я там, кстати, видел много таких гейт сигналов.

_________________
Tried so hard and got so far, but in the end, it doesn't even matter...


Сообщение 19 ноя 2012, 10:52
Профиль ICQ WWW
Аватара пользователя

Зарегистрирован:
24 июл 2007, 10:41
Сообщения: 570
Агась, вот так ?

Изображение

Цитата:
Это же просто.

Я же говорю, что никогда логические схемы не рисовал )


Сообщение 19 ноя 2012, 14:35
Профиль
Аватара пользователя

Зарегистрирован:
24 июл 2007, 06:54
Сообщения: 492
Откуда: Embedded
org писал(а):
Агась, вот так ?
Изображение

Так точно. Правда, полным функциональным аналогом будет все-таки латч (защелка), это триггер с гейтовым входом: пока управление разрешает - выход повторяет вход, когда управление запрещает - выход хранит последнее состояние. Яркий пример 74х373 (или 555ИР22). Пока на входе G у него лог.1 - он пропускает сигналы, если на входе G поставить лог.0 - он запоминает последнее состояние. Инверсия на входе не принципиальна и добавляется по вкусу. У латча заместо символа "С" рисуют либо "L", либо "G".
org писал(а):
Цитата:
Это же просто.

Я же говорю, что никогда логические схемы не рисовал )

Ну никогда не поздно. Давай начнем с верху (по сигналам). Ты объяснять как узел работает, а я реализовывать его в логической схеме. Начать надо с тактового входа и, как следствие, с генератора фаз для видеовыхода.

_________________
Tried so hard and got so far, but in the end, it doesn't even matter...


Сообщение 19 ноя 2012, 17:04
Профиль ICQ WWW
Аватара пользователя

Зарегистрирован:
24 июл 2007, 10:41
Сообщения: 570
вот что получается:
Изображение
По поводу латчей - я не стал "G" рисовать, потому что тут CLK divider, то есть в качестве разрешающего входа используется CLK (формируя регистр сдвига)

у меня вопрос, а H/V-декодер как лучше сделать? по сути дела это NOR с множеством входов. но рисовать длинный NOR как то нелепо получится, может быть есть более удобный способ отображения? вот эта конструкция:
Изображение

EDIT: на картинке опечатка Pixel clock = CLK >> 2 (то есть делитель на 4)


Сообщение 19 ноя 2012, 19:44
Профиль
Аватара пользователя

Зарегистрирован:
24 июл 2007, 06:54
Сообщения: 492
Откуда: Embedded
org писал(а):
вот что получается:
По поводу латчей - я не стал "G" рисовать, потому что тут CLK divider, то есть в качестве разрешающего входа используется CLK (формируя регистр сдвига)

Забавный ход. Тем не менее, он работает, но не так.
org писал(а):
EDIT: на картинке опечатка Pixel clock = CLK >> 2 (то есть делитель на 4)

Он делит на 2, т.к. четные и нечетные латчи тактируются инверсией (используется оба перепада). Замена триггера на латч ничего не меняет - эта схема делит на 2.
Изображение
org писал(а):
у меня вопрос, а H/V-декодер как лучше сделать? по сути дела это NOR с множеством входов. но рисовать длинный NOR как то нелепо получится, может быть есть более удобный способ отображения? вот эта конструкция:
Изображение

А я вижу монтажное И. Инверсия по входу дает нам многовходовой ИЛИ. Многовходовые элементы имеют место быть, например 555ЛА2 имеет 8 входов, так что все ОК. Примитивы внутри кактуса имеют предел 12 входов, т.е. рисуем как есть. ;)

_________________
Tried so hard and got so far, but in the end, it doesn't even matter...


Сообщение 19 ноя 2012, 21:50
Профиль ICQ WWW
Аватара пользователя

Зарегистрирован:
24 июл 2007, 10:41
Сообщения: 570
она делит на 2 в степени 2.
делила бы на 2, если бы там было только пара триггеров.
а так первая пара задерживает сигнал в 2 раза, а вторая пара - ещё в 2 раза, в итоге получается 4.

монтажное И не может быть, потому что на выходе каждой "палки" лог.0, если хотя бы один вход имеет лог.1, то есть
OUT = NOR(a,b,c,....,n).
если бы это было "И", тогда выход имел бы лог.0, если хотя бы один вход был равен 0.


Сообщение 19 ноя 2012, 21:56
Профиль
Аватара пользователя

Зарегистрирован:
24 июл 2007, 06:54
Сообщения: 492
Откуда: Embedded
org писал(а):
она делит на 2 в степени 2.
делила бы на 2, если бы там было только пара триггеров.
а так первая пара задерживает сигнал в 2 раза, а вторая пара - ещё в 2 раза, в итоге получается 4.

Там инверсия на каждом триггере, стало быть он меняет сигнал на каждом полутакте. Может более детально рассмотреть для начала чисто транзисторную схему?
org писал(а):
монтажное И не может быть, потому что на выходе каждой "палки" лог.0, если хотя бы один вход имеет лог.1, то есть
OUT = NOR(a,b,c,....,n).
если бы это было "И", тогда выход имел бы лог.0, если хотя бы один вход был равен 0.

Схема соединения кучки ОК выходов называется "монтажное И", потому как только лог.1 на всех выходах даст лог.1 в результате. Другое дело, каскад ОК сам по себе инвертор, поэтому мы получаем так называемый НЕ-И (B-AND), что дает настоящий элемент ИЛИ.

_________________
Tried so hard and got so far, but in the end, it doesn't even matter...


Сообщение 19 ноя 2012, 23:07
Профиль ICQ WWW
Аватара пользователя

Зарегистрирован:
24 июл 2007, 10:41
Сообщения: 570
CLK=0 PCLK=0
CLK=1 PCLK=0
CLK=0 PCLK=0
CLK=1 PCLK=0
CLK=0 PCLK=1
CLK=1 PCLK=1
CLK=0 PCLK=1
CLK=1 PCLK=1
CLK=0 PCLK=0
CLK=1 PCLK=0
CLK=0 PCLK=0
CLK=1 PCLK=0
CLK=0 PCLK=1
CLK=1 PCLK=1
CLK=0 PCLK=1
CLK=1 PCLK=1


Сообщение 19 ноя 2012, 23:17
Профиль
Аватара пользователя

Зарегистрирован:
24 июл 2007, 06:54
Сообщения: 492
Откуда: Embedded
А, лол, точно по два периода на полупериод, так как 4 триггера, это даже видно на моей симуляции. Звиняйте. Едем дальше.

_________________
Tried so hard and got so far, but in the end, it doesn't even matter...


Показать сообщения за:  Поле сортировки  
Ответить на тему   [ Сообщений: 411 ]  На страницу Пред.  1 ... 3, 4, 5, 6, 7, 8, 9 ... 21  След.

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 11


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group.
Designed by STSoftware for PTF (mod by Zeru-j).
Русская поддержка phpBB