Важная информация

User Tag List

Показано с 1 по 10 из 64

Тема: ОС для Специалиста_МХ: Commander/MXOS

Древовидный режим

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #1
    Moderator Аватар для fifan
    Регистрация
    30.05.2007
    Адрес
    г. Лянтор, Сургутского р-на, ХМАО
    Сообщений
    4,165
    Спасибо Благодарностей отдано 
    106
    Спасибо Благодарностей получено 
    125
    Поблагодарили
    71 сообщений
    Mentioned
    4 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию ОС для Специалиста_МХ: Commander/MXOS

    Хочу начать новую тему касаемую программного обеспечения для Специалиста_МХ Commander, далее доработанного Vinxru до MXOS.

    Я давно хотел свести данные по этому ПО в отдельную тему. Последним толчком для этого послужило написание мною драйвера дисковода под Commander. Обо всём по порядку. Я буду пользоваться описанием данного ПО когда-то предоставленным HardWareMan'ом и выдержками с описания MXOS от Vinxru.

    Commander написал в 1992 году Константин Юденцов (ныне покойный) и он является альтернативной RAMFOS'у операционной системой для Специалиста_МХ. Основными достоинствами/недостатками являются:
    1. нет поддерживаемых системой верхней и нижней строки состояния;
    2. система не содержит форму для открытия файла;
    3. нет поддержки звука на основе К580ВИ53;
    4. нет поддержки цвета;
    5. поддерживается значительно меньше специальных кодов при выводе на экран;
    6. поддерживается лишь одна модель принтера;
    7. поддерживается лишь 64 кБайт дополнительного ОЗУ (что в сумме дает 128 кБайт), которое используется как RAM-диск.



    Поддерживаются две кодировки KOI-7 и KOI-8, переключаемые как с клавиатуры, так и ESC-последовательностями (ESC+'(' и ESC+')'). Знакогенератор содержит 256 символов. Используется раскладка клавиатуры Стандартного специалиста. При холодной перезагрузке запускается файл B:AUTOEX.BAT, затем A:FORMAT.COM B:, а затем A:NC.COM. Устройство A: - это ПЗУ, устройство B: - это оперативная память. Максимально поддерживается 8 устройств.
    При перезагрузке инициируемой программами запускается лишь A:NC.COM. Папки самой операционной системой не поддерживаются, но это можно реализовать через драйверы. Максимальное количество файлов в папке - 48 штук, но оболочка поддерживает отображение лишь 36 файлов. Остальные файлы Вы не увидите, не сможете выполнять над ними действия из оболочки, но сможете запустить их командной строки. Максимальный размер файла - 64 кБайт, но оболочка может работать лишь с ~36 кБайт. При попытке скопировать (и т. п.) файл большего размера произойдет переполнение буфера, уничтожение системных переменных, затем экрана, затем самой ОС в зависимости от размера файла.

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

    Следующий раз я приведу структуру FAT, используемую в Commander'е. Остальное можно прочитать здесь.

    - - - Добавлено - - -

    Продолжу.

    Commander поддерживает лишь 64 кБайт RAM-диска и отображается как накопители B-H. Причём при старте эти диски являются копиями друг друга. Но каждый из этих дисков можно настроить под свои нужды используя свои драйверы (что и сделал я). Система адресует диски 256 байтными блоками. А так как последние 64 байта адресного пространства всегда занимают основное ОЗУ и устройства, то целых блоков получается 255.

    Файловая система подобна FAT. Накопитель максимальным объемом 64 кБайт разбит на 256 блоков (кластеров) по 256 байт. Первые 4 кластера содержат служебную информацию. Нулевой кластер - это таблица FAT, следующие 4 кластера - каталог.
    Таблица FAT содержит 256 чисел. Число 5 по адресу 8, значит что за 8 блоком следует читать 5-ый блок. Последний блок замыкается сам на себя, то есть у последнего блока в ячейке 7 должно быть число 7. Свободным блокам в таблице FAT соответствует число 0. Из рисунка видно как выглядит распределение чисел в FAT в зависимости от номера кластера и количество кластеров.
    Каталог находящийся в кластерах с 1-го по 3-й содержит список файлов. 48 файлов по 16 байт на каждый. Конец каталога - это байт FFh в начале имени файла.

    Нажмите на изображение для увеличения. 

