Немига: различия между версиями

Материал из Emuverse
(Новая страница: «'''Немига''' - советский 16-разрядный персональный компьютер, выпускался на белорусских пре…»)
 
(лицензия, оформление)
Строка 1: Строка 1:
'''Немига''' - советский 16-разрядный персональный компьютер, выпускался на белорусских предприятиях с 1989 года. Предназначался для поставки в учебные заведения в составе КУВТ. По системе команд совместим с PDP-11 и его советскими клонами - [[Электроника-60]], [[ДВК]].
{{Emuverse}}
'''Немига''' — советский 16-разрядный персональный компьютер, выпускался на белорусских предприятиях с 1989 года. Предназначался для поставки в учебные заведения в составе КУВТ. По системе команд совместим с PDP-11 и его советскими клонами — [[Электроника-60]], [[ДВК]].


Процессор машины реализован на наборе микросхем серии 588 - эти микросхемы выпускались на минском ПО <Интеграл>.
Процессор машины реализован на наборе микросхем серии 588 — эти микросхемы выпускались на минском ПО <Интеграл>.


Существовало как минимум три версии Немиги, отличающихся схемотехникой и ПЗУ: 3.03, 4.05, 4.06.
Существовало как минимум три версии Немиги, отличающихся схемотехникой и ПЗУ: 3.03, 4.05, 4.06.
Строка 11: Строка 12:


Полный набор команд пульта для версии 3.03:
Полный набор команд пульта для версии 3.03:
* 'S' -- просмотр регистров
* 'S' — просмотр регистров
* '/' либо '000000/' -- просмотр ячеек памяти, c указанием адреса или без; ПС -- след адрес, '^' (клавиша Ч) -- пред адрес, ВВОД -- выход
* '/' либо '000000/' — просмотр ячеек памяти, c указанием адреса или без; ПС — след адрес, '^' (клавиша Ч) — пред адрес, ВВОД — выход
* 'G' -- продолжить выполнение программы, '10000G' -- продолжить с заданного адреса
* 'G' — продолжить выполнение программы, '10000G' — продолжить с заданного адреса
* 'D' либо '1D' -- загрузка с диска MD, с указанием номера диска 0..7 либо без
* 'D' либо '1D' — загрузка с диска MD, с указанием номера диска 0..7 либо без
* 'X' либо '1X' -- загрузка с диска DX, с указанием номера диска 0..1 либо без
* 'X' либо '1X' — загрузка с диска DX, с указанием номера диска 0..1 либо без
* 'N' -- загрузка из сети, реально просто переход к процедуре холодного старта
* 'N' — загрузка из сети, реально просто переход к процедуре холодного старта
* УПР+L -- очистка экрана
* УПР+L — очистка экрана


В любой момент выполнение программы можно прервать нажатием УПР+ФСД/СТОП, система переходит в пультовый режим. При этом содержимое всех регистров сохраняется, их можно просмотреть командой 'S'. Команда '/' позволяет просмотреть/изменить отдельные ячейки памяти. А команда 'G' восстанавливает регистры и продолжает выполнение прерванной программы с того же места.
В любой момент выполнение программы можно прервать нажатием УПР+ФСД/СТОП, система переходит в пультовый режим. При этом содержимое всех регистров сохраняется, их можно просмотреть командой 'S'. Команда '/' позволяет просмотреть/изменить отдельные ячейки памяти. А команда 'G' восстанавливает регистры и продолжает выполнение прерванной программы с того же места.
Строка 24: Строка 25:


Процессор реализован на микросхемах серии 588:
Процессор реализован на микросхемах серии 588:
* КР588ВС2 (D1) - арифметическое устройство (АУ), управляется 12-битовыми микрокомандами из КР588ВУ2-0001, -0002, -0004
* КР588ВС2 (D1) — арифметическое устройство (АУ), управляется 12-битовыми микрокомандами из КР588ВУ2-0001, −0002, −0004
* КР588ВУ2 (D2..D6) - управляющая память (УП) - микропрограммы для D1, D17, D18
* КР588ВУ2 (D2..D6) — управляющая память (УП) — микропрограммы для D1, D17, D18
* КР588ВГ1 (D18) - системный контроллер (СК) - обеспечивает внутренний интерфейс процессора и его связь с Q-шиной, управляется микрокодом из КР588ВУ2-0005
* КР588ВГ1 (D18) — системный контроллер (СК) — обеспечивает внутренний интерфейс процессора и его связь с Q-шиной, управляется микрокодом из КР588ВУ2-0005
* К588ВР2 (D17) - арифметический умножитель 16&times;16 (УМ), управляется 5-битовыми микрокомандами из КР588ВУ2-0006 (D4); умножение и деление задействует память по адресам 170000-170005
* К588ВР2 (D17) — арифметический умножитель 16×16 (УМ), управляется 5-битовыми микрокомандами из КР588ВУ2-0006 (D4); умножение и деление задействует память по адресам 170000-170005
* КР588ВА1 (D21, D24) - магистральный приёмо-передатчик (МПП)
* КР588ВА1 (D21, D24) — магистральный приёмо-передатчик (МПП)
* КР588ВГ2 - контроллер запоминающего устройства (КЗУ)
* КР588ВГ2 — контроллер запоминающего устройства (КЗУ)


