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

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

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

org писал(а):
что за транзистор такой, затвор которого подсоединен к земле

Похоже на защитный "диод". Должны присутствовать на входных линиях.

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


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

Прогресс по APU:

Изображение

Исходники PSD : http://breaknes.com/files/APU/2A03.zip

-- 24 янв 2013, 19:09 --


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



В итоге подчистил схему 6502:

Изображение

И выкладываю PSD : http://breaknes.com/files/6502/6502.zip (140 MB)

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


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


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



-- 01 фев 2013, 18:48 --


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

после сегодняшнего стрима, через пару часиков, ALU был полностью завершен:

Изображение

Симуляция закачана на SVN. Схему и исходники PSD тоже скоро обновлю.

Дополнительную инфу можно получить тут : http://forum.6502.org/viewtopic.php?f=8 ... 135#p24135

Параллельно узнал новый "паттерн" соединения транзисторов =)
Изображение

out = NAND(a,b) & NAND(c,d)

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

- Закачал на SVN обновленную схему 6502
- Закачал исходники PSD на сайт breaknes
- Разобрался почему у меня PC считал вкривь-вкось. На самом деле всё хорошо считалось, просто каждый второй разряд PC находится в инверсной логике (трюк для оптимизации carry-chain), поэтому когда я считывал значения c PC, то забыл что нужно инвертировать каждый второй разряд, для получения правильного значения :D Последний бастион для "нижней" части процессора пал. Теперь осталось разобраться с "верхней" частью и постепенно складывается целая картина работы процессора.

Кстати очень сложно глядя на общую схему 6502 что-либо понять с первого взгляда. В стримах я пытался кое-где рассказать, но всё равно схема достаточно сложная для понимания, потому что очень "спутанная".

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


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

Между изучением 6502 параллельно рисую топологию APU:
Изображение
Осталось только контакты расставить.

В стане 6502 значительный прогресс, который можно посмотреть в стримах. Очень много важных линий и внутренних схем разобрано до мелочей)

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

Когда планируеш к АПУ вернутся? И по ГПУ ни одного стрима не было еще )

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

Если вам ещё не надоели мои стримы, то сразу после получения топологии выйду в эфир с APU :D

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

APU - наше всё. Вкуснота.
Я сейчас балуюсь беткой nsplay 2.3b3 от рейнварриора,
которая умеет проигрывать NSF в режиме денди.

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



-- 13 фев 2013, 13:39 --

Стало понятно как же именно выполняются инструкции на 6502. Подробности тут:

http://breaknes.com/#13022013

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

Завершена топология APU:
http://code.google.com/p/breaks/wiki/G2A03

-- 16 фев 2013, 12:53 --

Отличия встроенного в APU 6502

После детального изучения схемы 2A03 были получены следующие результаты.
- Отличий в декодере не обнаружено
- Флаг D работает как обычно, его можно установить или сбросить, он используется нормальным образом при обработке прерываний (сохраняется в стеке) и после выполнения инструкций PHP/PLP, RTI.
- Рандомная логика отвечающая за генерацию двух контрольных линий DAA (decimal addition adjust) и DSA (decimal subtraction adjust) работает обычным образом.

Отличие заключается в том, что контрольные линии DAA и DSA, отвечающие за включение схем коррекции, отсоединены от схемы, путём вырезания 5 кусочков полисиликона (см. картинку). полисиликон обозначен фиолетовым цветом, вырезанные кусочки обозначены голубым, а места обведены красным.

Это приводит к тому, что схема вычилсения десятичного переноса при сложении и схема добавления/отнимания 6 к результату - не работают. Поэтому встроенный процессор 2A03 всегда считает двоичными числами, даже если флаг D установлен.

Изображение

PSD с которым я работал тут : http://breaknes.com/files/APU/core.zip [155 MB]


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

Пока я рожаю 6502, начинаем серию стримов по APU:



Как промежуточный результат - схема счетчика и его управление (показан только Square 1, остальные идентичны):
Изображение
В конце стрима краткие итоги. Следующая серия должна добить length counters окончательно.
После length counter буду разбирать работу квадратного канала.

Параллельно тужусь над симуляцией 6502...

-- 19 фев 2013, 16:54 --

Разобрал схему спрайтовой DMA:
Изображение

Принцип работы:
- Старшие 8 разрядов адреса (HI) - это константа, которая записывается в регистр $4014
- Младшие 8 разрядов (LO) - это up-counter, считает от 0 до 255. После переполнения - DMA прекращает работу.
При загрузке нового значения в $4014 - младший адрес (LO) очищается.
- Адрес DMA попеременно меняется с текущего значения HI:LO, на $2004 (порт записи PPU), при этом порт $2003 (начальный адрес в спрайтовой памяти) должен быть установлен ручками, до запуска DMA.
Понятно это сделано для того, чтобы вначале прочитать байт по адресу HI:LO, а затем записать его в $2004.
Переключение адреса делает flip/flop, который можно найти внизу схемы.
- На время DMA CPU бездействует (RDY=0)
- DMA стартует при записи в $4014 (устанавливается защелка START), а останавливается только после отправки всех 256 байт.

Работа спрайтовой DMA тесно переплетается с DMC. Во время DMC (RUNDMC=1) спрайтовая DMA временно приостанавливается.
Также DMC как-то завязана на линию RDY (я пока точно не выяснил).

Контрольные линии на схеме:
- SPRS: sprite step, увеличить счетчик адреса
- SPRE: sprite DMA end, после переполнения счетчика DMA останавливается
- DOSPR: спрайтовая DMA в процессе
- SPR/PPU : спрайтовая DMA работает по направлению SPRITE BUFFER->PPU
- SPR/CPU : спрайтовая DMA работает по направлению MEMORY->SPRITE BUFFER

Маленькая "звиздюлина", которая мелькала в стримах - это sprite buffer, временное хранилище для спрайтовой DMA.

Как-то так)

Обновил PSD: http://breaknes.com/files/APU/2A03.zip
теперь там обозначены почти все контрольные линии.

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


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



-- 24 фев 2013, 18:32 --

В процессе стрима, в реальном времени связались с Quietust'ом и выяснили, что не всякое пересечение полисиликона по диффузии формирует транзистор.
Иногда получается так, что полисиликон проходит по диффузии безо всякого эффекта.

Это хорошо видно на картинке, которую прислал Q, там помечены места, где пересечение полисиликона формирует транзистор.
Какой при это происходит тех-процесс - не понятно. Возможно дополнительно индуцируется слой изоляции, который не даёт формироваться транзистору. Внешне, глядя на картинку, это никак не обнаружить. Q сказал что есть специальные "химикаты", которые позволяют явно проявить места, где транзисторы формируются, а где нет =)

Вложения:
adders.png
adders.png [ 14.57 КБ | Просмотров: 14643 ]

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

Нашел тут в контексте 6502 объяснение про enhanced и depletion транзисторы http://www.righto.com/2013/01/a-small-p ... ained.html
ну и википедия достаточно подробно расказывает об этом http://en.wikipedia.org/wiki/Depletion-load_NMOS_logic
http://visual6502.org/wiki/index.php?ti ... ransistors
в общем достаточно полно разжевано, кроме того как их находить ((

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