Очень низкоуровневый эмулятор 6502 / NES
Автор |
Сообщение |
24 ноя 2014, 12:19 |
|
Зарегистрирован: 05 ноя 2014, 23:03 Сообщения: 29
|
Впечатляет. Я опять пробалбесничал все выходные 
|
 |
30 ноя 2014, 15:51 |
|
Зарегистрирован: 24 июл 2007, 10:41 Сообщения: 572
|
|
 |
29 дек 2014, 15:47 |
|
Зарегистрирован: 19 окт 2013, 18:46 Сообщения: 18 Откуда: Россия, г. Златоуст
|
Вопрос по PPU. Что происходит при включении прорисовки фона или спрайтов. Ведь счетчик в ППУ всегда считает. Что он сотворит с картинкой - откуда начнется прорисовка кадра, если там уже далеко не середина строки или кадра? И что произойдет, если в середине кадра вырубить прорисовку (заменить или нет регистры адреса в PPU) и через какое-то время опять включить. Очень смутно понимаю, что произойдет. Не могу справиться с демкой High-Hopes - нет прорисовки извивающейся линии.
|
 |
02 янв 2015, 11:03 |
|
Зарегистрирован: 24 июл 2007, 06:54 Сообщения: 492 Откуда: Embedded
|
Сколько он занимает? pAPU будешь делать? Надо добить Дендик полностью. :3
_________________ Tried so hard and got so far, but in the end, it doesn't even matter...
|
 |
02 янв 2015, 15:29 |
|
Зарегистрирован: 22 июл 2007, 11:16 Сообщения: 787
|
да, руки чешутся заюзать ядро в мурмуляторе хех
_________________ 1. Модератор всегда прав. 2. Если модератор не прав, см. п. 1.
|
 |
04 янв 2015, 17:10 |
|
Зарегистрирован: 24 июл 2007, 10:41 Сообщения: 572
|
Цитата: Вопрос по PPU. Что происходит при включении прорисовки фона или спрайтов. Ведь счетчик в ППУ всегда считает. Что он сотворит с картинкой - откуда начнется прорисовка кадра, если там уже далеко не середина строки или кадра? Сигнал VBlank настроит прорисовку как положено, после первых двух полукадров. Поэтому во всех играх в самом начале есть 2 цикла ожидания Vblank. Ничего страшного не произойдет, просто у тебя кадр начнется не с верха экрана, а где-то посередине. Цитата: И что произойдет, если в середине кадра вырубить прорисовку Ничего. Просто наружу не будет выводиться картинка (заместо пикселей будут уровни черного) Цитата: Сколько он занимает? Total logic elements : 872 Total pins : 34 Цитата: pAPU будешь делать? После PPU )
|
 |