Начальный пуск: сброс устройств, затем чтение PC и PSW из 160006 и 160010, запуск в режиме HALT.
Начальный пуск: сброс устройств, затем чтение PC и PSW из 160006 и 160010, запуск в режиме HALT.
Строка 39: Строка 40:


; Режимы USER и HALT
; Режимы USER и HALT
Процессор поддерживает работу в двух режимах - USER и HALT.
Процессор поддерживает работу в двух режимах — USER и HALT.


Ситуации перехода в режим HALT:
Ситуации перехода в режим HALT:
Строка 50: Строка 51:
В режиме HALT область ОЗУ 177600-177777 замещается ОЗУ из другой области (предположительно, эти ячейки памяти лежат <под> системным ПЗУ и поэтому не используются обычным образом).
В режиме HALT область ОЗУ 177600-177777 замещается ОЗУ из другой области (предположительно, эти ячейки памяти лежат <под> системным ПЗУ и поэтому не используются обычным образом).


Старший байт регистра 170006 - это регистр фиксации HALT-запросов, отдельные его биты отвечают за различные причины вызова HALT-прерывания. Младший байт регистра 170006 - регистр данных клавиатуры.
Старший байт регистра 170006 — это регистр фиксации HALT-запросов, отдельные его биты отвечают за различные причины вызова HALT-прерывания. Младший байт регистра 170006 — регистр данных клавиатуры.


'''''NOTE:''''' В документации не описан механизм возврата из режима HALT в USER. По коду прошивки ПЗУ видно, что к этому приводит запись байта 0 по адресу 170006; запись 3 в 170006 приводит к переходу из USER в HALT.
'''''NOTE:''''' В документации не описан механизм возврата из режима HALT в USER. По коду прошивки ПЗУ видно, что к этому приводит запись байта 0 по адресу 170006; запись 3 в 170006 приводит к переходу из USER в HALT.
Строка 63: Строка 64:
  СБРОС  Н2    Н4 Клавиатура</pre>
  СБРОС  Н2    Н4 Клавиатура</pre>
Младший байт регистра это байт с клавиатуры (регистр D27); если установлен бит 10, то символ готов для чтения.<br />
Младший байт регистра это байт с клавиатуры (регистр D27); если установлен бит 10, то символ готов для чтения.<br />
Старший байт регистра это регистр фиксации HALT (D28, биты регистра идут в обратном порядке) -- определяет причину появления прерывания HALT.
Старший байт регистра это регистр фиксации HALT (D28, биты регистра идут в обратном порядке) — определяет причину появления прерывания HALT.
* бит 15 -- признак канального сигнала СБРОС;
* бит 15 — признак канального сигнала СБРОС;
* бит 14 -- сигнал Н1 -- ??;
* бит 14 — сигнал Н1 — ??;
* бит 13 -- сигнал Н2 -- обращение к регистру данных клавиатуры;
* бит 13 — сигнал Н2 — обращение к регистру данных клавиатуры;
* бит 12 -- сигнал Н3 -- ??;
* бит 12 — сигнал Н3 — ??;
* бит 11 -- сигнал Н4 от платы адаптера локальной сети;
* бит 11 — сигнал Н4 от платы адаптера локальной сети;
* бит 10 -- сигнал готовности очередного байта с клавиатуры, поступает с триггера D37.2;
* бит 10 — сигнал готовности очередного байта с клавиатуры, поступает с триггера D37.2;
* биты 8,9 заземлены = 0.
* биты 8,9 заземлены = 0.


Строка 75: Строка 76:


;Регистры системной консоли
;Регистры системной консоли
При разработке Немиги предусмотрели совместимость с <Электроника-60> по адресам и работе регистров системной консоли - это регистры 177560/177562 (адрес/данные клавиатуры) и 177564/177566 (адрес/данные терминала). Это просто ячейки ОЗУ, но обращение к ним приводит к вызову прерывания HALT с установкой соответствующих флагов в регистре 177006. Программа обработки прерывания HALT анализирует флаги и эмулирует работу регистров консоли.
При разработке Немиги предусмотрели совместимость с <Электроника-60> по адресам и работе регистров системной консоли — это регистры 177560/177562 (адрес/данные клавиатуры) и 177564/177566 (адрес/данные терминала). Это просто ячейки ОЗУ, но обращение к ним приводит к вызову прерывания HALT с установкой соответствующих флагов в регистре 177006. Программа обработки прерывания HALT анализирует флаги и эмулирует работу регистров консоли.
<pre>
<pre>
   177560  Регистр состояния клавиатуры
   177560  Регистр состояния клавиатуры
