Немига: различия между версиями
Nzeemin (обсуждение | вклад) (→Пульт) |
Xolod (обсуждение | вклад) Нет описания правки |
||
(не показано 89 промежуточных версий 2 участников) | |||
Строка 1: | Строка 1: | ||
{{Emuverse}} | {{Emuverse}} | ||
[[Файл:800px-NEMIGA class.jpg|thumb]] | |||
[[Файл:Nemiga PK588 loading.jpg|thumb]] | |||
'''Немига''' — советский 16-разрядный персональный компьютер, выпускался на белорусских предприятиях с 1989 года. Предназначался для поставки в учебные заведения в составе КУВТ. По системе команд совместим с PDP-11 и его советскими клонами — [[Электроника-60]], [[ДВК]]. | '''Немига''' — советский 16-разрядный персональный компьютер, выпускался на белорусских предприятиях с 1989 года. Предназначался для поставки в учебные заведения в составе КУВТ. По системе команд совместим с PDP-11 и его советскими клонами — [[Электроника-60]], [[ДВК]]. | ||
Процессор машины реализован на наборе микросхем серии | Процессор машины реализован на [[Микропроцессорный комплект 588|наборе микросхем серии 588]] — эти микросхемы выпускались на минском ПО «Интеграл». | ||
Существовало как минимум три версии Немиги, отличающихся схемотехникой и ПЗУ: 3.03, 4.05, 4.06. | Существовало как минимум три версии Немиги, отличающихся схемотехникой и ПЗУ: 3.03, 4.05, 4.06. | ||
Строка 20: | Строка 22: | ||
* <code>УПР+L</code> — очистка экрана | * <code>УПР+L</code> — очистка экрана | ||
В любой момент выполнение программы можно прервать нажатием УПР+ФСД/СТОП, система переходит в пультовый режим. При этом содержимое всех регистров сохраняется, их можно просмотреть командой | В любой момент выполнение программы можно прервать нажатием УПР+ФСД/СТОП, система переходит в пультовый режим. При этом содержимое всех регистров сохраняется, их можно просмотреть командой <code>S</code>. Команда <code>/</code> позволяет просмотреть/изменить отдельные ячейки памяти. А команда <code>G</code> восстанавливает регистры и продолжает выполнение прерванной программы с того же места. | ||
== Процессор == | == Процессор == | ||
Процессор реализован на микросхемах серии 588: | Процессор реализован на [[Микропроцессорный комплект 588|микросхемах серии 588]]: | ||
* КР588ВС2 (D1) — | * [[588ВС2|КР588ВС2]] (D1) — арифметико-логическое устройство (АЛУ), управляется 12-разрядными микрокомандами из КР588ВУ2-0001, −0002, −0004 | ||
* КР588ВУ2 (D2..D6) — управляющая память (УП) — микропрограммы для D1, D17, D18 | * [[588ВУ2|КР588ВУ2]]-0001, −0002, −0006, −0004, −0007 (D2..D6) — управляющая память (УП) — микропрограммы для D1, D17, D18 | ||
* КР588ВГ1 (D18) — системный контроллер (СК) — обеспечивает внутренний интерфейс процессора и его связь с Q-шиной, управляется микрокодом из КР588ВУ2- | * [[588ВГ1|КР588ВГ1]] (D18) — системный контроллер (СК) — обеспечивает внутренний интерфейс процессора и его связь с Q-шиной (МПИ, OCT 11305.903-80), управляется микрокодом из КР588ВУ2-0007 | ||
* К588ВР2 (D17) — арифметический умножитель 16×16 (УМ), управляется 5- | * [[588ВР2|К588ВР2]] (D17) — арифметический умножитель 16×16 (УМ), управляется 5-разрядными микрокомандами из КР588ВУ2-0006 (D4); умножение и деление задействует память по адресам 170000-170005 | ||
* КР588ВА1 (D21, D24) — магистральный приёмо-передатчик (МПП) | * [[588ВА1|КР588ВА1]] (D21, D24) — 8-разрядный магистральный приёмо-передатчик (МПП) | ||
* | * [[588ВГ2|КР588ВГ2]] (D15, D16) — контроллер запоминающего устройства (КЗУ) | ||
Начальный пуск: сброс устройств, затем чтение PC и PSW из 160006 и 160010, запуск в режиме HALT. | Начальный пуск: сброс устройств, затем чтение PC и PSW из 160006 и 160010, запуск в режиме HALT. | ||
Строка 38: | Строка 40: | ||
Процессор реализует систему команд компьютера Электроника-60 (ОСТ 11 305.909-82), за исключением команд FIS (операций с плавающей запятой). Есть команды расширенной арифметики (MUL, DIV, ASH, ASHC), реализуются микрокодом в D4 и умножителем D17. | Процессор реализует систему команд компьютера Электроника-60 (ОСТ 11 305.909-82), за исключением команд FIS (операций с плавающей запятой). Есть команды расширенной арифметики (MUL, DIV, ASH, ASHC), реализуются микрокодом в D4 и умножителем D17. | ||
Набор команд описан в ТО и в справочниках по БИС сериии КР588. | Набор команд описан в ТО и в справочниках по БИС сериии КР588. | ||
: '''''См. также: [[Немига/EIS]]''''' | |||
; Режимы USER и HALT | ; Режимы USER и HALT | ||
Процессор поддерживает работу в двух режимах — USER и HALT. | Процессор поддерживает работу в двух режимах — USER и HALT. | ||
Ситуации перехода в режим HALT: | Ситуации перехода в режим HALT (согласно ТО): | ||
* появление сигнала СБРОС (INIT) | * появление сигнала СБРОС (INIT) | ||
* запрос на обслуживание локальной сети | * запрос на обслуживание локальной сети | ||
Строка 49: | Строка 53: | ||
* выполнение команды HALT | * выполнение команды HALT | ||
В режиме HALT область ОЗУ 177600-177777 замещается ОЗУ из другой области (предположительно, эти ячейки памяти лежат | В режиме HALT область ОЗУ 177600-177777 замещается ОЗУ из другой области (предположительно, эти ячейки памяти лежат «под» системным ПЗУ и поэтому не используются обычным образом). | ||
'''''NOTE:''''' В документации не описан механизм возврата из режима HALT в USER. По коду прошивки ПЗУ видно, что к этому приводит запись байта 0 по адресу 170006; запись 3 в 170006 приводит к переходу из USER в HALT. | '''''NOTE:''''' В документации не описан механизм возврата из режима HALT в USER. По коду прошивки ПЗУ видно, что к этому приводит запись байта 0 по адресу 170006; запись 3 в 170006 приводит к переходу из USER в HALT. | ||
; Прерывания | ; Прерывания | ||
Строка 108: | Строка 78: | ||
| 0010 || INR3 — Требование прерывания от ВУ || 32 || используется | | 0010 || INR3 — Требование прерывания от ВУ || 32 || используется | ||
|- | |- | ||
| 0011 || | | 0011 || EVNT — Прерывание по внешнему событию || 35 || используется | ||
|- | |- | ||
| 0001 || RQ — Запрос прерывания от ВУ || 28 || используется | | 0001 || RQ — Запрос прерывания от ВУ || 28 || используется | ||
Строка 115: | Строка 85: | ||
Вектора прерываний: | Вектора прерываний: | ||
* 160002 — сигнал/команда HALT | * 160002 — сигнал/команда HALT в режиме HALT | ||
* 160006 — прерывание начального пуска | * 160006 — прерывание начального пуска | ||
* 000004 — | * 160012 — ошибка при приёме вектора прерывания | ||
* 000010 — | * 000004 — нечётный адрес при обращении по слову; ошибка обращения к каналу; HALT в режиме USER; неверная адресация JMP/JSR | ||
* 000014 — | * 000010 — резерный код команды | ||
* 000014 — прерывание по T-разряду или команда BPT | |||
* 000020 — команда IOT | * 000020 — команда IOT | ||
* 000024 — питание | |||
* 000030 — команда EMT | * 000030 — команда EMT | ||
* 000034 — команда TRAP | * 000034 — команда TRAP | ||
* ?? — | * 000060 — терминал клавиатура (вызывается из кода ПЗУ) | ||
* ? | * 000064 — терминал дисплей (вызывается из кода ПЗУ) | ||
* | * 000100 — прерывание EVNT | ||
* 000104 — адрес обработчика сигнала Н4 от сетевой карты (вызывается из кода ПЗУ) | |||
* 000110 — мелодия закончилась кодом 040 (вызывается из кода ПЗУ) | |||
== Регистры (порты) == | |||
{| class=standard | |||
! Регистр !! Назначение !! Примечание !! Значение в пульте 4.06 | |||
|- | |||
| 170000 ||rowspan=3| Память ||rowspan=3| Используются микросхемой,<br />выполняющей операции умножения/делениия || 000000 | |||
|- | |||
| 170002 || 000000 | |||
|- | |||
| 170004 || 047764 | |||
|- | |||
| 170006 || || Регистр данных клавиатуры (байт 170006),<br /> регистр фиксации HALT-запросов (байт 170007, D27) || 001412 | |||
|- | |||
| 170010 ||rowspan=2| Адаптер<br />локальной сети || состояние || 074010 | |||
|- | |||
| 170012 || данные || 000000 | |||
|- | |||
| 170014 || ??? || || 000000 | |||
|- | |||
| 170020 ||rowspan=6| Таймер и звук || состояние программируемого таймера || 001261 | |||
|- | |||
| 170022 || первый счётчик || 000000 | |||
|- | |||
| 170024 || второй счётчик || 000000 | |||
|- | |||
| 170026 || включение звука || 000000 | |||
|- | |||
| 170030 || управляющее слово выбора громкости и октавы || 000000 | |||
|- | |||
| 170032 || отключение звука || 000000 | |||
|- | |||
| 177100 ||rowspan=4| Контроллер<br />дисковода MD || состояние || 000271 | |||
|- | |||
| 177102 || данные || 000377 | |||
|- | |||
| 177104 || управление || 000127 | |||
|- | |||
| 177106 || таймер || 000106 | |||
|- | |||
| 177170* ||rowspan=2| Контроллер<br />дисковода DX* || состояние | |||
|- | |||
| 177172* || данные | |||
|- | |||
| 177514 ||rowspan=2| Устройство<br />сопряжения || состояние параллельного порта | |||
|- | |||
| 177516 || данные параллельного порта | |||
|- | |||
| 177560 ||rowspan=4| Регистры<br />системной консоли || состояние клавиатуры || 000000 | |||
|- | |||
| 177562 || данные клавиатуры || 000012 | |||
|- | |||
| 177564 || состояние терминала || 000200 | |||
|- | |||
| 177566 || данные терминала || 000000 | |||
|- | |||
| 177570 ||rowspan=2| Косвенный доступ<br />к памяти || данные || 000000 | |||
|- | |||
| 177572 || адрес || 000000 | |||
|- | |||
| 177574** || || Регистр управления || 000000 | |||
|- | |||
|} | |||
<nowiki>*</nowiki> — код загрузки с дисковода формата DX обнаружен в прошивке версии 3.03; для загрузки с него используется команда «X».<br /> | |||
<nowiki>**</nowiki> — аппаратная версия 4.x | |||
Результат прогона программы IOSCAN на реальной машине с прошивкой 4.06 [http://zx-pk.ru/threads/20590-emulyator-nemiga.html?p=891570&viewfull=1#post891570] (здесь детектируется регистр 170014, которого нет в документации): | |||
<pre>160000-170014 | |||
170020-170032 | |||
177100-177106 | |||
177514-177516 | |||
177560-177574 | |||
177600-177776</pre> | |||
;Регистр 170006 | |||
Старший байт регистра 170006 — это регистр фиксации HALT-запросов, отдельные его биты отвечают за различные причины вызова HALT-прерывания. Младший байт регистра 170006 — регистр данных клавиатуры. | |||
<pre> | |||
170006 (R) Регистр фиксации HALT и данных клавиатуры | |||
┌──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┐ | |||
│15│14 13 12│11 10 9│ 8 7 6│ 5 4 3│ 2 1 0│ | |||
└─┬┴─┬┴─┬┴─┬┴─┬┴─┬┴─1┴─1┼──┴──┴──┴──┴──┴──┴──┴──┤ | |||
СБРОС│ │ │ │ │ └── Данные клавиатуры ──┘ | |||
Н1 Н2 Н3 Н4 Клавиатура | |||
</pre> | |||
Младший байт регистра это байт с клавиатуры (регистр D27); если установлен бит 10, то символ готов для чтения.<br /> | |||
Старший байт регистра это регистр фиксации HALT (D28, биты регистра идут в обратном порядке) — определяет причину появления прерывания HALT. | |||
* бит 15 — признак канального сигнала СБРОС; | |||
* бит 14 — сигнал Н1 — обращение к регистру данных терминала 177566; | |||
* бит 13 — сигнал Н2 — обращение к регистру данных клавиатуры 177562; | |||
* бит 12 — сигнал Н3 — кадровый синхроимпульс, 50 Гц | |||
* бит 11 — сигнал Н4 от платы адаптера локальной сети; | |||
* бит 10 — сигнал готовности очередного байта с клавиатуры, поступает с триггера D37.2; | |||
* биты 8,9 заземлены = 1. | |||
'''''NOTE:''''' В коде прошивки ПЗУ регистр 170006 также используют на запись, записывая в него байтовое значение 3 для маскирования системных прерываний. | |||
По записи в 170006 сбрасывается регистр D27 (видно по схеме). | |||
;Регистры системной консоли | |||
При разработке Немиги предусмотрели совместимость с «Электроника-60» по адресам и работе регистров системной консоли — это регистры 177560/177562 (состояние/данные клавиатуры) и 177564/177566 (состояние/данные терминала). Это просто ячейки ОЗУ, но обращение к ним приводит к вызову прерывания HALT с установкой соответствующих флагов в регистре 177006 (чтение регистра данных клавиатуры 177562, запись в регистр данных терминала 177566). Программа обработки прерывания HALT анализирует флаги и эмулирует работу регистров консоли, а также выполняет прерывания по векторам 60 и 64, если стоят соответствующие флаги в регистрах состояния. | |||
<pre> | |||
177560 Регистр состояния клавиатуры | |||
177564 Регистр состояния терминала | |||
┌──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┐ | |||
│15│14 13 12│11 10 9│ 8 7 6│ 5 4 3│ 2 1 0│ | |||
└──┴──┴──┴──┴──┴──┴──┴──┴─┬┴─┬┴──┴──┴──┴──┴──┴──┘ | |||
│ └─ Разрешение прерывания: 1 = разрешено | |||
└──── Готовность к приёму/передаче: 0 = готов | |||
</pre> | |||
; Регистр управления 177574 (только 4.xx) | |||
* бит 0 — специальная адресация памяти: экран проецируется на нижнюю память. | |||
== Память == | == Память == | ||
* Адреса 000000-137777 — ОЗУ | * Адреса 000000-137777 — ОЗУ | ||
* Адреса 140000-157777 — зарезервированы под дополнительные 8 КБ ПЗУ (D11-D14) | * Адреса 140000-157777 — зарезервированы под дополнительные 8 КБ ПЗУ (D11-D14) | ||
* Адреса 160000-167777 — системное ПЗУ, 4 КБ | * Адреса 160000-167777 — системное ПЗУ, 4 КБ (D9-D10) | ||
* Адреса 170000-177777 — ОЗУ и порты | * Адреса 170000-177777 — ОЗУ и порты | ||
** Адреса 177600-177777 — окно памяти, включаемое только в режиме HALT | ** Адреса 177600-177777 — окно памяти, включаемое только в режиме HALT | ||
Процессору непосредственно доступно 64 КБ памяти. Помимо этого, существует возможность | Процессору непосредственно доступно 64 КБ памяти. Помимо этого, существует возможность «косвенного» обращения ко всем 128 КБ ОЗУ, через регистры косвенной адресации 177570 (адрес) и 177572 (данные). Адрес косвенной адресации получается сдвигом на один разряд вниз обычного адреса «прямой» адресации. | ||
<pre> | <pre> | ||
Адрес Косв. адрес | Адрес Косв. адрес | ||
Строка 179: | Строка 263: | ||
└────────────────────┘ 200000 | └────────────────────┘ 200000 | ||
</pre> | </pre> | ||
В аппаратной версии 4.x появилась возможность включить проецирование 32К экрана на нижние 32К обычной памяти (этим управляет новый регистр 177574, бит 0) — сделано это, очевидно, для ускорения вывода на экран. | |||
== | == Видео == | ||
[[Файл:NemigaTO-pic9.png|thumb]] | |||
Видео-контроллер формирует растр размером 512×312 точек, в котором «полезной» площадью является блок 512×256 точек. Экран хранится в верхней части памяти, доступной по косвенному адресу 140000, занимает 32 КБ. Каждые 8 точек растра занимают 2 соседних байта — каждый байт это отдельный битплан, то есть каждая точка это два бита, лежащие в соседних байтах, что даёт 4 градации яркости на точку. | |||
Знакогенератор содержит символы размером 8×8 точек, при выводе текста между строками оставляют место высотой в два пиксела. Таким образом экран используется как текстовый в 25 строк. | |||
Прошивка 3.03 использует не всю ширину экрана, а только 416 точек — слева и справа остаются пустые полосы по 48 точек. | |||
Прошивки 4.05 и 4.06 используют уже всю ширину в 512 точек. | |||
┌─ 512 | 3.03 4.05 и 4.06 | ||
│ │ | ┌─ 512 × 312 ────────────────────────┐ ┌─ 512 × 312 ────────────────────────┐ | ||
│ │ | │ │ │ │ | ||
│ │ │ │ | |||
│ | ┌─┌─ 416 × 256 ────────────────────┐─┐ ┌─ 512 × 256 ────────────────────────┐ | ||
│ | │ | | │ │ │ | ||
│ │ | │ | 50 символов в строке | │ │ 64 символа в строке │ | ||
│ │ | │ | | │ │ │ | ||
│ │ | │ | | │ │ │ | ||
│ │ | │ | | │ │ │ | ||
│ │ | │ | | │ │ │ | ||
│ │ | │ | | │ │ │ | ||
└────────────────────────────────────┘ | │ | | │ │ │ | ||
│ │ | └─└────────────────────────────────┘─┘ └────────────────────────────────────┘ | ||
│ │ | │ │ │ │ | ||
└────────────────────────────────────┘ | │ │ │ │ | ||
└────────────────────────────────────┘ └────────────────────────────────────┘ | |||
[[Файл:Nemiga 303 pult.png|341px]] [[Файл:Nemiga 406 pult.png|341px]] | |||
== Клавиатура == | == Клавиатура == | ||
[[Файл:Nemiga-keyboard.jpg|thumb]] | |||
Раскладка клавиатуры: | Раскладка клавиатуры: | ||
<pre> | <pre> | ||
( ) ( ) ( ) ( ) | |||
РУС ВЕРХ ЛАТ ЦИФ | |||
┌───┬───┐ ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐ ┌───┬───┬───┐ | ┌───┬───┐ ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐ ┌───┬───┬───┐ | ||
│Ф1 │Ф2 │ │Клю│ ; │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ ~ │ | │Ф1 │Ф2 │ │Клю│ ; │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ ~ │<─ │ │ЦИФ│СТП│ ─ │ | ||
├───┼───┤ └─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┐ ├───┼───┼───┤ | ├───┼───┤ └─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┐ ├───┼───┼───┤ | ||
│Ф3 │Ф4 │ │ │ Й │ Ц │ У │ К │ Е │ Н │ Г │ Ш │ Щ │ З │ Х │ : │ Ъ │ ПС│ │ 7 │ 8 │ 9 │ | │Ф3 │Ф4 │ │ │ Й │ Ц │ У │ К │ Е │ Н │ Г │ Ш │ Щ │ З │ Х │ : │ Ъ │ ПС│ │ 7 │ 8 │ 9 │ | ||
Строка 267: | Строка 307: | ||
│Ф5 │Ф6 │ │УПР│ Ф │ Ы │ В │ А │ П │ Р │ О │ Л │ Д │ Ж │ Э │ . │ Ё │ВВО│ │ 4 │ 5 │ 6 │ | │Ф5 │Ф6 │ │УПР│ Ф │ Ы │ В │ А │ П │ Р │ О │ Л │ Д │ Ж │ Э │ . │ Ё │ВВО│ │ 4 │ 5 │ 6 │ | ||
├───┼───┤ └─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┐ ├───┼───┼───┤ | ├───┼───┤ └─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┐ ├───┼───┼───┤ | ||
│Ф7 │Ф8 │ │ | │Ф7 │Ф8 │ │ ↑ │ Я │ Ч │ С │ М │ И │ Т │ Ь │ Б │ Ю │ , │ / │ _ │ ↑ │ФПБ│ │ 1 │ 2 │ 3 │ | ||
├───┼───┤ ┌───┼───┼───┼───┴───┴───┴───┴───┴───┴───┴───┼───┼───┼───┼───┼───┘ ├───┼───┼───┤ | ├───┼───┤ ┌───┼───┼───┼───┴───┴───┴───┴───┴───┴───┴───┼───┼───┼───┼───┼───┘ ├───┼───┼───┤ | ||
│Ф9 │Ф10│ │РУС│Р/Л│АЛТ│ │Р/Л│ЛАТ│ ЗБ│ДОП│ │ 0 │ . │ + │ | │Ф9 │Ф10│ │РУС│Р/Л│АЛТ│ │Р/Л│ЛАТ│ ЗБ│ДОП│ │ 0 │ . │ + │ | ||
Строка 278: | Строка 318: | ||
При включении установлены режимы: ЛАТ, ВЕРХ, ЦИФ. | При включении установлены режимы: ЛАТ, ВЕРХ, ЦИФ. | ||
Все клавиши кроме служебных составляют матрицу 8×12 контактов, | Все клавиши кроме служебных составляют матрицу 8×12 контактов, «адрес» каждой клавиши выражается 7-битным значением (3 бита на номер места, 4 бита на номер строки). | ||
ПЗУ блока клавиатуры (D17) объёмом 2048 байт содержит 16 блоков по 128 байт — каждый блок соответствует одной из 16-ти комбинаций режимов. | ПЗУ блока клавиатуры (D17) объёмом 2048 байт содержит 16 блоков по 128 байт — каждый блок соответствует одной из 16-ти комбинаций режимов. | ||
Код символа, соответствующий нажатой клавише, выбирается по адресу клавиши, из блока, определяемого текущим режимом. | Код символа, соответствующий нажатой клавише, выбирается по адресу клавиши, из блока, определяемого текущим режимом. | ||
Строка 284: | Строка 324: | ||
Автоповтор срабатывает через 1 секунду, с частотой 15 Гц. | Автоповтор срабатывает через 1 секунду, с частотой 15 Гц. | ||
== Дисковод == | == Дисковод MD/MX == | ||
ПЗУ версии 3.03 может загружать диски MD и DX; ПЗУ 4.05 и 4.06 — только диски MD. | |||
<pre> | <pre> | ||
177100 Регистр состояния КНГМД (R/W) | 177100 Регистр состояния КНГМД (R/W) | ||
Строка 323: | Строка 358: | ||
</pre> | </pre> | ||
Контроллер дисковода управляется на основе операций. Операция выполняется в два шага: (1) подготовка операции установкой в регистре управления битов операции и включения мотора; (2) запуск операции записью «1» в 0-й бит регистра состояния. | Контроллер дисковода управляется на основе операций. Операция выполняется в два шага: (1) подготовка операции установкой в регистре управления битов операции и включения мотора; (2) запуск операции записью «1» в 0-й бит регистра состояния. | ||
=== Формат MD === | |||
Дисковод формата MD, с кодированием FM (в ТО называется модель TEAC FD-55FV-003). Похож на MX, но использует побайтовую передачу данных. | |||
Каждый логический диск занимает только одну сторону физического диска, MD0: и MD1: это первый физический диск, MD2: и MD3: это второй. | |||
Ёмкость диска 459 КБ — 2 стороны по 80 дорожек, сектора по 128 байт, 23 сектора (или меньше) на дорожку. Диск вращается со скоростью 300 оборотов в минуту = 5 оборотов в секунду. Скорость обмена данными — 125 килобит в секунду (FM) = 125000 бит в секунду = 15625 байт в секунду = 3125 за оборот. Длительность одного цикла обмена: 1с / 5об / 3125 = 64 мкс. | |||
; Структура дорожки | ; Структура дорожки | ||
<pre> | <pre> | ||
──── Заголовок дорожки (10 байт) ───────────── | |||
1 343 — маркер | |||
1 xxx — номер дорожки | |||
1 023 — секторов на дорожку | |||
1 000 * | |||
2 xxx — первый сектор | |||
1 377 * | |||
1 377 * | |||
2 xxx — контрольная сумма | |||
──── Начало сектора 1..23 (130 байт на сектор) ─┐ | |||
128 xxx — данные сектора │ | |||
2 xxxx — контрольная сумма │ | |||
──── Конец сектора ─────────────────────────────┘ | |||
... | ... | ||
</pre> | </pre> | ||
Прошивка 4.06 имеет поддержку «защиты» дискет. Три байта в заголовке дорожки (помечены «*») используются для перекодирования секторов при чтении — это встроено в цикл расчёта контрольной суммы сектора. При значениях этих байт 0/0xff/0xff — перекодирования не происходит. | |||
Первый сектор нулевой дорожки содержит информацию о количестве секторов на каждой дорожке, начиная с нулевого байта каждый байт описывает одну дорожку. | |||
=== Формат MX === | |||
: ''См. [[Немига/System V502#MX.HLP]]'' — описание драйвера MX.SYS | |||
Используются обе стороны диска, поэтому только два устройства — MX0: и MX1:. На каждой дорожке 11 секторов по 128 слов = 256 байт. Односторонний диск = 256 * 11 * 80 = 225280 байт, двусторонний диск = 450560 байт.<br /> | |||
Драйвер MX есть в комплекте системы «RT-11SJ V5.02(#)», и этот драйвер может только читать/писать, но не умеет форматировать. | |||
Структура дорожки для драйвера MX.SYS, называющего себя «ДРАЙВЕР ГМД ФОРМАТА MX40/80 МИКРОЦОС LTD. V2.2»: | |||
<pre> | |||
──── Заголовок дорожки (3 байта) ───────────── | |||
1 Маркер 0363 | |||
1 0 (этот байт можно рассматривать как старший байт от слова номера дорожки) | |||
1 Номер дорожки | |||
──── Начало сектора 1..11 (258 байт на сектор) | |||
256 128 слов, данные сектора | |||
2 Слово контрольной суммы, полученное обычным сложением всех слов сектора | |||
──── Конец сектора ─────────────────────────── | |||
... | |||
──── Концевик ─────────────────────────────── | |||
4 20 4F 54 01 (hex) | |||
2 Слово: номер дорожки * 2 | |||
</pre> | |||
Все слова данных сектора, а также слово контрольной суммы, записываются в формате старший байт затем младший байт, что отличается от обычного представления слов в памяти (младший потом старший), поэтому после чтения сектора и перед записью выполняется SWAB над всеми словами.<br /> | |||
Без концевика получается 3 + 11 * (256 + 2) = 2841 байт, именно столько читает драйвер, остальные байты до конца дорожки игнорируются (длина дорожки примерно 3125 байт).<br /> | |||
При записи дорожки кроме заголовка и данных секторов пишется ещё 6 байт концевика. | |||
== Дисковод DX == | |||
Загрузка с дисков формата DX предусмотрена только в прошивке 3.03 — команда «X». | |||
DX — драйвер накопителя на гибких магнитных дисках [[ГМД-70]] или [[ГМД-7012]]. Полный объем устройства 494 блока. | |||
<pre> | |||
177170 Регистр команд и состояний КНГМД (R/W) | |||
┌──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┐ ┌ 000 Заполнение буфера | |||
│15│14 13 12│11 10 9│ 8 7 6│ 5 4 3│ 2 1 0│ │ 001 Разгрузка буфера | |||
└─┬┴─┬┴──┴──┴──┴──┴──┴──┴─┬┴─┬┴─┬┴─┬┴─┬┴─┬┴─┬┴─┬┘ │ 010 Запись сектора | |||
ОШБ └─ ПСБ ТРБ ─┘ │ │ ВБР │ │ │ ПСК │ 011 Чтение сектора | |||
РПР КОП └──┴──┴── КОМ ─┤ 100 Форматирование дорожки | |||
│ 101 Чтение регистра ошибок и состояний | |||
177172 Регистр буфер данных КНГМД (R/W) │ 110 Запись сектора стертых данных | |||
┌──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┐ └ 111 Чтение регистра ошибок | |||
│15│14 13 12│11 10 9│ 8 7 6│ 5 4 3│ 2 1 0│ | |||
└──┴──┴──┴──┴──┴──┴──┴──┼──┴──┴──┴──┴──┴──┴──┴──┤ | |||
└──────── Данные ───────┘ | |||
</pre> | |||
На диске 77 дорожек 0..76, на каждой 26 секторов 1..26, по 128 байт на сектор, итого 77×26×128 = 256256 байт. | |||
Формат дорожки (из описаний [http://hobot.pdp-11.ru/BIBLIOTEKA/SM5631_3_060_205_IE_TO/SM5631_3_060_205_TO.rar] и [http://doc.pdp-11.org.ru/DVK/GMD7012/Format_GMD7012.pdf]): | |||
<pre> | |||
Промежуток 46b | |||
Индексный маркер FC D7 | |||
Начало сектора 1..26 | |||
Преамбула 32/33b | |||
Идентификатор | |||
Преамбула 17b | |||
Данные 131b | |||
Конец сектора | |||
</pre> | |||
'''''TODO''''' | |||
== Таймер и звук == | == Таймер и звук == | ||
: ''См. также: [[Немига/Звук]]'' | |||
Таймер 1 — | Схема таймера построен на микросхеме таймера [[К588ВИ1|588ВИ1]]. Микросхема имеет два независимых 16-разрядных счётчика. | ||
Таймер 1 — входная частота 4 МГц, задержка задаётся в регистре 170022. Плюс для этого таймера есть делитель на степени двойки, задаваемый битами 0..2 регистра 170030 — это «октава». Так, например, для получения ноты A4 («ля» первой октавы, 440 Гц) мы задаём октаву 4 и задержку 1136, получаем: <code>4000000 / 2/2/2 / 1136 ~= 440.14 Гц</code> | |||
Таймер 2 — на 50 Гц, задержка задаётся в регистре 170024. Используется для контроля длительности ноты. | Таймер 2 — на 50 Гц, задержка задаётся в регистре 170024. Используется для контроля длительности ноты. | ||
<pre> | <pre> | ||
Строка 365: | Строка 471: | ||
1 0 запуск по CO2 | 1 0 запуск по CO2 | ||
1 1 запуск по C2 | 1 1 запуск по C2 | ||
</pre> | |||
Громкость 0..3 задаётся битами 4..3 регистра 170030. | |||
<pre> | |||
170030 Регистр октавы и громкости | |||
┌──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┐ | |||
│15│14 13 12│11 10 9│ 8 7 6│ 5 4 3│ 2 1 0│ | |||
└──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴─┬┴─┬┴─┬┴─┬┴─┬┘ | |||
│ │ └──┴──┴─ Октава 1..7 | |||
└──┴─ Громкость 0..3 | |||
</pre> | </pre> | ||
Обращение к 170026 — включает звук. | Обращение к 170026 — включает звук. | ||
Обращение к | Обращение к 170032 — переключает состояние звука вкл/выкл. | ||
При этом таймер работает независимо от того, включен ли звук. | При этом таймер работает независимо от того, включен ли звук. | ||
Судя по схеме, звук также выключается по сигналу RESET, либо по окончанию счёта таймера 2 (сигнал ЗПР2). | |||
''''' | '''''NOTE:''''' Значения задержек для нот на прошивке 4.05 отличаются от 3.03 ровно в 1,6 раза. Вероятно, таймер 1 на новых моделях работает на частоте 6,4 МГц против 4 МГц на старой модели. | ||
== Порт принтера == | == Порт принтера == | ||
Строка 393: | Строка 511: | ||
</pre> | </pre> | ||
'''''TODO''''' | '''''TODO''''' | ||
== ПЗУ == | |||
{| class="standard" | |||
! Версия || MD5 checksum !! SHA1 checksum !! Размер !! Примечания | |||
|- | |||
| 3.03 || 9023be6bcac0535b9dea95eeda5ef1f3 || ecb2a5cf3d0af678ad44d87c524eaa8726ea1243 || 4 КБ || | |||
|- | |||
| 4.05 || cbd626766fac3d80c9c786642277f00a || 97e4ebbe88daedf0eed42ede5ff4c0c0e256316a || 4 КБ || | |||
|- | |||
| 4.06 || 2b6d7eaf21e8201c434743991a2f9228 || a6cb2c8a401bbcbe434320a883021fc32fa9bba4 || 4 КБ || | |||
|- | |||
| Клавиатура || b6a893d3e603eed3e41d39ca8006abf2 || a530598653f5de87cc730ac0350a19c51f9e0799 || 2 КБ || | |||
|} | |||
== Производительность == | |||
Тест SPEED показывает, что Немига работает немного быстрее чем УКНЦ. | |||
Сравнение реальных машин версии 4.06 (MiX [http://zx-pk.ru/threads/20590-emulyator-nemiga.html?p=891570&viewfull=1#post891570], Radon17 [https://zx-pk.ru/threads/12828-uchebnyj-kompleks-nemiga.html?p=1180618&viewfull=1#post1180618]) и двух УКНЦ (Alex_K): | |||
Немига1 Немига2 УКНЦ1 УКНЦ2 | |||
сложение рег-рег 760 768 624 672 тыс.оп/сек | |||
сложение рег-пам 328 328 240 289 тыс.оп/сек | |||
умножение рег-рег 152 168 80 64 тыс.оп/сек | |||
деление рег-рег 256 256 80 64 тыс.оп/сек | |||
== Ссылки == | == Ссылки == | ||
* ТУ 4-ЫД1.700.004ТУ-89 [http://www.1bm.ru/techdocs/kgs/tu/773/info/150570/ Комплекс вычислительный | * [https://emuverse.ru/w/index.php?title=%D0%A1%D0%BB%D1%83%D0%B6%D0%B5%D0%B1%D0%BD%D0%B0%D1%8F%3A%D0%A3%D0%BA%D0%B0%D0%B7%D0%B0%D1%82%D0%B5%D0%BB%D1%8C+%D0%BF%D0%BE+%D0%BD%D0%B0%D1%87%D0%B0%D0%BB%D1%83+%D0%BD%D0%B0%D0%B7%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F&prefix=%D0%9D%D0%B5%D0%BC%D0%B8%D0%B3%D0%B0%2F&namespace=0 Подстраницы этой страницы в Emuverse] | ||
* [http://myadel-gimnaz.by/sites/default/files/Documents/Instruction/Comp/Nemiga_TO_instrukciya.djvu Комплекс вычислительный | * ТУ 4-ЫД1.700.004ТУ-89 [http://www.1bm.ru/techdocs/kgs/tu/773/info/150570/ Комплекс вычислительный «Немига»] | ||
* [http://myadel-gimnaz.by/node/107 КУВТ | * [http://myadel-gimnaz.by/sites/default/files/Documents/Instruction/Comp/Nemiga_TO_instrukciya.djvu Комплекс вычислительный «Немига». Компьютеры персональные ПК 588, ПК 588-01. Техническое описание и инструкция по эксплуатации] | ||
* [http://www.kaznachey.com/doc/5r1Jfo7tA6r/ Постановление Совета министров Белорусской ССР | * [http://myadel-gimnaz.by/node/107 КУВТ «Немига»] | ||
* [http://www.kaznachey.com/doc/5r1Jfo7tA6r/ Постановление Совета министров Белорусской ССР «О дополнительных мерах по обеспечению учебных заведений республики электронно-вычислительной техникой»] | |||
[[Категория:Немига|*]] |
Текущая версия от 22:32, 18 сентября 2023
Этот документ создан для 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 либо без (только в прошивке 3.03)N
— загрузка из сети, реально просто переход к процедуре холодного стартаУПР+L
— очистка экрана
В любой момент выполнение программы можно прервать нажатием УПР+ФСД/СТОП, система переходит в пультовый режим. При этом содержимое всех регистров сохраняется, их можно просмотреть командой S
. Команда /
позволяет просмотреть/изменить отдельные ячейки памяти. А команда G
восстанавливает регистры и продолжает выполнение прерванной программы с того же места.
Процессор
Процессор реализован на микросхемах серии 588:
- КР588ВС2 (D1) — арифметико-логическое устройство (АЛУ), управляется 12-разрядными микрокомандами из КР588ВУ2-0001, −0002, −0004
- КР588ВУ2-0001, −0002, −0006, −0004, −0007 (D2..D6) — управляющая память (УП) — микропрограммы для D1, D17, D18
- КР588ВГ1 (D18) — системный контроллер (СК) — обеспечивает внутренний интерфейс процессора и его связь с Q-шиной (МПИ, OCT 11305.903-80), управляется микрокодом из КР588ВУ2-0007
- К588ВР2 (D17) — арифметический умножитель 16×16 (УМ), управляется 5-разрядными микрокомандами из КР588ВУ2-0006 (D4); умножение и деление задействует память по адресам 170000-170005
- КР588ВА1 (D21, D24) — 8-разрядный магистральный приёмо-передатчик (МПП)
- КР588ВГ2 (D15, D16) — контроллер запоминающего устройства (КЗУ)
Начальный пуск: сброс устройств, затем чтение PC и PSW из 160006 и 160010, запуск в режиме HALT.
- Система команд
Процессор реализует систему команд компьютера Электроника-60 (ОСТ 11 305.909-82), за исключением команд FIS (операций с плавающей запятой). Есть команды расширенной арифметики (MUL, DIV, ASH, ASHC), реализуются микрокодом в D4 и умножителем D17. Набор команд описан в ТО и в справочниках по БИС сериии КР588.
- См. также: Немига/EIS
- Режимы USER и HALT
Процессор поддерживает работу в двух режимах — USER и HALT.
Ситуации перехода в режим HALT (согласно ТО):
- появление сигнала СБРОС (INIT)
- запрос на обслуживание локальной сети
- обращение к области памяти 177560-177566 (регистры системной консоли)
- нажатие клавиши на клавиатуре
- выполнение команды HALT
В режиме HALT область ОЗУ 177600-177777 замещается ОЗУ из другой области (предположительно, эти ячейки памяти лежат «под» системным ПЗУ и поэтому не используются обычным образом).
NOTE: В документации не описан механизм возврата из режима HALT в USER. По коду прошивки ПЗУ видно, что к этому приводит запись байта 0 по адресу 170006; запись 3 в 170006 приводит к переходу из USER в HALT.
- Прерывания
Прерывания по описанию КР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 | EVNT — Прерывание по внешнему событию | 35 | используется |
0001 | RQ — Запрос прерывания от ВУ | 28 | используется |
Вектора прерываний:
- 160002 — сигнал/команда HALT в режиме HALT
- 160006 — прерывание начального пуска
- 160012 — ошибка при приёме вектора прерывания
- 000004 — нечётный адрес при обращении по слову; ошибка обращения к каналу; HALT в режиме USER; неверная адресация JMP/JSR
- 000010 — резерный код команды
- 000014 — прерывание по T-разряду или команда BPT
- 000020 — команда IOT
- 000024 — питание
- 000030 — команда EMT
- 000034 — команда TRAP
- 000060 — терминал клавиатура (вызывается из кода ПЗУ)
- 000064 — терминал дисплей (вызывается из кода ПЗУ)
- 000100 — прерывание EVNT
- 000104 — адрес обработчика сигнала Н4 от сетевой карты (вызывается из кода ПЗУ)
- 000110 — мелодия закончилась кодом 040 (вызывается из кода ПЗУ)
Регистры (порты)
Регистр | Назначение | Примечание | Значение в пульте 4.06 |
---|---|---|---|
170000 | Память | Используются микросхемой, выполняющей операции умножения/делениия |
000000 |
170002 | 000000 | ||
170004 | 047764 | ||
170006 | Регистр данных клавиатуры (байт 170006), регистр фиксации HALT-запросов (байт 170007, D27) |
001412 | |
170010 | Адаптер локальной сети |
состояние | 074010 |
170012 | данные | 000000 | |
170014 | ??? | 000000 | |
170020 | Таймер и звук | состояние программируемого таймера | 001261 |
170022 | первый счётчик | 000000 | |
170024 | второй счётчик | 000000 | |
170026 | включение звука | 000000 | |
170030 | управляющее слово выбора громкости и октавы | 000000 | |
170032 | отключение звука | 000000 | |
177100 | Контроллер дисковода MD |
состояние | 000271 |
177102 | данные | 000377 | |
177104 | управление | 000127 | |
177106 | таймер | 000106 | |
177170* | Контроллер дисковода DX* |
состояние | |
177172* | данные | ||
177514 | Устройство сопряжения |
состояние параллельного порта | |
177516 | данные параллельного порта | ||
177560 | Регистры системной консоли |
состояние клавиатуры | 000000 |
177562 | данные клавиатуры | 000012 | |
177564 | состояние терминала | 000200 | |
177566 | данные терминала | 000000 | |
177570 | Косвенный доступ к памяти |
данные | 000000 |
177572 | адрес | 000000 | |
177574** | Регистр управления | 000000 |
* — код загрузки с дисковода формата DX обнаружен в прошивке версии 3.03; для загрузки с него используется команда «X».
** — аппаратная версия 4.x
Результат прогона программы IOSCAN на реальной машине с прошивкой 4.06 [1] (здесь детектируется регистр 170014, которого нет в документации):
160000-170014 170020-170032 177100-177106 177514-177516 177560-177574 177600-177776
- Регистр 170006
Старший байт регистра 170006 — это регистр фиксации HALT-запросов, отдельные его биты отвечают за различные причины вызова HALT-прерывания. Младший байт регистра 170006 — регистр данных клавиатуры.
170006 (R) Регистр фиксации HALT и данных клавиатуры ┌──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┐ │15│14 13 12│11 10 9│ 8 7 6│ 5 4 3│ 2 1 0│ └─┬┴─┬┴─┬┴─┬┴─┬┴─┬┴─1┴─1┼──┴──┴──┴──┴──┴──┴──┴──┤ СБРОС│ │ │ │ │ └── Данные клавиатуры ──┘ Н1 Н2 Н3 Н4 Клавиатура
Младший байт регистра это байт с клавиатуры (регистр D27); если установлен бит 10, то символ готов для чтения.
Старший байт регистра это регистр фиксации HALT (D28, биты регистра идут в обратном порядке) — определяет причину появления прерывания HALT.
- бит 15 — признак канального сигнала СБРОС;
- бит 14 — сигнал Н1 — обращение к регистру данных терминала 177566;
- бит 13 — сигнал Н2 — обращение к регистру данных клавиатуры 177562;
- бит 12 — сигнал Н3 — кадровый синхроимпульс, 50 Гц
- бит 11 — сигнал Н4 от платы адаптера локальной сети;
- бит 10 — сигнал готовности очередного байта с клавиатуры, поступает с триггера D37.2;
- биты 8,9 заземлены = 1.
NOTE: В коде прошивки ПЗУ регистр 170006 также используют на запись, записывая в него байтовое значение 3 для маскирования системных прерываний. По записи в 170006 сбрасывается регистр D27 (видно по схеме).
- Регистры системной консоли
При разработке Немиги предусмотрели совместимость с «Электроника-60» по адресам и работе регистров системной консоли — это регистры 177560/177562 (состояние/данные клавиатуры) и 177564/177566 (состояние/данные терминала). Это просто ячейки ОЗУ, но обращение к ним приводит к вызову прерывания HALT с установкой соответствующих флагов в регистре 177006 (чтение регистра данных клавиатуры 177562, запись в регистр данных терминала 177566). Программа обработки прерывания HALT анализирует флаги и эмулирует работу регистров консоли, а также выполняет прерывания по векторам 60 и 64, если стоят соответствующие флаги в регистрах состояния.
177560 Регистр состояния клавиатуры 177564 Регистр состояния терминала ┌──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┐ │15│14 13 12│11 10 9│ 8 7 6│ 5 4 3│ 2 1 0│ └──┴──┴──┴──┴──┴──┴──┴──┴─┬┴─┬┴──┴──┴──┴──┴──┴──┘ │ └─ Разрешение прерывания: 1 = разрешено └──── Готовность к приёму/передаче: 0 = готов
- Регистр управления 177574 (только 4.xx)
- бит 0 — специальная адресация памяти: экран проецируется на нижнюю память.
Память
- Адреса 000000-137777 — ОЗУ
- Адреса 140000-157777 — зарезервированы под дополнительные 8 КБ ПЗУ (D11-D14)
- Адреса 160000-167777 — системное ПЗУ, 4 КБ (D9-D10)
- Адреса 170000-177777 — ОЗУ и порты
- Адреса 177600-177777 — окно памяти, включаемое только в режиме HALT
Процессору непосредственно доступно 64 КБ памяти. Помимо этого, существует возможность «косвенного» обращения ко всем 128 КБ ОЗУ, через регистры косвенной адресации 177570 (адрес) и 177572 (данные). Адрес косвенной адресации получается сдвигом на один разряд вниз обычного адреса «прямой» адресации.
Адрес Косв. адрес 000000 ┌────────────────────┐ 000000 │ │ │ │ │ │ │ │ │ │ │ О З У │ │ │ │ │ │ │ │ │ │ │ │ │ 140000 ├────────────────────┤ 060000 │ Дополнит. ПЗУ 8К │ │ │ 160000 ├────────────────────┤ 070000 │ Системное ПЗУ 4К │ 170000 ├────────────────────┤ │ ОЗУ и порты │ 200000 ╞════════════════════╡ 100000 │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├────────────────────┤ 140000 │ │ │ │ │ │ │ Э К Р А Н │ │ │ │ 32К │ │ │ │ │ │ │ └────────────────────┘ 200000
В аппаратной версии 4.x появилась возможность включить проецирование 32К экрана на нижние 32К обычной памяти (этим управляет новый регистр 177574, бит 0) — сделано это, очевидно, для ускорения вывода на экран.
Видео
Видео-контроллер формирует растр размером 512×312 точек, в котором «полезной» площадью является блок 512×256 точек. Экран хранится в верхней части памяти, доступной по косвенному адресу 140000, занимает 32 КБ. Каждые 8 точек растра занимают 2 соседних байта — каждый байт это отдельный битплан, то есть каждая точка это два бита, лежащие в соседних байтах, что даёт 4 градации яркости на точку.
Знакогенератор содержит символы размером 8×8 точек, при выводе текста между строками оставляют место высотой в два пиксела. Таким образом экран используется как текстовый в 25 строк.
Прошивка 3.03 использует не всю ширину экрана, а только 416 точек — слева и справа остаются пустые полосы по 48 точек. Прошивки 4.05 и 4.06 используют уже всю ширину в 512 точек.
3.03 4.05 и 4.06 ┌─ 512 × 312 ────────────────────────┐ ┌─ 512 × 312 ────────────────────────┐ │ │ │ │ │ │ │ │ ┌─┌─ 416 × 256 ────────────────────┐─┐ ┌─ 512 × 256 ────────────────────────┐ │ | | │ │ │ │ | 50 символов в строке | │ │ 64 символа в строке │ │ | | │ │ │ │ | | │ │ │ │ | | │ │ │ │ | | │ │ │ │ | | │ │ │ │ | | │ │ │ └─└────────────────────────────────┘─┘ └────────────────────────────────────┘ │ │ │ │ │ │ │ │ └────────────────────────────────────┘ └────────────────────────────────────┘
Клавиатура
Раскладка клавиатуры:
( ) ( ) ( ) ( ) РУС ВЕРХ ЛАТ ЦИФ ┌───┬───┐ ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐ ┌───┬───┬───┐ │Ф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/MX
ПЗУ версии 3.03 может загружать диски MD и DX; ПЗУ 4.05 и 4.06 — только диски MD.
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-й бит регистра состояния.
Формат MD
Дисковод формата MD, с кодированием FM (в ТО называется модель TEAC FD-55FV-003). Похож на MX, но использует побайтовую передачу данных. Каждый логический диск занимает только одну сторону физического диска, MD0: и MD1: это первый физический диск, MD2: и MD3: это второй.
Ёмкость диска 459 КБ — 2 стороны по 80 дорожек, сектора по 128 байт, 23 сектора (или меньше) на дорожку. Диск вращается со скоростью 300 оборотов в минуту = 5 оборотов в секунду. Скорость обмена данными — 125 килобит в секунду (FM) = 125000 бит в секунду = 15625 байт в секунду = 3125 за оборот. Длительность одного цикла обмена: 1с / 5об / 3125 = 64 мкс.
- Структура дорожки
──── Заголовок дорожки (10 байт) ───────────── 1 343 — маркер 1 xxx — номер дорожки 1 023 — секторов на дорожку 1 000 * 2 xxx — первый сектор 1 377 * 1 377 * 2 xxx — контрольная сумма ──── Начало сектора 1..23 (130 байт на сектор) ─┐ 128 xxx — данные сектора │ 2 xxxx — контрольная сумма │ ──── Конец сектора ─────────────────────────────┘ ...
Прошивка 4.06 имеет поддержку «защиты» дискет. Три байта в заголовке дорожки (помечены «*») используются для перекодирования секторов при чтении — это встроено в цикл расчёта контрольной суммы сектора. При значениях этих байт 0/0xff/0xff — перекодирования не происходит.
Первый сектор нулевой дорожки содержит информацию о количестве секторов на каждой дорожке, начиная с нулевого байта каждый байт описывает одну дорожку.
Формат MX
- См. Немига/System V502#MX.HLP — описание драйвера MX.SYS
Используются обе стороны диска, поэтому только два устройства — MX0: и MX1:. На каждой дорожке 11 секторов по 128 слов = 256 байт. Односторонний диск = 256 * 11 * 80 = 225280 байт, двусторонний диск = 450560 байт.
Драйвер MX есть в комплекте системы «RT-11SJ V5.02(#)», и этот драйвер может только читать/писать, но не умеет форматировать.
Структура дорожки для драйвера MX.SYS, называющего себя «ДРАЙВЕР ГМД ФОРМАТА MX40/80 МИКРОЦОС LTD. V2.2»:
──── Заголовок дорожки (3 байта) ───────────── 1 Маркер 0363 1 0 (этот байт можно рассматривать как старший байт от слова номера дорожки) 1 Номер дорожки ──── Начало сектора 1..11 (258 байт на сектор) 256 128 слов, данные сектора 2 Слово контрольной суммы, полученное обычным сложением всех слов сектора ──── Конец сектора ─────────────────────────── ... ──── Концевик ─────────────────────────────── 4 20 4F 54 01 (hex) 2 Слово: номер дорожки * 2
Все слова данных сектора, а также слово контрольной суммы, записываются в формате старший байт затем младший байт, что отличается от обычного представления слов в памяти (младший потом старший), поэтому после чтения сектора и перед записью выполняется SWAB над всеми словами.
Без концевика получается 3 + 11 * (256 + 2) = 2841 байт, именно столько читает драйвер, остальные байты до конца дорожки игнорируются (длина дорожки примерно 3125 байт).
При записи дорожки кроме заголовка и данных секторов пишется ещё 6 байт концевика.
Дисковод DX
Загрузка с дисков формата DX предусмотрена только в прошивке 3.03 — команда «X».
DX — драйвер накопителя на гибких магнитных дисках ГМД-70 или ГМД-7012. Полный объем устройства 494 блока.
177170 Регистр команд и состояний КНГМД (R/W) ┌──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┐ ┌ 000 Заполнение буфера │15│14 13 12│11 10 9│ 8 7 6│ 5 4 3│ 2 1 0│ │ 001 Разгрузка буфера └─┬┴─┬┴──┴──┴──┴──┴──┴──┴─┬┴─┬┴─┬┴─┬┴─┬┴─┬┴─┬┴─┬┘ │ 010 Запись сектора ОШБ └─ ПСБ ТРБ ─┘ │ │ ВБР │ │ │ ПСК │ 011 Чтение сектора РПР КОП └──┴──┴── КОМ ─┤ 100 Форматирование дорожки │ 101 Чтение регистра ошибок и состояний 177172 Регистр буфер данных КНГМД (R/W) │ 110 Запись сектора стертых данных ┌──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┐ └ 111 Чтение регистра ошибок │15│14 13 12│11 10 9│ 8 7 6│ 5 4 3│ 2 1 0│ └──┴──┴──┴──┴──┴──┴──┴──┼──┴──┴──┴──┴──┴──┴──┴──┤ └──────── Данные ───────┘
На диске 77 дорожек 0..76, на каждой 26 секторов 1..26, по 128 байт на сектор, итого 77×26×128 = 256256 байт. Формат дорожки (из описаний [2] и [3]):
Промежуток 46b Индексный маркер FC D7 Начало сектора 1..26 Преамбула 32/33b Идентификатор Преамбула 17b Данные 131b Конец сектора
TODO
Таймер и звук
- См. также: Немига/Звук
Схема таймера построен на микросхеме таймера 588ВИ1. Микросхема имеет два независимых 16-разрядных счётчика.
Таймер 1 — входная частота 4 МГц, задержка задаётся в регистре 170022. Плюс для этого таймера есть делитель на степени двойки, задаваемый битами 0..2 регистра 170030 — это «октава». Так, например, для получения ноты A4 («ля» первой октавы, 440 Гц) мы задаём октаву 4 и задержку 1136, получаем: 4000000 / 2/2/2 / 1136 ~= 440.14 Гц
Таймер 2 — на 50 Гц, задержка задаётся в регистре 170024. Используется для контроля длительности ноты.
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
Громкость 0..3 задаётся битами 4..3 регистра 170030.
170030 Регистр октавы и громкости ┌──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┐ │15│14 13 12│11 10 9│ 8 7 6│ 5 4 3│ 2 1 0│ └──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴──┴─┬┴─┬┴─┬┴─┬┴─┬┘ │ │ └──┴──┴─ Октава 1..7 └──┴─ Громкость 0..3
Обращение к 170026 — включает звук. Обращение к 170032 — переключает состояние звука вкл/выкл. При этом таймер работает независимо от того, включен ли звук. Судя по схеме, звук также выключается по сигналу RESET, либо по окончанию счёта таймера 2 (сигнал ЗПР2).
NOTE: Значения задержек для нот на прошивке 4.05 отличаются от 3.03 ровно в 1,6 раза. Вероятно, таймер 1 на новых моделях работает на частоте 6,4 МГц против 4 МГц на старой модели.
Порт принтера
ИРПР построен на микросхеме КР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
ПЗУ
Версия | MD5 checksum | SHA1 checksum | Размер | Примечания |
---|---|---|---|---|
3.03 | 9023be6bcac0535b9dea95eeda5ef1f3 | ecb2a5cf3d0af678ad44d87c524eaa8726ea1243 | 4 КБ | |
4.05 | cbd626766fac3d80c9c786642277f00a | 97e4ebbe88daedf0eed42ede5ff4c0c0e256316a | 4 КБ | |
4.06 | 2b6d7eaf21e8201c434743991a2f9228 | a6cb2c8a401bbcbe434320a883021fc32fa9bba4 | 4 КБ | |
Клавиатура | b6a893d3e603eed3e41d39ca8006abf2 | a530598653f5de87cc730ac0350a19c51f9e0799 | 2 КБ |
Производительность
Тест SPEED показывает, что Немига работает немного быстрее чем УКНЦ.
Сравнение реальных машин версии 4.06 (MiX [4], Radon17 [5]) и двух УКНЦ (Alex_K):
Немига1 Немига2 УКНЦ1 УКНЦ2 сложение рег-рег 760 768 624 672 тыс.оп/сек сложение рег-пам 328 328 240 289 тыс.оп/сек умножение рег-рег 152 168 80 64 тыс.оп/сек деление рег-рег 256 256 80 64 тыс.оп/сек
Ссылки
- Подстраницы этой страницы в Emuverse
- ТУ 4-ЫД1.700.004ТУ-89 Комплекс вычислительный «Немига»
- Комплекс вычислительный «Немига». Компьютеры персональные ПК 588, ПК 588-01. Техническое описание и инструкция по эксплуатации
- КУВТ «Немига»
- Постановление Совета министров Белорусской ССР «О дополнительных мерах по обеспечению учебных заведений республики электронно-вычислительной техникой»