07 янв 2015, 00:22 |
|
Зарегистрирован: 24 июл 2007, 06:54 Сообщения: 492 Откуда: Embedded
|
org писал(а): Цитата: Вопрос по PPU. Что происходит при включении прорисовки фона или спрайтов. Ведь счетчик в ППУ всегда считает. Что он сотворит с картинкой - откуда начнется прорисовка кадра, если там уже далеко не середина строки или кадра? Сигнал VBlank настроит прорисовку как положено, после первых двух полукадров. Поэтому во всех играх в самом начале есть 2 цикла ожидания Vblank. Насколько я понял, 2 фрейма нужно ждать (с синхронизацией к VBlank'у) для устаканивания режима PPU при поверапе, а особенно его динамической памяти. Иначе смысла в посыле настроек нет - PPU их не примет или примет не правильно. org писал(а): Цитата: pAPU будешь делать? После PPU ) Супер!
_________________ Tried so hard and got so far, but in the end, it doesn't even matter...
|
 |
07 янв 2015, 02:44 |
|
Зарегистрирован: 24 июл 2007, 10:41 Сообщения: 572
|
Я думаю что памяти достаточно нескольких циклов, чтобы устаканиться. А ожидание двух Vblank связано с тем, чтобы логика игры была дискретна целым кадрам.
|
 |
07 янв 2015, 10:26 |
|
Зарегистрирован: 24 июл 2007, 06:54 Сообщения: 492 Откуда: Embedded
|
org писал(а): Я думаю что памяти достаточно нескольких циклов, чтобы устаканиться. А ожидание двух Vblank связано с тем, чтобы логика игры была дискретна целым кадрам. Ну я читал у Кевтриса вроде, что при тестах на NES, у которой сброс PPU подключен к сбросу CPU, что если не ждать 2 фрейма, то изображение портится. Действительно, 1 полный фрейм нужен для уверенности что все скансчетчики прокрутили свои состояния и/или вышли из запрещенных состояний. Однако, если счетчик был рядом с VBlank, то он не пройдет полный круг. Для этого ожидается второй VBlank. Таким образом, первый VBlank это синхронизация, а второй VBlank это уже минимальный норматив ожидания, т.к. скорость запуска игры имеет значение для игрока. Сам же понимаешь, что при поверапе вся схема в случайном состоянии. У Денди же (и Фамикома) сброс PPU не подключен к сбросу CPU и PPU колбасит всегда нонстопом при ручном сбросе. Это опять же говорит в пользу 2х фреймов как универсальной меры: первый для синхронизации и второй ожидание. PS Код начальной инициализации не дискретен.
_________________ Tried so hard and got so far, but in the end, it doesn't even matter...
|
 |
07 янв 2015, 15:31 |
|
Зарегистрирован: 22 июл 2007, 11:16 Сообщения: 787
|
скажу даже больше, пиратский червяк джим 3 вообще не ждет никаких кадров, а начинает сразу рубить инит системы, очистку ппу и тп. на старой фсеу с одним мертвым кадром перед стартом джим просто вешался не дойдя до главного лупа, пришлось второй мертвый кадр вставлять лол
_________________ 1. Модератор всегда прав. 2. Если модератор не прав, см. п. 1.
|
 |
14 янв 2015, 10:51 |
|
Зарегистрирован: 19 окт 2013, 18:46 Сообщения: 18 Откуда: Россия, г. Златоуст
|
org писал(а): Цитата: И что произойдет, если в середине кадра вырубить прорисовку Ничего. Просто наружу не будет выводиться картинка (заместо пикселей будут уровни черного) То есть PPU будет исправно запрашивать данные из VRAM и VROM - не освободит свою шину данных и адреса, а сам будет рисовать "черные точки" с примесью синросигналов? -- 14 янв 2015, 11:59 -- HardWareMan писал(а): Насколько я понял, 2 фрейма нужно ждать (с синхронизацией к VBlank'у) для устаканивания режима PPU при поверапе, а особенно его динамической памяти. Иначе смысла в посыле настроек нет - PPU их не примет или примет не правильно.
А я понял, что настройки PPU хранит в своего рода регистрах (не все из 8 бит). И точно к некоторым из них он не может запретить доступ из вне (по крайней мере на запись данных).
|
 |
14 янв 2015, 11:17 |
|
Зарегистрирован: 24 июл 2007, 06:54 Сообщения: 492 Откуда: Embedded
|
Иван писал(а): А я понял, что настройки PPU хранит в своего рода регистрах (не все из 8 бит). И точно к некоторым из них он не может запретить доступ из вне (по крайней мере на запись данных). Дело не в запрете доступа а в способности хранения. Если некоторые регистры действительно собраны на логике, то та же память ОАМ собрана на емкостях. И пока не установится режим, внятную информацию туда не записать. С соответствующим результатом.
_________________ Tried so hard and got so far, but in the end, it doesn't even matter...
|
 |
15 янв 2015, 03:08 |
|
Зарегистрирован: 24 июл 2007, 10:41 Сообщения: 572
|
Цитата: То есть PPU будет исправно запрашивать данные из VRAM и VROM - не освободит свою шину данных и адреса, а сам будет рисовать "черные точки" с примесью синросигналов? Так точно. "Вырубание" рисования - вырубает конкретно вывод точек в "полезной" части видеосигнала (та что находится после Color Burst). А схема выборки данных будет исправно долбиться в видео-память. То же самое относится и к схеме выборки и сравнения спрайтов и счетчикам H/V (координаты луча). Все они будут работать "вхолостую", потому что их нельзя поставить на "паузу"  -- 15 янв 2015, 02:11 -- Цитата: Если некоторые регистры действительно собраны на логике, то та же память ОАМ собрана на емкостях. И пока не установится режим, внятную информацию туда не записать. С соответствующим результатом. Более того, если OAM периодически не обновлять - она имеет тенденцию "корраптиться" (разряжаться). Насколько мне известно эта фича не работает в эмуляторах.
|
 |
15 янв 2015, 08:05 |
|
Зарегистрирован: 24 июл 2007, 06:54 Сообщения: 492 Откуда: Embedded
|
org писал(а): Цитата: То есть PPU будет исправно запрашивать данные из VRAM и VROM - не освободит свою шину данных и адреса, а сам будет рисовать "черные точки" с примесью синросигналов? Так точно. "Вырубание" рисования - вырубает конкретно вывод точек в "полезной" части видеосигнала (та что находится после Color Burst). А схема выборки данных будет исправно долбиться в видео-память. То же самое относится и к схеме выборки и сравнения спрайтов и счетчикам H/V (координаты луча). Все они будут работать "вхолостую", потому что их нельзя поставить на "паузу"  А я думал, что программы отключают рендер (только оба одновременно: и спрайты и бэкграунд!) именно для того, чтобы быстрее перезагрузить данные VRAM не привязываясь к VBlank и не ограничиваясь окном VBlank'а. Надо логиком посмотреть для уверенности. org писал(а): Цитата: Если некоторые регистры действительно собраны на логике, то та же память ОАМ собрана на емкостях. И пока не установится режим, внятную информацию туда не записать. С соответствующим результатом. Более того, если OAM периодически не обновлять - она имеет тенденцию "корраптиться" (разряжаться). Насколько мне известно эта фича не работает в эмуляторах. И эту фичу разрбирали на несдеве. Даже тестик писали.
_________________ Tried so hard and got so far, but in the end, it doesn't even matter...
|
 |
18 янв 2015, 00:40 |
|
Зарегистрирован: 24 июл 2007, 10:41 Сообщения: 572
|
Цитата: А я думал, что программы отключают рендер (только оба одновременно: и спрайты и бэкграунд!) Тэкс.. Я решил глянуть схемы, что там происходит на самом деле))) Регистр $2001 Значение битов 3 и 4 (Background Enable, Object Enable) идут на схему клиппинга и совместно формируют сигнал "BLACK". BLACK = 1, когда backgound + object выключены одновременно. Схема управления PPU Сигнал BLACK участвует в формировании сигнала BLNK. BLNK = 1, когда BLACK = 1, а также во время VBlank (V=240...261) На что влияет сигнал BLNK Сигнал BLNK отрубает следующие сигналы: S/EV : Sprite Evaluation /VIS : Контроль мультиплексора (MUX) PAR/O На сигналы FETCH (F/NT, F/TA, F/TB, FO) Так что прошу прощения за дезинфу, эти биты всё таки как-то влияют на схемы сравнения спрайтов и FETCH данных.
|
 |
