Очень низкоуровневый эмулятор 6502 / NES
Автор |
Сообщение |
02 авг 2012, 08:35 |
|
Зарегистрирован: 24 июл 2007, 06:54 Сообщения: 492 Откуда: Embedded
|
org писал(а): Я тем временем проштудировал устройство NTSC-сигнала и как PPU генерирует цвета. Весьма впечатлен насколько там всё сложно (и одновременно просто) устроено ) Самое интересное - это как картинка "дребезжит" на границах цветов (частота сэмплирования пикселей отличается от частоты сэмплирования поднесущей цвета). Ещё случайно наткнулся на изыскания HWM-a на форуме nesdev, особенно порадовали фотки осциллограмм вспышки цветности и вертикальной синхронизации. По ним можно будет искуственно ухудшить эмулируемый video out (шумы и RC-фильтрация сигнала) Там все даже проще. Из основной частоты формируются 12 фаз поднесущей цветности: 6 прямых и 6 инверсных. Именно поэтому, основная частота ровно в 6 раз выше поднесущей. Одна из фаз используется в колор барсте (вспышка синхронизации цвета), по ней настраивается ФАПЧ частоты декодера. Остальные фазы формируют готовую фазовую модуляцию, что дает нам 12 разных оттенков. Замечу, что плавный сдвиг фазы дает предсказуемую радугу и это прослеживается в палитре NES. org писал(а): Единственное что я пока не понял - каким же образом телевизор осуществляет вертикальную синхронизацию.. ведь сигнал может "начаться" с любого места. Где в этом случае рисовать картинку (как позиционированы лучи). Нигде в инете не могу найти как работает последовательность сигналов при вертикальной синхронизации. Когда приходит КСИ, развертка отрабатывает КОХ. На него уходит примерно 20 строк. Остальное можно назвать растром, т.к. некоторые телевизоры крайние строки выводят за пределами видимой области маски (такова настройка с завода, но можно и уменьшить размер растра чтобы видеть их). Если отрубить кадровое гашение в телевизоре, то можно увидеть, сколько строк КОХ затрачивает каждый конкретный телевизор. org писал(а): Эмуляцию телевизора тоже продумал, буду пробовать делать субпиксельный рендеринг, имитируя решетку кинескопа и расположение люминофора. Где-то я уже это слышал.
_________________ Tried so hard and got so far, but in the end, it doesn't even matter...
|
![](./styles/wow_alliance/theme/images/spacer.gif) |
02 авг 2012, 08:57 |
|
Зарегистрирован: 23 июл 2007, 19:37 Сообщения: 401 Откуда: Мытищи
|
_________________ Nestopia 1.37/1.40 Fixed
|
![](./styles/wow_alliance/theme/images/spacer.gif) |
02 авг 2012, 18:23 |
|
Зарегистрирован: 24 июл 2007, 10:41 Сообщения: 570
|
Процесс с PPU продвигается достаточно быстро, но с диффузией придется повозиться. Особенно заинтриговал регион, который находится в правом нижнем углу, под OAM. Подозрение что эта часть ответственна за чтение данных бэкраунда, поэтому я в первую очередь сконцентрировался на ней (ибо этот процесс подробно описан в доках) -- 02 авг 2012, 19:45 -- Патент на PPU: http://www.google.com/patents/US4824106
Вложения:
wip2.png [ 1.77 МБ | Просмотров: 19002 ]
|
![](./styles/wow_alliance/theme/images/spacer.gif) |
03 авг 2012, 07:04 |
|
Зарегистрирован: 24 июл 2007, 06:54 Сообщения: 492 Откуда: Embedded
|
_________________ Tried so hard and got so far, but in the end, it doesn't even matter...
|
![](./styles/wow_alliance/theme/images/spacer.gif) |
06 авг 2012, 18:51 |
|
Зарегистрирован: 24 июл 2007, 10:41 Сообщения: 570
|
Оттрассировал примерно 40% чипа.
В спрайтовой памяти диффузию вообще не разглядеть, придется ждать фотки чипов без слоя металла, либо додумать как это работает самостоятельно.
Вложения:
2С02G_wip.png [ 1.81 МБ | Просмотров: 18942 ]
|
![](./styles/wow_alliance/theme/images/spacer.gif) |
06 авг 2012, 20:54 |
|
Зарегистрирован: 23 июл 2007, 19:37 Сообщения: 401 Откуда: Мытищи
|
Не, уж лучше подождать, чтоб всё точно было. Зря я чтоли два фамикома потрошил =)
_________________ Nestopia 1.37/1.40 Fixed
|
![](./styles/wow_alliance/theme/images/spacer.gif) |
07 авг 2012, 01:01 |
|
Зарегистрирован: 24 июл 2007, 10:41 Сообщения: 570
|
Да принцип то понятен - есть защелка, на неё два входа - "сброс" и "установка". Как это работает - понятно, но не видно как это реализовано в виде переплетения кишочков. Поработал ещё над APU. Сделал микшеры звука и пины адресной шины. И еще в середине кучу межсоединений. ![Изображение](http://ogamespec.com/imgstore/whc5020309c35546.jpg) -- 07 авг 2012, 22:14 -- Вывод шины адреса (address pin)![Изображение](http://ogamespec.com/imgstore/whc5021678eddd76.jpg) Всего у 2A03 16 таких выводов. На каждый из них идёт 2 шланга. Первый это собственно значение бита шины A0...A15. Установленный второй вход (NC/A) отсоединяет процессор от адресной шины. (используется так-называемая "tri-state" логика: 1, 0 и not connected) Вход A0...A15 идёт в tri-state логику через серию push-pull инверторов. Там кстати видны остатки схемы со времен отладки чипа ![:) :)](./images/smilies/smile.gif) Фиолетовый "баян" - это усилительные каскады. Этот вывод - write only (со стороны процессора). Зашибись когда всё понятно ![:D :D](./images/smilies/biggrin.gif)
|
![](./styles/wow_alliance/theme/images/spacer.gif) |
09 авг 2012, 19:15 |
|
Зарегистрирован: 24 июл 2007, 10:41 Сообщения: 570
|
Поработал над PPU. Влом писать перевод ![:) :)](./images/smilies/smile.gif) Найти можно тут : http://forums.nesdev.com/viewtopic.php? ... 817#p97762Вкратце - разобрал выводы шины данных и часть схемы адресации спрайтовой памяти. Застрял вот на этом куске : ![Изображение](http://ogamespec.com/imgstore/whc5023cf0864e9d.jpg) Где-то в промежутках (помеченных красными квадратами) должны быть дырки, но их не видно под металлом. Эта схема выбирает регистр PPU, для соединения его с шиной данных. Если бы все хорошо было видно, я бы уже давно идентифицировал регистры PPU. Но пока придется решать паззл в других местах, чтобы узнать расположение регистров ) Например порт для обмена со спрайтовой памятью находится где-то рядом с ней, а порт для обмена с видеопамятью (*genius*) где-то рядом с выводами адресной шины PPU. Короче как-то так)
|
![](./styles/wow_alliance/theme/images/spacer.gif) |
02 сен 2012, 14:30 |
|
Зарегистрирован: 24 июл 2007, 10:41 Сообщения: 570
|
Логика обработки приоритетов прерываний (NMI, IRQ, BRK): ![Изображение](http://ogamespec.com/imgstore/whc503b2601ddbd8.jpg) Также закончил схему рандомной логики и немного подчистил ALU. http://ogamespec.com/6502/ALU_trans.pnghttp://ogamespec.com/6502/LOGIC_trans2.png(картинки в пост не включаю напрямую, чтобы не травмировать вашу психику) На транзисторном уровне 6502 теперь разобран полностью! На след. неделе подготовлю полноразмерную схему и сделаю релиз на 6502.org Также запустился на Google Code: http://code.google.com/p/breaks/Работы по APU и PPU пока не выкладываю, я их зажал, чтобы навязать конкуренцию авторам других эмуляторов (на самом деле я просто не получал никакого feedback-а от NESDEV коммюнити, в отличии от неоценимой помощи с форума 6502.org) Соединения рандомной логики с другими частями процессора (eng): InputsPHI1,PHI2: timing Reset0: from RST pin NMIG: from NMI pin logic IRQP: from IRQ pin logic /IR5: from instruction register, to determine CLC/SEC and others SO: from SO pin, set V-flag RDY: from RDY pin BRKDONE, VEC: from interrupt priority logic 2 inputs from predecode logic. 129 lines from PLA. AVR: overflow out from ALU ACR: carry out from ALU OutputsTRES: reset T-counter sync: shift T-counter, additionally output to SYNC pin T0, T1X: first two steps of instruction decoding, to PLA R/W: Goes to R/W pin and data latch fetch: Force instruction register to load from Predecode Register VEC0: to interrupt priority logic, when BRK detected 48 output drivers, to control bottom part. Also random logic is connected with internal data bus (DB) to exchange status reg (flags). По прежнему с нетерпением ждем декапа чипов от товарища HWM'a.Актуальность их получения возрастает изо дня в день ( особенно PPU ревизии G) Последние работы по APU и PPU можно найти в этой теме: http://forums.nesdev.com/viewtopic.php? ... 197#p97762
|
![](./styles/wow_alliance/theme/images/spacer.gif) |
13 сен 2012, 13:43 |
|
Зарегистрирован: 24 июл 2007, 10:41 Сообщения: 570
|
Слепил все куски 6502 в одну большую схему: ![Изображение](http://ogamespec.com/imgstore/resized_whc5051aa74611df.jpg)
|
![](./styles/wow_alliance/theme/images/spacer.gif) |
25 сен 2012, 23:52 |
|
Зарегистрирован: 24 июл 2007, 10:41 Сообщения: 570
|
Вообщем решил купить свой цифровой микроскоп. Скажу сразу - особо на успех не надеялся, но о такой игрушке мечтал давно, так что ещё пригодится) Выбор сделал на Bresser Junior DM 400. 20x / 80x / 350x. ![Изображение](http://ogamespec.com/imgstore/whc506208eab98e3.jpg) Проблем с покупкой не возникло, взял в 4glaza, стоимость микроскопа составила 4 рубля. В качестве жертвы выбрал один из чипов рассыпухи PSX, даже не знаю что за чип ))) Вроде контроллер CD-ROM. Декапитацию провёл "термическим методом" : берем чип в клещи, включаем газ и суем его туда. Как начинает шкворчать - под холодную воду. После 3-4 процедур пластик превратился в печеньку и просто раскрошился. Я немного перестарался и чип треснул пополам: ![Изображение](http://ogamespec.com/imgstore/whc506208e2d0284.jpg) Результаты исследования под микроскопом: 20x: ![Изображение](http://ogamespec.com/imgstore/whc506208a673ce9.jpg) 80x ![Изображение](http://ogamespec.com/imgstore/whc506208af09245.jpg) 350x ![Изображение](http://ogamespec.com/imgstore/whc506208b92a7d2.jpg) По сути дела четко показывает только 20x, но из-за 1.3 мегапиксельной матрицы - картинка говно. А 80 и 350 как ежики в тумане. Линзы не тянут вообще. Выводы - если брать цифровой микроскоп для исследований, то с линзой в районе 40x (среднее между 20 и 80) и 8-10 мегапиксельной матрицей. -- 26 сен 2012, 00:45 -- после некоторых экспериментов я обнаружил, что если объектив проворачивать не до конца, то его разрешающая способность как ни странно становится лучше, сравните: в нормальном положении: ![Изображение](http://ogamespec.com/imgstore/whc50621f0bad591.jpg) не до конца провернутый: ![Изображение](http://ogamespec.com/imgstore/whc50621f1d5c680.jpg) ну и вот картинки на макс. разрешающую способность: ![Изображение](http://ogamespec.com/imgstore/whc50621f225b868.jpg) ![Изображение](http://ogamespec.com/imgstore/whc506225e7c87a1.jpg)
|
![](./styles/wow_alliance/theme/images/spacer.gif) |
26 сен 2012, 06:37 |
|
Зарегистрирован: 24 июл 2007, 06:54 Сообщения: 492 Откуда: Embedded
|
А поменять камеру нет возможности?
_________________ Tried so hard and got so far, but in the end, it doesn't even matter...
|
![](./styles/wow_alliance/theme/images/spacer.gif) |
26 сен 2012, 10:39 |
|
Зарегистрирован: 24 июл 2007, 10:41 Сообщения: 570
|
Если только организовать кружок "Умелые руки". Корпус микроскопа пластиковый, разборный. По идее можно тушку от зеркалки приспособить, но это изврат ))) Вообще надо глянуть на NMOS чипы. Те что на картинках - это многослойные CMOS. -- 26 сен 2012, 09:49 -- Захотелось ещё что нибудь отфотать. Выбрал чип 60ns памяти NEC 424805AL-A60 Чип довольно крупный оказался, примерно сантиметр в ширину. На этот раз я аккуратно плавил корпус и придумал способ как извлечь микросхему - нужно взять чип с боков и нагревая его потихоньку сжимать. За счет этого стенки развигаются и чип просто вываливается изнутри. В итоге кристалл получился без дефектов. Ногтем я соскреб мусор, и отполировал рукавом поверхность, чтобы удалить пыль. 20x, сведенное из двух снимков ![Изображение](http://ogamespec.com/imgstore/whc5062a45ab801c.jpg) 80x, левый верхний угол ![Изображение](http://ogamespec.com/imgstore/whc5062a46263aa9.jpg) 350x - DRAM ![Изображение](http://ogamespec.com/imgstore/whc5062a46c4b318.jpg) -- 26 сен 2012, 19:46 -- Есть небольшой прогресс. После небольшого обсуждение с Евгеном по поводу "белесости" мы пришли к выводу, что так как телескоп предназначен для проходящего света - часть его отражается назад в трубу от подставки, и создает муар. Поэтому я по его совету подложил черную тряпочку, результаты превзошли все мои ожидания ) Первый чип оказался совершенно испорчен и дело тут не в плохой матрице. Хотя про матрицу мы тоже уже придумали - я попробую накрутить объективы от микроскопа на HD-веб камеру Logitech с матрицей 5 mpix (кстати технически сам микроскоп - это тупо вебкамера с объективами ![:D :D](./images/smilies/biggrin.gif) ) Оказалось что алюминиевые дорожки не очень переносят "термическую декапитацию", поэтому металл частично оплавился, кое-где видны даже "спайки", когда он собирался в капельки. Вообщем термическая декаптиация не подходит совершенно. На 80х. Муар всё же остался, но это уже из-за дешевых светодиодов подсветки. В идеале надо делать фотку одновременно с фотовспышкой, чтобы матрица захватила больше света. ![Изображение](http://ogamespec.com/imgstore/whc50632e66ed1a4.jpg) На 350х особенно видно как испортились металлические дорожки: ![Изображение](http://ogamespec.com/imgstore/whc50632e71ec4bb.jpg) Второй чип (память) лучше перенёс термическую декапитацию, так как в нем используется медь, у которой температура плавления повыше чем у алюминия. На этой фотке дорожки массива DRAM. Я не знаю насколько тонкие эти полоски, но точно несколько микрометров. Такой разрешающей способности вполне хватит для чипов эпохи NES/Sega/Gameboy. ![Изображение](http://ogamespec.com/imgstore/whc50632f7cd0516.jpg) Оказалось что чип покрыт оксидной пленкой, как олифой, которая мешает разглядеть детали и искажает картинку. Это видно в месте контактных площадок: ![Изображение](http://ogamespec.com/imgstore/whc50632f8b557b4.jpg) Короче я доволен своим приобретением, деньги не выброшены на ветер. Теперь нужно освоить химическую декапитацию чипов азотной кислотой и стравливание металлических дорожек.
|
![](./styles/wow_alliance/theme/images/spacer.gif) |
28 сен 2012, 12:43 |
|
Зарегистрирован: 28 сен 2012, 12:29 Сообщения: 9
|
org ![shock :shock:](./images/smilies/shok.gif) Чувак, ты че рехнулся совсем? Есть же готовые схемы. Чем они тебе не угодили? Или ты не нашел? ![blink :blink:](./images/smilies/blink.gif) P.S. У меня такая же идея (вплоть до паяния реального проца потранзисторно ![:D :D](./images/smilies/biggrin.gif) ), потому и наткнулся на этот форум. Да, по ходу, ты ее видел (схему)... Извиняюсь... ![blink :blink:](./images/smilies/blink.gif) Не могу вспомнить есть ли еще схемы... Пошарю потом дома (я много изображений по этому процу храню)...
|
![](./styles/wow_alliance/theme/images/spacer.gif) |
28 сен 2012, 17:58 |
|
Зарегистрирован: 24 июл 2007, 10:41 Сообщения: 570
|
Друг, читай внимательно тему и узнаешь почему нужны фотки чипов. C APU вопросов нет, а вот с PPU есть проблемы. Начал работу над визуальным отладчиком. Тем кто привык работать с 6502 он покажется непривычным, а мне норм ![Изображение](http://ogamespec.com/imgstore/resized_whc5065ab90c7bca.jpg) (со временем естественно будут добавлены ещё некоторые элементы) Все последние изменения можно найти в SVN http://code.google.com/p/breaks/
|
![](./styles/wow_alliance/theme/images/spacer.gif) |
28 сен 2012, 19:53 |
|
Зарегистрирован: 28 сен 2012, 12:29 Сообщения: 9
|
Перерыл все дополнительных рисунков не нашел у себя. Только схему, сдесь на форуме она есть, еще нашел схему i4004... Сначала я ее хотел реализовать, но понял, что на ней только калькулятор можно собрать... org писал(а): Друг, читай внимательно тему и узнаешь почему нужны фотки чипов. C APU вопросов нет, а вот с PPU есть проблемы.
Я не силен в этих терминах... APU это Arithmetical Process Unit? PPU это Power Process Unit? Я правильно понимаю?
|
![](./styles/wow_alliance/theme/images/spacer.gif) |
28 сен 2012, 20:40 |
|
Зарегистрирован: 23 июл 2007, 19:37 Сообщения: 401 Откуда: Мытищи
|
Нет.
APU - Audio Processing Unit PPU - Picture Processing Unit Но тут стоит учесть, что это не "общие правила расшифровки", а аббривеатуры для вполне конкретных чипов от NES.
Зачем нужны эти фотографии? Потому что в NES/Famicom использовались эксклюзивные чипы, заказанные Nintendo у фирмы Ricoh. Это RP2A03 (CPU+APU+всякая мелочь) и RP2C02 (PPU). Нигде, кроме как в NES/Famicom (и каком-то нинтендовском игровом автомате) их больше не было.
И если ядро 6502, которое использовалось в RP2A03 ещё более-менее изучено, то APU и особенно PPU - изучено слабо. Никто, кроме самих Nintendo/Ricoh не знает логику их работы с точностью 100%. Для этого и делается декапсуляция - чтобы узнать. И в будущем получить идеальный эмулятор.
_________________ Nestopia 1.37/1.40 Fixed
|
![](./styles/wow_alliance/theme/images/spacer.gif) |
28 сен 2012, 22:47 |
|
Зарегистрирован: 28 сен 2012, 12:29 Сообщения: 9
|
EvGS писал(а): Нет. Зачем нужны эти фотографии? Потому что в NES/Famicom использовались эксклюзивные чипы, заказанные Nintendo у фирмы Ricoh. Это RP2A03 (CPU+APU+всякая мелочь) и RP2C02 (PPU). Нигде, кроме как в NES/Famicom (и каком-то нинтендовском игровом автомате) их больше не было.
Вот где правда. ![aggressive :agressive:](./images/smilies/aggressive.gif) В этом и были все палки в колеса моего прогресса по изучению 6502. Вот только у меня цель иная. Я не приставку эмулировать хочу, а сам процессор, и в конечном результате ЕОМ (на уровне транзисторов или логических элементов, что позволит разрабатывать свои ЭОМ, ну и просто потому, что мне было интересно). Но как вы говорите, в приставках использовались процессоры на основе 6502, но не сам 6502, и модификаций просто, извиняюсь за выражение, хоть одним местом жуй, поди разберись где какая. ![banghead :banghead:](./images/smilies/banghead.gif) Это у меня окончательно отбило желание разбираться дальше...
|
![](./styles/wow_alliance/theme/images/spacer.gif) |
29 сен 2012, 00:01 |
|
Зарегистрирован: 23 июл 2007, 19:37 Сообщения: 401 Откуда: Мытищи
|
Согласно вики:
"RP2A03 содержит ядро процессора, совместимое с 6502, а также 22 отображаемых на память порта ввода-вывода, управляющих присутствующими в составе микросхемы программируемым генератором звука, простейшим контроллером прямого доступа к памяти (ПДП), таймером с возможностью генерации прерываний, и портом джойстиков."
"Процессорное ядро RP2A03 представляет собой практически полный аналог КМОП-версии 6502. Главным отличием является отсутствие поддержки десятичного режима и, соответственно, флага D и операции DAA (двоично-десятичной коррекции)."
_________________ Nestopia 1.37/1.40 Fixed
|
![](./styles/wow_alliance/theme/images/spacer.gif) |
29 сен 2012, 00:35 |
|
Зарегистрирован: 24 июл 2007, 10:41 Сообщения: 570
|
На i4004 между прочим оба Пионера 10 и 11 летают, вот уже 40 лет ) Схемы которые я выкладываю не относятся к встроенному ядру 2A03, это схемы оригинального MOS 6502 ревизии D. Как будет готов симулятор 6502 на транзисторном уровне я просто сравню его маски с тем 6502, который вшит внутрь 2A03 и найду чего там вырезали. Хотя я уже и так догадываюсь что именно ![:) :)](./images/smilies/smile.gif) И кстати Breaks6502 симулирует полный 6502, но с возможностью указать ему что BCD-коррецию делать не нужно, чтобы он работал в режиме 2A03 (NES) То что руки опустились - это хорошо ) Будет меньше конкуррентов )))
|
![](./styles/wow_alliance/theme/images/spacer.gif) |
|
Кто сейчас на конференции |
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 4 |
|
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения
|
|