Строка 97: Строка 98:
| 1111 || Пропадание питания / ошибка канала || 30 || НЕ используется
| 1111 || Пропадание питания / ошибка канала || 30 || НЕ используется
|-
|-
| 0111 || HLT - Прерывание по входу ОСТАНОВ / ошибка канала || 36 || используется
| 0111 || HLT — Прерывание по входу ОСТАНОВ / ошибка канала || 36 || используется
|-
|-
| 0101 || INR0 - Требование прерывания от ВУ || 31 || НЕ используется
| 0101 || INR0 — Требование прерывания от ВУ || 31 || НЕ используется
|-
|-
| 0100 || INR1 - Требование прерывания от ВУ || 34 || НЕ используется
| 0100 || INR1 — Требование прерывания от ВУ || 34 || НЕ используется
|-
|-
| 0110 || INR2 - Требование прерывания от ВУ || 33 || используется
| 0110 || INR2 — Требование прерывания от ВУ || 33 || используется
|-
|-
| 0010 || INR3 - Требование прерывания от ВУ || 32 || используется
| 0010 || INR3 — Требование прерывания от ВУ || 32 || используется
|-
|-
| 0011 || INRT - Прерывание по внешнему событию || 35 || используется
| 0011 || INRT — Прерывание по внешнему событию || 35 || используется
|-
|-
| 0001 || RQ - Запрос прерывания от ВУ || 28 || используется
| 0001 || RQ — Запрос прерывания от ВУ || 28 || используется
|-
|-
|}
|}


Вектора прерываний:
Вектора прерываний:
* 160002 - сигнал/команда HALT
* 160002 — сигнал/команда HALT
* 160006 - прерывание начального пуска
* 160006 — прерывание начального пуска
* 000004 - ?? ошибка обращения к каналу?
* 000004 — ?? ошибка обращения к каналу?
* 000010 - ?? резерный код команды?
* 000010 — ?? резерный код команды?
* 000014 - ?? прерывание по T-разряду или команда BPT
* 000014 — ?? прерывание по T-разряду или команда BPT
* 000020 - команда IOT
* 000020 — команда IOT
* 000030 - команда EMT
* 000030 — команда EMT
* 000034 - команда TRAP
* 000034 — команда TRAP
* ?? - INR0
* ?? — INR0
* ?? - INR1
* ?? — INR1
* ?? - прерывание INRT/EVNT
* ?? — прерывание INRT/EVNT


== Память ==
== Память ==
* Адреса 000000-137777 - ОЗУ
* Адреса 000000-137777 — ОЗУ
* Адреса 140000-157777 - зарезервированы под дополнительные 8 КБ ПЗУ (D11-D14)
* Адреса 140000-157777 — зарезервированы под дополнительные 8 КБ ПЗУ (D11-D14)
* Адреса 160000-167777 - системное ПЗУ, 4 КБ
* Адреса 160000-167777 — системное ПЗУ, 4 КБ
* Адреса 170000-177777 - ОЗУ и порты
* Адреса 170000-177777 — ОЗУ и порты
** Адреса 177600-177777 - окно памяти, включаемое только в режиме HALT
** Адреса 177600-177777 — окно памяти, включаемое только в режиме HALT


Процессору непосредственно доступно 64 КБ памяти. Помимо этого, существует возможность <косвенного> обращения ко всем 128 КБ ОЗУ, через регистры косвенной адресации 177570 (адрес) и 177572 (данные). Адрес косвенной адресации получается сдвигом на один разряд вниз обычного адреса <прямой> адресации.
Процессору непосредственно доступно 64 КБ памяти. Помимо этого, существует возможность <косвенного> обращения ко всем 128 КБ ОЗУ, через регистры косвенной адресации 177570 (адрес) и 177572 (данные). Адрес косвенной адресации получается сдвигом на один разряд вниз обычного адреса <прямой> адресации.
Строка 229: Строка 230:
|-
|-
|}
|}
&nbsp;* - код загрузки с дисковода формата DX обнаружен в прошивке версии 3.03; для загрузки с него используется команда <X>.
 * — код загрузки с дисковода формата DX обнаружен в прошивке версии 3.03; для загрузки с него используется команда <X>.


== Видео ==
== Видео ==