18 янв 2015, 09:24 |
|
Зарегистрирован: 24 июл 2007, 06:54 Сообщения: 492 Откуда: Embedded
|
Просто я где-то прочитал про это и было отдельно выделено, что отключать надо полностью. Иначе VRAM остается занятой во время активного кадра.
_________________ Tried so hard and got so far, but in the end, it doesn't even matter...
|
 |
20 янв 2015, 15:58 |
|
Зарегистрирован: 19 окт 2013, 18:46 Сообщения: 18 Откуда: Россия, г. Златоуст
|
Еще нашел сигнал BLNK в схеме DATAREADER-а PPU.
Вложения:
DataReader001.png [ 2.07 МБ | Просмотров: 18387 ]
|
 |
26 янв 2015, 02:41 |
|
Зарегистрирован: 23 июл 2007, 19:37 Сообщения: 401 Откуда: Мытищи
|
Люди, кто-нибудь может помочь в этом вопросе?: http://forums.nesdev.com/viewtopic.php?f=9&t=11614Нужен тестовый ром для проверки на флешкартридже: Цитата: Overscan color. Is it forced black or otherwise? Does it differ at the sides vs. at the top and bottom? If it's forced to black, does the black protrude 2 pixels into the picture like it does on PAL NES? Behavior of OAM DMA during forced blanking. The official PAL NES refreshes OAM outside lines 241-260 even if rendering is disabled, causing OAM DMA to fail except during the start of vblank. The Dendy has its screen update period near the end of vblank (lines 291-310) for maximum compatibility with cycle-counting interval timers in Japanese mappers such as FDS, VRC, and FME-7, and I wonder if it too does some sort of OAM refresh during its post-render scanlines (240-290).
_________________ Nestopia 1.37/1.40 Fixed
|
 |
29 янв 2015, 01:23 |
|
Зарегистрирован: 23 июл 2007, 19:37 Сообщения: 401 Откуда: Мытищи
|
_________________ Nestopia 1.37/1.40 Fixed
|
 |
04 фев 2015, 07:12 |
|
Зарегистрирован: 24 июл 2007, 06:54 Сообщения: 492 Откуда: Embedded
|
Возвращаясь к напечатанному. EvGS подтвердил, что память ОАМ в PPU дендика построен на DRAM.
_________________ Tried so hard and got so far, but in the end, it doesn't even matter...
|
 |
|
Кто сейчас на конференции |
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2 |
|
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения
|
|