Операционная система MXOS компьюетра Специалист МХ

Исправленные недоработки.
В файле DOS.SYS
● BIG_MEM - Поддержка ДОЗУ большего объема, чем 64 Кб
● ROM_64K - Размер ПЗУ у Специалиста MX2 всего 64 Кб, но без этой опции будет работать лишь 32 Кб
● LOAD_FONT - Загружать шрифт в ОЗУ (ускорение работы и возможность загрузки ОС с любого накопителя)
● DISABLE_COLOR_BUG - Включить инициализацию контроллера цвета при запуске
В файле NC.COM
● ENABLE_COLOR - Включить цвет
● BIG_MEM - Поддержка ДОЗУ большего объема, чем 64 Кб
● DISABLE_FREE_SPACE_BUG - Исправить ошибку определения свободного объема
О чем я вообще?
MXOS - это название операционной системе я дал сам, поскольку оригинального названия я не нашел. Народ её называл командер, а внутри оперционки содержатся лишь строки: BIOS 4.40, COMMANDER VERSION 1.4, (C) OMSK 1992.
MXOS это альтернативная операционная система для компьютера Специалист МХ. Оригинальна операционная система называлась RamFOS.
В отличии от RamFOS эта операционная система написана более грамотно. Для доступа к накопителям используются драйвера. Чтение и запись происходит 256 байтными блоками. В RamFOS доступ был побайтный и при том частый и хаотичный, что не позволяло подключить дисковд или SD карту в качестве накопителя.
Так же MXOS более шустрая и обладает более приятным интерфейсом напоминающим Norton Commander. Любое расширение файла можно привязать к любой программе. Список соответствий хранится в файле NC.EXT, максимальный размер которого 36 Кб.
Но при этом MXOS содержит меньше сервисных возможностей и не совместима с RamFOS и стандартным Специалистом. Основные отличия, это:
● Нет поддерживаемых системой верхней и нижней строки состояния
● Система не содержит форму для открытия файла
● Нет поддержки звука на основе ВИ53
● Нет поддержки цвета (хотя и RamFOS его полноценно не поддерживал и не использовал вообще)
● Поддерживается значительно меньше специальных кодов при выводе на экран
● Поддерживается лишь одна модель принтера
● Оригинальная ОС поддерживает лишь 64 Кб дополнительного ОЗУ (что в сумме дает 128 Кб), которое используется как RAM-диск. Запуск с большим объемом памяти приведет к зависанию, так как в порт выподра страницы записывается случаное число. Исправленная версия ОС поддерживает 448 Кб дополнительной памяти, т.е. 7 страниц как накопители B-H.
Многие возможности можно реализовать дополнительными модулями. Например, в комплекте идет драйвер ПЗУ подключаемого к порту расширения. Таким же образом могла быть выполнена поддержка дисковода, но драйвера у меня нет.
Поддерживаются две кодировки KOI-7 и KOI-8, переключаемые как с клавиатуры, так и ESC-последовательностями (ESC+'(' и ESC+')'). Знакогенератор содержит 256 символов.
Используется раскладка клавиатуры Стандартного специалиста. У MX отличаются коды клавиш F1-F10, TAB, ESC.
MXOS поддерживает BAT-файлы и передачу аргументов запускаемым программам. При холодной перезагрузке запускается файл B:AUTOEX.BAT, затем A:FORMAT.COM B:, а затем A:NC.COM. Устройство A: - это ПЗУ, устройство B: - это оперативная память. Максимально поддерживается 8 устройств.
При создании собственного ПЗУ (загрузочного диска A:) вы можете разместить AUTOEX.BAT так же и на диске A:, а в нем разместить запуск драйверов.
Запуск MXOS

Если при запуске компьютера зажать клавишу ?, то MXOS сразу перейдет к загрузке программы с магнитофона. Если при запуске компьютера зажать клавишу ?, то MXOS пропустит запуск B:AUTOEX.BAT.
При перезагрузке инициируемой программами запускается лишь A:NC.COM.

Имя файла состоит из 6+3 символов. Ввод расширения при запуске файла из ком. строки обязателен. Папки самой операционной системой не поддерживаются, но это можно реализовать через драйверы. Максимальное кол-во файлов в папке - 48 шт, но оболочка поддерживает отображение лишь 36 файлов. Остальные файлы вы не увидите, не сможете выполнять над ними действия из оболочки, но сможете запустить их ком строки. Максимальный размер файла - 64 Кб, но оболочка может работать лишь с ~36 Кб. При попытке скопировать (и т.п.) файл большего размера произойдет переполнение буфера, уничтожение системных переменных, затем экрана, затем самой ОС в зависимости от размера файла. Структура хранения файлов напоминает FAT, только используются 8 битные номера кластеров.
В отличии от "монитора" стандартного Специалиста, MXOS не содержит режима работы с консоли и соответственно директив вводимых с клавиатуры. Вся работа происходит в диалоговом режиме.
Оболочка поддерживает две панели, как Norton Commander.