Видео-контроллер формирует растр размером 512&times;312 точек, в котором <полезной> площадью является блок 512&times;256 точек. Экран хранится в верхней части памяти, доступной по косвенному адресу 140000, занимает 32 КБ. Каждые 8 точек растра занимают 2 соседних байта - каждый байт это отдельный битплан, то есть каждая точка это два бита, лежащие в соседних байтах, что даёт 4 градации яркости на точку.
Видео-контроллер формирует растр размером 512×312 точек, в котором <полезной> площадью является блок 512×256 точек. Экран хранится в верхней части памяти, доступной по косвенному адресу 140000, занимает 32 КБ. Каждые 8 точек растра занимают 2 соседних байта — каждый байт это отдельный битплан, то есть каждая точка это два бита, лежащие в соседних байтах, что даёт 4 градации яркости на точку.


  ┌─ 512 x 312 ────────────────────────┐
  ┌─ 512 x 312 ────────────────────────┐
Строка 252: Строка 253:
  └────────────────────────────────────┘
  └────────────────────────────────────┘


Знакогенератор содержит символы размером 8&times;8 точек, при выводе текста между строками оставляют место высотой в два пиксела. Таким образом экран используется как текстовый в 25 строк.
Знакогенератор содержит символы размером 8×8 точек, при выводе текста между строками оставляют место высотой в два пиксела. Таким образом экран используется как текстовый в 25 строк.


== Клавиатура ==
== Клавиатура ==
Строка 277: Строка 278:
При включении установлены режимы: ЛАТ, ВЕРХ, ЦИФ.
При включении установлены режимы: ЛАТ, ВЕРХ, ЦИФ.


Все клавиши кроме служебных составляют матрицу 8&times;12 контактов, <адрес> каждой клавиши выражается 7-битным значением (3 бита на номер места, 4 бита на номер строки).
Все клавиши кроме служебных составляют матрицу 8×12 контактов, <адрес> каждой клавиши выражается 7-битным значением (3 бита на номер места, 4 бита на номер строки).
ПЗУ блока клавиатуры (D17) объёмом 2048 байт содержит 16 блоков по 128 байт -- каждый блок соответствует одной из 16-ти комбинаций режимов.
ПЗУ блока клавиатуры (D17) объёмом 2048 байт содержит 16 блоков по 128 байт — каждый блок соответствует одной из 16-ти комбинаций режимов.
Код символа, соответствующий нажатой клавише, выбирается по адресу клавиши, из блока, определяемого текущим режимом.
Код символа, соответствующий нажатой клавише, выбирается по адресу клавиши, из блока, определяемого текущим режимом.


Строка 288: Строка 289:
Каждый логический диск занимает только одну сторону физического диска, MD0: и MD1: это первый физический диск, MD2: и MD3: это второй.
Каждый логический диск занимает только одну сторону физического диска, MD0: и MD1: это первый физический диск, MD2: и MD3: это второй.


Ёмкость диска 459 КБ - 2 стороны по 80 дорожек, сектора по 128 байт, 23 сектора (или меньше) на дорожку. Диск вращается со скоростью 300 оборотов в минуту = 5 оборотов в секунду. Скорость обмена данными - 125 килобит в секунду (FM) = 125000 бит в секунду = 15625 байт в секунду = 3125 за оборот.
Ёмкость диска 459 КБ — 2 стороны по 80 дорожек, сектора по 128 байт, 23 сектора (или меньше) на дорожку. Диск вращается со скоростью 300 оборотов в минуту = 5 оборотов в секунду. Скорость обмена данными — 125 килобит в секунду (FM) = 125000 бит в секунду = 15625 байт в секунду = 3125 за оборот.


;Регистры
;Регистры
Строка 321: Строка 322:
                                                 └─ Пуск (W) / состояние (R)
                                                 └─ Пуск (W) / состояние (R)
</pre>
</pre>
Контроллер дисковода управляется на основе операций. Операция выполняется в два шага: (1) подготовка операции установкой в регистре управления битов операции и включения мотора; (2) запуск операции записью "1" в 0-й бит регистра состояния.
Контроллер дисковода управляется на основе операций. Операция выполняется в два шага: (1) подготовка операции установкой в регистре управления битов операции и включения мотора; (2) запуск операции записью «1» в 0-й бит регистра состояния.


; Структура дорожки
; Структура дорожки

Версия от 22:40, 25 мая 2016

Этот документ создан для Emuverse и распространяется на условиях лицензии CC-BY-SA-3.0.

Немига — советский 16-разрядный персональный компьютер, выпускался на белорусских предприятиях с 1989 года. Предназначался для поставки в учебные заведения в составе КУВТ. По системе команд совместим с PDP-11 и его советскими клонами — Электроника-60, ДВК.

Процессор машины реализован на наборе микросхем серии 588 — эти микросхемы выпускались на минском ПО <Интеграл>.

