Система микрокоманд ИК130x

От редакции. Продолжение публикаций серии "Парк периода ЕГГОГологии" об устройстве калькулятора МК-61 от Алексея Сугоняева.

Для мнемокода выбрана архитектура ТТА, как наиболее подходящая для описания регистровых пересылок внутри ИК130х. Операции следующие через запятую (слоты) выполняются параллельно строго по фронту синхросигнала, поэтому пересылки вида S -> S1, S1 -> S имеют смысл (обмен значениями регистров S, S1) и не являются описанием последовательности действий.

Каждый слот может выполняться условно, для этого он префиксируется набором признаков для сравнения. Признак W - явно не выражен в микрокоманде, он задается полем инструкции (см.статью о реверсе МК-61) действующей 42 такта. Однако он имеет смысл если используются разряды 15,16,17 машинного слова отличные от 0. Поля содержащее эти разряды выделены в микрокоде точками с обеих сторон. Кроме того старшие 8 разрядов микрокоманды отделены подчеркиванием.

Так как ни в одной микрокоманде не встречаются установленные в единицу биты 24 и 25, поле с ними выделено жирным шрифтом. В версии эмулятора Ф.Лазарева данные биты используются для формирования еще одной операции пересылки IK1302_S1 |= IK1302_key_y требуемой для обработки клавиатуры. Коды ?3_??????, ?7_??????, ?F_?????? не встречаются в таблице микрокода. Таким образом вышеуказанная пересылка в ИК1302 не используется.

SF! - префикс сохранения переноса операции в флаг CARRY (в коде IK1302_L). Префиксы условного исполнения (могут быть сгруппированы по логическому “И”):

  • W - флаг разрешения записи
  • C - флаг CARRY == 1
  • NC - флаг CARRY == 0

ИК1302

N Микрокод
32 р-р
Мнемоническое обозначение в терминах
многопоточного TTA (транспортно-триггерная архитектура)
0 00_0.00.000 NULL (NOP)
1 00_8.00.001 0(R) -> S
2 00_A.00.820 SF! S + 1 -> S
3 00_0.40.020 W? S -> -1(R)
4 00_A.03.120 0 -> S, 1 -> CARRY
5 00_2.03.081 SF! 0(R) + S + 1 -> NULL
6 00_A.00.181 SF! 0(R) + 0x0F -> S
7 00_8.03.800 2 -> S
8 00_8.18.001 W? S -> 0(R), 0(R) -> S
9 00_8.00.400 6 -> S
10 00_A.00.089 SF! S + 0x0F -> S
11 00_A.03.C20 SF! S + 7 + 1 -> S
12 00_8.00.820 S + 1 -> S
13 00_0.80.020 W? S -> -2(R)
14 00_8.00.120 0x0F -> S
15 01_4.00.020 S -> S1, S1 -> S
16 00_8.00.081 0(R) + S -> S
17 00_2.10.801 SF! W? 0(R) + 1 -> 0(R)
18 00_0.40.000 W? 0 -> -1(R)
19 00_0.58.001 W? 0(R) -> -1(R), W? S -> 0(R)
20 00_8.08.001 0(R) -> S, W? (-3)R -> 0(R)
21 00_A.03.081 SF! 0(R) + S + 1 -> S
22 00_A.01.081 SF! 0(R) + S + CARRY -> S
23 00_A.01.181 SF! 0(R) + 0x0F + CARRY -> S
24 00_0.40.090 WC? 0x0A + S -> -1(R), WNC? S -> -1(R)
25 00_8.00.401 0(R) + 6 -> S
26 00_A.00.081 SF! 0(R) + S -> S
27 00_0.40.001 W? 0(R) -> (-1)R
28 00_8.00.801 0(R) + 1 -> S
29 01_0.00.000 0 -> S1
30 00_8.00.100 ~S -> S
31 01_2.00.801 SF! 0(R) + 1 -> S1
32 00_0.13.C01 W? 0(R) + 8 -> 0(R)
33 00_8.00.008 ~0(R) -> S
34 00_A.00.088 SF! ~0(R) + S -> S
35 00_0.10.200 W? S1 -> 0(R)
36 00_8.00.040 4 -> S
37 00_8.00.280 S | S1 -> S
38 01_8.01.200 S1 + CARRY -> S, S1 + CARRY -> S1
39 01_0.00.208 ~0(R) + S1 -> S1
40 00_0.80.001 W? 0(R) -> -2(R)
41 00_A.00.082 SF! 0(M) + S -> S
42 00_A.01.008 SF! ~0(R) + CARRY -> S
43 01_0.00.001 0(R) -> S1
44 00_A.00.808 SF! ~0(R) + 1 -> S
45 00_9.00.001 (0)R -> S, S -> (0)M
46 0.10.004 W? ST[0] -> 0(R), 1(ST) -> 0(ST),2(ST) -> 1(ST),0(ST) -> 2(ST)
47 00_0.80.820 W? S + 1 -> -2(R)
48 00_8.00.002 (0)M -> S
49 00_1.40.002 W? 0(M) -> -1(R), S -> 0(M)
50 00_0.08.000 W? -(3)R -> 0(R)
51 00_A.00.090 SF! NC? 0x0A + S -> S
52 00_A.00.220 SF! S + S1 -> S
53 00_8.01.001 0(R) + CARRY -> S
54 01_2.03.200 SF! S1 + 1 -> S1
55 04_8.00.001 0(R) -> S, 1(ST) -> 2(ST), 0(ST) -> 1(ST), 0(R) -> 0(ST)
56 00_0.11.801 W? 0(R) + 1 + CARRY -> 0(R)
57 01_0.08.001 0(R) -> S1, W? 3(R) -> 0(R)
58 00_A.04.020 SF! S + ~T -> S
59 04_8.00.801 0(R) + 1 -> S, 2(ST) -> 1(ST),1(ST) -> 0(ST), 0(R) + 1-> 0(ST)
60 00_8.40.801 W? 0(R) + 1 -> -1(R), 0(R) + 1 -> S
61 00_8.40.020 W? S -> -1(R)
62 00_0.13.081 W? 0(R) + S + 1 -> 0(R)
63 00_0.10.801 W? 0(R) + 1 -> 0(R)
64 00_8.18.180 W? S -> 0(R), 0x0F -> S
65 00_8.00.180 0x0F -> S
66 00_A.00.081 SF! 0(R) + S -> S
67 00_8.00.001 0(R) -> S

