Дисковая операционная система МИР

Операционная система (ОС) разработана для ЭВМ с процессором i8080 (Радио-86РК, Северная Пальмира, Апогей, Микроша, Партнёр 01.01) и аналогичных: КР580ВМ80А, i8085, Z80 и другие. Помещается в ПЗУ объёмом 8 кб. Обеспечивает минимальный набор команд для работы с файловым интерфейсом CH376.

Система имеет интерпретатор, шаблонизатор, поддерживает выполнение сценариев, программно эмулирует протокол I2C через параллельный порт i8255 (КР580ВВ55), позволяет просматривать графику формата WBMP в размере до 127х127 пикселей, поддерживает работу с файлами и каталогами.

Файловый модуль CH376 подключается в системную шину ЭВМ согласно распиновки модуля. Выводы INT и RST подключать не нужно.

При запуске ОС определит наличие модуля CH376 и носителя информации в нём. Если устройство готово к работе, с носителя информации будет загружен и выполнен сценарий AUTOEXEC.SCP. Если устройство не готово к работе или отсутствует, будет выполнен сценарий из ПЗУ. В этом случае дисковые операции будут недоступны.

Операционная система полность написана на ассемблере в среде Прекрасный Ассемблер (Pretty Intel 8080 Assembler): https://svofski.github.io/pretty-8080-assembler/

Дисковая операционная система МИР

Список команд:

CHKMEM - проверка памяти
SYSINFO - вывод таблицы системных настроек

CLS - очистка экрана
FLUSH N - скролл текста вверх на N строк
CARRIAGE YYXX - установка каретки
TEXT ХХХХ - печать строки с адреса ХХХХ
NL - перевод каретки
XCG - переключение знакогонератора
POINTER XXXX - установка указателя на строку по адресу XXXX

LEDON - включить светодиод РУС/ЛАТ
LEDOFF - выключить светодиод РУС/ЛАТ

BEEP NNMM - звуковой сигнал, где NN - длительность, MM - тон
PEW NNMM - звуковой сигнал, где NN - длительность, MM - тон
DELAY A - задержка на A кадров

JUMP ХХХХ - безусловный переход на адрес ХХХХ, ключ 'L' - режим совместимости
READ ХХХХ - чтение байта из ячейки памяти ХХХХ и вывод на экран
WRITE XXXX AA BB CC ... - запись массива данных в ОЗУ с адреса XXXX
IN XXXX YYYY ZZZZ - чтение данных из порта в ОЗУ с адреса XXXX, адреса на порту с YYYY по ZZZZ
OUT XXXX YYYY ZZZZ - вывод данных в порт из ОЗУ с адреса XXXX по YYYY на PB и PC выводится адрес начиная с ZZZZ
DUMP AAAA BBBB - просмотр памяти с адреса AAAA по адрес BBBB

/ - установка текущего пути

CAT - каталог файлов корневой директории
MCAT ABCDE - создание каталога с именем ABCDE
ERASE ABCDE - удаление файла или каталога каталога с именем ABCDE
HELP - вызов файла справки (клавиша Ф1)
LOAD XXXX ABC* - загрузка файла ABC* в ОЗУ с адреса XXXX
SAVE XXXX YYYY ABC* - сохранение файла ABC* с адреса XXXX и длиной YYYY
CALL ABC* - загрузка файла ABC* в ОЗУ и вызов, ключ 'L' - режим совместимости
VIEW ABC* - загрузка текстового файла ABC* в ОЗУ и просмотр
SCP ABC* - загрузка и интерпретация сценария ABC*

WBMP ABC* - загрузка и отображение картинки с именем ABC*

VAR X - запись значения X в переменную
MVAR X - логическое И с X (маскирование)
IVAR - чтение HEX параметра командной строки и запись в переменную
CVAR - чтение символьного параметра командной строки и запись в переменную
KEYSCAN - Ожидание нажатия клавиши и вывод кода клавиши
IF A B - сравнение переменной с A и выполнение команды B при условии совпадения