Существовало как минимум три версии Немиги, отличающихся схемотехникой и ПЗУ: 3.03, 4.05, 4.06.

Пульт

При запуске машины начинается загрузка из сети, но если она не удалась, мы попадаем в пультовый режим с приглашением ПУЛЬТ>.

Пультовый режим воспринимает команды; каждая команда это либо символ, либо 8-ричное число и символ.

Полный набор команд пульта для версии 3.03:

  • 'S' — просмотр регистров
  • '/' либо '000000/' — просмотр ячеек памяти, c указанием адреса или без; ПС — след адрес, '^' (клавиша Ч) — пред адрес, ВВОД — выход
  • 'G' — продолжить выполнение программы, '10000G' — продолжить с заданного адреса
  • 'D' либо '1D' — загрузка с диска MD, с указанием номера диска 0..7 либо без
  • 'X' либо '1X' — загрузка с диска DX, с указанием номера диска 0..1 либо без
  • 'N' — загрузка из сети, реально просто переход к процедуре холодного старта
  • УПР+L — очистка экрана

В любой момент выполнение программы можно прервать нажатием УПР+ФСД/СТОП, система переходит в пультовый режим. При этом содержимое всех регистров сохраняется, их можно просмотреть командой 'S'. Команда '/' позволяет просмотреть/изменить отдельные ячейки памяти. А команда 'G' восстанавливает регистры и продолжает выполнение прерванной программы с того же места.

Процессор

Процессор реализован на микросхемах серии 588:

  • КР588ВС2 (D1) — арифметическое устройство (АУ), управляется 12-битовыми микрокомандами из КР588ВУ2-0001, −0002, −0004
  • КР588ВУ2 (D2..D6) — управляющая память (УП) — микропрограммы для D1, D17, D18
  • КР588ВГ1 (D18) — системный контроллер (СК) — обеспечивает внутренний интерфейс процессора и его связь с Q-шиной, управляется микрокодом из КР588ВУ2-0005
  • К588ВР2 (D17) — арифметический умножитель 16×16 (УМ), управляется 5-битовыми микрокомандами из КР588ВУ2-0006 (D4); умножение и деление задействует память по адресам 170000-170005
  • КР588ВА1 (D21, D24) — магистральный приёмо-передатчик (МПП)
  • КР588ВГ2 — контроллер запоминающего устройства (КЗУ)

Начальный пуск: сброс устройств, затем чтение PC и PSW из 160006 и 160010, запуск в режиме HALT.

Система команд

Процессор реализует систему команд компьютера Электроника-60 (ОСТ 11 305.909-82), за исключением команд FIS (операций с плавающей запятой). Есть команды расширенной арифметики (MUL, DIV, ASH, ASHC), реализуются микрокодом в D4 и умножителем D17. Набор команд описан в ТО и в справочниках по БИС сериии КР588.

Режимы USER и HALT

Процессор поддерживает работу в двух режимах — USER и HALT.

Ситуации перехода в режим HALT:

  • появление сигнала СБРОС (INIT)
  • запрос на обслуживание локальной сети
  • обращение к области памяти 177560-177566 (регистры системной консоли)
  • нажатие клавиши на клавиатуре
  • выполнение команды HALT

В режиме HALT область ОЗУ 177600-177777 замещается ОЗУ из другой области (предположительно, эти ячейки памяти лежат <под> системным ПЗУ и поэтому не используются обычным образом).

Старший байт регистра 170006 — это регистр фиксации HALT-запросов, отдельные его биты отвечают за различные причины вызова HALT-прерывания. Младший байт регистра 170006 — регистр данных клавиатуры.

NOTE: В документации не описан механизм возврата из режима HALT в USER. По коду прошивки ПЗУ видно, что к этому приводит запись байта 0 по адресу 170006; запись 3 в 170006 приводит к переходу из USER в HALT.

Регистр 170006
 170006  Регистр фиксации HALT и данных клавиатуры
 ┌──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┐
 │15│14 13 12│11 10  9│ 8  7  6│ 5  4  3│ 2  1  0│
 └─┬┴─┬┴─┬┴─┬┴─┬┴─┬┴─0┴─0┼──┴──┴──┴──┴──┴──┴──┴──┤
   │  Н1 │  Н3 │  │      └── Данные клавиатуры ──┘
 СБРОС   Н2    Н4 Клавиатура

Младший байт регистра это байт с клавиатуры (регистр D27); если установлен бит 10, то символ готов для чтения.
Старший байт регистра это регистр фиксации HALT (D28, биты регистра идут в обратном порядке) — определяет причину появления прерывания HALT.

  • бит 15 — признак канального сигнала СБРОС;
  • бит 14 — сигнал Н1 — ??;
  • бит 13 — сигнал Н2 — обращение к регистру данных клавиатуры;
  • бит 12 — сигнал Н3 — ??;
  • бит 11 — сигнал Н4 от платы адаптера локальной сети;
  • бит 10 — сигнал готовности очередного байта с клавиатуры, поступает с триггера D37.2;
  • биты 8,9 заземлены = 0.