ИК 1303

N Микрокод
32 р-р
Мнемоническое обозначение в терминах
многопоточного TTA (транспортно-триггерная архитектура)
0 00_0.00.000 NOP
1 00_8.00.001 0(R) -> S
2 00_0.40.020 W? -1(R) = S
3 01_4.40.090 W? NC? 0x0A + 0 + S ->  -1(R), W? C? S ->  -1(R), S1 -> S
4 00_A.00.081 SF! 0(R) + S -> S
5 01_0.00.000 0 -> S1
6 01_4.00.020 S -> S1, S1 -> S
7 00_8.00.008 ~0(R) -> S
8 00_A.03.180 0 -> S, 1 -> CARRY
9 01_0.02.200 S1 + ~CARRY -> S1
10 00_8.00.400 6 -> S
11 01_4.18.001 W? S -> 0(R), 0(R) -> S1, S1 -> S
12 00_0.80.020 W? S -> -2(R)
13 00_8.41.020 W? S + CARRY -> -1(R), S + CARRY -> S
14 00_2.03.100 SF! ~S + 1 -> NULL
15 00_2.03.088 SF! ~0(R) + S + 1 -> NULL
16 00_A.00.820 SF! S + 1 -> S
17 00_8.00.120 0x0F -> S
18 00_8.00.1C0 3 -> S
19 00_8.10.081 W? 0(R) + S -> 0(R), 0(R) + S -> S
20 00_A.00.089 SF! S + 0x0F -> S
21 00_8.00.401 0(R) + 6 -> S
22 00_A.01.0A0 SF! S + S + CARRY -> S
23 00_A.01.081 SF! 0(R) + S + CARRY -> S
24 00_8.18.001 W? S) -> 0(R), 0(R) -> S
25 01_A.00.220 SF! S + S1 -> S, S + S1 -> S1
26 00_2.01.100 SF! ~S + CARRY -> NULL
27 00_2.03.420 SF! S + 6 + 1 -> NULL
28 00_0.08.000 0 -> {P,sg}
29 00_8.01.020 S + CARRY -> S
30 00_2.01.420 SF! S + CARRY + 6 -> NULL
31 00_8.01.190 NC? 9 -> S, C? 0 -> S
32 00_0.40.000 W? 0 -> -1(R)
33 00_0.80.820 W? S + 1 -> -2(R)
34 00_8.00.002 0(M) -> S
35 00_1.40.002 W? 0(M) -> -1(R), S -> 0(M)
36 00_8.00.100 ~S -> S
37 00_A.03.C20 SF! S + 8 -> S
38 00_A.00.808 SF! ~0(R) + 1 -> S
39 00_A.01.008 SF! ~0(R) + CARRY -> S
40 00_2.00.540 SF! (~S | 6) + 4 -> NULL
41 00_6.01.209 SF! 0x0F + S1 + CARRY -> NULL, S1 -> S
42 00_0.83.100 W? ~S + 1 -> -2(R)
43 00_A.03.081 SF! 0(R) + S + 1 -> S
44 08_8.00.004 0(ST) -> S, 1(ST) -> 0(ST), 2(ST) -> 1(ST), 0(ST) -> 2(ST)
45 00_0.58.001 W? 0(R) -> -1(R), W? S -> 0(R)
46 01_0.01.280 (S | S1) + CARRY -> S1
47 01_0.08.001 W? 3(R) -> 0(R), 0(R) -> S1
48 01_2.00.209 SF! 0x0F + S1 -> S1
49 04_0.18.001 W? S -> 0(R), 1(ST) -> 2(ST), 0(ST) -> 1(ST), 0(R) -> 0(ST)
50 00_0.40.002 W? 0(M) -> -1(R)
51 01_.00.0001 0(R) -> S1
52 00_0.10.200 W? S1 -> 0(R)
53 00_8.00.840 5 -> S
54 00_A.01.181 SF! 0(R) + 0x0F + CARRY -> S
55 04_0.18.801 W? S -> 0(R),1(ST) -> 2(ST), 0(ST) -> 1(ST), 0(R) + 1 -> 0(ST)
56 00_A.10.181 SF! 0(R) + 0x0F -> S
57 00_8.00.801 0(R) + 1 -> S
58 00_0.40.001 W? 0(R) -> -1(R)
59 00_0.11.190 W? NC? 9 -> 0(R), W? C? 0 -> 0(R)
60 00_8.58.001 W? 0(R) -> -1(R), W? S -> 0(R), 0(R) -> S
61 00_0.40.020 W? S -> -1(R)
62 03_2.00.209 SF! (S1 + 0x0F) | S1 -> S1
63 00_8.00.0C0 S + 4 -> S
64 04_0.00.020 1(ST) -> 2(ST), 0(ST) -> 1(ST), S -> 0(ST)
65 00_6.00.081 SF! S + 0(R) -> NULL , S1 -> S
66 01_0.00.000 0x00 -> S1
67 01_0.00.180 0x0F -> S1

