Электроника МС 0515: различия между версиями
Nzeemin (обсуждение | вклад) |
Xolod (обсуждение | вклад) Нет описания правки |
||
(не показано 25 промежуточных версий 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> | ||
Строка 204: | Строка 269: | ||
</pre> | </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> | |||
== Таймер == | |||
Таймер на КР580ВИ53 — трёхканальный. | |||
Все регистры — 8-разрядные: | |||
{|class=standard style="text-align: center" | |||
! Канал !! Регистр чтения !! Регистр записи !! Использование | |||
|- | |||
| канал 0 || 177500 || 177520 || Тактирует клавиатуру | |||
|- | |||
| канал 1 || 177502 || 177522 || Порт принтера | |||
|- | |||
| канал 2 || 177504 || 177524 || Звук и отсчёт интервалов | |||
|- | |||
| упр. слово || 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> | |||
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 | |||
</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|Экран в процессе загрузки]] | |||
# Тесты памяти | |||
# Вывод заставки; тест процессора | |||
# Тест клавиатуры | # Тест клавиатуры | ||
# Тест НГМД: | # Тест НГМД: | ||
Строка 211: | Строка 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 — Документация