Название:	Commander1.jpg 
Просмотров:	705 
Размер:	98.9 Кб 
ID:	57407

    Формат дескриптора файла:
    6 байт - имя файла;
    3 байта - расширение файла;
    1 байт - атрибуты файла: 00h - обычный файл, 01h - системный файл;
    2 байта - начальный адрес загрузки в ОЗУ, он же и стартовый;
    2 байта - размер файла в байтах - 1;
    1 байт - ?;
    1 байт - номер первого кластера в FAT.

    Я не зря в предпоследнем байте поставил знак вопроса. У HardWareMan'а - это флаг автозапуска, 00h - данные, FFh - программа. А вот Vinxru так и не понял его назначения. Я в одном месте листинга MXOS нашёл, что при создании файла почему-то сюда записывается как бы "накопленный" байт, который получается при суммировании всех байтов программы, но не является контрольной суммой файла.

    В следующий раз я опишу MXOS от Vinxru, которая является доработанной/переработанной версией Commander'а.

    Здесь я цитирую со своей редакцией описание ПО Vinxru (https://github.com/alemorf/retro/tre...pecialist-mxos).

    MXOS - это название операционной системе я дал сам, поскольку оригинального названия я не нашел.
    Исправленные недоработки:
    В файле DOS.SYS
    1. поддержка ДОЗУ (RAM-диска) большего объема, чем 64 кБайт;
    2. размер ПЗУ у Специалиста_MX2 всего 32 кБайт;
    3. загрузка шрифта в ОЗУ (ускорение работы и возможность загрузки ОС с любого накопителя);
    4. включена инициализация контроллера цвета при запуске.

    В файле NC.COM
    1. включен цвет;
    2. Bподдержка ДОЗУ (RAM-диска) большего объема, чем 64 кБайт;
    3. исправлена ошибка определения свободного объема.

    MXOS более шустрая и обладает более приятным интерфейсом напоминающим Norton Commander. Любое расширение файла можно привязать к любой программе. Список соответствий хранится в файле NC.EXT, максимальный размер которого 36 кБайт. Но при этом MXOS содержит меньше сервисных возможностей и не совместима с RAMFOS'ом. Оригинальная ОС (Commander) поддерживает лишь 64 кБайт дополнительного ОЗУ (что в сумме дает 128 кБайт), которое используется как RAM-диск. Запуск с большим объемом памяти приведет к зависанию, так как в порт выбора страницы записывается случайное число. Исправленная версия ОС поддерживает 448 кБайт дополнительной памяти, т. е. 7 страниц как накопители B...H. Многие возможности можно реализовать дополнительными модулями. Например, в комплекте идет драйвер ПЗУ подключаемого к порту расширения.
    MXOS поддерживает BAT-файлы и передачу аргументов запускаемым программам. При холодной перезагрузке запускается файл B:AUTOEX.BAT, затем A:FORMAT.COM B:, а затем A:NC.COM. Устройство A: - это ПЗУ, устройство B: - это оперативная память. Максимально поддерживается 8 устройств. При создании собственного ПЗУ (загрузочного диска A вы можете разместить AUTOEX.BAT так же и на диске A:, а в нем разместить запуск драйверов. Если при запуске компьютера зажать клавишу ?, то MXOS сразу перейдет к загрузке программы с магнитофона. Если при запуске компьютера зажать клавишу ?, то MXOS пропустит запуск B:AUTOEX.BAT.
    В отличии от "монитора" стандартного Специалиста, MXOS не содержит режима работы с консоли и соответственно директив вводимых с клавиатуры. Вся работа происходит в диалоговом режиме.
    В оригинальной системе ПЗУ по адресам 800h...FFFh должно содержать знакогенератор. Перед выводом каждого символа на экран, этот символ будет копировать из ПЗУ в ОЗУ. Что не только медленно, но и не позволяет отвязать систему от ПЗУ.



    Теперь пришло время рассказать о прекрасном инструменте от автора называемым "подключаемыми драйверами накопителя". Авторы вышеупомянутого ПО и b2m всегда высказывались, что достаточно просмотреть файл DISK_H.COM и всё сразу станет понятным о механизме подключения сторонних накопителях.

    Давайте рассмотрим этот драйвер (дизассемблированный листинг от Vinxru, но в мнемонике Z80). Т.к. он не большой я приведу его полностью.
    Обработчик имеет три функции (номер передаётся в регистре Е):
    1 - записать блок (256 байт, номер блока в регистре D, адрес в HL);
    2 - считать блок (256 байт, номер блока в регистре D, адрес в HL);
    3 - выдать размер диска (в блоках, в регистре А).
    Обратиться к обработчику текущего диска можно по адресу С863h.

    ; Установить драйвер
    org #fa00
    ld a, #07
    ld hl, #fa0f
    jp sys_installDriver ; посадить обработчик на один из 8 дисков

    ; Сделать активным диск H
    LFA08 ld e, #01
    ld a, #07
    jp sys_fileGetSetDrive ; выдать/установить текущий диск

    LFA0F ld a, e ; Запись не поддерживается
    cp #01
    ret z
    push hl ; сохранение регистров
    push de
    push bc
    ld a, #90 ; настройка портов
    ld (IO_EXT_MODE), a
    ld a, #0d ; 6 вывод = 1
    ld (IO_KEYB_MODE), a
    ld a, e ; определение размера
    cp #03
    jp z, LFA39
    cp #02 ; чтение 256-байтного блока
    jp nz, LFA51 ; не верная функция - выход

    ; чтение блока
    ; вход: [D] - номер блока
    ; вход: [HL] - адрес буфера в памяти
    xor a
    ld e, a ; [DE] = 0 - начальный адрес в блоке
    LFA2D call LFA61 ; чтение данных
    ld (hl), a ; сохранение данных в памяти
    inc hl ; инкремент адреса в буфере
    inc e ; следующий адрес в блоке
    jp z, LFA51 ; выход, если блок закончился
    jp LFA2D ; иначе - цикл

    ; определение обьема ПЗУ
    ; выход: [A] - количество секторов на диске
    LFA39 xor a
    ld b, a
    ld d, a
    ld e, #04 ; [DE] = 4 - начальный адрес в блоке
    LFA3E call LFA61 ; чтение данных
    cp #ff
    jp nz, LFA47 ; переход, если не конец диска
    inc b ; инкремент счётчика байтов
    LFA47 inc e ; инкремент адреса в блоке
    ld a, e
    cp #c0
    jp nz, LFA3E
    ld a, #c0 ; И общий обьем ПЗУ получается ROM_SIZE-0FFh
    sub b ; A = A - B
    LFA51 push af
    ld a, #0c ; 6 вывод = 0
    ld (IO_KEYB_MODE), a
    ld a, #9b ; восстановление режима портов
    ld (IO_EXT_MODE), a
    pop af ; восстановление регистров
    pop bc
    pop de
    pop hl
    ret


    ; чтение данных
    ; вход: [DE] - адрес
    ; выход: [A] - данные
    LFA61 ex de, hl ; [HL] - номер блока/байт
    ld (IO_EXT_B), hl ; передача адреса
    ld a, (IO_EXT_A) ; приём данных
    ex de, hl
    ret
    А теперь я опишу назначение данного драйвера. Он предназначен для загрузки каталога и запуска файлов с внешнего ROM-диска, подключаемого к К580ВВ55 (порт программатора). Его объём до 64 кБайт. Нигде нет его схемы, но из конфига эмулятора от b2m я предполагаю что данные ПЗУ подключаются к порту А ППА, а адрес - к портам В и С. Автор выбрал для подключения внешнего ROM-диска накопитель H.

    Юденцов может и хотел написать драйвер дисковода, но наверное не успел. Я где-то здесь на форуме написал в сердцах что не хочу писать его (драйвер), но всё же почти сделал это. На данный момент я сделал вывод корневого каталога с дискеты, подсчёт занимаемого места файлов корневого каталога. Работает операция копирования содержимого выбранного файла в RAM-диск, но где-то скрылась ошибка и данные переписываются неверно. Сейчас я перечислю все трудности, с которыми я столкнулся при написании драйвера:
    1. в MX-DOS (ОС контроллера дисковода) дискриптор файла очень отличается от FAT дискриптора файла. А именно название файла не 8 символов, а 6, причём все буквы только заглавные и в кодировки КОИ-7;
    2. не поддержено разбиение на каталоги. Так что я на первом этапе вывожу только корневой каталог дискеты. Переход в другие каталоги я хочу сделать путём переименования каталога в EXE файл и передачей ему номеров 1-го сектора и 1-й дорожки открываемого каталога;
    3. Т.к. Commander поддерживает только 64 кБайта или 256 кластеров, то отображаемая информация по F3 то же будет не верной. Если принять максимальное количество файлов в одном каталоге в MX-DOS может быть 16 с максимальным размером каждого файла 64 кБайта то получаем 16*64 кБайт=1024 кБайта. Максимальная ёмкость дискеты всего 800 кБайт.

    Исходники драйвера я выложу позже.

    Сейчас я опишу алгоритм построения программы драйвера. Входными переменными, об этом писалось ранее, являются номер кластера и адреса буфера. Номер кластера может принимать значения от 04h...feh. Причём последние в этом списке значатся:
    feh - чтение/запись каталога;
    fdh - чтение/запись каталога;
    fch - чтение/запись каталога;
    fbh - чтение/запись таблицы FAT.
    Т.е. при запросе кластера с этими номерами мы уверены, что идёт обращение к каталогу или таблице FAT. Остальные кластеры - это обращение к 256 байтному блоку памяти с конкретным номером. Т.к. каталог у нас будет состоять не более чем из 16 файлов (максимальное количество каталогов/файлов в одном каталоге MX-DOS), то обращение к кластерам с номерами fdh/feh можно просто заменить заполнение кластерами символом ffh.
    А вот обращение к 04h...fah - это работа с конкретным кластером. Я сделал так. Опрашиваю весь каталог из области fc00h...fcffh и по данным каждого дескриптора файла я вычисляю начальный и конечный кластеры занимаемые каждым файлом. Если этому диапазону принадлежит запрашиваемый кластер, то я считываю в буфер запрашиваемую область. Т.к. в MX-DOS можно считывать только один сектор (1/10 часть дорожки = 1024 байт), то необходим выбор какую 1/4 часть нам использовать. Номер 1-го сектора/дорожки мы берём из дескриптора соответствующего файла дискеты.
    Запись кластера должна действовать в обратном порядке, но пока мною не написана.
    Заполнение таблицы FAT я сделал при обращении к кластеру fbh. Я подсмотрел листинг файла dos.sys от Vinxru. Там есть подпрограмма fileCreate, которая создаёт файл со входными данными дескриптора. Но применить её полностью мне не удалось. Она сначала ищет в каталоге имя создаваемого файла и если он есть, то сначала удаляет его. На этом этапе у меня всё зависало и я убрал эти обращения. Тупо подставляю переделанной подпрограмме дескриптор и она помещает дескриптор в каталог и соответственно размещает номера кластеров в таблице FAT. И всё.
    Функцию "выдать размера устройства" я сделал так. Я просматриваю весь каталог и суммирую число кластеров занимаемое каждым файлом. Хотя система число кластеров больше 256 не воспринимает. Так что выводимая информация по F3 будет недостоверной.
    В атаче исходники программы. Из архива файл ramfos.bin нужно переименовать в ramfos.rom и подставить в эмулятор emu.
    Миниатюры Миниатюры Нажмите на изображение для увеличения. 

Название:	Commander1.jpg 
Просмотров:	633 
Размер:	19.3 Кб 
ID:	57406  
    Вложения Вложения
    Последний раз редактировалось fifan; 08.08.2019 в 12:20.

  2. #1
    С любовью к вам, Yandex.Direct
    Размещение рекламы на форуме способствует его дальнейшему развитию

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. Perfect Commander v2.1
    от dM_GBG в разделе Софт
    Ответов: 43
    Последнее: 21.04.2014, 22:04
  2. Куплю плату для сборки Специалиста_МХ
    от Kanzler2001 в разделе Новодел
    Ответов: 4
    Последнее: 21.05.2012, 00:51
  3. Заказ плат Специалиста_МХ
    от fifan в разделе Новодел
    Ответов: 251
    Последнее: 03.02.2012, 19:52
  4. Эмуллятор Специалиста_МХ
    от fifan в разделе Эмуляторы отечественных компьютеров
    Ответов: 4
    Последнее: 01.04.2009, 17:23
  5. Dos Commander v2.01b
    от Vega в разделе Софт
    Ответов: 19
    Последнее: 01.12.2006, 09:49

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •