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

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

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

EvGS писал(а):
Для RGB-варианта надо RP2C03 где-то искать и вскрывать.

Данный чип добывается с ПлейЧойса10. А ниче, что у него отличается пол литра от NESовской? Это документировано.
org писал(а):
На самом деле нет ) Небольшие изменения в видеотракте и можно на выходе RGB получать (выкинуть DAC и генератор фаз, добавить еще один PLA для преобразования хромы/люмы в фиксированный RGB)

Именно. Пол литру, при этом, подбирать уже свою, как это делают на несдеве. Максимально близкую к оригиналу.
org писал(а):
С логической схемой посложнее, я ещё такого не делал)
Я сразу в Си-код перевожу работу всех блоков, думаю конвертировать потом в Verilog будет не сложно. Просто я с Verlog не сталкивался ещё.

Верилог - моя проблема. А логику работы можно будет проследить и из Ц кода. ;)

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

Я сравнивал несколько дней назад на одном телике поллитры у RP2C02 (famicom) и UA6538 (микросхемная денди).
Вообще две большие разницы. Может декодеры PAL/NTSC влияют, а скорее всего, и в самих чипах есть отличия в пол-литре.

Надо думать, как нам раздербанить UMC/TA со слоями, обязательно.
Там, помимо палитры, нужно посмотреть, как в транзисторной логике формируются тайминги и всякие заглушки на VBLANK. И делитель проца в 6527Р тоже.
Можно на коммерческой основе отдекапить. Есть ли новости от Homer'a?

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

Вообще, правильней даже формировать не RGB. В яркостный сигнал Y вместе с синхрой кодируется 4х уровневая яркость дендика, а 12 фаз поднесущей кодируются в цветоразностные сигналы R-Y/B-Y. Таким образом, наиболее правильным выходом для клона PPU я вижу именно компонент YRpBp.

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

Закончил трассировку PPU:
Изображение Изображение
(картинки кликабельны, полноразмерные фотки примерно по 20 MB каждая)

Исходники фотошопа тут : http://breaknes.com/files/PPU/2C02G.zip (260 MB)

Также получили снимки травленного чипа от Гомера, сейчас я их сшиваю (комп тупит дико :) +сказываются выходные :D )
Изображение

Так вышло что наши фотки появились почти одновременно с отслоенными фотками PPU от мембера с Visual6502:
http://uxul.org/~noname/visual6502/RP2C ... gned/view/

Ну и в плане схем: сейчас работаю над "средним" куском чипа. Из интересного обнаружил там контрольные регистры 2000/2001, мультиплексор (правее я разместил его схему из патента US4824106), регистр 2003 (для доступа к OAM) со схемой инкремента, а также какую-то затейливую схему, на вход которой подаются V-counter и данные спрайтового буфера, похоже на компаратор. Попутно обнаружил много новых линий (которые уже учтены на полоноразмерных схемах выше).
Изображение

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

Сайт запущен:

http://breaknes.com/

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

Сшил полученные фотографии стравленного PPU:
Изображение
(полноразмерная фотка 40 MB)

не хватает маленького кусочка, но там выше есть такой же участок схемы, так что не важно )

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

Пожалуйста, пожалуйста, пожалуйста дублируйте распознанные блоки в логическую схему тоже! Оченама хочется замутить функциональный клон ППУ с компонентным выходом!

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

HWM, не раньше чем будет готова полная транзисторная схема. Смотри, всего там 5 крупных блоков, 3 из них я практически уже разобрал.
Остался массив счетчиков слева внизу (там 8 (или 16) однотипных счетчиков, с ними проблем не будет) и ещё справа-внизу квадратный кусок, я называю его data reader, он занимается выборкой данных PPU (name table, patterns, attribute table)

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

Отлично! Родина тебя не забудет!

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

Я выяснил суть куска, который находится в левом нижнем углу :

http://code.google.com/p/breaks/wiki/PPU_OAM_FIFO

Поражаюсь насколько всё просто и одновременно сложно устроено в PPU )

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

Транзисторная схема OAM FIFO:
Изображение

-- 10 ноя 2012, 00:55 --

Принялся за последний кусок PPU: data reader.

Расположение на чипе :
Изображение

Эта часть схемы PPU занимается выборкой строки тайла из 8 точек, на основе scroll-регистров, которые задают положение тайла в name table и точного (fine) смещения начальной точки внутри тайла. Результаты (текущая точка тайла) передаются в мультиплексор, для смешивания с текущей точкой спрайта, ну а результаты смешения уже выводятся непосредственно на ТВ (используя палитру и фазогенератор).

