- Закачал на SVN обновленную схему 6502 - Закачал исходники PSD на сайт breaknes - Разобрался почему у меня PC считал вкривь-вкось. На самом деле всё хорошо считалось, просто каждый второй разряд PC находится в инверсной логике (трюк для оптимизации carry-chain), поэтому когда я считывал значения c PC, то забыл что нужно инвертировать каждый второй разряд, для получения правильного значения Последний бастион для "нижней" части процессора пал. Теперь осталось разобраться с "верхней" частью и постепенно складывается целая картина работы процессора.
Кстати очень сложно глядя на общую схему 6502 что-либо понять с первого взгляда. В стримах я пытался кое-где рассказать, но всё равно схема достаточно сложная для понимания, потому что очень "спутанная".
После детального изучения схемы 2A03 были получены следующие результаты. - Отличий в декодере не обнаружено - Флаг D работает как обычно, его можно установить или сбросить, он используется нормальным образом при обработке прерываний (сохраняется в стеке) и после выполнения инструкций PHP/PLP, RTI. - Рандомная логика отвечающая за генерацию двух контрольных линий DAA (decimal addition adjust) и DSA (decimal subtraction adjust) работает обычным образом.
Отличие заключается в том, что контрольные линии DAA и DSA, отвечающие за включение схем коррекции, отсоединены от схемы, путём вырезания 5 кусочков полисиликона (см. картинку). полисиликон обозначен фиолетовым цветом, вырезанные кусочки обозначены голубым, а места обведены красным.
Это приводит к тому, что схема вычилсения десятичного переноса при сложении и схема добавления/отнимания 6 к результату - не работают. Поэтому встроенный процессор 2A03 всегда считает двоичными числами, даже если флаг D установлен.
Как промежуточный результат - схема счетчика и его управление (показан только 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.
В процессе стрима, в реальном времени связались с Quietust'ом и выяснили, что не всякое пересечение полисиликона по диффузии формирует транзистор. Иногда получается так, что полисиликон проходит по диффузии безо всякого эффекта.
Это хорошо видно на картинке, которую прислал Q, там помечены места, где пересечение полисиликона формирует транзистор. Какой при это происходит тех-процесс - не понятно. Возможно дополнительно индуцируется слой изоляции, который не даёт формироваться транзистору. Внешне, глядя на картинку, это никак не обнаружить. Q сказал что есть специальные "химикаты", которые позволяют явно проявить места, где транзисторы формируются, а где нет =)
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения