Дисковая операционная система «МИР»
Компактная дисковая операционная система (ОС), разработанная для отечественных ретро-ЭВМ на базе процессора i8080 / КР580ВМ80А и совместимых с ними (i8085, Z80).
Система полностью написана на ассемблере в среде Прекрасный Ассемблер (Pretty Intel 8080 Assembler). Весь код ОС оптимизирован и помещается в ПЗУ объёмом 8 КБ.
📌 Основные возможности
- Поддерживаемые платформы: Радио-86РК, Северная Пальмира, Апогей, Микроша, Партнёр 01.01 и аналоги.
- Файловый интерфейс: Работа с файлами и каталогами через популярный контроллер CH376.
- Скриптинг и автоматизация: Поддержка выполнения сценариев (командных файлов), встроенный интерпретатор и шаблонизатор текстового вывода.
- Аппаратная эмуляция: Программная реализация протокола I2C и программатора EEPROM через параллельный порт i8255 (КР580ВВ55).
- Графика: Просмотр монохромных изображений формата WBMP размером до 127×127 пикселей.
- Квази-многозадачность: Выполнение простых фоновых задач во время простоя (опроса клавиатуры).
🔌 Подключение оборудования
Модуль CH376
Файловый модуль CH376 подключается к системной шине ЭВМ согласно распиновке модуля. Выводы INT и RST подключать не нужно.
При запуске ОС автоматически определяет наличие модуля CH376 и установленного носителя информации:
-
Устройство готово: с носителя автоматически загружается и выполняется сценарий
AUTOEXEC.SCP. - Устройство отсутствует/не готово: выполняется резервный сценарий из ПЗУ (в этом случае дисковые операции блокируются).
Программатор EEPROM (Команда OUT)
Команда OUT выдает данные в порт и одновременно отображает их дамп. Выход порта PC7 эмулирует сигнал записи. Схема разработана для прошивки микросхем типа AT28C64 со следующим подключением к ВВ55:
-
PA0–PA7→D0–D7 -
PB0–PB7→A0–A7 -
PC0–PC4→A8–A12 -
PC7→/CE -
/OE→+5V -
/WE→GND
Модуль сопряжения I2C
Протокол I2C реализован программным методом («ногодрыгом») через параллельный интерфейс ВВ55. Для работы требуется добавить в схему ЭВМ простейший модуль сопряжения:
Примечание: Сопротивление подтягивающих резисторов можно уменьшить до 4.7 кОм.
💻 Справочник команд
Горячие клавиши
-
Ф1— Вызов справки (HELP) -
СТР— Очистка экрана (CLS) -
HOME— Переключение в видеорежим без межстрочных интервалов -
Стрелка вверх— Повтор последней команды -
Стрелка вниз— Вывод текущего пути
Файловая система и навигация
| Команда | Описание |
|---|---|
><имя.расширение> |
Быстрое открытие файла с указанным именем ABC*. Поддерживаются: .TXT, .SCP, .WBM, .BIN, .RK*
|
/ |
Установка текущего рабочего пути |
CAT |
Просмотр каталога файлов корневой директории |
MCAT <имя> |
Создание каталога с указанным именем |
ERASE <имя.расширение> |
Удаление файла или каталога |
LOAD <адрес> <имя.расширение> |
Загрузка файла в ОЗУ по указанному HEX-адресу |
SAVE <адрес> <длина> <имя.расширение> |
Сохранение области памяти в файл (адрес и длина в HEX) |
CALL <имя.расширение> [L] |
Загрузка файла в ОЗУ и его запуск. Ключ L — режим совместимости |
VIEW <имя.расширение> |
Загрузка и просмотр текстового файла |
SCP <имя.расширение> |
Загрузка и интерпретация сценария (скрипта) |
WBMP <имя.расширение> |
Загрузка и отображение картинки формата WBMP |
HELP |
Вызов файла справки |
Работа с памятью и портами ввода-вывода
| Команда | Описание |
|---|---|
CHKMEM |
Тестирование и проверка оперативной памяти |
SYSINFO |
Вывод таблицы текущих системных настроек |
DUMP <старт> <конец> |
Просмотр дампа памяти в HEX-формате между адресами |
READ <адрес> |
Чтение байта из ячейки памяти, вывод на экран и запись в переменную |
WRITE <адрес> [данные...] |
Запись массива HEX-данных в ОЗУ. Если данные не указаны, запишется значение переменной |
IN <адрес> <начало> <конец> |
Чтение данных из ППА порт A (адреса на портах BC начало/конец) в ОЗУ по указанному адресу |
OUT <адрес> <конец> <начало> |
Вывод данных в ППА порт A из ОЗУ (адреса на портах BC начало/конец) с одновременным выводом дампа |
JUMP <адрес> [L] |
Безусловный переход по HEX-адресу. Ключ L — режим совместимости |
Интерфейс, звук и переменные
| Команда | Описание |
|---|---|
CLS |
Очистка экрана |
FLUSH <N> |
Прокрутка (скролл) текста вверх на N строк |
CARRIAGE <YYXX> |
Установка каретки в координаты YY (строка), XX (столбец) |
TEXT <адрес> [!] |
Печать строки с HEX-адреса. Ключ ! — вывод с текущей позиции курсора |
NL |
Перевод каретки (новая строка) |
XCG |
Переключение знакогенератора (смена шрифта) |
POINTER <адрес> |
Установка указателя на строку/шаблон по адресу |
LEDON / LEDOFF
|
Включение / выключение светодиода РУС/ЛАТ |
BEEP <длина> <тон> |
Звуковой сигнал (параметры в HEX) |
PEW <длина> <тон> |
Альтернативный звуковой сигнал (эффект, параметры в HEX) |
DELAY <A> |
Задержка выполнения на A кадров |
VAR <значение> |
Прямая запись HEX-значения в системную переменную |
MVAR <значение> |
Логическое И (маскирование) переменной с указанным значением |
IVAR |
Чтение HEX-параметра из командной строки и его запись в переменную |
CVAR |
Чтение символьного параметра из командной строки и его запись в переменную |
KEYSCAN |
Ожидание нажатия клавиши и запись её кода в переменную |
IF <значение> <команда> |
Сравнение переменной со значением. При совпадении выполняется команда |
TASK <адрес> |
Задание адреса фоновой задачи, выполняемой во время простоя |
Управление шиной I2C
| Команда | Описание |
|---|---|
I2CSTART <адрес> |
Старт-условие и выбор I2C-устройства по HEX-адресу |
I2CSTOP |
Стоп-условие, перевод линии передачи в режим ожидания |
I2CTX [данные...] |
Передача данных. Если аргумент пуст, передается значение переменной |
I2CRX [!] |
Прием данных в переменную. Ключ ! — прием без подтверждения (NACK) |
Системные утилиты
| Команда | Описание |
|---|---|
MONITOR |
Выход из ОС в штатную управляющую программу «Монитор» ЭВМ |
🛠 Программирование и интеграция с ОС
Вызов команд ОС из внешних программ
Внешнее ПО может использовать парсер команд ОС. Для этого в регистровую пару HL передается адрес строки с командой (строка должна оканчиваться байтом $00), после чего выполняется CALL на точку входа Адрес ОС + 3.
Пример для ЭВМ Радио-86РК:
ORIGIN equ $0000
OS equ $E000
ORG ORIGIN
LXI H, CMD_TITLE ; Загружаем адрес команды
CALL OS + 3 ; Вызываем интерпретатор ОС
RET
CMD_TITLE: db 'TEXT 1000', $00; Вызвать команду TEXT для адреса $1000
ORG $1000
TXT_TITLE: db 'HELLO WORLD!!!', $0A, $0D, $00
Интересная особенность: При вызове команды CALL в регистр процессора A автоматически записывается текущее значение внутреннего счетчика тактов ОС. Это удобно использовать в качестве сида (seed) для генераторов псевдослучайных чисел (ГПСЧ).
Сценарии (Скрипты)
Если в .SCP сценарии перед командой указан символ @, то для этой строки отключается вывод эха в консоль.
ОС поддерживает одну системную переменную. В неё пишутся результаты команд READ, KEYSCAN и I2CRX. Команда IF сравнивает значение этой переменной, а команды WRITE и I2CTX, вызванные без параметров, берут данные из неё. К примеру, WRITE 0000 запишет байт из переменной в адрес $0000.
Фоновые задачи
Выполнение простых фоновых подпрограмм происходит автоматически в цикле опроса клавиатуры. Если пользователь не нажимает клавиши, ОС непрерывно выполняет инструкцию CALL по адресу, предварительно заданному командой TASK.
📊 Текстовый шаблонизатор
Для экономии памяти и удобного вывода структурированных данных (например, таблиц или списков) в ОС встроен шаблонизатор. Текстовая строка шаблона всегда должна завершаться байтом $00.
Управляющие символы общего назначения:
-
$09— Табуляция (фиксированная, 8 символов) -
$0A— Перевод строки (LF) -
$0D— Возврат каретки (CR) -
$80— Взять следующий за этим кодом байт и вывести как HEX -
$81— Взять следующее за этим кодом слово и вывести как DEC -
$DF— Интерактивная пауза (ожидание нажатия любой клавиши)
Динамические макросы (работают в связке с адресом из POINTER):
Конструкция берет данные из памяти со смещением относительно адреса, заданного командой POINTER.
-
$F0–$FF— Вывод ASCII-символа из структуры со смещением0..F -
$E0–$EF— Вывод HEX-значения байта со смещением0..F -
$D0–$D7— Вывод DEC-значения слова со смещением0..8 -
$DB— Вывод значения по адресуPOINTERв бинарном виде (BIN) -
$D8— Вывод самого адресаPOINTERв формате HEX
Пример шаблона для вывода строки каталога файлов:
; Имя файла (8+3 байта), пробел, атрибут (HEX), кластер (HEX), длина (DEC), перенос строки
dir_item_tpl: db $F0, $F1, $F2, $F3, $F4, $F5, $F6, $F7, " ", $F8, $F9, $FA, " ", $EB, " ", $ED, $EC, " ", $D7, $0A, $0D, $00*
Для перебора элементов (базы данных или списка файлов) достаточно изменять значение POINTER на следующую структуру и заново отправлять шаблон на печать.