ИК 1306

N Микрокод
32 р-р
Мнемоническое обозначение в терминах
многопоточного TTA (транспортно-триггерная архитектура)
0 00_0.00.000 NOP
1 00_8.00.008 ~0(R) -> S
2 00_0.40.020 W? S -> -1(R)
3 00_8.00.001 0(R) -> S
4 00_8.00.021 0(R) | S -> S
5 00_0.80.020 W? S -> -2(R)
6 00_A.00.028 ~0(R) | S -> S, 0 -> CARRY
7 00_0.40.100 ~S -> -1(R)
8 04_0.00.100 1(ST) -> 2(ST), 0(ST) -> 1(ST), ~S -> 0(ST)
9 00_0.10.100 ~S -> 0(R)
10 00_A.00.101 SF! ~S | 0(R) -> S
11 00_2.01.089 SF! S + 0x0F + CARRY -> NULL
12 00_2.13.201 SF! W? 0(R) + S1 + 1 -> 0(R)
13 00_8.00.004 0(ST) -> S
14 00_8.00.800 1 -> S
15 00_8.00.820 S + 1 -> S
16 00_2.00.088 SF! ~0(R) + S -> NULL
17 04_8.10.002 W? 0(M) -> 0(R), S1 -> S, 1(ST) -> 2(ST), 0(ST) -> 1(ST), 0(M) -> 0(ST)
18 00_A.00.820 SF! S + 1 -> S
19 00_8.00.400 6 -> S
20 00_8.01.000 CARRY -> S
21 00_1.00.000 S -> 0(M)
22 08_8.00.004 0(ST) -> S, 1(ST) -> 0(ST), 2(ST) -> 1(ST), 0(ST) -> 2(ST)
23 00_0.08.000 W? -(3)R -> 0(R)
24 01_4.00.020 S -> S1, S1 -> S
25 00_8.00.005 0(R) | 0(ST) -> S
26 04_0.00.020 1(ST) -> 2(ST), 0(ST) -> 1(ST), S -> 0(ST)
27 00_A.00.180 0x0F -> S, 0 -> CARRY
28 00_1.00.000 S -> 0(M)
29 04_0.00.001 1(ST) -> 2(ST), 0(ST) -> 1(ST), 0(R) -> 0(ST)
30 08_2.41.004 SF! W? 0(ST) + CARRY -> -1(R),  1(ST) -> 0(ST), 2(ST) -> 1(ST), 0(ST) -> 2(ST)
31 00_4.00.000 S1 -> S
32 00_0.80.001 W? 0(R) -> -2(R)
33 00_0.40.001 W? 0(R) -> (-1)R
34 00_2.12.801 SF! W? 0(R) + 1 + ~L -> 0(R)
35 00_2.00.808 SF! ~0(R) + 1 -> NULL
36 00_8.00.000 0 -> S
37 00_0.10.020 W? S -> 0(R)
38 00_A.00.808 SF! ~0(R) + 1 -> S
39 00_0.40.090 WC? 0x0A + S -> -1(R), WNC? S -> -1(R)
40 00_A.01.008 SF! ~0(R) + CARRY -> S
41 00_8.00.401 0(R) + 6 -> S
42 00_A.00.081 SF! 0(R) + S -> S
43 00_A.01.081 SF! 0(R) + S + CARRY -> S
44 00_8.03.400 7 -> S
45 00_A.01.001 SF! 0(R) + CARRY -> S
46 00_A.11.801 SF! W? 0(R) + 1 + CARRY -> 0(R), 0(R) + 1 + CARRY -> S
47 00_0.11.001 W? 0(R) + CARRY -> 0(R)
48 00_A.10.801 SF! W? 0(R) + 1 -> 0(R), 0(R) + 1 -> S
49 00_2.13.801 SF! W? 0(R) + 1 + 1 -> 0(R)
50 00_0.98.001 W? S -> 0(R), W? 0(R) -> -2(R)
51 00_8.18.001 W? S -> 0(R), 0(R) -> S
52 00_8.00.420 S + 6 -> S
53 00_8.80.090 NC? 0x0A + S -> S, NC? 0x0A + S -> -2(R), C? S -> -2(R)
54 00_2.03.C08 SF? 1 + 6|1 + ~0(R) -> NULL
55 00_2.00.809 SF! 1 + 0x0F -> NULL ; 1 -> CARRY
56 00_A.00.089 SF! S + 0x0F -> S
57 00_2.03.090 SF! NC? 0x0A + S + 1 -> NULL, C? S + 1 -> NULL
58 00_8.40.090 NC? W? 0x0A + S -> -1(R), NC? 0x0A + S -> S, C? W?  S -> -1(R)
59 00_8.10.002 0(M) -> 0(R), 0(M) -> S
60 00_2.10.801 SF! W? 0(R) + 1 -> 0(R)
61 00_2.10.081 SF! W? 0(R) + S -> 0(R)
62 00_2.10.081 SF! W? 0(R) + S -> 0(R)
63 00_0.10.000 W? 0 -> 0(R)
64 00_2.00.090 SF!  NC? 0x0A + S -> NULL, C? S -> NULL
65 00_2.12.801 SF! NC? W? 0x0A + S + ~CARRY-> 0(R), C? W? S + ~CARRY-> 0(R)
66 00_A.01.020 SF! S + CARRY -> S
67 00_A.01.020 SF! S + CARRY -> S

