vak: (Default)
[personal profile] vak
МЭСМ-6 уже проходит несколько тестов: работают команды uj, vtm, utm, mtj, vzm, v1m, j+m, vjm, vlm, utc, wtc.

Я добавил в фазу decode автоматическое приращение счётчика команд (PC), теперь некоторые команды выполняются за один такт (vtm, utm, mtj. j+m).

Описание микроархитектуры по мере разработки постепенно образуется на странице: https://github.com/besm6/mesm6/wiki/Microarchitecture

Date: 2019-03-20 17:56 (UTC)
spamsink: (Default)
From: [personal profile] spamsink
Боюсь, до начала следующей недели у меня много времени не будет. В выходные я буду занят.

Date: 2019-03-20 21:10 (UTC)
spamsink: (Default)
From: [personal profile] spamsink
Зачем? Большинство из этих команд декрементирует SP по завершении, поэтому хватит и дополнительного бита в той же микрокоманде, где сейчас только GO_FETCH_OR_DECODE (ну и бита в вычислении исполнительного адреса, который подменял бы 00000 адресной части на 77777, если номер регистра - 15.

Специальный интерес представляют только команды, инкрементирующие SP.
Edited Date: 2019-03-20 21:13 (UTC)

Date: 2019-03-21 06:24 (UTC)
spamsink: (Default)
From: [personal profile] spamsink
Логику распознавания стекового режима придется добавлять всё равно. Так зачем дублировать код, если можно сделать красиво?

Date: 2019-03-23 04:42 (UTC)
x86128: (Default)
From: [personal profile] x86128
Как-то давно смотрел документ Сисетма-команд-БЭСМ6.pdf там в таблицах на псевдокоде указан алгоритм исполнения команд.
Исходя из тех таблиц получаются, что только две команды которые обращаются к памяти дважды - STX, XTS которые потребуют отдельный микрокод.
Только три команды в случае "магазина" - ATX, XTS, ITS увеличивают SP после исполнения, все остальные "магазинные" его уменьшают перед исполнением.

Может всё таки не так страшно будет ввести дополнительные сигналы в микрокоманду?
В logisim есть запас, да и расширить эту часть тривально - добавив еще одну "микросхему" ПЗУ.

Date: 2019-03-28 00:24 (UTC)
spamsink: (Default)
From: [personal profile] spamsink
Мой ранее существовавший интеловский логин сдох и почему-то не поддается восстановлению. Придется для скачивания моделсима завести на другой адрес.

ACX уже почти готова, нужен только микрокод, вызывающий потом ARX; остальные 3 можно для начала просто содрать из эмулятора. Пусть выполняются в 1 такт; оптимизировать синтез будем потом.
Код для сложения/умножения с нормализацией уже есть, осталось только интегрировать.

Date: 2019-03-28 03:23 (UTC)
spamsink: (Default)
From: [personal profile] spamsink
Отлично; даже на такт быстрее, чем я имел в виду (делать countones или clz одной микрокомандой, а потом вызывать ADD_CARRY_AROUND).

Комбинационные сборка-разборка в любом случае будут синтезироваться совершенно безумно, так что рано или поздно придется делать state machine для скорости.

Date: 2019-03-28 03:12 (UTC)
spamsink: (Default)
From: [personal profile] spamsink
В Паскаль-мониторе ANX используется для minel; в инструкции по Паскалю написано, что он возвращает -1 по пустому множеству; команды порождаются такие, что ANX 0 ожидается 0.
 00001    1  1 PROGRAM MAIN(OUTPUT);VAR A:SET OF 0..47; I:INTEGER;
 00007    2  2 BEGIN
16 24 00002 15 31 74007
 00010    3  2 I := MINEL(A);
01 010 0050 01 023 0011     01 005 0021 01 000 0051
 00024    4  0 END.

11(1) - это константа 6400...0, 21(1) - 6400...1.

Видимо, на ВЦ машина была хакнутая. Тады ой.