Форум Эму-Россия
http://forum.emu-russia.net/

Очень низкоуровневый эмулятор 6502 / NES
http://forum.emu-russia.net/viewtopic.php?f=13&t=3938
Страница 19 из 21

Автор:  tfwbbt [ 24 ноя 2014, 12:19 ]
Заголовок сообщения:  Re: Очень низкоуровневый эмулятор 6502 / NES

Впечатляет.
Я опять пробалбесничал все выходные :(

Автор:  org [ 30 ноя 2014, 15:51 ]
Заголовок сообщения:  Re: Очень низкоуровневый эмулятор 6502 / NES

Готово.

https://code.google.com/p/breaks/source ... MOS_6502.v

Разводка модулей:
http://forum.6502.org/download/file.php?id=2037

Автор:  Иван [ 29 дек 2014, 15:47 ]
Заголовок сообщения:  Re: Очень низкоуровневый эмулятор 6502 / NES

Вопрос по PPU. Что происходит при включении прорисовки фона или спрайтов. Ведь счетчик в ППУ всегда считает. Что он сотворит с картинкой - откуда начнется прорисовка кадра, если там уже далеко не середина строки или кадра? И что произойдет, если в середине кадра вырубить прорисовку (заменить или нет регистры адреса в PPU) и через какое-то время опять включить. Очень смутно понимаю, что произойдет.
Не могу справиться с демкой High-Hopes - нет прорисовки извивающейся линии.

Автор:  HardWareMan [ 02 янв 2015, 11:03 ]
Заголовок сообщения:  Re: Очень низкоуровневый эмулятор 6502 / NES


Сколько он занимает? pAPU будешь делать? Надо добить Дендик полностью. :3

Автор:  CaH4e3 [ 02 янв 2015, 15:29 ]
Заголовок сообщения:  Re: Очень низкоуровневый эмулятор 6502 / NES

да, руки чешутся заюзать ядро в мурмуляторе хех

Автор:  org [ 04 янв 2015, 17:10 ]
Заголовок сообщения:  Re: Очень низкоуровневый эмулятор 6502 / NES

Цитата:
Вопрос по PPU. Что происходит при включении прорисовки фона или спрайтов. Ведь счетчик в ППУ всегда считает. Что он сотворит с картинкой - откуда начнется прорисовка кадра, если там уже далеко не середина строки или кадра?

Сигнал VBlank настроит прорисовку как положено, после первых двух полукадров. Поэтому во всех играх в самом начале есть 2 цикла ожидания Vblank. Ничего страшного не произойдет, просто у тебя кадр начнется не с верха экрана, а где-то посередине.

Цитата:
И что произойдет, если в середине кадра вырубить прорисовку
Ничего. Просто наружу не будет выводиться картинка (заместо пикселей будут уровни черного)

Цитата:
Сколько он занимает?

Total logic elements : 872
Total pins : 34

Цитата:
pAPU будешь делать?

После PPU )

Автор:  HardWareMan [ 07 янв 2015, 00:22 ]
Заголовок сообщения:  Re: Очень низкоуровневый эмулятор 6502 / NES

org писал(а):
Цитата:
Вопрос по PPU. Что происходит при включении прорисовки фона или спрайтов. Ведь счетчик в ППУ всегда считает. Что он сотворит с картинкой - откуда начнется прорисовка кадра, если там уже далеко не середина строки или кадра?

Сигнал VBlank настроит прорисовку как положено, после первых двух полукадров. Поэтому во всех играх в самом начале есть 2 цикла ожидания Vblank.

Насколько я понял, 2 фрейма нужно ждать (с синхронизацией к VBlank'у) для устаканивания режима PPU при поверапе, а особенно его динамической памяти. Иначе смысла в посыле настроек нет - PPU их не примет или примет не правильно.
org писал(а):
Цитата:
pAPU будешь делать?

После PPU )

Супер!

Автор:  org [ 07 янв 2015, 02:44 ]
Заголовок сообщения:  Re: Очень низкоуровневый эмулятор 6502 / NES

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