NOTE: В коде прошивки ПЗУ регистр 170006 также используют на запись, записывая в него байтовое значение 3 для перехода в HALT и значение 0 для возврата в USER. По записи в 170006 сбрасывается регистр D27 (видно по схеме).

Регистры системной консоли

При разработке Немиги предусмотрели совместимость с <Электроника-60> по адресам и работе регистров системной консоли — это регистры 177560/177562 (адрес/данные клавиатуры) и 177564/177566 (адрес/данные терминала). Это просто ячейки ОЗУ, но обращение к ним приводит к вызову прерывания HALT с установкой соответствующих флагов в регистре 177006. Программа обработки прерывания HALT анализирует флаги и эмулирует работу регистров консоли.

  177560  Регистр состояния клавиатуры
  177564  Регистр состояния терминала
 ┌──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┐
 │15│14 13 12│11 10  9│ 8  7  6│ 5  4  3│ 2  1  0│
 └──┴──┴──┴──┴──┴──┴──┴──┴─┬┴─┬┴──┴──┴──┴──┴──┴──┘
                           │  └─ Разрешение прерывания: 1 = разрешено
                           └──── Готовность к приёму/передаче: 0 = готов
Прерывания

Прерывания по описанию КР588ВГ1 (D18), в порядке убывания приоритета, использование определено по схеме:

Code Прерывание pin Использование
1010 Режим начального пуска / двойная ошибка канала
1110 Прерывание по T-разряду / ошибка канала
1111 Пропадание питания / ошибка канала 30 НЕ используется
0111 HLT — Прерывание по входу ОСТАНОВ / ошибка канала 36 используется
0101 INR0 — Требование прерывания от ВУ 31 НЕ используется
0100 INR1 — Требование прерывания от ВУ 34 НЕ используется
0110 INR2 — Требование прерывания от ВУ 33 используется
0010 INR3 — Требование прерывания от ВУ 32 используется
0011 INRT — Прерывание по внешнему событию 35 используется
0001 RQ — Запрос прерывания от ВУ 28 используется

Вектора прерываний:

  • 160002 — сигнал/команда HALT
  • 160006 — прерывание начального пуска
  • 000004 — ?? ошибка обращения к каналу?
  • 000010 — ?? резерный код команды?
  • 000014 — ?? прерывание по T-разряду или команда BPT
  • 000020 — команда IOT
  • 000030 — команда EMT
  • 000034 — команда TRAP
  • ?? — INR0
  • ?? — INR1
  • ?? — прерывание INRT/EVNT

Память

  • Адреса 000000-137777 — ОЗУ
  • Адреса 140000-157777 — зарезервированы под дополнительные 8 КБ ПЗУ (D11-D14)
  • Адреса 160000-167777 — системное ПЗУ, 4 КБ
  • Адреса 170000-177777 — ОЗУ и порты
    • Адреса 177600-177777 — окно памяти, включаемое только в режиме HALT

Процессору непосредственно доступно 64 КБ памяти. Помимо этого, существует возможность <косвенного> обращения ко всем 128 КБ ОЗУ, через регистры косвенной адресации 177570 (адрес) и 177572 (данные). Адрес косвенной адресации получается сдвигом на один разряд вниз обычного адреса <прямой> адресации.

  Адрес                     Косв. адрес
 000000 ┌────────────────────┐ 000000
        │                    │
        │                    │
        │                    │
        │                    │
        │                    │
        │       О З У        │
        │                    │
        │                    │
        │                    │
        │                    │
        │                    │
        │                    │
 140000 ├────────────────────┤ 060000
        │ Дополнит. ПЗУ 8К   │
        │                    │
 160000 ├────────────────────┤ 070000
        │ Системное ПЗУ 4К   │
 170000 ├────────────────────┤
        │ ОЗУ и порты        │
 200000 ╞════════════════════╡ 100000
        │                    │
        │                    │
        │                    │
        │                    │
        │                    │
        │                    │
        │                    │
        │                    │
        │                    │
        ├────────────────────┤ 140000
        │                    │
        │                    │
        │                    │
        │     Э К Р А Н      │
        │                    │
        │        32К         │
        │                    │
        │                    │
        │                    │
        └────────────────────┘ 200000

Регистры (порты)

