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

топ 100 блогов vinxru — 09.01.2014 https://github.com/vinxru/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 сразу перейдет к загрузке программы с магнитофона. Если при запуске компьютера зажать клавишу ?, то MXOS пропустит запуск B:AUTOEX.BAT.

При перезагрузке инициируемой программами запускается лишь A:NC.COM.

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

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

В отличии от "монитора" стандартного Специалиста, MXOS не содержит режима работы с консоли и соответственно директив вводимых с клавиатуры. Вся работа происходит в диалоговом режиме.

Оболочка поддерживает две панели, как Norton Commander.

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

Клавиши выполняют следующие команды:

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

Есть и другие клавиши, но я пока не разбирался

Раскрасил командер



Добавил ключ ENABLE_COLOR, который включает эту раскраску.

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


Ядро (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

Оставить комментарий

Архив записей в блогах:
Смотришь телевизор и читаешь разные форумы и группы Антимайдана! Приезжаешь на Донбасс! Делаешь селфи на фоне БТРа, танка! Едешь на стрельбы! Первый бой! Если повезло, отправляешься назад без ноги или руки! Если нет - отправляешься грузом 200! Все.... проект "русский мир" для конкретного ч ...
люди не летают как птицы? так любят учить других жить? А? Объясните мне природу это навязчивого стремления? Вот, заметила, даже если написать большими буквами  НЕ ДАВАЙТЕ МНЕ СОВЕТОВ, то обязательно кто-то откоментирует, в духе "слушай меня, сейчас я научу тебя как правильно не ...
В "Нашей Украине" не комментируют результаты экзит-полов и верят в победу ...
Осторожно, очень осторожно предполагаю: говорят, что сезон будет не очень высокий. Говорят, что поезда будут не очень загружены... То есть, билеты будут! Удобные билеты будут, и народа в поездах будет не ...
 Те, кого мы называем детьми родились примерно в 1997-99 г.г. Тогда мы уже умели ходить, говорить, учились писать и читать.... Они никогда не пели "белые розы" и "желтые тюльпаны". Не танцевали макарену или ламбаду , не запирались в комнате, слушая Арию ...