{{ b3-34-small.jpg}} ====== Калькулятор "Электроника Б3-34" ====== [[http://ru.wikipedia.org/wiki/%D0%AD%D0%BB%D0%B5%D0%BA%D1%82%D1%80%D0%BE%D0%BD%D0%B8%D0%BA%D0%B0_%D0%913-34 | Статья в Википедии]]. Книжка: [[http://vak.ru/lib/exe/fetch.php/book/pmkuip.djvu | "Программируемые микрокалькуляторы. Устройство и пользование"]] / Я. К. Трохименко, В. П. Захаров, Н. П. Ромашко и др.; М.: Радио и связь, 1990. [[http://www.emulator3000.org/rus-c3.htm | Эмулятор]] от Евгения Троицкого. [[http://pics.livejournal.com/dubolom/pic/0004az12 | Принципиальная схема]], [[http://pics.livejournal.com/dubolom/pic/0004bh6p | чертеж платы]]. [[http://web.archive.org/web/20090520044607/http://scilab.narod.ru/calc.html | Доработка своими силами]], от Алексея Полушкина. [[http://lordbss.narod.ru/pmk.html | Коллекция игровых программ]] для МК-52, МК-61 от Евгения Кузниченко. [[https://github.com/sergev/mk-61 | Аутентичная реплика]] на микроконтроллере PIC-32. Хранимая память программ, возможность загрузки через интерфейс USB. ===== Процессор ===== Обработка данных производится последовательным процессором, состоящим из микросхем: * К145ИК1302 - диспетчер, контроллер дисплея и клавиатуры * К145ИК1303 - арифметический процессор * К145ИР2, две штуки - регистры динамической памяти. {{b3-34-blocks.gif}} Процессор оперирует 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 | | | | | | | | | | | | | | | | |