Электроника МС 0515: различия между версиями
Nzeemin (обсуждение | вклад)  (→Таймер)  | 
				Xolod (обсуждение | вклад)  Нет описания правки  | 
				||
| (не показаны 22 промежуточные версии 2 участников) | |||
| Строка 2: | Строка 2: | ||
'''Электроника МС0515''' — советский компьютер.  | '''Электроника МС0515''' — советский компьютер.  | ||
Разработан в Воронеже в 1990 году (в процессе разработки назывался '''Электроника   | Разработан в Воронеже в 1990 году (в процессе разработки назывался '''Электроника УПБК-16'''), выпускался на воронежском заводе «Процессор».  | ||
== Технические характеристики ==  | == Технические характеристики ==  | ||
* Процессор: [[КР1807ВМ1]]   | * Процессор: [[КР1807ВМ1]] на частоте 7,5 МГц — аналог процессора DEC T11, по системе команд совместим с [[PDP-11]], [[Электроника-60]], [[Диалоговый вычислительный комплекс|ДВК]]  | ||
* Оперативная память: 128 КБ  | * Оперативная память: 128 КБ  | ||
* ПЗУ: 16 КБ  | * ПЗУ: 16 КБ  | ||
| Строка 11: | Строка 11: | ||
** видеорежим «среднего разрешения» 320×200, 8 цветов; на каждый горизонтальный октет из 8 точек можно используется 2 цвета из палитры 8 цветов, признаки яркости и мерцания; набор цветов повторяет палитру компьютера [[ZX Spectrum]], имеется также «бордюр» (неиспользуемая область экрана), цвет которого выбирается из той же палитры  | ** видеорежим «среднего разрешения» 320×200, 8 цветов; на каждый горизонтальный октет из 8 точек можно используется 2 цвета из палитры 8 цветов, признаки яркости и мерцания; набор цветов повторяет палитру компьютера [[ZX Spectrum]], имеется также «бордюр» (неиспользуемая область экрана), цвет которого выбирается из той же палитры  | ||
** видеорежим «высокого разрешения» 640×200, 2 цвета  | ** видеорежим «высокого разрешения» 640×200, 2 цвета  | ||
** 50гц - 15,625кгц  | |||
** 60гц - 15,625кгц  | |||
** 72гц - 18,750кгц  | |||
* Контроллер дисковода: на основе [[КР1818ВГ93]] (аналог [[WD1793]]), драйвер <code>DZ</code>: 80 дорожек по 10 секторов, 512 байт в секторе  | * Контроллер дисковода: на основе [[КР1818ВГ93]] (аналог [[WD1793]]), драйвер <code>DZ</code>: 80 дорожек по 10 секторов, 512 байт в секторе  | ||
* Клавиатура: Электроника МС7004 (отдельный блок) либо Электроника МС7007 (встроенная)  | * Клавиатура: Электроника МС7004 (отдельный блок) либо Электроника МС7007 (встроенная)  | ||
| Строка 17: | Строка 20: | ||
== Процессор ==  | == Процессор ==  | ||
КР1807ВМ1 — аналог процессора DEC T11. См. [http://www.bitsavers.org/pdf/dec/pdp11/t11/T11_Engineering_Specification_Rev_E_Mar82.pdf]  | |||
Система команд — LSI/11, но без команды MARK. Нет команд FIS (MUL/DIV/ASH/ASHC).  | |||
Регистр режима в битах 13-15 имеет 1 1 1, что задаёт адрес старта — 172000 и адрес рестарта 172004.  | Регистр режима в битах 13-15 имеет 1 1 1, что задаёт адрес старта — 172000 и адрес рестарта 172004.  | ||
| Строка 48: | Строка 53: | ||
== Регистры ==  | == Регистры ==  | ||
{| class=standard  | |||
! Регистр !! Назначение !! Примечание  | |||
|-  | |||
| 177400..177437 (W) || Диспетчер памяти ||  | |||
|-  | |||
| 177440 (R) ||rowspan=4| Клавиатура МС 7004 || Регистр данных  | |||
|-  | |||
| 177460 (W) || Регистр данных  | |||
|-  | |||
| 177442 (R) || Регистр состояния  | |||
|-  | |||
| 177462 (W) || Регистр управления  | |||
|-  | |||
| 177500     ||rowspan=4| Программируемый таймер || Регистр скорости обмена клавиатуры  | |||
|-  | |||
| 177502     || Регистр скорости обмена ПЧ  | |||
|-  | |||
| 177504     || Регистр скорости обмена ДИН  | |||
|-  | |||
| 177506 (RW)|| Регистр управления таймера  | |||
|-  | |||
| 177540     ||rowspan=4| Параллельный интерфейс<br/>клавиатуры МС 7007<br/>или обмена по ИРПР || Регистр порта A  | |||
|-  | |||
| 177542     || Регистр порта B  | |||
|-  | |||
| 177544     || Регистр порта C  | |||
|-  | |||
| 177546 (RW)|| Регистр управления ИРПР  | |||
|-  | |||
| 177600     ||rowspan=4| Параллельный интерфейс<br/>системных регистров || Системный регистр A  | |||
|-  | |||
| 177602     || Системный регистр B  | |||
|-  | |||
| 177604     || Системный регистр C  | |||
|-  | |||
| 177606 (RW)|| Системный регистр управления  | |||
|-  | |||
| 177640 (R) ||rowspan=5| Контроллер НГМД || Состояние НГМД  | |||
|-  | |||
| 177640 (W) || Команда НГМД  | |||
|-  | |||
| 177642 (RW)|| Регистр дорожки  | |||
|-  | |||
| 177644 (RW)|| Регистр сектора  | |||
|-  | |||
| 177646 (RW)|| Регистр данных  | |||
|-  | |||
| 177700 (R) ||rowspan=4| Последовательный интерфейс<br/>Стык С2 || Регистр данных ПЧ  | |||
|-  | |||
| 177720 (W) || Регистр данных ПЧ  | |||
|-  | |||
| 177702 (R) || Регистр состояния ПЧ  | |||
|-  | |||
| 177722 (W) || Регистр управления ПЧ  | |||
|-  | |||
| 177770 (RW)||colspan=2| Адрес обслуживания останова и системного таймера  | |||
|}  | |||
=== Системные регистры ===  | |||
<pre>  | <pre>  | ||
   177400  Регистр диспетчера памяти  |    177400  Регистр диспетчера памяти  | ||
| Строка 54: | Строка 119: | ||
  └──┴──┴─┬┴─┬┴─┬┴─┬┴─┬┴─┬┴─┬┴─┬┴─┬┴─┬┴─┬┴─┬┴─┬┴─┬┘  |   └──┴──┴─┬┴─┬┴─┬┴─┬┴─┬┴─┬┴─┬┴─┬┴─┬┴─┬┴─┬┴─┬┴─┬┴─┬┘  | ||
          │  │  │  │  │  │  │  └──┴──┴──┴──┴──┴──┴─ Выбор ОЗУ: 1 - осн., 0 - доп.  |           │  │  │  │  │  │  │  └──┴──┴──┴──┴──┴──┴─ Выбор ОЗУ: 1 - осн., 0 - доп.  | ||
  ИРПР-М ─┴──┘  │  │  │  └───── Прерывание от монитора  |   ИРПР-М ─┴──┘  │  │  │  └───── Прерывание от монитора, инициируется программно изменением этого бита  | ||
                │  │  └──────── Прерывание от таймера  |                 │  │  └──────── Прерывание от таймера: 1 - разрешено  | ||
                ├──┤--------└─ Включение ВОЗУ в основную память: 1 - включено  |                 ├──┤--------└─ Включение ВОЗУ в основную память: 1 - включено  | ||
                0  0 - 000000-037777  |                 0  0 - 000000-037777  | ||
| Строка 93: | Строка 158: | ||
             Звук вкл/выкл ────┘  │  │  │     |              Звук вкл/выкл ────┘  │  │  │     | ||
             Тон звука ───────────┘  │  └─ Разрешение экрана 0 - среднее, 1 - высокое  |              Тон звука ───────────┘  │  └─ Разрешение экрана 0 - среднее, 1 - высокое  | ||
                       Светодиод 3 ──┘  |                        Светодиод 3 ──┘                           320x200      640x200  | ||
</pre>  | </pre>  | ||
| Строка 202: | Строка 267: | ||
─────────────────────────────────────────────────  | ─────────────────────────────────────────────────  | ||
Всего 6575(6577)  | Всего 6575(6577)  | ||
</pre>  | |||
=== Интерлив секторов ===  | |||
http://zx-pk.ru/threads/15146-ms-0515.html?p=431954&viewfull=1#post431954  | |||
Alex_K  | |||
<pre>  | |||
Собственно таблица интерлива:  | |||
0 1 2 3 4 5 6 7 8 9  | |||
==============  | |||
0 5 1 6 2 7 3 8 4 9  | |||
4 9 0 5 1 6 2 7 3 8  | |||
3 8 4 9 0 5 1 6 2 7  | |||
2 7 3 8 4 9 0 5 1 6  | |||
1 6 2 7 3 8 4 9 0 5  | |||
</pre>  | |||
http://zx-pk.ru/threads/15146-ms-0515.html?p=431962&viewfull=1#post431962  | |||
Patron  | |||
Драйвер DZ переставляет блоки в образе по следующему алгоритму:  | |||
<pre>  | |||
int BlockNumber_DZ_Encode( int nBlock )  | |||
{  | |||
    int track  = nBlock / 10;  | |||
    int sector = nBlock % 10;  | |||
    int sector_00 = ( track*2 )% 10;  | |||
    sector = ( sector_00 + sector*2 )% 10;  | |||
    if( nBlock % 10 >= 5 ) sector++;  | |||
    track++;  | |||
    if( track > 79 ) track=0;  | |||
    return track*10 + sector;  | |||
}  | |||
</pre>  | </pre>  | ||
== Таймер ==  | == Таймер ==  | ||
Таймер на КР580ВИ53 — трёхканальный  | Таймер на КР580ВИ53 — трёхканальный.  | ||
Все регистры — 8-разрядные:  | |||
{|class=standard style="text-align: center"  | {|class=standard style="text-align: center"  | ||
! Канал !! Регистр чтения !! Регистр записи  | ! Канал !! Регистр чтения !! Регистр записи !! Использование  | ||
|-  | |-  | ||
| канал 0 || 177500 || 177520  | | канал 0 || 177500 || 177520 || Тактирует клавиатуру  | ||
|-  | |-  | ||
| канал 1 || 177502 || 177522  | | канал 1 || 177502 || 177522 || Порт принтера  | ||
|-  | |-  | ||
| канал 2 || 177504 || 177524  | | канал 2 || 177504 || 177524 || Звук и отсчёт интервалов  | ||
|-  | |-  | ||
| упр. слово || 177506 || 177526  | | упр. слово || 177506 || 177526 ||  | ||
|}  | |}  | ||
В процессе загрузки   | В процессе загрузки после начальных тестов выдаются звуки (здесь в начале значение задержки таймера, затем вычисленные частоты):  | ||
<pre>  | |||
1798 = 6040. = 331.126 Гц ~= 329,63 Гц E  1 октавы  | |||
12b9 = 4793. = 417.275 Гц ~= 415,30 Гц G♯ 1 октавы  | |||
0fbf = 4031. = 496.155 Гц ~= 493,88 Гц B  1 октавы  | |||
0bcc = 3020. = 662.252 Гц ~= 659,26 Гц E  2 октавы  | |||
1798 = 6040. = 331.126 Гц ~= 329,63 Гц E  1 октавы  | |||
</pre>  | |||
Подпрограмма генерации звука, R3 задаёт задержку для таймера:  | |||
<pre>  | <pre>  | ||
174550: BIC    	#000340, @#177604    ; таймер звука выкл, звук выкл, тон звука выкл  | 174550: BIC    	#000340, @#177604    ; таймер звука выкл, звук выкл, тон звука выкл  | ||
| Строка 230: | Строка 339: | ||
174576: MOVB   	R3, @#177524         ; передаём старший байт  | 174576: MOVB   	R3, @#177524         ; передаём старший байт  | ||
174602: BIS    	#000300, @#177604    ; таймер звука вкл, звук вкл  | 174602: BIS    	#000300, @#177604    ; таймер звука вкл, звук вкл  | ||
174610: MOV    	174652, R0           ; значение малого счётчика  | 174610: MOV    	174652, R0           ; значение малого счётчика = 005777  | ||
174614: SOB    	R0, 174614           ; ожидаем  | 174614: SOB    	R0, 174614           ; ожидаем  | ||
174616: SOB    	R4, 174610           ; ожидаем  | 174616: SOB    	R4, 174610           ; ожидаем  | ||
| Строка 236: | Строка 345: | ||
174626: MOV    	@#157706, @#177604  | 174626: MOV    	@#157706, @#177604  | ||
174634: MOV    	#000002, R4          ; счётчик = 2  | 174634: MOV    	#000002, R4          ; счётчик = 2  | ||
174640: MOV    	174654, R0           ; значение малого счётчика  | 174640: MOV    	174654, R0           ; значение малого счётчика = 017777  | ||
174644: SOB    	R0, 174644           ; ожидаем  | 174644: SOB    	R0, 174644           ; ожидаем  | ||
174646: SOB    	R4, 174640           ; ожидаем  | 174646: SOB    	R4, 174640           ; ожидаем  | ||
174650: RETURN  | 174650: RETURN  | ||
174652: .WORD   005777  | |||
174654: .WORD   017777  | |||
</pre>  | </pre>  | ||
== Процесс загрузки ==  | == Клавиатура ==  | ||
# Тесты процессора  | Порты 177542/177544 должны возвращать 177777 -- наличие ноля в одном из битов показывает что клавиша нажата.  | ||
== ПЗУ ==  | |||
ПЗУ размером 16 Кбайт.  | |||
Известны две версии ПЗУ:  | |||
{| class="standard"  | |||
! Усл.название !! MD5 checksum !! Примечания  | |||
|-  | |||
| ROM A || b92cda2d83117ebbba2340acfadbf130 || вначале много 00; есть команда L в пульте; ошибка в подсчёте контрольной суммы ПЗУ  | |||
|-  | |||
| ROM B || 3d60d719ca650b3fab27a0daf0a4d317 || вначале много FF; нет команды L в пульте  | |||
|}  | |||
=== Процесс загрузки ===  | |||
[[Файл:Elektronika MS0515 boot screen interlaced.png|thumb|Экран в процессе загрузки]]  | |||
# Тесты памяти  | |||
# Вывод заставки; тест процессора  | |||
# Тест клавиатуры  | # Тест клавиатуры  | ||
# Тест НГМД:  | # Тест НГМД:  | ||
| Строка 249: | Строка 377: | ||
## 5 команд 43 (переход на track 6), команда C0, проверка того что в регистре сектора появился номер дорожки 6  | ## 5 команд 43 (переход на track 6), команда C0, проверка того что в регистре сектора появился номер дорожки 6  | ||
## 5 команд 63 (возврат на track 1), команда C0  | ## 5 команд 63 (возврат на track 1), команда C0  | ||
# Чтение track 1 sector 1: команда C0, команда 80 — читаются 512 байт начиная с адреса 000000  | # Если НГМД не готов то выход в пульт  | ||
# Чтение НГМД track 1 sector 1: команда C0, команда 80 — читаются 512 байт начиная с адреса 000000  | |||
# Запуск с адреса 000000  | # Запуск с адреса 000000  | ||
== Эмуляция ==  | |||
Существует несколько эмуляторов этого компьютера:  | |||
* Мультисистемный эмулятор MESS содержит драйвер <code>ms0515</code> [https://github.com/mamedev/mame/blob/master/src/mame/drivers/ms0515.cpp]  | |||
* [http://zx-pk.ru/threads/19698-emulyator-ms-0515-emustudio.html Эмулятор МС-0515 EmuStudio]  | |||
* [https://github.com/nzeemin/ms0515btl MS0515BTL]  | |||
== Ссылки ==  | == Ссылки ==  | ||
* [[Электроника МС 0515/НС4-ТО]] — Модуль системный НС4. Техническое описание.  | |||
* [https://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%9C%D0%A1_0515 Электроника МС 0515 в Википедии]  | * [https://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%9C%D0%A1_0515 Электроника МС 0515 в Википедии]  | ||
* [http://zx-pk.ru/threads/15146-ms-0515.html Тема «МС-0515» на zx-pk.ru]  | * [http://zx-pk.ru/threads/15146-ms-0515.html Тема «МС-0515» на zx-pk.ru]  | ||
Текущая версия от 09:30, 14 января 2022
| Этот документ создан для Emuverse и распространяется на условиях лицензии CC-BY-SA-3.0. | 
Электроника МС0515 — советский компьютер.
Разработан в Воронеже в 1990 году (в процессе разработки назывался Электроника УПБК-16), выпускался на воронежском заводе «Процессор».
Технические характеристики
- Процессор: КР1807ВМ1 на частоте 7,5 МГц — аналог процессора DEC T11, по системе команд совместим с PDP-11, Электроника-60, ДВК
 - Оперативная память: 128 КБ
 - ПЗУ: 16 КБ
 - Видео
- видеорежим «среднего разрешения» 320×200, 8 цветов; на каждый горизонтальный октет из 8 точек можно используется 2 цвета из палитры 8 цветов, признаки яркости и мерцания; набор цветов повторяет палитру компьютера ZX Spectrum, имеется также «бордюр» (неиспользуемая область экрана), цвет которого выбирается из той же палитры
 - видеорежим «высокого разрешения» 640×200, 2 цвета
 - 50гц - 15,625кгц
 - 60гц - 15,625кгц
 - 72гц - 18,750кгц
 
 - Контроллер дисковода: на основе КР1818ВГ93 (аналог WD1793), драйвер 
DZ: 80 дорожек по 10 секторов, 512 байт в секторе - Клавиатура: Электроника МС7004 (отдельный блок) либо Электроника МС7007 (встроенная)
 - Программируемый таймер на КР580ВИ53 (аналог i8253): каналы 0 и 1 тактируют клавиатуру и порт принтера, канал 2 доступен пользователю
 - Параллельный порт
 
Процессор
КР1807ВМ1 — аналог процессора DEC T11. См. [1]
Система команд — LSI/11, но без команды MARK. Нет команд FIS (MUL/DIV/ASH/ASHC).
Регистр режима в битах 13-15 имеет 1 1 1, что задаёт адрес старта — 172000 и адрес рестарта 172004.
Прерывания
IRQ CPx Pri Vec Device ───────────────────────────────── 11 LHLL 6 100 timer 9 LHHL 6 110 serial RX 8 LHHH 6 114 serial TX 5 HLHL 5 130 7004 keyboard 3 HHLL 4 060 7007 keyboard 2 HHLH 4 064 vblank
Кроме того, есть ряд зарезервированных векторов прерываний:
Vec Описание ───────────────────────────────── 000 Устройство вызвало прерывание, но не установило адрес вектора 004 Недопустимый режим для команд JMP / JSR 010 Недопустимая/зарезервированная инструкция 014 Инструкция BPT или установлен бит T 020 Инструкция IOT 024 Сбой питания 030 Инструкция EMT 034 Инструкция TRAP
Регистры
| Регистр | Назначение | Примечание | 
|---|---|---|
| 177400..177437 (W) | Диспетчер памяти | |
| 177440 (R) | Клавиатура МС 7004 | Регистр данных | 
| 177460 (W) | Регистр данных | |
| 177442 (R) | Регистр состояния | |
| 177462 (W) | Регистр управления | |
| 177500 | Программируемый таймер | Регистр скорости обмена клавиатуры | 
| 177502 | Регистр скорости обмена ПЧ | |
| 177504 | Регистр скорости обмена ДИН | |
| 177506 (RW) | Регистр управления таймера | |
| 177540 | Параллельный интерфейс клавиатуры МС 7007 или обмена по ИРПР  | 
Регистр порта A | 
| 177542 | Регистр порта B | |
| 177544 | Регистр порта C | |
| 177546 (RW) | Регистр управления ИРПР | |
| 177600 | Параллельный интерфейс системных регистров  | 
Системный регистр A | 
| 177602 | Системный регистр B | |
| 177604 | Системный регистр C | |
| 177606 (RW) | Системный регистр управления | |
| 177640 (R) | Контроллер НГМД | Состояние НГМД | 
| 177640 (W) | Команда НГМД | |
| 177642 (RW) | Регистр дорожки | |
| 177644 (RW) | Регистр сектора | |
| 177646 (RW) | Регистр данных | |
| 177700 (R) | Последовательный интерфейс Стык С2  | 
Регистр данных ПЧ | 
| 177720 (W) | Регистр данных ПЧ | |
| 177702 (R) | Регистр состояния ПЧ | |
| 177722 (W) | Регистр управления ПЧ | |
| 177770 (RW) | Адрес обслуживания останова и системного таймера | |
Системные регистры
  177400  Регистр диспетчера памяти
 ┌──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┬──┐
 │15│14 13 12│11 10  9│ 8│ 7  6│ 5  4  3│ 2  1  0│
 └──┴──┴─┬┴─┬┴─┬┴─┬┴─┬┴─┬┴─┬┴─┬┴─┬┴─┬┴─┬┴─┬┴─┬┴─┬┘
         │  │  │  │  │  │  │  └──┴──┴──┴──┴──┴──┴─ Выбор ОЗУ: 1 - осн., 0 - доп.
 ИРПР-М ─┴──┘  │  │  │  └───── Прерывание от монитора, инициируется программно изменением этого бита
               │  │  └──────── Прерывание от таймера: 1 - разрешено
               ├──┤--------└─ Включение ВОЗУ в основную память: 1 - включено
               0  0 - 000000-037777
               0  1 - 040000-077777
               1  x - 100000-137777
  177600  Системный регистр A
 ┌--┬--┬--┬--┬--┬--┬--┬--┌──┬──┬──┬──┬──┬──┬──┬──┐
 │15                    8│ 7  6│ 5  4  3│ 2  1  0│
 └--┴--┴--┴--┴--┴--┴--┴--└─┬┴─┬┴─┬┴─┬┴─┬┴─┬┴─┬┴─┬┘
               Выбор ПЗУ ──┘  │  │  │  └──│──┴──┴─ Выбор привода НГМД
              Запись на НМЛ ──┘  │  │     └─────── Двигатель НГМД вкл/выкл
               Светодиоды 2 и 1 ─┴──┘         
  177602  Системный регистр B
 ┌--┬--┬--┬--┬--┬--┬--┬--┌──┬──┬──┬──┬──┬──┬──┬──┐
 │15                    8│ 7  6│ 5  4  3│ 2  1  0│
 └--┴--┴--┴--┴--┴--┴--┴--└─┬┴─┬┴─┬┴─┬┴─┬┴─┬┴─┬┴─┬┘
              Чтение НМЛ ──┘  │  │  │  │  │  │  └─ INTR НГМД
                      ИРПР-М ─┴──┘  │  │  │  └──── DRQ НГМД
                                    ├──┤  └─────── Готовность НГМД: 0 - готов 
                   Кадровая частота 0  0 - 50 Гц
                                    0  1 - 72 Гц
                                    1  x - 60 Гц
  177604  Системный регистр C
 ┌--┬--┬--┬--┬--┬--┬--┬--┌──┬──┬──┬──┬──┬──┬──┬──┐
 │15                    8│ 7  6│ 5  4  3│ 2  1  0│
 └--┴--┴--┴--┴--┴--┴--┴--└─┬┴─┬┴─┬┴─┬┴─┬┴─┬┴─┬┴─┬┘
            Таймер звука ──┘  │  │  │  │  └──┴──┴─ Цвет бордюра
            Звук вкл/выкл ────┘  │  │  │  
            Тон звука ───────────┘  │  └─ Разрешение экрана 0 - среднее, 1 - высокое
                      Светодиод 3 ──┘                           320x200      640x200
Контроллер НГМД
Системные регистры имеют ряд флагов, отвечающих за работу НГМД:
  177600  Системный регистр A
 ┌--┬--┬--┬--┬--┬--┬--┬--┌──┬──┬──┬──┬──┬──┬──┬──┐
 │15                    8│ 7  6│ 5  4  3│ 2  1  0│ Номер   Название
 └--┴--┴--┴--┴--┴--┴--┴--└──┴──┴──┴──┴─┬┴─┬┴─┬┴─┬┘ привода устройства
                                       │  │  └──┴─ физич.  логическое
                  Поверхность НГМД ────┘  │  0  0     0     DZ0 (низ), DZ2 (верх)
                    0 - низ 1 - верх      │  0  1     1     DZ1 (низ), DZ3 (верх)
                  Двигатель НГМД включен ─┘  1  0     2
                    0 - вкл. 1 - выкл.       1  1     3
  177602  Системный регистр B
 ┌--┬--┬--┬--┬--┬--┬--┬--┌──┬──┬──┬──┬──┬──┬──┬──┐
 │15                    8│ 7  6│ 5  4  3│ 2  1  0│
 └--┴--┴--┴--┴--┴--┴--┴--└──┴──┴──┴──┴──┴─┬┴─┬┴─┬┘
                                          │  │  └─ INTR НГМД
                                          │  └──── DRQ НГМД
                                          └─────── Готовность НГМД: 0 - готов 
Сам контроллер построен на КР1818ВГ93 (аналог WD1793).
Регистры контроллера НГМД (8-разрядные):
- 177640 (чтение) — регистр состояния
 - 177640 (запись) — регистр команд
 - 177642 — регистр дорожки
 - 177644 — регистр сектора
 - 177646 — регистр данных
 
  177640 (чтение)  Регистр состояния
                 ┌───────┬───────┬───────┬───────┬───────┬───────┬───────┬───────┐   
                 │   7       6   │   5       4       3   │   2       1       0   │   
    Команда      └───────┴───────┴───────┴───────┴───────┴───────┴───────┴───────┘   
  Тип I          │  Not    Write    Head    Seek    CRC   Track 0  Index    Busy │
                 │ ready  protect  loaded  error   error                         │
  Read Address   │  Not      0       0      RNF     CRC     Lost    DRQ     Busy │
                 │ ready                           error    data                 │
  Read Sector    │  Not      0     Record   RNF     CRC     Lost    DRQ     Busy │
                 │ ready            type           error    data                 │
  Read Track     │  Not      0       0       0       0      Lost    DRQ     Busy │
                 │ ready                                    data                 │
  Write Sector   │  Not    Write   Write    RNF     CRC     Lost    DRQ     Busy │
                 │ ready  protect  fault           error    data                 │
  Write Track    │  Not    Write   Write     0       0      Lost    DRQ     Busy │
                 │ ready  protect  fault                    data                 │
  177640 (запись)  Регистр команды                   
 ┌--┬--┬--┬--┬--┬--┬--┬--┌──┬──┬──┬──┬──┬──┬──┬──┐   
 │15                    8│ 7  6│ 5  4  3│ 2  1  0│   
 └--┴--┴--┴--┴--┴--┴--┴--└─┬┴─┬┴─┬┴─┬┴─┬┴─┬┴─┬┴─┬┘   
   Тип     Команда         │  │  │  │  │  │  │  │    
    I      Restore         0  0  0  0  h  V  r1 r0   r1 r0 — Stepping Motor Rate (6/12/20/30 ms)
    I      Seek            0  0  0  1  h  V  r1 r0   V — Track Number Verify Flag (0: no verify, 1: verify on dest track)
    I      Step            0  0  1  T  h  V  r1 r0   h — Head Load Flag (1: load head at beginning, 0: unload head)
    I      Step-In         0  1  0  T  h  V  r1 r0   T — Track Update Flag (0: no update, 1: update Track Register)
    I      Step-Out        0  1  1  T  h  V  r1 r0   
    II     Read Sector     1  0  0  m  S  E  C  0    C — Side Compare Flag (0: disable side compare, 1: enable side comp)
    II     Write Sector    1  0  1  m  S  E  C  a0   a0 — Data Address Mark (0: FB, 1: F8 (deleted DAM))
    III    Read Address    1  1  0  0  0  E  0  0    E — 15 ms delay (0: no 15ms delay, 1: 15 ms delay)
    III    Read Track      1  1  1  0  0  E  0  0    S — Side Compare Flag (0: compare for side 0, 1: compare for side 1)
    III    Write Track     1  1  1  1  0  E  0  0    m — Multiple Record Flag (0: single record, 1: multiple records)     
    IV     Force Interrupt 1  1  0  1  i3 i2 i1 i0   i3 i2 i1 i0 — Interrupt Condition Flags	
В основном, в работе используются следующие команды:
- C0 — чтение адреса (Read Address) — контроллер находит следующую метку заголовка сектора, читает 6 байт заголовка сектора; важно, что по завершению команды в регистре сектора 177644 находится номер текущей дорожки.
 - 1D — поиск (Seek) — в регистре дорожки 177642 находится номер текущей дорожки, в регистре сектора 177644 — номер дорожки на которую нужно перейти; контроллер перемещает головку на нужную дорожку и обновляет регистр дорожки.
 - 43 — шаг вперёд (Step In), скорость шага 30 мс.
 - 63 — шаг назад (Step Out), скорость шага 30 мс.
 - 80 — запись сектора (Write Sector).
 - F4 — запись дорожки (Write Track) — используется при форматировании диска.
 
Формат дискет: 1 сторона (0), 80 цилиндров (0-79), по 10 секторов (1-10) на трек, 512 байт в секторе.
Структура дорожки
Структура дорожки восстановлена по коду FORML.SAV с дискеты 059.dsk.
Отсчёт идёт от индексного отверстия. Количество байт указано десятичное, байты — шестнадцатеричные значения, в скобках указано что реально записывается на диск, в особых случаях.
  Кол-во байт   Записываемые байты
─────────────────────────────────────────────────
     │  54        4E
     │  12        00
 105-┤   4        F6 (записывается C2)
     │  35        4E
  ──── Начало сектора 1..10 ────────────────────┐
     │   8        00                            │
     │   3        F5 (записывается A1)          │
     │   1        FE — маркер заголовка сектора │
     │   1        tt — номер дорожки 0..79      │
     │   1        00 — сторона: 0 - низ         │
     │   1        0s — номер сектора 1..10      │
     │   1        02 — 512 байт на сектор       │
     │   1(2)     F7 (записывается 2 байта CRC) │
     │  22        4E                            │
     │  12        00                            │
     │   3        F5 (записывается A1)          │
     │   1        FB — маркер данных            │
 612-┤ 512        xx — данные сектора           │
(614)│   1(2)     F7 (записывается 2 байта CRC) │
     │  44        4E                            │
  ──── Конец сектора ───────────────────────────┘
     │ 352        4E — до конца дорожки
─────────────────────────────────────────────────
Всего 6575(6577)
Интерлив секторов
http://zx-pk.ru/threads/15146-ms-0515.html?p=431954&viewfull=1#post431954 Alex_K
Собственно таблица интерлива: 0 1 2 3 4 5 6 7 8 9 ============== 0 5 1 6 2 7 3 8 4 9 4 9 0 5 1 6 2 7 3 8 3 8 4 9 0 5 1 6 2 7 2 7 3 8 4 9 0 5 1 6 1 6 2 7 3 8 4 9 0 5
http://zx-pk.ru/threads/15146-ms-0515.html?p=431962&viewfull=1#post431962 Patron Драйвер DZ переставляет блоки в образе по следующему алгоритму:
int BlockNumber_DZ_Encode( int nBlock )
{
    int track  = nBlock / 10;
    int sector = nBlock % 10;
    int sector_00 = ( track*2 )% 10;
    sector = ( sector_00 + sector*2 )% 10;
    if( nBlock % 10 >= 5 ) sector++;
    track++;
    if( track > 79 ) track=0;
  
    return track*10 + sector;
}
Таймер
Таймер на КР580ВИ53 — трёхканальный. Все регистры — 8-разрядные:
| Канал | Регистр чтения | Регистр записи | Использование | 
|---|---|---|---|
| канал 0 | 177500 | 177520 | Тактирует клавиатуру | 
| канал 1 | 177502 | 177522 | Порт принтера | 
| канал 2 | 177504 | 177524 | Звук и отсчёт интервалов | 
| упр. слово | 177506 | 177526 | 
В процессе загрузки после начальных тестов выдаются звуки (здесь в начале значение задержки таймера, затем вычисленные частоты):
1798 = 6040. = 331.126 Гц ~= 329,63 Гц E 1 октавы 12b9 = 4793. = 417.275 Гц ~= 415,30 Гц G♯ 1 октавы 0fbf = 4031. = 496.155 Гц ~= 493,88 Гц B 1 октавы 0bcc = 3020. = 662.252 Гц ~= 659,26 Гц E 2 октавы 1798 = 6040. = 331.126 Гц ~= 329,63 Гц E 1 октавы
Подпрограмма генерации звука, R3 задаёт задержку для таймера:
174550: BIC #000340, @#177604 ; таймер звука выкл, звук выкл, тон звука выкл 174556: MOVB #000266, @#177526 ; канал 2: будет загрузка младшего и старшего байта, режим 3 (генератор меандра) 174564: MOV #000140, R4 ; значение счётчика = 96. 174570: MOVB R3, @#177524 ; передаём младший байт 174574: SWAB R3 ; 174576: MOVB R3, @#177524 ; передаём старший байт 174602: BIS #000300, @#177604 ; таймер звука вкл, звук вкл 174610: MOV 174652, R0 ; значение малого счётчика = 005777 174614: SOB R0, 174614 ; ожидаем 174616: SOB R4, 174610 ; ожидаем 174620: BIC #000340, @#157706 ; таймер звука выкл, звук выкл, тон звука выкл 174626: MOV @#157706, @#177604 174634: MOV #000002, R4 ; счётчик = 2 174640: MOV 174654, R0 ; значение малого счётчика = 017777 174644: SOB R0, 174644 ; ожидаем 174646: SOB R4, 174640 ; ожидаем 174650: RETURN 174652: .WORD 005777 174654: .WORD 017777
Клавиатура
Порты 177542/177544 должны возвращать 177777 -- наличие ноля в одном из битов показывает что клавиша нажата.
ПЗУ
ПЗУ размером 16 Кбайт.
Известны две версии ПЗУ:
| Усл.название | MD5 checksum | Примечания | 
|---|---|---|
| ROM A | b92cda2d83117ebbba2340acfadbf130 | вначале много 00; есть команда L в пульте; ошибка в подсчёте контрольной суммы ПЗУ | 
| ROM B | 3d60d719ca650b3fab27a0daf0a4d317 | вначале много FF; нет команды L в пульте | 
Процесс загрузки

- Тесты памяти
 - Вывод заставки; тест процессора
 - Тест клавиатуры
 - Тест НГМД:
- команда C0, команда 1D (переход на track 1)
 - 5 команд 43 (переход на track 6), команда C0, проверка того что в регистре сектора появился номер дорожки 6
 - 5 команд 63 (возврат на track 1), команда C0
 
 - Если НГМД не готов то выход в пульт
 - Чтение НГМД track 1 sector 1: команда C0, команда 80 — читаются 512 байт начиная с адреса 000000
 - Запуск с адреса 000000
 
Эмуляция
Существует несколько эмуляторов этого компьютера:
- Мультисистемный эмулятор MESS содержит драйвер 
ms0515[2] - Эмулятор МС-0515 EmuStudio
 - MS0515BTL
 
Ссылки
- Электроника МС 0515/НС4-ТО — Модуль системный НС4. Техническое описание.
 
- Электроника МС 0515 в Википедии
 - Тема «МС-0515» на zx-pk.ru
 - [3] — описание процессора T11, оригинала КР1807ВМ1
 - WD1793 на MSX Info Pages
 - Электроника МС0585, МС0515 — Документация