Очень низкоуровневый эмулятор 6502 / NES
Автор |
Сообщение |
21 июн 2014, 11:13 |
|
Зарегистрирован: 24 июл 2007, 06:54 Сообщения: 492 Откуда: Embedded
|
У 6502 нет "неверных" кодов. Есть недокументированные опкоды и они вполне уже разобраны на тематических форумах.
_________________ Tried so hard and got so far, but in the end, it doesn't even matter...
|
|
21 июн 2014, 18:12 |
|
Зарегистрирован: 22 июл 2007, 11:16 Сообщения: 787
|
Они не совсем недокументированные, там просто дешифрация упрощенная, в разных опкодах разные биты используются, если использовать два бита двух опкодов, будет один опкод, который будет исполнять сразу два опкода, порой с непредсказуемыми последствиями.
_________________ 1. Модератор всегда прав. 2. Если модератор не прав, см. п. 1.
|
|
08 июл 2014, 17:46 |
|
Зарегистрирован: 06 апр 2008, 13:46 Сообщения: 119
|
Эх, жалко, в последнее время маловато новостей от проекта. Очень интересно было читать.
|
|
04 ноя 2014, 03:16 |
|
Зарегистрирован: 24 июл 2007, 10:41 Сообщения: 570
|
Завершена логическая схема рандомной логики 6502.
Схема получилась довольно внушительная.
В верхней части находится рандомная логика, отвечающая за транслирование 130 линий декодера в набор команд для управления контекстом и АЛУ.
В нижней части находится т.н. Dispatcher -- логика, отвечающая за управление последовательностью выполнения циклов инструкций. В симуляторе всё это работает, но как-то не совсем правильно. Схема пока не поддается до конца)) Проблемы сейчас с очередностью циклов, пока даже не могу идентифицировать где прячется ошибка.
Вложения:
RANDOM.png [ 409.34 КБ | Просмотров: 12076 ]
|
|
05 ноя 2014, 23:16 |
|
Зарегистрирован: 05 ноя 2014, 23:03 Сообщения: 29
|
Чувааак. Ты безумно крут. Я зарегистрировался, чтобы сказать тебе это.
Я загорелся идеей сделать свой NES на FPGA, с целью апа своего скилла в цифровой элетронике. Предвижу, что ваши наработки будут мне очень полезны.
|
|
05 ноя 2014, 23:20 |
|
Зарегистрирован: 24 июл 2007, 10:41 Сообщения: 570
|
Я тоже планирую в ПЛИС это загнать, когда потестю на симуляторе) В конце-концов из верилога будет проще перегнать в Си, чем из схем. -- 05 ноя 2014, 22:24 -- PS. Заходи в стрим я там буду разбирать факап, который не даёт схеме нормально работать. http://twitch.tv/ogamespec
Последний раз редактировалось org 06 ноя 2014, 01:22, всего редактировалось 1 раз.
|
|
05 ноя 2014, 23:26 |
|
Зарегистрирован: 05 ноя 2014, 23:03 Сообщения: 29
|
org писал(а): Я тоже планирую в ПЛИС это загнать, когда потестю на симуляторе) В конце-концов из верилога будет проще перегнать в Си, чем из схем. Я так и понял, где же еще может потребоваться транзисторный уровень. Но даже для ПЛИС реализация транзисторного уровня это хардкорно.
|
|
06 ноя 2014, 01:10 |
|
Зарегистрирован: 24 июл 2007, 10:41 Сообщения: 570
|
Ну я транзисторный уровень поэтому и перегоняю в логику. А потом на верилог и в ПЛИС)
|
|
06 ноя 2014, 01:21 |
|
Зарегистрирован: 05 ноя 2014, 23:03 Сообщения: 29
|
Вообще, учитывая как ты моделируешь, возможно имеет смысл просто перерисовать свою схему в графическом редакторе, описав на верилоге только самые однородные части (те же декодеры по идее должны отлично описываться через оператор case). По крайней мере, увидев твои схемы я именно к такому способу и склоняюсь. Стрим понравился, правда впечатление смазано тем, что я нифига в твоих сигналах пока не понимаю ~_~. Какие-то ф1, ф2, фетч и прочее Ничего, надеюсь наверстаю.
|
|
06 ноя 2014, 01:27 |
|
Зарегистрирован: 24 июл 2007, 10:41 Сообщения: 570
|
Ну PHI1 / PHI2 - это тактовые сигналы. Проц работает на оба полутакта.
Из исходного PHI0 они получаются так :
PHI1 = NOT(PHI0) (нижний уровень) PHI2 = PHI0 (верхний уровень)
а остальные сигналы, их там туча) FETCH в частности загружает код операции с предекодера на регистр инструкций (IR). часть сигналов вообще просто типа управляющие, одним словом не описать что они делают )) я когда схему рисовал подписывал их "BADA", "BOBO", "KAKA", "XXX" и тому подобное) потом постепенно переименовал в нечто вроде "ENDS", "ENDX", "TRES1" итп., чтобы хотя бы примерно понимать что они делают.
|
|
06 ноя 2014, 01:34 |
|
Зарегистрирован: 05 ноя 2014, 23:03 Сообщения: 29
|
А, вот оно что. clk и инвертированный clk. Цитата: Ну я транзисторный уровень поэтому и перегоняю в логику. Верилог, насколько мне известно, позволяет описывать схемы даже на транзисторном уровне, но часто оставляют эту задачу синтезатору. Я сначала решил, что ты собрался описывать именно на нем
|
|
06 ноя 2014, 01:38 |
|
Зарегистрирован: 24 июл 2007, 10:41 Сообщения: 570
|
Именно, я и планирую передать генерацию RTL синтезатору. Транзисторный уровень на верилоге - это был бы изврат)
|
|
07 ноя 2014, 01:17 |
|
Зарегистрирован: 05 ноя 2014, 23:03 Сообщения: 29
|
По поводу timing generator. Что собой представляет t0? Нигде не нашел у тебя на схемах, где он формируется. И чем отличается T1 от T1X (схема Хенсона)?
|
|
07 ноя 2014, 14:01 |
|
Зарегистрирован: 05 ноя 2014, 23:03 Сообщения: 29
|
Нашел. Этот кусок в dispatch оказался.
|
|
08 ноя 2014, 00:33 |
|
Зарегистрирован: 24 июл 2007, 10:41 Сообщения: 570
|
T1 это внутренний сигнал, который идёт на рандомную логику из dispatch. Во время T1 производится FETCH.
T0X и T1X -- это eXternal сигналы, которые идут на декодер.
Все сигналы вида Tx - соответствуют циклам выполнения инструкции.
Как я понимаю во время T0 производится выставление адреса на Program Counter, а во время T1 производится выборка опкода по этому адресу + одновременно завершаются короткие двухцикловые опкоды (минимальная длина инструкций в 6502 - два цикла).
Хотя может быть я ошибаюсь... Логичнее было бы во время T0.PHI1 выставить адрес, а во время T0.PHI2 загрузить опкод. А во время T1 выполнить (завершить) инструкцию. Сомнения у меня вызывает правильность названия сигнала T1 вообщем)
|
|
08 ноя 2014, 15:50 |
|
Зарегистрирован: 24 июл 2007, 10:41 Сообщения: 570
|
Нашёл у себя ещё одну ошибку - все D-LATCH по какой-то причине стали работать не по уровню, а по фронту Поменял как надо, схема стала адекватно перебирать циклы, но почему-то застревает после исполнения одного опкода.
|
|
08 ноя 2014, 16:31 |
|
Зарегистрирован: 05 ноя 2014, 23:03 Сообщения: 29
|
org писал(а): Нашёл у себя ещё одну ошибку - все D-LATCH по какой-то причине стали работать не по уровню, а по фронту Поменял как надо, схема стала адекватно перебирать циклы, но почему-то застревает после исполнения одного опкода. WTF?! У тебя в схемах D-триггера срабатывают по уровню?
|
|
08 ноя 2014, 17:59 |
|
Зарегистрирован: 24 июл 2007, 10:41 Сообщения: 570
|
Там не D-триггеры, а D-латчи. Сейчас таких элементов не встретишь, они были только во времена N-MOS. Работа их основывается на хранении заряда на затворах MOSFET (см. аттач). Когда enable открывается заряд поступает на затвор (помечено зелеными палочками), и когда на следующий полуцикл enable закрывается заряд остается на затворе. Поэтому такие D-latch работают по уровню (enable = 1). -- 08 ноя 2014, 17:01 -- Схему кстати пофиксил, теперь всё работает перфектно ))) Косяк был в сигнале TRESX, там BRK6E не очищал его, поэтому прерывания никогда не завершались. Теперь всё гуд. Схему можно взять тут : https://code.google.com/p/breaks/source ... ANDOM.circТеперь нужно немного времени, чтобы проанализировать работу инструкций, а конкретнее - какие контрольные линии они выдают на нижнюю часть процессора и можно собирать полную сборку (с регистрами и АЛУ).
Вложения:
d-latch.png [ 3.82 КБ | Просмотров: 11897 ]
|
|
08 ноя 2014, 18:15 |
|
Зарегистрирован: 05 ноя 2014, 23:03 Сообщения: 29
|
Ясно, придется немного переосмыслить твои схемы под современные веяния в ПЛИС (100% синхронная логика, конвейерная архитектура итд).
Кстати я оплошался. Написать что-либо на транзисторном уровне на верилоге можно, но синтезировать это в реальном железе - нет. Архитектура ПЛИС не заточена под такие вещи. Это казасается и альтеры (проверил сам), и зайлинкса (погуглил); про других производителей не в курсе.
Поэтому только Gate/RTL level.
|
|
08 ноя 2014, 18:23 |
|
Зарегистрирован: 24 июл 2007, 10:41 Сообщения: 570
|
Транзисторы это bottom ground, сейчас на транзисторах делают только custom логику типа встроенной SRAM памяти ну и стандартных ячеек. Всё остальное gate-level (опять же основанные на стандартных ячейках). И по уровню сейчас CMOS не работает, только edge. Хотя D-latch по идее можно сделать как DFF по posedge, должно работать идентично.
|
|
|
Кто сейчас на конференции |
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3 |
|
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения
|
|