I2CSTART AA - выбрать устройство с адресом AA
I2CSTOP - перевод линии передачи в режим ожидания
I2CTX AA BB CC DD... - передача данных
I2CRX - приём данных, ключ '!' - без подтверждения приёма

TASK XXXX - выполнение задачи по адресу XXXX во время простоя

MONITOR - выход в управляющую программу Монитор

Клавиши: Ф1 - помощь, СТР - очистка экрана, HOME - видеорежим без межстрочных интервалов, стрелка вверх - последняя команда, стрелка вниз - текущий путь

Особенности

Если в сценарии перед командой стоит символ @, то эхо отключается.

Команда OUT выдаёт данные в порт и одновременно выводит дамп этих данных. Выход порта PC7 эмулирует сигнал записи во внешнюю микросхему памяти. Команда разработана для прошивки микросхем типа AT28C64. Подключение микросхемы к порту:

PA0 - PA7 → D0 - D7
PB0 - PB7 → A0 - A7
PC0 - PC4 → A8 - A12
PC7 → /CE
/OE → +5V
/WE → GND

Протокол I2C реализован ногодрыгом через параллельный порт ВВ55. Для того, чтобы ОС могла работать по протоколу I2C, необходимо в схему ЭВМ добавить модуль сопряжения:

Протокол I2C для i8080

Сопротивление подтягивающих резисторов можно уменьшить до 4.7 кОм.

Программирование в среде ОС

Внешние программы могут выполнять команды ОС. Для этого в регистровую пару HL нужно поместить адрес строки, в которой написана команда. Далее нужно сделать вызов 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;

ORG $1000
TXT_TITLE: db 'HELLO WORLD!!!', $0A, $0D, $00

Таким образом программы могут загружать файлы и выполнять иные операции.

Для работы с текстами в системе предусмотрен шаблонизатор. Данный механизм позволяет экономить длину строк, и делает вывод структурированных данных удобным. Текстовая строка всегда должна заканчиваться символом $00. Управляющие символы шаблонизатора:

$09 - табуляция, 8 символов
$0A - перевод строки
$0D - возврат каретки
$80 - вывод следующего байта в формате HEX
$81 - вывод следующего слова в формате DEC
$DF - ожидание нажатия клавиши

Следующие управляющие символы используются вместе с указателем на массив структурированных данных - POINTER. Такая конструкция называется шаблон.

$F0-$FF - вывод символа с позиции POINTER + смещение 0..F
$E0-EF - вывод HEX значения байта с позиции POINTER + смещение 0..F
$DB - вывод значения по адресу POINTER в BIN
$D8 - вывод POINTER в формате HEX
$D0-D7 - вывод DEC значения слова с позиции POINTER + смещение 0..8

Таким образом, шаблон для вывода каталога файлов будет выглядеть, как строка:

db $F0, $F1, $F2, $F3, $F4, $F5, $F6, $F7, " ", $F8, $F9, $FA, " ", $EB, " ", $ED, $EC, " ", $D7, $0A, $0D, $00

— где первые 12 байт выводят имя файла с расширением, далее атрибут файла (HEX), начальный кластер файла (HEX), длина файла (DEC) и конец строки.

Чтобы вывести на экран следующую строку каталога файлов, достаточно переместить POINTER на нужную запись и снова вызвать вывод шаблона. Так можно делать вывод записей структурированной базы данных. Аналогично в ОС реализованы шаблоны вывода дампа и вывода длины загружаемых файлов.

Для работы в сценариях есть одна единственная переменная. В эту переменную записываются результаты операций READ, KEYSCAN и I2CRX. Оператор IF делает сравнение с этой переменной. Если использовать команды WRITE и I2CTX без аргумента, то аргументом становится значение переменной. Например, команда WRITE 0 запишет в нулевую ячейку памяти содержимое переменной.

Выполнение простых фоновых задач происходит во время опроса клавиатуры. Если клавиши клавиатуры не нажимаются, происходит вызов CALL по адресу заданному командой TASK.

Программирование в среде ОС МИР