Я как-нибудь нарисую схемы следственных связей, как выбирается точка тайла, а пока просто первые результаты разбора транзисторной схемы :

Изображение

-- 10 ноя 2012, 01:06 --

Всю писанину теперь можно найти тут : http://breaknes.com/info

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

Закончил работы над data reader-ом (картинки обновил, см. выше). Теперь у меня есть практически вся схема (осталось кое-чего в середине доделать и мультиплексор)!

Автор:  Слэйер Мун [ 11 ноя 2012, 15:57 ]
Заголовок сообщения:  Re: Очень низкоуровневый эмулятор 6502 / NES

Когда же будет релиз этого убер эмулятора-убийцы разогнанных хексакоров? :)

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

Точную дату назвать не могу, ещё много чего нужно сделать.

Доделал середину PPU:
Изображение

Обнаружил что можно каким-то образом использовать горизонтальную позицию тайла в качестве текущего цвета, вместо смешанного цвета заднего фона/спрайта. Значит можно делать "радужные" картинки (горизонтальные градиенты).

-- 11 ноя 2012, 19:11 --

А, как оказалось это просто для доступа к палитре через $3F00...$3F1F :)

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

Какие еще адреса пространства ППУ стали известны? Я про кусок между 3000 до 3EFF. И было бы не плохо уже куски в схемку переводить. :blush:

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

Вот как раз адресный декодер я и найти не могу )))
Ещё осталась милипизерная схемка в самом низу чипа, но на декодер она не похожа, где-то в недрах data reader-а находится декодирующая схема.

Там по сути и декодера то не должно быть, т.к. адресный регистр работает наружу. Тут скорее адресный генератор на базе счетчиков и плюс схема проверки, когда адресный регистра настроен на палитру, то активировать эту линию TH/MUX.

Всю схему слеплю уже скоро, но вначале хочу симулировать работу H/V-счетчиков, потому что из них выходит много контрольных линий, которые расползаются по всему чипу и я не могу идентифициорвать их назначения. А без названия этих контрольных линий схема будет не полной.

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

org писал(а):
Поэтому я взял и замерил сколько тактов эмуляции в секунду делает ядро Breaks 6502. Результаты конечно весьма печальные: на моем средненьком Intel Dual Core T4500 2 ггц компиляция с помощью lcc выдает примерно 80.000 операций/сек (0.08 MIPS), то есть в 50 раз медленнее чем необходимо :(
Поэтому стало интересно какие цифры получатся в новой Express 2012. В 4 часа утра я наконец умудрился скомпилировать проект и результаты следующие : примерно 220.000 оп/сек (0.2 MIPS). Уже лучше, но все равно в 20 раз медленнее.

А как насчет intel compiler?
Может быть /O2 и /QxO улучшат ситуацию?

Изображение

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

Вот, кое-что для справки

Автор:  Слэйер Мун [ 12 ноя 2012, 17:02 ]
Заголовок сообщения:  Re: Очень низкоуровневый эмулятор 6502 / NES

org писал(а):
Точную дату назвать не могу, ещё много чего нужно сделать.


Если в Credits'ы попадут донаторы (или даже их сайты ? :laugh: ), я первый в очереди на материальную помощь проекту. Очень интересна мне вся эта задумка :)

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

EvGS, вопрос с компилятором пока неактуален, есть более важные вопросы )

Мат. помощь пока не требуется, работаем за еду ээээ идею :D

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

Подчистил схемку PPU-рендерера (находится в верхнем левом углу):

Изображение

В этой схеме находится самая интересная часть, "мозг" PPU : H/V random logic. По сложности он конечно уступает рандомной логике 6502, который сложнее примерно раз в 5. Но тем не менее, логика достаточно сложная, без транзисторной схемы я вообще не представляю как можно разобраться в хитросплетении этих кишочков )) А со схемой все гораздо понятнее.

Все блоки идентифицированы, можно приступать к эмуляции чипа. Хотя нет, ещё остается та самая милипизерная схема, в самом низу чипа :D

Бонус: контакт /RES
Изображение
В нем находится динамическая защелка (выделена желтым гексагоном), которая устанавливается при возникновении импулься сброса (/RES).
Контрольная линия - RC очищает все регистры PPU, пока защелка активна.
А специальная линия - REGCL очищает саму защелку. Это происходит в конце каждого кадра, после vblank. Скорее всего это что-то вроде отклика от PPU на сигнал сброса.

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