170006 Регистр данных клавиатуры (байт 170006),
регистр фиксации HALT-запросов (байт 170007)
170010 Адаптер
локальной сети
состояние
170012 данные
170020 Таймер и звук состояние программируемого таймера
170022 первый счётчик
170024 второй счётчик
170026
170030 управляющее слово выбора громкости и октавы
170032
177100 Контроллер
дисковода MD
состояние
177102 данные
177104 управление
177106 таймер
177170* Контроллер
дисковода DX*
состояние
177172* данные
177514 Устройство
сопряжения
состояние параллельного порта
177516 данные параллельного порта
177560 Регистры
системной консоли
состояние клавиатуры
177562 данные клавиатуры
177564 состояние терминала
177566 данные терминала
177570 Косвенный доступ
к памяти
данные
177572 адрес

 * — код загрузки с дисковода формата DX обнаружен в прошивке версии 3.03; для загрузки с него используется команда <X>.

Видео

Видео-контроллер формирует растр размером 512×312 точек, в котором <полезной> площадью является блок 512×256 точек. Экран хранится в верхней части памяти, доступной по косвенному адресу 140000, занимает 32 КБ. Каждые 8 точек растра занимают 2 соседних байта — каждый байт это отдельный битплан, то есть каждая точка это два бита, лежащие в соседних байтах, что даёт 4 градации яркости на точку.

┌─ 512 x 312 ────────────────────────┐
│                                    │
│                                    │
┌────────────────────────────────────┐
│ 512 x 256                          │
│                                    │
│                                    │
│                                    │
│                                    │
│                                    │
│                                    │
│                                    │
└────────────────────────────────────┘
│                                    │
│                                    │
└────────────────────────────────────┘

Знакогенератор содержит символы размером 8×8 точек, при выводе текста между строками оставляют место высотой в два пиксела. Таким образом экран используется как текстовый в 25 строк.

Клавиатура

Раскладка клавиатуры:

                        ( )         ( )     ( )     ( )
                        РУС         ВЕРХ    ЛАТ     ЦИФ
 ┌───┬───┐ ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐       ┌───┬───┬───┐
 │Ф1 │Ф2 │ │Клю│ ; │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ ~ │ � │       │ЦИФ│СТП│ ─ │
 ├───┼───┤ └─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┐     ├───┼───┼───┤
 │Ф3 │Ф4 │   │   │ Й │ Ц │ У │ К │ Е │ Н │ Г │ Ш │ Щ │ З │ Х │ : │ Ъ │ ПС│     │ 7 │ 8 │ 9 │
 ├───┼───┤   └─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┐   ├───┼───┼───┤
 │Ф5 │Ф6 │     │УПР│ Ф │ Ы │ В │ А │ П │ Р │ О │ Л │ Д │ Ж │ Э │ . │ Ё │ВВО│   │ 4 │ 5 │ 6 │
 ├───┼───┤     └─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┐ ├───┼───┼───┤
 │Ф7 │Ф8 │       │   │ Я │ Ч │ С │ М │ И │ Т │ Ь │ Б │ Ю │ , │ / │ _ │   │ФПБ│ │ 1 │ 2 │ 3 │
 ├───┼───┤   ┌───┼───┼───┼───┴───┴───┴───┴───┴───┴───┴───┼───┼───┼───┼───┼───┘ ├───┼───┼───┤
 │Ф9 │Ф10│   │РУС│Р/Л│АЛТ│                               │Р/Л│ЛАТ│ ЗБ│ДОП│     │ 0 │ . │ + │
 └───┴───┘   └───┴───┴───┴───────────────────────────────┴───┴───┴───┴───┘     └───┴───┴───┘

Клавиатура формирует 8-разрядный код клавиши (КОИ-8Р) и передаёт его в процессорный блок по последовательному каналу. Байт данных формируется в регистре D28 и затем передаётся в регистр D27.

Текущие режимы хранятся в блоке клавиатуры и не могут быть установлены извне. При включении установлены режимы: ЛАТ, ВЕРХ, ЦИФ.

Все клавиши кроме служебных составляют матрицу 8×12 контактов, <адрес> каждой клавиши выражается 7-битным значением (3 бита на номер места, 4 бита на номер строки). ПЗУ блока клавиатуры (D17) объёмом 2048 байт содержит 16 блоков по 128 байт — каждый блок соответствует одной из 16-ти комбинаций режимов. Код символа, соответствующий нажатой клавише, выбирается по адресу клавиши, из блока, определяемого текущим режимом.

Автоповтор срабатывает через 1 секунду, с частотой 15 Гц.

Дисковод

Дисковод формата MD, с кодированием FM (в ТО называется модель TEAC FD-55FV-003). Похож на MX, но использует побайтовую передачу данных. Каждый логический диск занимает только одну сторону физического диска, MD0: и MD1: это первый физический диск, MD2: и MD3: это второй.

