b3-34-small.jpg

Калькулятор "Электроника Б3-34"

Статья в Википедии.

Книжка: "Программируемые микрокалькуляторы. Устройство и пользование" / Я. К. Трохименко, В. П. Захаров, Н. П. Ромашко и др.; М.: Радио и связь, 1990.

Эмулятор от Евгения Троицкого.

Принципиальная схема, чертеж платы.

Доработка своими силами, от Алексея Полушкина.

Коллекция игровых программ для МК-52, МК-61 от Евгения Кузниченко.

Процессор

Обработка данных производится последовательным процессором, состоящим из микросхем:

  • К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) обеспечивает пересылку данных, управление клавиатурой и индикатором.

Адрес МК Код микрокоманды Действие Перенос
0×00 ~~~~~~ ~~~~~ ~~~ ~~~ ~ ~ ~ ~ ~~ ~~ ~~ Нет операции
0×01 1~~~~~ ~~~~~ ~~~ ~~~ ~ ~ ~ ~ 1~ ~~ ~~ S := R[i]
0×02 ~~~~~1 ~~~~1 ~~~ ~~~ ~ ~ 1 ~ 1~ ~~ ~~ S := S + 1 L := П
0×03 ~~~~~1 ~~~~~ ~~~ ~~~ 1 ~ ~ ~ ~~ ~~ ~~ R[i-1] := S
0×04 (и так далее) S := 0 L := 1
0×05 (и так далее) R[i] + S + 1 L := П
0×06 (и так далее) S := R[i] + 0xF L := П
0×07 (и так далее) S := 2
0×08 (и так далее) Σ := R[i]; R[i] := S; S := Σ
0×09 (и так далее) 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 := Σ
0×10 (и так далее) S := R[i] + S
0×11 (и так далее) R[i] := R[i] + 1 L := П
0×12 (и так далее) R[i-1] := 0
0×13 (и так далее) R[i-1] := R[i]; R[i] := S
0×14 (и так далее) S := R[i]; R[i] := R[i+3]
0×15 (и так далее) S := R[i] + S + 1 L := П
0×16 (и так далее) S := R[i] + S + L L := П
0×17 (и так далее) S := R[i] + 0xF + L L := П
0×18 (и так далее) R[i-1] := S + 0xA * ~L
0×19 (и так далее) 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 := П
0×20 (и так далее) R[i] := R[i] + 8
0×21 (и так далее) S := ~R[i]
0×22 (и так далее) S := R[i] + S L := П
0×23 (и так далее) R[i] := S1
0×24 (и так далее) S := 4
0×25 (и так далее) S := (~S | S1) + L
0×26 (и так далее) S := S1+L; S1 := S
0×27 (и так далее) S1 := ~R[i] + S1
0×28 (и так далее) R[i-2] := R[i]
0×29 (и так далее) 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
0×30 (и так далее) S := M[i]
0×31 (и так далее) R[i-1] := M[i]; M[i] := S
0×32 (и так далее) R[i] := R[i+3]
0×33 (и так далее) S := S + 0xA * ~L L := П
0×34 (и так далее) S := S + S1 L := П
0×35 (и так далее) S := R[i] + L
0×36 (и так далее) S1 := S1 + 1 L := П
0×37 (и так далее) S := R[i]; ST[i] := S
0×38 (и так далее) R[i] := R[i] + 1 + L
0×39 (и так далее) 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) обеспечивает интерпретацию операторов прикладной программы.

Адрес МК Код микрокоманды Действие Перенос
0×00 ~~~~~~ ~~~~~ ~~~ ~~~ ~ ~ ~ ~ ~~ ~~ ~~ Нет операции
0×01 1~~~~~ ~~~~~ ~~~ ~~~ ~ ~ ~ ~ 1~ ~~ ~~ S := R[i]
0×02 ~~~~~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^xF e^xF lgF lnF arcsinF arccosF arctgF sinF cosF tg
2 F пиF кореньF x^2F 1/xF x^yF ⟳K МГK -K xK :K МЧ
3 K ЧМK |x|K ЗНK ГМK [x]K {x}K maxK /\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 1K 2F x#0F L2F x≥0F L3F L1F x<0F L0F 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

 
proj/calculator/b3-34.txt · Последние изменения: 2014/01/17 13:09 vak
 
Copyright (C) 1996-2013 Serge Vakulenko
serge@vak.ru