Клавиши выполняют следующие команды:
● ESC - Очистка ком строки
● TAB - Переход между панелями
● F1, F2 - Выбор накопителя для левой и правой панели
● F3 - Отображение на неактивной панели информации о накопителе активной панели (как на фото выше)
● F4 - Запуск внешнего редактора E.COM для выбранного файла
● F5 - Копирование файла
● F6 - Изменение имени файла / перемещение
● F7 - Загрузка файлов с ленты (магнитофона) на накопитель
● F8 - Удаление файла
● F9 - Сохранение файла с накопителя на ленту
Есть и другие клавиши, но я пока не разбирался
Раскрасил командер
Добавил ключ ENABLE_COLOR, который включает эту раскраску.

Ядро (DOS.SYS)
Представляет собой набор подпрограмм по адресу C800h. Это
подпрограммы обслуживания
экрана, принтера, клавиатуры и накопителя на магнитой ленте и
файловой системы.
Зеленым отмечены функции соврапающие со стандратным
Специалистом. Но галвная проблема
невосместимости - Аппаратная. Адрес порта клавиатуры у MX
изменен.
C800h | reboot | Запуск файла A:NC.COM |
C803h | getch | Ввод символа с клавиатуры; A-код |
C806h | tapeRead | Ввод байта с ленты; A-код; если ошибка, то происходит переход на адрес по адресу 8FE1h |
C809h | printChar | Вывод байта на экран; C-код |
C80Сh | tapeWrite | Вывод байта на ленту; C-байт |
C80Fh | input | Ввод строки с клавиатуры |
C812h | keyScan | Ввод кода нажатой клавиши; A-код; иначе-0FFh |
C815h | printHexByte | Вывести 16-ричное число на экран; A-число |
C818h | printString | Вывод строки символов на экран, до нулевого байта; HL-начало строки |
C81Bh | keyScan | Ввод кода нажатой клавиши; A-код; иначе-0FFh |
C81Eh | getCursorPos | Получить координаты курсора в HL (координаты в пикселях) |
C821h | setCursorPos | Установить координаты курсора из HL (координаты в пикселях) |
0C824h | tapeLoad | Загрузить программу с ленты |
0C827h | tapeSave | Сохранить программу на ленту |
0C82Ah | calcCrc | Расчет контрольной суммы |
C82Dh | printHexWord | Вывести 16-ричное число на экран; HL-число |
C830h | getMemTop | Получить объем доступной памяти; HL-объем |
C833h | setMemTop | Установить объем доступной памяти; HL-объем |
C836h | printer | Вывод байта на принтер |
C838h | - | Переход на 0C800h |
C83Сh | reboot2 | Запустить A:NC.COM (стандартную точку С800h можно изменить) |
C83Fh | fileList | Получить список файлов |
C842h | fileGetSetDrive | Получить/установить активное устройство |
C845h | fileCreate | Создать файл |
C848h | fileLoad | Загрузить файл по адресу из заголовка этого файла |
C84Bh | fileDelete | Удалить файл |
C84Eh | fileRename | Переименовать файл |
C851h | fileLoadInfo | Загрузить информацию о файле |
C854h | fileGetSetAddr | Получить/установить адрес загрузки файла |
C857h | fileGetSetAttr | Получить/установить атрибуты файла |
C85Ah | fileNamePrepare | Преобразовать имя файла во внутренний формат |
C85Dh | fileExec | Запустить файл |
C860h | installDriver | Установить драйвер накопителя |
C863h | diskDriver | Драйвер выбранного диска |
C866h | fileLoad2 | Загрузить файл по адресу |
Стандартные служебные ячейки
8FE1h | 2 | tapeError | Адрес куда происходит переход при ошибке чтения с ленты |
8FE3h | 2 | tapeAddr | Адрес программы загруженной с ленты |
8FE7h | 2 | charGen | Адрес альтернативного знакогенератора; адрес необходимо разделить на 8 |
8FE9h | 1 | cursorCfg | Внешний вид курсора (7 - бит видимость, 654 - положение, 3210 - высота) |
8FEAh | 1 | koi8 | 0FFh=включен KOI-8, 0=включен KOI-7 |
8FEBh | 1 | escMode | Обработка ESC-последовательности |
8FECh | 1 | keyLocks | Состояние клавиш CAPS LOCK и РУС/LAT |
8FEFh | 2 | lastKey | Две последние нажатые клавиши |
8FF1h | 2 | beep | Длительность и частота звукового сигнала |
8FF4h | 1 | repeat | Задержка повтора клавиш |
8FFAh | 2 | inverse | 0=нормальный текст, 0FFFFh=инверсный текст |
8FFCh | 1 | cursorY | Положение курсора по вертикали в пикселях |
8FFDh | 1 | cursorX | Положение курсора по горизонтали в пикселях / 2 |
8FFEh | 1 | writeDelay | Скорость при записи на ленту |
8FFFh | 1 | readDelay | Скорость при чтении с ленты |
Карта памяти
0000h - 8FDEh | 36830 байт | Свободная память |
8FDFh - 8FFFh | 33 байта | Системные переменные |
9000h - BFFFh | 12 Кб | Экран |
C000h - СFFFh | 4 Кб | DOS.SYS (после ~CE94h свободно) |
D000h - E1FFh | 4608 байт | NC.COM (после ~E11Bh свободно) / FORMAT.COM |
E200h - FAFFh | 6 Кб | Резерв под драйвера |
FB00h - FDFFh | 768 байт | Дисковый буфер |
FF00h - FF81h | 130 байт | Коммандная строка. Заполняется fileExec |
FF82h - FFC0h | 62 байта | Стек |
FFC0h - FFEFh | 32 байта | DOS.SYS |
FFD0h - FFFFh | 32 байта | Оборудование |
Формат файловой системы FAT8
Оригинальная ОС поддерживает лишь 64 Кб ДОЗУ и при запуске с большим объемом зависнет. Это происходит из за того, что
в регистр страницы ДОЗУ записывается случайное значение.
Исправленная ОС (опция BIG_MEM) по умолчанию 7 первых страниц ДОЗУ отображает как накопители B-H.
Операционная система адресует диски 256 байтными блоками. А так как последние 64 байта адресного пространства всегда занимают
основное ОЗУ и устройства, то целых блоков получается 255.
То есть операционная система не использует последние 192 байта памяти. Только NC.COM в конце нулевой страницы (FF00h-FF0Ah) хранит своё состояние.
Файловая система подобна FAT. Накопитель максимальным объемом 64 КБ разбит на 256 блоков по 256 Кб.
Первые 4 блока содержат служеюную информацию. Нулевой блок таблицу FAT, следующие 4 блока - каталог.
Таблица FAT содержит 256 чисел. Число 5 по адресу 8, значит что за 8 блоком следует читать 5-ый блок. Последний блок замыкается сам на себя, то есть у последнего блока в ячейке 7 должно быть число 7. Свободным блокам в таблице FAT соответствует число 0. Первые 4 числа в таблице не используются, как и не используются блоки с нмоерами 0-3 для хранения файлов.
Каталог находящийся в блоках 1-3 содержит список файлов. 48 файлов по 16 байт на каждый. Если первый байт имени файла FFh,
значит файл не существует.
Структура записи следующая:
6 байт - имя файла 3 байта - расширение файла 1 байт - атрибуты файла 2 байт - адрес загрузки файла 2 байт - длина файла - 1 1 байт - ? 1 байт - первый кластер файла
После включения компьютера процессор начинает выполнять программу с начала ПЗУ. Эта ПЗУ имеет такой же формат как и ДОЗУ и
представлена в системе диском A:
Первые 4 байта ПЗУ, то есть таблицы FAT содержат команду перехода. Сам же загрузчик может обычно размещаться в конце каталога. Если первый символ имени файла FF, то остальные 15 байт записи могут содержать произвольные данные.
Но загрузчик можно размещать в любом блоке, который может быть даже помечен как свободный. При использовании неизменного ПЗУ это никогда не приведет к ошибке.
В оригинальной системе ПЗУ по адресам 800h-FFFh олжно содержать знакогенератор. Перед выводом каждого символа на экран, этот
символ будет копировать из ПЗУ в ОЗУ. Что не только медленно, но и не позволяет отвязать систему от ПЗУ.
И еще хвала TASM :)
Здорово, что в tasm есть макросы из языка Си. Код получается на порядок понятнее.
#define G_WINDOW(X,Y,W,H) .db 2, Y, 90h+(X>>3), H-6, (W>>3)-2 #define G_HLINE(X,Y,W) .db 1, Y, 90h+(X>>3), (((X&7)+W+7)>>3)-2, 0FFh>>(X&7), (0FF00h>>((W+X)&7)) & 0FFh #define G_VLINE(X,Y,H) .db 3, Y, 90h+(X>>3), H, 80h>>(X&7) g_filePanel: G_WINDOW(0, 0, 192, 230) ; было 2, 0, 90h, 0E0h, 16h G_HLINE(4, 208, 184) ; было 1, 0D0h, 90h, 16h, 0Fh, 0F0h G_VLINE(96, 3, 205) ; было 3, ?, 9Ch, 0CDh, 80h .db 0 g_infoPanel: G_WINDOW(0, 0, 192, 230) ; было 2, 0, 90h, 0E0h, 16h G_HLINE(4, 31, 184) ; было 1, 1Fh, 90h, 16h, 0Fh, 0F0h
|
</> |