Метки публикаций: 
Русский

Комментарии

Можно добавить кратко назначение каждой из микросхем и в каких ПМК какая использовалась?

Могу сказать только про ИК1306 и то довольно нечетко - логика ИНВ,И,ИЛИ,Иск.ИЛИ, переводы по градусным мерам. ИК1302 и ИК1303 используются очень интенсивно во всех операциях. Возможно ИК1302 больше нагружена вводом-выводом (клавиатура и дисплей) чем ИК1303 (только переключатель ГР-ГРД-РД).

Для выяснения кто и что именно делает - нужен очередной этап разбирательств, по "синхро-программам". Там очень много работы, я его проделал и то не целиком, а по тестовому набору операций 3, 1, П1, 3, / и это огромнейший объем лога в 200 - 300 Мб. Честно скажу я мало что понял из того что там происходит, боюсь что это мне уже не доступно. По крайней мере развернуть синхропрограмму в набор микрокоманд для ИК1302 и частично ИК1303 можно, я это сделал, но я алгоритма не увидел. Видимо тут нужен совсем другой подход. Для микроконтроллеров эта тема будет уже бесполезна, так как объем кода превысит все возможные рамки МК.

Попробую подытожить.

ИК 1302 (Б3-34, МК-54, МК-56 и МК-61, МК-52)
Диспетчер, контроллер дисплея и клавиатуры.

ИК 1303 (Б3-34, МК-54, МК-56 и МК-61, МК-52)
Арифметический процессор, переключатель Г-ГРД-Р.

ИК 1306 (только МК-61, МК-52)
Процессор дополнительных функций МК-61 и МК-52.

Кстати, для публикации микрокода, результатов расследований и формулировки-структурирования своих предположений можно использовать нашу Вики по ЭКВМ и ПМК. Также туда можно выкладывать большие объёмы текстового материала, иллюстрации — в форме, пригодной для чтения человеком, разумеется.