А исходников я и не выкладывал)
Вид для печати
.
Обсуждение особенностей работы и эмуляции процессора ВМ2, не связанное с темой реверса, уместнее ( на мой взгляд ) вести в другой теме.
Например:
1. Особенности процессоров и устройств архитектуры PDP-11. Тесты. Диагностика.
2. КМ1801ВМ2 - Техническое описание.
Vslav, я тут на досуге пытался разобраться с выдачей результатов матрицы микрокода. Чтобы расписать таблицу, в которой однозначно было бы расписано, что каждый бит означает. В принципе, ясно довольно много, но остаётся непонятным самое нужное.
Как я понимаю, биты plx[14:11] являются управляющими, в зависимости от их комбинации, нужно по-разному интерпретировать некоторые другие группы битов.
Если plx[12] == 1, то неверный опкод, и вроде бы вообще всё, кроме битов следующего адреса можно игнорировать.
Если биты {13,11} == 2'b11, то это первая фаза, распознавание инструкции, иначе - вторая фаза.
Во второй фазе, биты {14,13,11} - Y bus operand type selector, либо биты биты {14,13} - ALU operation. Но вот как определить, что это в данный момент времени, мне как-то вообще не ясно. Из текста верилога пока ясно, что ALU operation должен обеспечивать все 4 комбинации из двух бит, а Y bus operand type selector, только некоторые из допустимых 8ми комбинаций, т.е. казалось бы, что если бит {11} == 0, то это ALU operation, иначе - это Y bus operand type selector, но нет, Y bus operand type selector тоже использует комбинации, когда бит {11} == 0.
Например, если {14,13} == 2'b11, то биты {27,26,25} - какие-то флаги для АЛУ, для интерпретации битов {28:25} как адреса регистра, используются несколько разных комбинаций битов {14,13,11}, причём как-то неочевидно.
Может я чего-то не так понимаю, и однозначная интерпретация результата матрицы микрокода невозможна? Нужно смотреть ещё разные дополнительные регистры, напр. sop_out или ещё что-нибудь?
К сожалению, пока дать полезный информативный ответ не в состоянии. Те функции входов-выходов матрицы что были понятны и очевидны - прописал в комментариях в файле vm1_plm.v. Но они там многофункциональны, "влёт" разобраться сложно, поэтому я сейчас пытаюсь зайти с другой стороны, немножко допилил MCODE и смотрю по каким микроадресам ходит микропрограмма и что при этом происходит. Интересно отрабатывают команды ветвления - в любом случае вычисляется PC+offset*2, но присвоение PC нового значения с выхода ALU просто блокируется, если условие не выполняется. Поэтому ВМ1 выполняет команды ветвления за одинаковое колдичество тактов, вне зависимости есть переход или нет. Но возможно что предвыборка следующей команды влияет на скорость, если нет перехода.
Следующий адрес тоже можно игнорировать - происходит принудительный переход на адрес 0x01 и там обрабатывается принудительно записанный в 3-х битный регистр код прерывания.Цитата:
Если plx[12] == 1, то неверный опкод, и вроде бы вообще всё, кроме битов следующего адреса можно игнорировать.
Насколько я разобрался - там еще есть пара состояний, и функционал зависит от других битов.Цитата:
Если биты {13,11} == 2'b11, то это первая фаза, распознавание инструкции, иначе - вторая фаза.
Да вроде никаких других сигналов нет, выходы матрицы однозначно определяют что выполняется в данный момент и куда оно перейдет в следующий. Момент перехода зависит от готовности остальных схем - можно выделить сигнал готовности внешней шины, сигнал готовности АЛУ, сигнал готовности блока матрицы прерываний.Цитата:
Может я чего-то не так понимаю, и однозначная интерпретация результата матрицы микрокода невозможна?
Перевел свой эмулятор БК0011М на модель с QBUS. Благо, от WB не сильно отличается. Сделал небольшую обертку чтобы сигналы соответствовали WB (но уже с таймингами QBUS).
Пытаюсь прикрутить генерацию RPLY от 037 выложенную тут ранее.
И что-то не выходит.. Точнее, в пределах экрана я вижу совпадение по таймингам в мультиколоре демки Shock 2. Если бы был сдвиг, то это выглядело бы лесенкой в демке. Но там всё довольно точно. Но....
Что-то не то творится с вертикальной синхронизацией. Такое впечатление, что IRQ2 приходит позже строк на 10, но на самом деле это не так.
У меня есть подозрение, что в ВП1-037 тайминги разные в момент отрисовки информационных строк и в момент когда выводятся пустые строки и обратный ход. Иначе я не могу объяснить общий сдвиг отрисовки эффектов на экране.
Может кто-то перепроверить код ВП1-037 на предмет разных таймингов? Там есть VGATE, HGATE которые тормозят логику отрисовки, но я не смог уловить связи..
Если бы еще кто-то дописал тестбенч для 037 где были бы запросы со стороны CPU на максимальной скорости. Тогда по графику можно было бы посмотреть есть ли разница в сигнале RPLY.
- - - Добавлено - - -
Заспамил в тестбенче операциями qbus_write на максимальной скорости. RPLY выглядит одинаково на протяжении всего времени...
Непонятно почему тогда у меня IRQ2 не получается...
- - - Добавлено - - -
Нашел баг в коде из-за чего CLK для CPU иногда пропускал такт.
Теперь растактовка 100% как в БК0011М!
Добрый день!
А на какой платформе запускаете свой БК-вариант ? Исходники будут ?
Есть DE1, но опыта маловато, хотелось бы подсмотреть как стартануть проект по минимуму хотя бы.
Пополним копилку снимков, матричные кристаллы от МС-0585:
KM1527XM1-716 (полное разрешение 620М)
KM1527XM1-716 (четверть разрешение 57М)
KM1527XM1-717 (полное разрешение 704М)
KM1527XM1-717 (четверть разрешение 61М)
Обновил ссылки в первом посту.
Такой абстрактный вопрос, а сейчас реально заказать ХМ со своей прошивкой или заменить аналогом, желательно совпадение по выводам.
Серию 1527 вряд ли, это продукция Воронежского завода была, а на сайте Ангстрема висит такое, но на письма они не отвечают, я документацией и китом 1515 интересовался, так что скорее всего это "голимая реклама". Сейчас есть человек (наш форумчанин - захочет, сам назовется) , вплотную реверсит 1527ХМ1-715. Я думаю все закончится успешно и по результатам реверса будет реплика всех трех 715/716/717 на EPM3064 на платке в габаритах советского DIP-48 с шагом 2.5, как прямая замена 1527 серии. А то валяется (и не только у меня) куча плат от МС-0585, без этих микросхем, оригиналы редко попадаются и достаточно дорогие. Платки можно сделать с белым слоем маски, с черной маркировкой, издали вообще на разобрать будет что это реплика ))