Сообщения без ответов | Активные темы Текущее время: 09 май 2024, 09:36



Ответить на тему  [ Сообщений: 411 ]  На страницу Пред.  1 ... 9, 10, 11, 12, 13, 14, 15 ... 21  След.
 Очень низкоуровневый эмулятор 6502 / NES 
Автор Сообщение
Сообщение 22 май 2013, 23:04
Профиль ICQ WWW
Аватара пользователя

Зарегистрирован:
24 июл 2007, 10:41
Сообщения: 570
http://breaknes.com/#22052013


Сообщение 29 май 2013, 15:16
Профиль ICQ WWW
Аватара пользователя

Зарегистрирован:
24 июл 2007, 10:41
Сообщения: 570
Добавил контакты PPU:

Изображение

Обновил много PSD-файлов для PPU, опять перепутал инверсность в названиях.

http://breaknes.com/info/21
http://breaknes.com/info/26


Сообщение 30 май 2013, 00:18
Профиль ICQ WWW
Аватара пользователя

Зарегистрирован:
24 июл 2007, 10:41
Сообщения: 570
6502 dispatch unit

https://www.circuitlab.com/user/org/


Вложения:
6502-dispatch.jpg
6502-dispatch.jpg [ 273.3 КБ | Просмотров: 13456 ]
Сообщение 30 май 2013, 22:59
Профиль ICQ WWW
Аватара пользователя

Зарегистрирован:
24 июл 2007, 10:41
Сообщения: 570
Очередной кусок 6502 раздраконен. Осталось 2 больших схемы - управление ALU и Program Counter-ом.


Вложения:
6502-xys.jpg
6502-xys.jpg [ 316.45 КБ | Просмотров: 13421 ]
xys.jpg
xys.jpg [ 269.26 КБ | Просмотров: 13421 ]
Сообщение 31 май 2013, 17:49
Профиль ICQ WWW
Аватара пользователя

Зарегистрирован:
24 июл 2007, 10:41
Сообщения: 570
Добавил схему приоритета спрайтов. Это хитрая "лесенка" из многовходовых NOR.
+ нашёл линию "Sprite 0 Hit".

Изображение


Сообщение 11 июн 2013, 08:25
Профиль ICQ WWW
Аватара пользователя

Зарегистрирован:
24 июл 2007, 10:41
Сообщения: 570
Изолировал исполнительное ядро 6502 и наконец-то, попытки с 5й, продвинулся в понимании как оно работает.
На слайдах показан процесс распространения активности по ядру. Не хватает ещё пары слайдов, как раз сегодня хочу закончить и запустить этот "моторчик" :)


Вложения:
6502_runflow_slide1.jpg
6502_runflow_slide1.jpg [ 1.69 МБ | Просмотров: 13203 ]
6502_runflow_slide2.jpg
6502_runflow_slide2.jpg [ 1.78 МБ | Просмотров: 13203 ]
6502_runflow_slide3.jpg
6502_runflow_slide3.jpg [ 1.84 МБ | Просмотров: 13203 ]
6502_runflow_slide4.jpg
6502_runflow_slide4.jpg [ 1.97 МБ | Просмотров: 13203 ]
Сообщение 11 июн 2013, 12:24
Профиль ICQ
Аватара пользователя

Зарегистрирован:
28 дек 2012, 05:58
Сообщения: 19
Откуда: Курган
org, не думал запилить табличку контрольных линий с краткими аннотациями? Чтоб все в одном месте. А то названия не всегда однозначные, а понимать хочется. :D


Сообщение 11 июн 2013, 12:28
Профиль ICQ WWW
Аватара пользователя

Зарегистрирован:
24 июл 2007, 10:41
Сообщения: 570
Сейчас сделаю :)

-- 11 июн 2013, 12:21 --

Описание внутренней архитектуры процессора 6502:

Процессор делится на 2 части : верхняя и нижняя.

В верхней части находится управляющая часть, которая выдает ряд контрольных линий ("команд") для управления нижней частью.
В нижней части находится контекст процессора : внутренние шины и регистры, с одним исключением - регистр флагов (P) находится в верхней части в "размазанном" виде.

