Table of Contents
Калькулятор "Электроника Б3-34"
Книжка: "Программируемые микрокалькуляторы. Устройство и пользование" / Я. К. Трохименко, В. П. Захаров, Н. П. Ромашко и др.; М.: Радио и связь, 1990.
Эмулятор от Евгения Троицкого.
Принципиальная схема, чертеж платы.
Доработка своими силами, от Алексея Полушкина.
Коллекция игровых программ для МК-52, МК-61 от Евгения Кузниченко.
Аутентичная реплика на микроконтроллере PIC-32. Хранимая память программ, возможность загрузки через интерфейс USB.
Процессор
Обработка данных производится последовательным процессором, состоящим из микросхем:
- К145ИК1302 - диспетчер, контроллер дисплея и клавиатуры
- К145ИК1303 - арифметический процессор
- К145ИР2, две штуки - регистры динамической памяти.
Процессор оперирует 4-битными словами. За каждый такт выполняется одна микрокоманда, обрабатывающая одно слово.
Логически процессор содержит:
- регистр памяти M размером 42 слова (системная магистраль)
- регистр данных R размером 42 слова
- регистр стека ST размером 42 слова
- регистр общего назначения S размером 1 слово
- регистр общего назначения S1 размером 1 слово
- бит переноса L
- два бита внешних сигналов H и T
Сумматор имеет три входа “альфа”, “бета” и “гамма” и выполняет операцию:
- Σ = альфа + бета + гамма
- П = бит переноса
Микрокоманды
Код микрокоманды имеет 27 бит и состоит из 11 полей:
000000 | 6 бит | селектор входа “альфа” сумматора |
00000 | 5 бит | селектор входа “бета” сумматора |
000 | 3 бита | селектор входа “гамма” сумматора |
000 | 3 бита | селектор выхода R[i] |
0 | 1 бит | селектор выхода R[i-1] |
0 | 1 бит | селектор выхода R[i-2] |
0 | 1 бит | селектор выхода L |
0 | 1 бит | селектор выхода M[i] |
00 | 2 бита | селектор выхода S |
00 | 2 бита | селектор выхода S1 |
00 | 2 бита | управление регистром ST |
Если установлены несколько битов селектора, варианты объединяются операцией логического побитового “или”.
Вход “альфа” сумматора имеет шесть вариантов:
- 100000: R[i]
- 010000: M[i]
- 001000: ST[i]
- 000100: ~R[i]
- 000010: 0xA * ~L
- 000001: S
Вход “бета” сумматора:
- 10000: S
- 01000: ~S
- 00100: S1
- 00010: константа 6
- 00001: константа 1
Вход “гамма” сумматора:
- 100: L
- 010: ~L
- 001: ~T
Благодаря объединению вариантов логическим побитовым “или” можно подать на вход “гамма” константу 1. Для этого используется селектор 110, соответствующий формуле L | ~L.
Выход R[i]:
- 000: R[i] := R[i] (содержимое остаётся неизменным)
- 001: R[i] := R[i+3]
- 010: R[i] := Σ
- 011: R[i] := S
- 100: R[i] := R[i] | S | Σ
- 101: R[i] := S | Σ
- 110: R[i] := R[i] | S
- 111: R[i] := R[i] | Σ
Выход R[i-1]:
- 1: R[i-1] := Σ
Выход R[i-2]:
- 1: R[i-2] := Σ
Выход L:
- 1: L := П (признак переноса)
Выход M[i]:
- 1: M[i] := S
Выход S:
- 01: S := S1
- 10: S := Σ
- 11: S := S1 | Σ
Выход S1:
- 01: S1 := Σ
- 10: S1 := S1 | H
- 11: S1 := S1 | H | Σ
Управление регистром ST:
- 01: ST[i+2] := ST[i+1]; ST[i+1] := ST[i]; ST[i] := Σ
- 10: X := ST[i]; ST[i] := ST[i+1]; ST[i+1] := ST[i+2]; ST[i+2] := X;
- 11: X := ST[i]; Y := ST[i+1]; Z := ST[i+2]; ST[i] := Σ | Y; ST[i+1] := X | Z; ST[i+2] := Y | X;
Адреса микрокоманд
В постоянной памяти процессора хранится массив из 68 возможных микрокоманд. Для выбора нужного действия используется 6-битовый адрес микрокоманды (АМК). Микрокоманды с адресами 60…63 называются условными: на их выполнение влияет признак L процессора, в зависимости от которого выполняется одна из двух команд.
ИК1302
Микросхема К145ИК1302 (К745ИК1302) обеспечивает пересылку данных, управление клавиатурой и индикатором.
Адрес МК | Код микрокоманды | Действие | Перенос |
---|---|---|---|
0x00 | ~~~~~~ ~~~~~ ~~~ ~~~ ~ ~ ~ ~ ~~ ~~ ~~ | Нет операции | |
0x01 | 1~~~~~ ~~~~~ ~~~ ~~~ ~ ~ ~ ~ 1~ ~~ ~~ | S := R[i] | |
0x02 | ~~~~~1 ~~~~1 ~~~ ~~~ ~ ~ 1 ~ 1~ ~~ ~~ | S := S + 1 | L := П |
0x03 | ~~~~~1 ~~~~~ ~~~ ~~~ 1 ~ ~ ~ ~~ ~~ ~~ | R[i-1] := S | |
0x04 | (и так далее) | S := 0 | L := 1 |
0x05 | (и так далее) | R[i] + S + 1 | L := П |
0x06 | (и так далее) | S := R[i] + 0xF | L := П |
0x07 | (и так далее) | S := 2 | |
0x08 | (и так далее) | Σ := R[i]; R[i] := S; S := Σ | |
0x09 | (и так далее) | S := 6 | |
0x0a | (и так далее) | S := S + 0xF | L := П |
0x0b | (и так далее) | S := S + 8 | L := П |
0x0c | (и так далее) | S := S + 1 | |
0x0d | (и так далее) | R[i-2] := S | |
0x0e | (и так далее) | S := 0xF | |
0x0f | (и так далее) | Σ := S; S := S1; S1 := Σ | |
0x10 | (и так далее) | S := R[i] + S | |
0x11 | (и так далее) | R[i] := R[i] + 1 | L := П |
0x12 | (и так далее) | R[i-1] := 0 | |
0x13 | (и так далее) | R[i-1] := R[i]; R[i] := S | |
0x14 | (и так далее) | S := R[i]; R[i] := R[i+3] | |
0x15 | (и так далее) | S := R[i] + S + 1 | L := П |
0x16 | (и так далее) | S := R[i] + S + L | L := П |
0x17 | (и так далее) | S := R[i] + 0xF + L | L := П |
0x18 | (и так далее) | R[i-1] := S + 0xA * ~L | |
0x19 | (и так далее) | S := R[i] + 6 | |
0x1a | (и так далее) | S := R[i] + S | L := П |
0x1b | (и так далее) | R[i-1] := R[i] | |
0x1c | (и так далее) | S := R[i] + 1 | |
0x1d | (и так далее) | S1 := 0 | |
0x1e | (и так далее) | S := ~S | |
0x1f | (и так далее) | S1 := R[i] + 1 | L := П |
0x20 | (и так далее) | R[i] := R[i] + 8 | |
0x21 | (и так далее) | S := ~R[i] | |
0x22 | (и так далее) | S := R[i] + S | L := П |
0x23 | (и так далее) | R[i] := S1 | |
0x24 | (и так далее) | S := 4 | |
0x25 | (и так далее) | S := (~S | S1) + L | |
0x26 | (и так далее) | S := S1+L; S1 := S | |
0x27 | (и так далее) | S1 := ~R[i] + S1 | |
0x28 | (и так далее) | R[i-2] := R[i] | |
0x29 | (и так далее) | S := M[i] + S | L := П |
0x2a | (и так далее) | S := ~R[i] + L | L := П |
0x2b | (и так далее) | S1 := R[i] | |
0x2c | (и так далее) | S := ~R[i] + 1 | L := П |
0x2d | (и так далее) | M[i] := S; S := R[i] | |
0x2e | (и так далее) | R[i] := ST[i] | |
0x2f | (и так далее) | R[i-2] := S+1 | |
0x30 | (и так далее) | S := M[i] | |
0x31 | (и так далее) | R[i-1] := M[i]; M[i] := S | |
0x32 | (и так далее) | R[i] := R[i+3] | |
0x33 | (и так далее) | S := S + 0xA * ~L | L := П |
0x34 | (и так далее) | S := S + S1 | L := П |
0x35 | (и так далее) | S := R[i] + L | |
0x36 | (и так далее) | S1 := S1 + 1 | L := П |
0x37 | (и так далее) | S := R[i]; ST[i] := S | |
0x38 | (и так далее) | R[i] := R[i] + 1 + L | |
0x39 | (и так далее) | S := R[i]; S1 := S; R[i] := R[i+3] | |
0x3a | (и так далее) | S := S + ~T | L := П |
0x3b | (и так далее) | S := R[i] + 1; ST[i] := S | |
0x3c и L==1 | (и так далее) | S := R[i] + 1; R[i-1] := S | |
0x3c и L==0 | (и так далее) | R[i-1] := S | |
0x3d и L==1 | (и так далее) | S := R[i] + S + 1; R[i] := S | |
0x3d и L==0 | (и так далее) | S := R[i] + 1; R[i] := S | |
0x3e и L==1 | (и так далее) | S := 0xF; R[i] := S | |
0x3e и L==0 | (и так далее) | S := 0xF | |
0x3f и L==1 | (и так далее) | S := R[i] + S | L := П |
0x3f и L==0 | (и так далее) | S := R[i] |
ИК1303
Микросхема К145ИК1303 (К745ИК1303) обеспечивает интерпретацию операторов прикладной программы.
Адрес МК | Код микрокоманды | Действие | Перенос |
---|---|---|---|
0x00 | ~~~~~~ ~~~~~ ~~~ ~~~ ~ ~ ~ ~ ~~ ~~ ~~ | Нет операции | |
0x01 | 1~~~~~ ~~~~~ ~~~ ~~~ ~ ~ ~ ~ 1~ ~~ ~~ | S := R[i] | |
0x02 | ~~~~~1 ~~~~~ ~~~ ~~~ 1 ~ ~ ~ ~~ ~~ ~~ | R[i-1] := S | |
(и так далее) | (недоделано) |
Синхропрограммы
Синхропрограмма представляет собой последовательность из 9 адресов микрокоманд. Память синхропрограмм (ПСП) содержит 128 таких последовательностей, адресуемых 7-битным адресом синхропрограммы (АСП).
Например, для ИК1302 синхропрограмма с АСП=5f выглядит как { 3b 3c 2f 37 3c 01 00 00 00 }.
Память команд
Память основной программы процессора содержит 256 команд. Каждая команда состоит из четырех полей:
- Адрес синхропрограммы для обработки мантиссы (7 бит). Выполняется трижды на тактах 0…26.
- Адрес синхропрограммы для обработки порядка (7 бит). Выполняется на тактах 27…35.
- Адрес синхропрограммы для вычисления адреса следующей команды (8 бит). Выполняется на тактах 36…41.
- Признак разрешения модификации регистра R[i] на тактах 0…35 (1 бит).
Коды инструкций
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | A | B | C | D | E | F | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | , | /-/ | ВП | Сx | В^ | F Вx |
1 | + | - | x | : | <-> | F 10^x | F e^x | F lg | F ln | F arcsin | F arccos | F arctg | F sin | F cos | F tg | |
2 | F пи | F корень | F x^2 | F 1/x | F x^y | F ⟳ | K МГ | K - | K x | K : | K МЧ | |||||
3 | K ЧМ | K |x| | K ЗН | K ГМ | K [x] | K {x} | K max | K /\ | K \/ | K (+) | K ИНВ | K СЧ | ||||
4 | xП 0 | xП 1 | xП 2 | xП 3 | xП 4 | xП 5 | xП 6 | xП 7 | xП 8 | xП 9 | xП A | xП B | xП C | xП D | xП E | |
5 | С/П | БП | В/О | ПП | K НОП | K 1 | K 2 | F x#0 | F L2 | F x≥0 | F L3 | F L1 | F x<0 | F L0 | F x=0 | |
6 | Пx 0 | Пx 1 | Пx 2 | Пx 3 | Пx 4 | Пx 5 | Пx 6 | Пx 7 | Пx 8 | Пx 9 | Пx A | Пx B | Пx C | Пx D | Пx E | |
7 | K x#0 0 | K x#0 1 | K x#0 2 | K x#0 3 | K x#0 4 | K x#0 5 | K x#0 6 | K x#0 7 | K x#0 8 | K x#0 9 | K x#0 A | K x#0 B | K x#0 C | K x#0 D | K x#0 E | |
8 | K БП 0 | K БП 1 | K БП 2 | K БП 3 | K БП 4 | K БП 5 | K БП 6 | K БП 7 | K БП 8 | K БП 9 | K БП A | K БП B | K БП C | K БП D | K БП E | |
9 | K x≥0 0 | K x≥0 1 | K x≥0 2 | K x≥0 3 | K x≥0 4 | K x≥0 5 | K x≥0 6 | K x≥0 7 | K x≥0 8 | K x≥0 9 | K x≥0 A | K x≥0 B | K x≥0 C | K x≥0 D | K x≥0 E | |
A | K ПП 0 | K ПП 1 | K ПП 2 | K ПП 3 | K ПП 4 | K ПП 5 | K ПП 6 | K ПП 7 | K ПП 8 | K ПП 9 | K ПП A | K ПП B | K ПП C | K ПП D | K ПП E | |
B | K xП 0 | K xП 1 | K xП 2 | K xП 3 | K xП 4 | K xП 5 | K xП 6 | K xП 7 | K xП 8 | K xП 9 | K xП A | K xП B | K xП C | K xП D | K xП E | |
C | K x<0 0 | K x<0 1 | K x<0 2 | K x<0 3 | K x<0 4 | K x<0 5 | K x<0 6 | K x<0 7 | K x<0 8 | K x<0 9 | K x<0 A | K x<0 B | K x<0 C | K x<0 D | K x<0 E | |
D | К Пx 0 | К Пx 1 | К Пx 2 | К Пx 3 | К Пx 4 | К Пx 5 | К Пx 6 | К Пx 7 | К Пx 8 | К Пx 9 | К Пx A | К Пx B | К Пx C | К Пx D | К Пx E | |
E | K x=0 0 | K x=0 1 | K x=0 2 | K x=0 3 | K x=0 4 | K x=0 5 | K x=0 6 | K x=0 7 | K x=0 8 | K x=0 9 | K x=0 A | K x=0 B | K x=0 C | K x=0 D | K x=0 E | |
F |