Отличия Dendy и других клонов от оригинальных NES/Famicom
Автор |
Сообщение |
17 май 2009, 15:27 |
|
Зарегистрирован: 23 июл 2007, 22:38 Сообщения: 84 Откуда: С-Пб
|
То есть если я буду менять данные по $2001, то будет меняться яркость экрана?
_________________ Дао, выраженное словами, не есть истинное Дао
|
|
17 май 2009, 17:24 |
|
Зарегистрирован: 22 июл 2007, 11:16 Сообщения: 787
|
старшие три бита
_________________ 1. Модератор всегда прав. 2. Если модератор не прав, см. п. 1.
|
|
17 май 2009, 18:38 |
|
Зарегистрирован: 23 июл 2007, 19:37 Сообщения: 401 Откуда: Мытищи
|
Ну а все-таки, СаН4е3, что думаешь по поводу моего предыдущего поста? В нестопии что-то неверно помимо таймингов?
_________________ Nestopia 1.37/1.40 Fixed
|
|
17 май 2009, 19:26 |
|
Зарегистрирован: 22 июл 2007, 11:16 Сообщения: 787
|
Без понятия что неверно в нестопии, я ее не то что не писал, я в ней даже не пытался разбираться. Как она там себе работает - одному марти известно. Я могу сказать, что в той же ультре, при всех таймингах и прочих вещах, нельзя просто физически сделать некоторые вещи, например точный тайминг между разными этапами рендеринга исключительно в силу самого алгоритма рендера в эмуляторе, который не поддерживает дробные такты на строку, как того требует соотношение 1 к 3, но рендерит тем не менее построчно :/
_________________ 1. Модератор всегда прав. 2. Если модератор не прав, см. п. 1.
|
|
07 окт 2009, 19:40 |
|
Зарегистрирован: 23 июл 2007, 19:37 Сообщения: 401 Откуда: Мытищи
|
На данный момент поступил следующим образом: скомпилировал два exe'шника на основе nestopia140src с разными таймингами. Nestopia20 [VINT=20/VSLEEP=51] - Подходит для большинства игр, в т.ч. Battletoads/BtDD. Это наиболее "дендиподобный" режим. Nestopia70 [VINT=70/VSLEEP=1] - Для ромов, испорченных на nestopia20 (James Bond Jr, Power Blade2, Aladdin 199x Unl и нек. др.) Довольно удобно пользоваться ими из одной папки, не нужно перенастраивать конфигурацию под каждый билд. При таком варианте и ромы работают хорошо, и высота звукового тона (включая DPCM-канал) аналогична "Денди".
исправление: громкость triangle-канала для денди режима по умолчанию равна стандартным "85" единицам. Включается режим "денди" так: 1) options - preferences - favored system: [dendy]. 2) Machine - Region: [PAL] или [Auto]. 3) Закрыть и снова запустить эмулятор.
Обновление 05.10.2009: Скомпилировал в родной среде VS2005 SP1, со стандартными библиотеками DirectX SDK - summer 2004, как было у Мартина.
_________________ Nestopia 1.37/1.40 Fixed
|
|
09 окт 2009, 20:24 |
|
Зарегистрирован: 30 сен 2009, 15:32 Сообщения: 258
|
Скажите пожалуйста,а есть ли на сайте аналогичная тема,только посвященная mеga drive?
|
|
10 окт 2009, 12:29 |
|
Зарегистрирован: 23 июл 2007, 19:37 Сообщения: 401 Откуда: Мытищи
|
Нет. С клонами MD вроде бы нет таких проблем.
_________________ Nestopia 1.37/1.40 Fixed
|
|
10 окт 2009, 21:20 |
|
Зарегистрирован: 30 сен 2009, 15:32 Сообщения: 258
|
Ну не знаю,мне почему то не нравиться то ,что я слышу.Отчетливо это проявляется в Phantasy star 2.Может посоветуете какие-нибудь настройки для Gens или Fusion?
|
|
11 окт 2009, 01:12 |
|
Зарегистрирован: 23 июл 2007, 19:37 Сообщения: 401 Откуда: Мытищи
|
Единственное, что могу посоветовать - включить режим Super HQ в эмуляторах Fusion или Regen, т.к. они наиболее точные в плане эмуляции YM2612. Но и они, говорят, не идеальны. Мне не с чем сравнивать, я не слышал оригинального YM2612. А вообще это вопрос для другой ветки.
_________________ Nestopia 1.37/1.40 Fixed
|
|
12 окт 2009, 07:04 |
|
Зарегистрирован: 24 июл 2007, 06:54 Сообщения: 492 Откуда: Embedded
|
Regen, ИМХО, наиболее точен касаемо YM2612, а вот касаемо эмуляции - они оба примерно одинаковы.
_________________ Tried so hard and got so far, but in the end, it doesn't even matter...
|
|
12 окт 2009, 21:26 |
|
Зарегистрирован: 30 сен 2009, 15:32 Сообщения: 258
|
Хорошо,может тогда подскажете где ветка находиться с обсуждением эмуляции Mega Drive? Для NES я уже хорошие настройки подобрал.
|
|
12 окт 2009, 21:59 |
|
Зарегистрирован: 23 июл 2007, 19:37 Сообщения: 401 Откуда: Мытищи
|
тут можно создать: viewforum.php?f=12
_________________ Nestopia 1.37/1.40 Fixed
|
|
29 окт 2009, 15:34 |
|
Зарегистрирован: 24 июл 2007, 06:54 Сообщения: 492 Откуда: Embedded
|
Я долго думал, куда это поместить, решил пока сюда. И так, читайте, много буков, но думаю осилите. Код предоставлен на Delphi, кому надо на С - сами сообразите. Многие хотят, чтобы вывод эмулятора соответствовал тому, что было в свое время на телевизоре. Используют для этого всякие сканлайнеры и блюры, но это все не совсем то. Все дело в том, что мы имели тогда. Обычно - это ЧБ телевизор. Или цветной советский ящик, в особо кошерном случае - с установленным декодером PAL. Так вот, речь дальше пойдет об имитации вывода композита PAL на некачественном телике. Это все применимо и к NTSC, но с некоторыми изменениями в логике согласно стандарту NTSC. Немного теории. Дендик формирует чистый композит с цветовой кодировкой PAL. Для начала, я объясню, как это работает. Кодирование цвета в PAL использует цветовую модель YUV (как и NTSC, на основе которого он и сделан). Это означает, что изначальный RGB сигнал матрицируется в один яркостный Y и 2 цветоразностных U и V (в телевизорах обозначены как R-Y и B-Y). Такая схема дает обратную совместимость с ЧБ телевизором, т.к. яркость Y есть обычный яркостный черно-белый сигнал изображения. Поэтому, яркость передается так же, как и ЧБ сигнал. Другое дело - цвет. Для полного (если придираться - почти полного) восстановления цвета в картинке, требуется всего 2 цветоразностных сигнала. В системе PAL, эти сигналы модулируют по амплитуде цветовую поднесущую (4,43МГц). При этом, R-Y модулирует синус этой частоты, а B-Y - косинус (т.е. сдвинут на 90 градусов). Если представить упрощенно, то это выглядит так: Код: - - R-Y - - - - - - - - - - B-Y - - - - - - После модуляции этой частоты по амплитуде, оба результата складываются и получается один сигнал: Видно, что частота не изменилась, а фаза будет зависеть от уровней модуляции R-Y и B-Y. В добавок к этому, каждую строку фаза частоты R-Y меняется на 180 градусов (инверсия). Получается, что каждую четную строку модулированный сигнал R-Y имеет фазу 0 градусов, а каждую нечетную - 180 градусов. Далее, результирующая частота складывается с сигналом яркости. И ее видно на ЧБ телевизоре (его яркостная четкость выше) в виде сетки на окрашенных частях экрана. Причем, из-за того, что при модуляции фаза сигнала меняется, то эта сетка имеет наклон, который изменяется в зависимости от цветового оттенка. Теперь, что касается самого изображения, как мы его видели и помним. Дело в том, что пропорции дендика не 1х1. Экран телевизора имеет отношение 4:3 (4/3=1,33333~), а соотношение сторон у дендика: 256/240=1,06666~. 256 точек по горизонтали растягиваются на весь участок экрана. Частота строк у телевизора не меняется. При ее стандартной частоте 15625Гц отображаемое поле имеет 48 микросекунд времени. Для 256 точек дендика частота пикселей будет примерно 1/(48/256)=1/0,1875=5,333~МГц (более точно эту частоту мы уже выводили, исходя из тактовой 26,60МГц, где-то тут на форуме). Частота поднесущей PAL - 4,43МГц. Поэтому, на всем экране в 48мкс поместится примерно 48/(1/4,43)=48/0,225=212,64 периода (или чередований белой и черной точек). Если умножить число 212 на 4, то мы получаем рабочее разрешение 848х240 точек. Почему на 4? Чтобы сделать ровной маску сетки поднесущей. 4 пикселя подряд дают 4 фазы: 0, 90, 180 и 270. 0 и 180 будут содержать модуляцию R-Y, а 90 и 270 - B-Y. Это разрешение не кратно 256 точкам дендика, поэтому я решил сжульничать и заюзать меньшее рабочее разрешение: 256х3=768 точек в ширину. Это позволит применить целочисленную арифметику, что ускорит обработку. Сначала создаем массивы масок поднесущей и заполняем их требуемой фазой: Код: for x:=0 to 213 do begin SinNegCarrier[x*4]:=0.9; SinNegCarrier[x*4+1]:=0.9; SinNegCarrier[x*4+2]:=0; SinNegCarrier[x*4+3]:=0; SinPosCarrier[x*4]:=0; SinPosCarrier[x*4+1]:=0; SinPosCarrier[x*4+2]:=0.9; SinPosCarrier[x*4+3]:=0.9; CosCarrier[x*4]:=0; CosCarrier[x*4+1]:=0.9; CosCarrier[x*4+2]:=0.9; CosCarrier[x*4+3]:=0; Phase:=Phase+PixelPhase; end; Массивы содержат "вес" будущей яркости, значение 0,9 выбрано просто для надежности, чтобы не получить переполнение. Далее, берем исходный RGB кадр: Из него, получаем YUV модель: Код: {Y = 0.299*R + 0.587*G + 0.114*B V = 0.615*R - 0.515*G - 0.100*B U = -0.147*R - 0.289*G + 0.437*B} LY:=Round(0.299*R+0.587*G+0.114*B); RY:=Round(0.615*R-0.515*G-0.1*B)+128; U и V - числа двуполярные (-128...127), поэтому смещаем их к центру BY:=Round(0.437*B-0.289*G-0.147*R)+128;
Все исходные числа целые (байты к тому же), поэтому можно один раз просчитать таблицу и делать просто табличный лукап. В итоге, к обычному ЧБ изображению с полутонами мы получаем 2 растра цветоразностных сигналов: Теперь, у нас есть информация о цвете. Мы можем сформировать реальную маску поднесущей: Код: if (RY=128) and (BY=128) then MC:=1 //Кода цвета нет - ничего не меняем, особенности дендика, смотреть ниже else if (y and 1)=0 then MC:=SinPosCarrier[x]*(RY/255)+CosCarrier[x]*(BY/255) else MC:=SinNegCarrier[x]*(RY/255)+CosCarrier[x]*(BY/255); В результате, мы имеем в MC текущее значение удельного "веса" яркости в данной точке экрана, согласно модуляции PAL. Это будет выглядеть примерно так: Видно, что присутствуют только окрашенные области. Промодулируем сигнал яркости Y и получим ЧБ ПТЦС. Код: MR:=LY*MC; MG:=LY*MC; MB:=LY*MC; На этом эмуляцию ЧБ телика можно закончить. Но мы идем дальше. Теперь, из модели YUV получаем обратно RGB и модулируем поднесущей (хотя, теоретически можно модулировать сразу исходный RGB на маску поднесущей, но тогда цвета станут несколько неестественными, однако это все дело вкуса. Просто, в системе преобразование RGB=>YUV=>RGB происходит все равно, к тому же, полоса сигналов R-Y и B-Y значительно уже, соответственно появляются дополнительные искажения): Код: {R=y+1.14*(v-128) G=y-0.396*(u-128)-0.581*(v-128) B=y+2.029*(u-128)} NR:=Round((LY+1.14*((RY-128)*0.4))*MC); NG:=Round((LY-0.396*((BY-128)*0.4)-0.581*((RY-128)*0.4))*MC); NB:=Round((LY+2.029*((BY-128)*0.4))*MC);
И получаем следующую картинку (насыщенность цвета несколько снижена, играя с константой 0.4 в формуле можно ее регулировать): Результирующую картинку разрешением 768х240 уже масштабируем до требуемой (с пропорцией 4:3, например 640х480) битблиттингом с прорисовкой полутонов, что даст нам конечный результат. Можно еще в довесок посканлайнить и добавить немного блюра. Ну как вам? PS Несколько замечаний. Дело в том, что PPU дендика никогда не формирует RGB (именно дендика, PPU с RGB существует, но не в дендике). Поэтому, сам PAL формируется в нем аппаратно сразу. Так же известно, что в нем формируется 12 разных готовых фаз поднесущей, которые потом модулируются по яркости в 4 цвета одного оттенка. Поэтому, можно заготовить сразу все эти 12 патерна и куча вычислений сразу отпадает за ненадобностью. Тёрки про палитру велись на NESDev'е. По идее, частота поднесущей не привязана к развертке и поэтому сетка должна всегда смещаться. Плагин blarrg'а имитирует смещение, однако конкретно в дендике частота цветовой поднесущей конкретно привязана к развертке и поэтому сетка не смещается (в NTSC версии по идее то же не должна, но смещение несколько повышает четкость картинки).
Вложения:
nes17nn.gif [ 239.54 КБ | Просмотров: 18615 ]
_________________ Tried so hard and got so far, but in the end, it doesn't even matter...
Последний раз редактировалось HardWareMan 29 окт 2009, 15:59, всего редактировалось 3 раз(а).
|
|
29 окт 2009, 15:44 |
|
Зарегистрирован: 11 дек 2007, 09:10 Сообщения: 3
|
Однако, многа букав осилил, прям просто даж от обработанной картинки повеяло настальджи
|
|
29 окт 2009, 18:59 |
|
Зарегистрирован: 23 июл 2007, 19:37 Сообщения: 401 Откуда: Мытищи
|
HardWareMan, превосходная вещь. Ты молодец, спасибо! Хотелось бы узнать - как и куда планируешь применить этот код видеофильтра? Это часть проекта по "расшифровке" дендика? Если да, расскажи пожалуйста, как продвигаются дела на этом фронте.
Покажи эту работу на nesdev'e, однозначно.
_________________ Nestopia 1.37/1.40 Fixed
|
|
29 окт 2009, 22:41 |
|
Зарегистрирован: 24 июл 2007, 06:54 Сообщения: 492 Откуда: Embedded
|
EvGS писал(а): HardWareMan, превосходная вещь. Ты молодец, спасибо! Хотелось бы узнать - как и куда планируешь применить этот код видеофильтра? Это часть проекта по "расшифровке" дендика? Если да, расскажи пожалуйста, как продвигаются дела на этом фронте.
Покажи эту работу на nesdev'e, однозначно. Ломает. Покажи сам, если не лень, а я потом почитаю. Писать ничего не собираюсь - это удел эмуляторописателей.
_________________ Tried so hard and got so far, but in the end, it doesn't even matter...
|
|
09 ноя 2009, 01:55 |
|
Зарегистрирован: 23 июл 2007, 19:37 Сообщения: 401 Откуда: Мытищи
|
Немного оффтопа, но к теме. Я выяснил, что Мартин, оказывается в прошлом (1997-1999 г.) известный трекерщик и его работы высоко ценятся: Last Sunset ("Бриллиантовая композиция" по рейтингу Modarchive) Virtual Humanity Jet LagAnniePlaying with DeathPorling Water (красивая печальная мелодия) Он же известен под никами NightHawk и Reptile, участвовал в демосценерских группах Fairlight Music, ProFound Sound, the Torrent Project, а также в проекте RetroFX в качестве музыканта. Вот, кстати, интервью с нашим трекерщиком Eternal Engine. (работы NightHawk'a упоминаются) Цитата: В: Чья трекерная музыка Вам нравится больше всего? Лучшие работы, которые Вы знаете? О: Очень тяжело выбрать что-то одно, я много чего слушал и многое очень нравилась. Но в принципе, если подумать, то наверное самый продуманный и качественный трэкерный продукт который я слышал это "Last Sunset" от NightHawk'a. Есть и идея и стиль и какая то новизна, которая в тоже время отдает чем то старым и до боли знакомым, но не напрямую как в поп музыке, а скорее в самой поп оркестровой стилистике композиции.
_________________ Nestopia 1.37/1.40 Fixed
|
|
09 ноя 2009, 19:49 |
|
Зарегистрирован: 24 июл 2007, 06:54 Сообщения: 492 Откуда: Embedded
|
Меня все время интересовало, зачем пин №30 у 6527 (смотрите вложение) заземлен? Где-то я слизал, что это BUSREQ. Захват шин. Но вполне мог быть и RDY/WAIT. Т.е. нужный нам сигнал синхронизации. Проводя эксперименты, я определил, что это все же захват шин, а не сигнал готовности. При этом, правда, я потерял комплект 6527/6538 изза бл**кой КРЕНки, у которой оторвалась земля в самый разгар экспериментов. Картридж, на счастье, выжил. Вот мои выводы: 1. Сигнал захвата шин. Если лог.0, то все пучком и проц пашет. Если лог.1 то проц бросает шину (F2=0). 2. Надолго захватывать шину нельзя. Иначе сбрасываются мапперы картов, которые используют F2 для распознавания сброса. 3. pAPU питается от F2! При захвате шин все звуки замолкают и продолжаются при восстановлении BUSREQ=0. Причем, если формировать BUSREQ так, чтобы растянуть цикл обращения (и изменить F2), то частота звуков pAPU меняется.
Discuss же.
Вложения:
DENDY.gif [ 215.37 КБ | Просмотров: 18618 ]
_________________ Tried so hard and got so far, but in the end, it doesn't even matter...
|
|
09 ноя 2009, 23:02 |
|
Зарегистрирован: 23 июл 2007, 22:38 Сообщения: 84 Откуда: С-Пб
|
В даташите от UMC он обозначен как RDY. И написано следующее: This input signal allows the user to halt the 6502 microprocessor on all cycles except write cycles. A negative transition to the low state during or coincident with phase one (Ф1), will halt the microprocessor with the output address lines reflecting the current address being fetched. If ready is low during a write cycle, it is ignored until the following read operation. (прошу прощения, если где есть опечатки)
_________________ Дао, выраженное словами, не есть истинное Дао
|
|
09 ноя 2009, 23:56 |
|
Зарегистрирован: 23 июл 2007, 19:37 Сообщения: 401 Откуда: Мытищи
|
Rumata, у тебя есть даташиты на UMC UA6527P/6538 в PDF ? Любые раритетные документы по этим чипам могут пригодиться. Если есть возможность сделать электронные копии - было бы очень хорошо.
_________________ Nestopia 1.37/1.40 Fixed
|
|
|
Кто сейчас на конференции |
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1 |
|
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения
|
|