Автор:  HardWareMan [ 07 янв 2015, 10:26 ]
Заголовок сообщения:  Re: Очень низкоуровневый эмулятор 6502 / NES

org писал(а):
Я думаю что памяти достаточно нескольких циклов, чтобы устаканиться. А ожидание двух Vblank связано с тем, чтобы логика игры была дискретна целым кадрам.

Ну я читал у Кевтриса вроде, что при тестах на NES, у которой сброс PPU подключен к сбросу CPU, что если не ждать 2 фрейма, то изображение портится. Действительно, 1 полный фрейм нужен для уверенности что все скансчетчики прокрутили свои состояния и/или вышли из запрещенных состояний. Однако, если счетчик был рядом с VBlank, то он не пройдет полный круг. Для этого ожидается второй VBlank. Таким образом, первый VBlank это синхронизация, а второй VBlank это уже минимальный норматив ожидания, т.к. скорость запуска игры имеет значение для игрока. Сам же понимаешь, что при поверапе вся схема в случайном состоянии. У Денди же (и Фамикома) сброс PPU не подключен к сбросу CPU и PPU колбасит всегда нонстопом при ручном сбросе. Это опять же говорит в пользу 2х фреймов как универсальной меры: первый для синхронизации и второй ожидание.

PS Код начальной инициализации не дискретен.

Автор:  CaH4e3 [ 07 янв 2015, 15:31 ]
Заголовок сообщения:  Re: Очень низкоуровневый эмулятор 6502 / NES

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

Автор:  Иван [ 14 янв 2015, 10:51 ]
Заголовок сообщения:  Re: Очень низкоуровневый эмулятор 6502 / NES

org писал(а):
Цитата:
И что произойдет, если в середине кадра вырубить прорисовку

Ничего. Просто наружу не будет выводиться картинка (заместо пикселей будут уровни черного)

То есть PPU будет исправно запрашивать данные из VRAM и VROM - не освободит свою шину данных и адреса, а сам будет рисовать "черные точки" с примесью синросигналов?

-- 14 янв 2015, 11:59 --

HardWareMan писал(а):
Насколько я понял, 2 фрейма нужно ждать (с синхронизацией к VBlank'у) для устаканивания режима PPU при поверапе, а особенно его динамической памяти. Иначе смысла в посыле настроек нет - PPU их не примет или примет не правильно.

А я понял, что настройки PPU хранит в своего рода регистрах (не все из 8 бит). И точно к некоторым из них он не может запретить доступ из вне (по крайней мере на запись данных).

Автор:  HardWareMan [ 14 янв 2015, 11:17 ]
Заголовок сообщения:  Re: Очень низкоуровневый эмулятор 6502 / NES

Иван писал(а):
А я понял, что настройки PPU хранит в своего рода регистрах (не все из 8 бит). И точно к некоторым из них он не может запретить доступ из вне (по крайней мере на запись данных).

Дело не в запрете доступа а в способности хранения. Если некоторые регистры действительно собраны на логике, то та же память ОАМ собрана на емкостях. И пока не установится режим, внятную информацию туда не записать. С соответствующим результатом.

Автор:  org [ 15 янв 2015, 03:08 ]
Заголовок сообщения:  Re: Очень низкоуровневый эмулятор 6502 / NES

Цитата:
То есть PPU будет исправно запрашивать данные из VRAM и VROM - не освободит свою шину данных и адреса, а сам будет рисовать "черные точки" с примесью синросигналов?

Так точно. "Вырубание" рисования - вырубает конкретно вывод точек в "полезной" части видеосигнала (та что находится после Color Burst). А схема выборки данных будет исправно долбиться в видео-память. То же самое относится и к схеме выборки и сравнения спрайтов и счетчикам H/V (координаты луча). Все они будут работать "вхолостую", потому что их нельзя поставить на "паузу" :)

-- 15 янв 2015, 02:11 --