Работа процессора тактируется тактовым импульсом PHI0, при этом используются оба полутакта.
Во время первого полутакта (PHI1) процессор находится в режиме "говорю". В это время процессор выдает наружу данные.
Во время второго полутакта (PHI2) процессор находится в режиме "слушаю", во время этого полутакта внешние устройства могут помещать данные на шину данных, чтобы процессор их "обработал".

Регистры
X, Y : индексные регистры
S: указатель стека
AI, BI : входные значения для АЛУ
ADD : промежуточные результат операции на АЛУ
AC : аккумулятор
PCH/PCL : program counter, состоящий из 2-х половинок
ABH/ABL : регистры для вывода на внешнюю шину адреса
DL : data latch, хранит последнее прочитанное значение внешней шины данных
DOR : data output register, содержит значение которое будет записано в шину данных

Внешние шины
Внешних шин всего две : 16-разрядная адресная (ADDR) и 8-разрядная шина данных (DATA). Адресная шина односторонняя - писать в неё может только процессор. Шина данных двунаправленная.

Внутренние шины
ADH/ADL : шина адреса
SB : special bus, шина для обмена регистрами
DB : внутренняя шина данных
Во время второго полутакта (PHI2) все внутренние шины подзаряжаются и имеют значение 0xff.

Соединения регистров с шинами
X, Y, S <=> SB
S => ADL
ADH => ABH
ADL => ABL
SB => AI
DB, ADL => BI
ADD => ADL, SB
AC <=> SB
SB <=> DB
SB <=> ADH
ADH <=> PCH
ADL <=> PCL
PCH, PCL => DB
DL <=> ADH, ADL, DB
Дополнительно внутрення шина данных может быть специальным образом соединена с разрядами регистра флагов (P).

Последовательно соединяя шины и регистры процессор выполняет разнообразные инструкции. Многообразие соединений обеспечивает разнообразие команд процессора, а разделение команд на такты позволяет выполнять сложные действия. Дополнительно производится управление АЛУ (сложение, логическое-И и пр.)

Управляющие команды

Управление адресной шиной и адресными регистрами:
ADH/ABH : ADH => ABH
ADL/ABL : ADL => ABL
0/ADL0, 0/ADL1, 0/ADL2 : используется для установки вектора прерываний, путем управления младшими 3 разрядами шины ADL. Например 0/ADL0 означает что 0-й разряд шины ADL устанавливается в 0.
Значение с адресных регистров выводится на внешнюю шину адреса.

Управление индексными регистрами и указателем стека:
X/SB : X => SB
Y/SB : Y => SB
SB/X : SB => X
SB/Y : SB => Y
S/SB : S => SB
S/ADL : S => ADL
SB/S : SB => S
S/S : если не выполняется команда SB/S, то выполняется эта. Она просто "рефрешит" регистр S.

Управление АЛУ:
NDB/ADD : #DB => BI
DB/ADD : DB => BI
0/ADD : 0 => AI
SB/ADD : SB => AI
ADL/ADD : ADL => BI
1/ADDC : входной перенос = 1 (carry in)
ANDS, EORS, ORS, SRS, SUMS : команды АЛУ
#DAA : десятичная коррекция после сложения
#DSA : десятичная коррекция после вычитания
ADD/SB06, ADD/SB7 : ADD => SB
ADD/ADL : ADD => ADL
SB/AC : SB => AC
AC/SB : AC => SB
AC/DB : AC => DB

Управление внутренними шинами:
SB/DB : SB <=> DB, соединить две шины
SB/ADH : SB <=> ADH
0/ADH0, 0/ADH17 : 0 => ADH

Управление program counter:
1/PC : сделать инкремент program counter
ADH/PCH : ADH => PCH
PCH/PCH : Если не выполняется ADH/PCH, то выполняется эта команда (рефрешить PCH)
PCH/ADH : PCH => ADH
PCH/DB : PCH => DB
ADL/PCL : ADL => PCL
PCL/PCL : Если не выполняется ADL/PCL, то выполняется эта команда (рефрешить PCL)
PCL/ADL : PCL => ADL
PCL/DB : PCL => DB