Ёмкость диска 459 КБ — 2 стороны по 80 дорожек, сектора по 128 байт, 23 сектора (или меньше) на дорожку. Диск вращается со скоростью 300 оборотов в минуту = 5 оборотов в секунду. Скорость обмена данными — 125 килобит в секунду (FM) = 125000 бит в секунду = 15625 байт в секунду = 3125 за оборот.

Регистры
  177100  Регистр состояния КНГМД (R/W)
 ┌──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┐
 │15│14 13 12│11 10  9│ 8  7  6│ 5  4  3│ 2  1  0│
 └──┴──┴──┴──┴──┴──┴──┴──┴─┬┴─┬┴─┬┴──┴─┬┴─┬┴──┴─┬┘
                       TR ─┘  │  │     │ INDEX  └─ RELOAD (R) / RUN/STEP (W)
                   LOST-DATA ─┘  │     └──── TR00/WRPRT
                               OP-FAILED   

  177102  Регистр данных КНГМД (R/W)
 ┌──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┐
 │15│14 13 12│11 10  9│ 8  7  6│ 5  4  3│ 2  1  0│
 └──┴──┴──┴──┴──┴──┴──┴──┼──┴──┴──┴──┴──┴──┴──┴──┤
                         └──────── Данные ───────┘

                                      
  177104  Регистр управления КНГМД (W)                 Операция  5  4
 ┌──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┐             ┴──┴──┴ 
 │15│14 13 12│11 10  9│ 8  7  6│ 5  4  3│ 2  1  0│               0  0  ЧТЕНИЕ дорожки
 └──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴─┬┴─┬┴─┬┴─┬┴─┬┴─┬┘               1  0  ЗАПИСЬ дорожки
                       Операция ─┴──┘  │  │  └──┴─ Привод        0  1  ШАГ НАЗАД  от центра диска
                                    Мотор └─ Поверхность         1  1  ШАГ ВПЕРЕД  к центру диска


  177106  Регистр таймера КНГМД (R/W)
 ┌──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┐
 │15│14 13 12│11 10  9│ 8  7  6│ 5  4  3│ 2  1  0│
 └──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴─┬┘
                                                └─ Пуск (W) / состояние (R)

Контроллер дисковода управляется на основе операций. Операция выполняется в два шага: (1) подготовка операции установкой в регистре управления битов операции и включения мотора; (2) запуск операции записью «1» в 0-й бит регистра состояния.

Структура дорожки
Track Header		10b
  0343 Marker		1b
  Track number		1b
  023 Sectors on Track	1b
  0 ??			1b
  First Sector		2b
  0xff			1b
  0			1b
  Checksum		2b
Sector			130b
  Data			128b
  Checksum		2b
...

Таймер и звук

TODO

  170020  Регистр состояния программируемого таймера
 ┌──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┐
 │15│14 13 12│11 10  9│ 8  7  6│ 5  4  3│ 2  1  0│
 └──┴──┴──┴──┴──┴──┴─┬┴─┬┴─┬┴─┬┴─┬┴─┬┴─┬┴─┬┴─┬┴─┬┘
  Фикс прерывания 2 ─┘  │  │  │  │  │  │  │  │  └─ ??
     Фикс прерывания 1 ─┘  │  │  │  │  │  │  └ Режим работы 1-го счётчика
          Блокировка ЗПР2 ─┘  │  │  │  └──┴─ Режим пуска 1-го счётчика
             Блокировка ЗПР1 ─┘  │  │  0  1  блокировка счётчика
                                 │  │  1  0  запуск по CO1
                                 │  │  1  1  запуск по C1
                                 └──┴─ Режим пуска 2-го счётчика
                                 0  1  блокировка счётчика
                                 1  0  запуск по CO2
                                 1  1  запуск по C2

Порт принтера

ИРПР построен на микросхеме КР1801ВП1-033.

При включенном бите разрешения прерывания используется вектор прерывания 0200.

  177514  Регистр состояния устройства сопряжения
 ┌──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┐
 │15│14 13 12│11 10  9│ 8  7  6│ 5  4  3│ 2  1  0│
 └─┬┴──┼──┴──┴──┴──┴──┴──┼─┬┴─┬┴─┬┴──┴──┴──┴──┴──┘
   │   └─ Нач.уст-ка (W)─┘ │  │  └─ Завершено (R)
   └─ Ошибка (R)           │  └─ Разрешение прерывания (R/W)
  Требование передачи (R) ─┘

  177516  Регистр данных устройства сопряжения  
 ┌──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┐
 │15│14 13 12│11 10  9│ 8  7  6│ 5  4  3│ 2  1  0│
 └──┴──┴──┴──┴──┴──┴──┴──┼──┴──┴──┴──┴──┴──┴──┴──┤
                         └────── Данные (W) ─────┘

TODO

Ссылки