Цитата:
Если некоторые регистры действительно собраны на логике, то та же память ОАМ собрана на емкостях. И пока не установится режим, внятную информацию туда не записать. С соответствующим результатом.
Более того, если OAM периодически не обновлять - она имеет тенденцию "корраптиться" (разряжаться). Насколько мне известно эта фича не работает в эмуляторах.

Автор:  HardWareMan [ 15 янв 2015, 08:05 ]
Заголовок сообщения:  Re: Очень низкоуровневый эмулятор 6502 / NES

org писал(а):
Цитата:
То есть PPU будет исправно запрашивать данные из VRAM и VROM - не освободит свою шину данных и адреса, а сам будет рисовать "черные точки" с примесью синросигналов?

Так точно. "Вырубание" рисования - вырубает конкретно вывод точек в "полезной" части видеосигнала (та что находится после Color Burst). А схема выборки данных будет исправно долбиться в видео-память. То же самое относится и к схеме выборки и сравнения спрайтов и счетчикам H/V (координаты луча). Все они будут работать "вхолостую", потому что их нельзя поставить на "паузу" :)

А я думал, что программы отключают рендер (только оба одновременно: и спрайты и бэкграунд!) именно для того, чтобы быстрее перезагрузить данные VRAM не привязываясь к VBlank и не ограничиваясь окном VBlank'а. Надо логиком посмотреть для уверенности.
org писал(а):
Цитата:
Если некоторые регистры действительно собраны на логике, то та же память ОАМ собрана на емкостях. И пока не установится режим, внятную информацию туда не записать. С соответствующим результатом.
Более того, если OAM периодически не обновлять - она имеет тенденцию "корраптиться" (разряжаться). Насколько мне известно эта фича не работает в эмуляторах.

И эту фичу разрбирали на несдеве. Даже тестик писали.

Автор:  org [ 18 янв 2015, 00:40 ]
Заголовок сообщения:  Re: Очень низкоуровневый эмулятор 6502 / NES

Цитата:
А я думал, что программы отключают рендер (только оба одновременно: и спрайты и бэкграунд!)


Тэкс.. Я решил глянуть схемы, что там происходит на самом деле)))

Регистр $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 данных.

Вложения:
black_003.jpg
black_003.jpg [ 245.24 КБ | Просмотров: 16087 ]
black_002.jpg
black_002.jpg [ 74.32 КБ | Просмотров: 16087 ]
black_001.jpg
black_001.jpg [ 152.37 КБ | Просмотров: 16087 ]

Автор:  HardWareMan [ 18 янв 2015, 09:24 ]
Заголовок сообщения:  Re: Очень низкоуровневый эмулятор 6502 / NES

Просто я где-то прочитал про это и было отдельно выделено, что отключать надо полностью. Иначе VRAM остается занятой во время активного кадра.

Автор:  Иван [ 20 янв 2015, 15:58 ]
Заголовок сообщения:  Re: Очень низкоуровневый эмулятор 6502 / NES

Еще нашел сигнал BLNK в схеме DATAREADER-а PPU.

Вложения:
DataReader001.png
DataReader001.png [ 2.07 МБ | Просмотров: 16017 ]

Автор:  EvGS [ 26 янв 2015, 02:41 ]
Заголовок сообщения:  Re: Очень низкоуровневый эмулятор 6502 / NES

Люди, кто-нибудь может помочь в этом вопросе?:
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).

Автор:  EvGS [ 29 янв 2015, 01:23 ]
Заголовок сообщения:  Re: Очень низкоуровневый эмулятор 6502 / NES

Декап FDS и VRC7: http://forums.nesdev.com/viewtopic.php?f=9&t=12260

Автор:  HardWareMan [ 04 фев 2015, 07:12 ]
Заголовок сообщения:  Re: Очень низкоуровневый эмулятор 6502 / NES

Возвращаясь к напечатанному. EvGS подтвердил, что память ОАМ в PPU дендика построен на DRAM.

Страница 19 из 21 Часовой пояс: UTC + 3 часа [ Летнее время ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/