Управление data latch:
DL/ADH : DL <=> ADH
DL/ADL : DL <=> ADL
DL/DB : DL <=> DB
При этом если процессор выводит наружу данные, то например команда DL/DB помещает значение находящееся на шине DB в регистр DOR, а с него значение попадает на внешнюю шину. А если процессор находится в режиме чтения, то в этом случае значение с внешней шины данных вначале попадает на data latch (DL), а с него поступает на внутренние шины.

-- 11 июн 2013, 12:30 --

Небольшое замечание : нужно помнить, что регистры постоянно "хранят" свои значения, в то время как шины просто соединяют 2 точки, то есть значение на них может быть : 0, 1 и "Z" (не соединено).
Также необходимо помнить о "конфликте шин" : 2 устройства не должны пихать одновременно на шину свои данные. Должно быть 2 точки : источник и потребитель(и).


Сообщение 14 июн 2013, 21:45
Профиль
Аватара пользователя

Зарегистрирован:
24 июл 2007, 06:54
Сообщения: 492
Откуда: Embedded
Вот так забавно работает NTSC клон PPU UA6528 (сигналы сверху вниз: PA[13..0], ALE, PRD):
Изображение

_________________
Tried so hard and got so far, but in the end, it doesn't even matter...


Сообщение 17 июн 2013, 21:11
Профиль
Аватара пользователя

Зарегистрирован:
24 июл 2007, 06:54
Сообщения: 492
Откуда: Embedded
Люто бешенно реквестую схему PPU!
Изображение
Изображение

_________________
Tried so hard and got so far, but in the end, it doesn't even matter...


Сообщение 17 июн 2013, 21:28
Профиль ICQ WWW
Аватара пользователя

Зарегистрирован:
24 июл 2007, 10:41
Сообщения: 570
HWM, я сейчас на "другом компе" подчищаю все схемы PPU (ищу ошибки, исправляю инверсность контактов) и готовлю их для логики.
Если ты не заметил, я обновил все схемы недавно : http://breaknes.com/ (см. последнюю новость).

По 6502 сейчас на домашнем компе прорабатываю логику нижней части, очень туго идёт понимание 6502.. чем больше его изучаешь, тем замудреннее он становится, в отличии от примитивных счетчиков / регистров сдвига PPU и APU.

Также была безуспешная попытка собрать 2C02 (тот который без диффузии) в Hugin, используя навыки, полученные при панорамировании процессора PSX. Но фотки не стыкуются никак.

-- 17 июн 2013, 20:43 --

PS. HWM, ты случайно в Verilog не шаришь ? Сможешь по логической схеме сделать Verilog исходник ?
Просто появилась совершенно сумашедшая мысль - брать исходники на Verilog чипа и рекомпилировать их в x86 код, для выполнения на эмуляторе. Ну или хотя бы не Verilog, а его двоичное представление (netlist), например с помощью икаруса компилировать в EDIF.

-- 17 июн 2013, 20:48 --

Совсем забыл выложить эпическую схему - верхняя часть 6502.


Вложения:
6502_logic_top.jpg
6502_logic_top.jpg [ 2.62 МБ | Просмотров: 13038 ]
Сообщение 18 июн 2013, 06:13
Профиль ICQ
Аватара пользователя

Зарегистрирован:
28 дек 2012, 05:58
Сообщения: 19
Откуда: Курган
А чем рекомпилировать? Есть какие-то инструменты?


Сообщение 18 июн 2013, 09:01
Профиль ICQ WWW
Аватара пользователя

Зарегистрирован:
24 июл 2007, 10:41
Сообщения: 570
Встроить в ядро эмулятора. Инструментов подобных нет, ибо задача специфическая.


Сообщение 18 июн 2013, 09:43
Профиль ICQ
Аватара пользователя

Зарегистрирован:
28 дек 2012, 05:58
Сообщения: 19
Откуда: Курган
Это будет проще или быстрее (работать в том числе), чем написать целиком на Си? В чём профит? Или убить двух зайцев разом - сделать и софтовую, и железную эмуляцию.)

В Икарусе же есть рекомпилятор в коды своей виртуальной машины, которые потом интерпретатором выполняются. Исходники доступны. Может этим как-то воспользоваться.)


Сообщение 18 июн 2013, 10:12
Профиль ICQ WWW
Аватара пользователя

Зарегистрирован:
24 июл 2007, 10:41
Сообщения: 570
Да это просто идея : "генерализовать" эмуляцию железа, то есть по сути дела из Verilog-модулей собирать в идеале любую систему.

Сейчас у меня в .h-файлах находится контекст девайса, а в .c-файлах вызовы "Step". По сути дела я делаю то же самое что и на Verilog, только на Си.

Цитата:
В Икарусе же есть рекомпилятор в коды своей виртуальной машины, которые потом интерпретатором выполняются. Исходники доступны. Может этим как-то воспользоваться.)
Может, если лень не одолеет :D

В любом случае представление чипов NES на Verilog может пригодиться.


Сообщение 18 июн 2013, 22:22
Профиль ICQ WWW
Аватара пользователя

Зарегистрирован:
24 июл 2007, 10:41
Сообщения: 570
Множество исправлений в PPU, завел даже отдельную страничку для этого :
http://breaknes.com/changelog_ppu

Спасибо, опять помог китайский студент.


Сообщение 20 июн 2013, 13:11
Профиль ICQ
Аватара пользователя

Зарегистрирован:
28 дек 2012, 05:58
Сообщения: 19
Откуда: Курган
Доброго дня! Пытаюсь потихоньку симулировать логические схемы. :D

Сверяюсь с показаниями visual6502. При разборе long cycle counter обнаружилось, что /T2-/T5 переключаются так:
Изображение

Но по симуляции с visual6502, видно, что они переключаются по спаду Ф2, то есть по Ф1:
Изображение

В логической схеме выход идёт с защёлки (через инвертор), загружаемой по Ф2, а в транзисторной схеме - с NOR'а:
Изображение

Если вывести выход с NOR'а
Изображение
, то симуляция принимает вид:
Изображение
т.е. аналогично visual6502.

Вопрос: почему схема нарисована именно так?


Сообщение 20 июн 2013, 13:55
Профиль ICQ WWW
Аватара пользователя

Зарегистрирован:
24 июл 2007, 10:41
Сообщения: 570
Виноват, ошибка была, исправлено )

Изображение


Сообщение 20 июн 2013, 17:50
Профиль ICQ WWW
Аватара пользователя

Зарегистрирован:
24 июл 2007, 10:41
Сообщения: 570
Попытки соскочить с платного Circuitlab.

http://www.digikey.com/schemeit
Всё хорошо, но лист для рисования настолько мелкий, что более менее крупная схема туда не влезет

http://www.smartdraw.com/
Платная + криво соединяются шланги. Но пользоваться приятно. Классная программулина. (полная версия стоит 200$)

вчера ещё попробовал sPlan, пока что самая нормальная из всех.


Вложения:
PPU_register_select_SmartDraw.jpg
PPU_register_select_SmartDraw.jpg [ 615.81 КБ | Просмотров: 12900 ]
PPU-register-select_SchemeIt.png
PPU-register-select_SchemeIt.png [ 52.06 КБ | Просмотров: 12900 ]
Сообщение 24 июн 2013, 14:19
Профиль ICQ WWW
Аватара пользователя

Зарегистрирован:
24 июл 2007, 10:41
Сообщения: 570
http://breaknes.com/info/29

Не понятно как предотвратить "треск" триггера. Должен где-то быть блокиратор типа сигнала /PCLK внутри триггера, но его нет.
Выходит что схема "трещит" (постоянно меняет свое значение с 0 на 1 и наоборот).

-- 24 июн 2013, 15:13 --

Уф, разобрался ))


Показать сообщения за:  Поле сортировки  
Ответить на тему   [ Сообщений: 411 ]  На страницу Пред.  1 ... 9, 10, 11, 12, 13, 14, 15 ... 21  След.

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 4


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group.
Designed by STSoftware for PTF (mod by Zeru-j).
Русская поддержка phpBB