nedoPC.org

Community for electronics hobbyists, established in 2002
Atom Feed | View unanswered posts | View active topics It is currently 10 Dec 2024 14:09



Reply to topic  [ 3 posts ] 
ORDOS 
Author Message
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 23467
Location: Silicon Valley
Reply with quote
Инфа по ORDOS: http://rdk.regionsv.ru/orion128-soft-ordos.htm

Более конкретно про v2.4 (из журнала Радио'91): http://rdk.regionsv.ru/orion128-soft-ordos-ordos24.htm

И про v4.03 (уже из журнала Радиолюбитель'93): http://rdk.regionsv.ru/orion128-soft-ordos-ordos403-1.htm

Именно эта версия идёт в комплекте с моим эмулятором Orionix

И ещё ORDOS в своё время вдохновил меня на создание ShaOS, которая тоже пляшет от цепочки файлов в памяти ( я помню как в 1991 или 1992 годах сидел с карандашиком над HEX-дампом из журнала и в тетрадочку дизассемблировал ORDOS v2.4 офигевая от хитрости его самомодифицирующегося кода : )

_________________
https://mastodon.social/@Shaos :dj:
https://www.youtube.com/@Shaos1973


30 Jul 2024 21:17
Profile WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 23467
Location: Silicon Valley
Reply with quote
Источник: http://rdk.regionsv.ru/orion128-soft-ordos-ordos403-1.htm

Данная статья описана в журнале "Радиолюбитель" 9, 1993 г.

Операционная система "OR DOS V4.00"

для функционирования ос "ordos-4" (ос4) требуется подключение дополнительной платы - rom-диска. схема прилагается и находится в файле - romd.pc. На этом диске хранится сама операционная система, и часто используемые инструментальные (бейсик, ассемблер, редактор и др.) средства, а также служебные (загрузчики, дополнительные знакогенераторы, эмуляторы, сменные драйверы дисплея и т.д.)программы. для ос4 rom-диск является диском "a". вторая страница памяти компьютера интерпретируется как диск "в", третья - диск "c", четвертая - диск
"d". На rom-диске ос4 занимает обьем в 2 кбайта. в остальных микросхемах ппзу размещаются необходимые программы по усмотрению пользователя.

Структура ОС "ORDOS-4"

"ordos-4" состоит из трех частей (рис.1), в которых четко определены их функции.

Attachment:
s-076.jpg
s-076.jpg [ 159.31 KiB | Viewed 832 times ]
рис. 1

Первая - ccp - (процессор консольных команд - по аналогии с cp/m) поддерживает диалог с пользователем, организовывает выполнение встроенных команд. при запуске прикладной программы, сср может быть затертым, однако после возвращения в ос4 его необходимо восстановить, иначе некому будет поддерживать диалог с пользователем. процедура восстановления (реинициализации) происходит автоматически. каждый раз при возврате в ос4 специальный "теплый" загрузчик считывает с rom-диска только ccp и передает ему управление. принудительно это можно сделать, если нажать одновременно ус+с, или клавишу {f4}.

Вторая часть ос4 - bdos (базовая дисковая операционная система). это самая ответственная часть ос4. Она всегда находится резидентно в озу и ни при каких обстоятельствах не должна быть повреждена или затерта. Если все же это произошло - необходим полный перезапуск ос4, т.е. "холодный" запуск. Это осуществляется при нажатии на клавишу "сброс".

bdos содержит набор программ-утилит которые ведут всю работу с диском на уровне файлов. пользовательские программы также могут воспользоваться этим набором программ - утилит, выполняя определенные соглашения. После запуска, ос4 переустанавливает верхнюю границу озу пользователя на уровне bdos, т.е. блокирует себя от несанкционированного размещения в этой области озу каких-либо программ или данных.

Третья часть ос4 - bios (базовая система ввода/вывода). Это набор программ обслуживающих интерфейсные устройства, т.е. "железо" - ввод символа с клавиатуры и вывод информации на экран дисплея, чтение и запись программ на магнитную ленту и др.. Конечно, все эти обязанности в компьютере выполняет программа монитор. Поэтому в качестве bios и используется набор стандартных подпрограмм монитора. После запуска ос4 производит первоначальную установку своих служебных ячеек и флагов. производится проверка дисков (b, c, d) на наличие в них информации. Если в первых трех ячейках диска находятся коды, которые можно отнести к символам ascii (кои-7: 20-7еh), то ос4 воспринимает это как наличие файлов на данном диске. В противном случае диск форматируется, т.е. в первую ячейку заносится значение - 0ffh. так проверяются все квазидиски при каждом "холодном" перезапуске (нажатии на кнопку "сброс"), а также при первом включении компьютера.

По окончанию процесса автоформатирования, ос4 производит поиск на диске "b" текстового файла "setup.tx", где содержатся инструкции по формированию начальной операционной среды. Более подробно о файле "setup.tx" мы поговорим далее, а сейчас заметим, что по окончании выполнения его bdos передает управление сср.
Перед тем как начать диалог с пользователем, сср производит поиск файла "ext" на диске "в". Работа с файлом расширения "ехт" происходит аналогично "ordos" v2.4. мы о нем тоже поговорим позднее.

Следующий этап работы сср - это поиск файла "vc$" на диске "А". это имя зарезервировано под экранную оболочку "ordos" "victor commander" (своего рода "norton commander"). При благополучном исходе поиска этого файла, последний запускается и пользователь входит в привычный диалог с компьютером. как видим весь процесс подготовки пользовательской среды происходит автоматически от момента включения компьютера, до появления привычных панелей "norton'а".

Однако, если файл "vc$" отсутсвует на диске "a", или при "холодном" запуске был заблокирован extend-механизм - управление принимает сср. В этом случае диалог с пользователем ведется на уровне команд операционной системы. при этом на экран будет выведено сообщение:

(c) 1992 orionsoft
ordos ver 4.03 2vs
а>

Символ "a" (в третьей строке) указывает на то, что в данный момент текущим (рабочим) является диск "a". Угловая скобка ">" - признак (промпт) нахождения ос4 в управляющем режиме и готовности к диалогу с пользователем. рядом с промптом должен мигать курсор. если промпт с мигающим курсором все же не появился - нажмите кнопку "сброс" и на любую символьную клавишу. Кнопку "сброс" отпустите первой, а символьную задержите на 1-2 секунды. Предложенный прием заблокирует весь extend-механизм ос4, а также автоформатирование.
Прежде чем рассматривать директивы ос4, рассмотрим процедуру изменения имени текущего диска - ведь у нас их четыре - b, c, d.

а>в:{вк} или a>d:{вк}
в> d>

После завершения ввода (нажатия клавиши {вк}) ос4 на следующей строке выведет уже новое имя диска и рядом промпт (смотри вторую строку примера). при таком формате переключения диска, сразу же после завершения ввода будет автоматически происходить и вывод каталога того диска на который вы переключились, если там уже хранятся файлы.
Изменить имя текущего диска можно и попутно с выполнением какой-либо команды. При этом необходимо твердо придерживаться следующего правила: имя диска вводят без пробела после промпта, затем вводят символ ":", далее тоже без пробела символ команды. остаток строки вводится согласно синтаксиса команды.

а>в:е text.tx{вк} - уничтожение файла
b> "text.tx" на диске "b"

Команды ОРДОС V4.03

"ordos-4" имеет два типа команд - встроенные и транзитные или загружаемые.
Познакомимся с встроенными командами. Они еще называются резидентными, потому что являются частью ос4 и хранятся вместе с ней в той же области оперативной памяти.
Перечень команд ос "ordos-4" приведен в табл. 1.

таблица 1

f(ormat) - подготовка ("форматирование") "квазидиска"
d(ir) - вывод каталога диска на экран дисплея
l(oad) - чтение файла из диска в память компьютера
s(ave) - запись участка памяти в качестве файла на диск
r(en) - переименование файла
e(ra) - удаление файла, хранящегося на диске
т(ype) - просмотр текстовых файлов

Команды ос4 однобуквенные и вводятся без пробела, после угловой скобки (промпта). Затем можно ввести необязательный пробел и далее - имя (имена) файла, другие реквизиты. Завершается ввод нажатием клавиши {вк}. Рассмотрим более подробно синтаксис и работу встроенных команд.

Команда "f" - форматирование или скорее инициализация (подготовка) дисков (кроме диска "a") к работе. Используется как дополнительная возможность в ручном режиме произвести инициализацию (сброс) квазидиска. Учитывая наличие автоформатирования в ос4 используется крайне редко. В основном для быстрой очистки заполненного файлами диска.

а>b:f{вк} или d>f{вк}
да?{вк} да?{вк}

В первом примере предварительно устанавливается текущим диск "в" (именно его мы будем форматировать), а затем выполняется команда "f". В ответ ос4 выведет запрос на дополнительное подтверждение ваших намерений - "да?{вк}". При этом необходимо еще раз нажать клавишу {вк}, если вы действительно намерены инициализировать текущий диск. Такие условности необходимы для гарантий от ошибочных действий пользователя. Если будет выполнена команда "f" при наличии информации на диске, то все файлы уничтожатся. физически информация на диске не стирается (в первую ячейку диска "в" будет занесено значение "ff"), но на уровне ос4 она становится недоступной. Во втором примере команда "f" выполняется на текущем диске.

команда "d" - (dir) - наиболее часто используемая команда для вывода на экран данных о файлах, содержащихся на текущем диске.

а>d{вк}

Команда "d" будет выполняться и без ввода символа "d", а просто нажатием клавиши {вк}. Это сделано для упрощения диалога и повышения оперативности в работе. директива "d" выполняется автоматически при переходе на другой диск.

Посмотрим примерную структуру вывода оглавления.

а>d{вк} (или а>{вк})
m128$ b000 06e0 edit$ 0000 0f90
asmm$ 9000 0de0 dis$ b000 0a00
nc$ b000 0b00 basic$ 0000 1fc0
penx$ 0000 1ff0 osdos$ b000 01b0
a>

ОС4 выводит оглавление текущего диска в две колонки. Чтобы прервать вывод оглавления на экран дисплея - достаточно нажать любую клавишу. В каждой колонке содержится имя файла (м128$), адрес начала размещения в озу при запуске и размер файла. Напомним, что имя файла может содержать не более восьми любых символов, за исключением управляющих (меньше 20h), пробела и "$" (24н). Имя файла не может повторяться на одном диске. Символ "$" указывает на то, что данный файл самозапускаемый, т.е. после считывания его с диска в озу директивой "load" ос4 тут же передаст ему управление. Такой файл еще называется командным.
Следует иметь в виду, что символ "$" не является составной частью имени файла (но входит в количество восьми) и в индефикации (поиске) не участвует. Поэтому имена "nc" и "nc$" для ос4 при поиске равнозначны.

Другим файлам ос4 мы рекомендуем присваивать имена в следующем виде: имя - пять символов, затем точка и еще два символа расширения. расширение файла характеризует его принадлежность.

ordos.tx - текстовый файл
test.as - исходный текст программы на языке ассемблер
rekl.bs - файл интерпретатора языка basic
ris.pc - файл графического редактора "penx"
bloc.hx - файл, содержащий набор кодов из озу

Конечно это не полный перечень и пользователь может придумать свою систему наменования файлов из восьми символов, однако следует иметь ввиду, что многие уже существующие программы требуют придерживаться именно такой структуры. Продолжим рассмотрение структуры вывода оглавления. Цифра, идущая за именем файла (в000н) - начальный адрес размещения файла в озу при считывании его с диска. Этот же адрес является стартовым при наличии признака "$" (самозапуска). Управление будет передано на первую ячейку считанного файла, т.е. по адресу 0в000н. далее "06e0" - это длина (размер) файла в байтах. Адрес и размер файла выводятся в шестнадцатиричной системе счисления.

Команда "l" - считывание файла с диска в озу. Как считывается файл и как ос4 реагирует на признак ($) файла мы уже рассмотрели выше. Необходимо только добавить, что вместо символа "l" можно вводить пробел. Допустимость такой подмены повышает оперативность в работе.

а>l m128${вк} или
а> m128{вк}

Как видно из примера, символ "$" (если он присутсвует в имени файла) можно для упрощения не вводить.

Команда "s" - запись содержимого оперативной памяти на диск в виде файла.

а>s micron$ 0,fff{вк}

Рассмотрим синтаксис команды. после имени команды (s) и необязательного пробела, вводим имя файла не более восьми символов (остальные ос4 игнорирует), далее обязательный пробел и - начальный адрес, через запятую конечный адрес того участка памяти, который мы хотим сохранить на диске в виде файла. Незначащиеся нули можно опускать. команда "s" не проверяет адреса на корректность (какой из них должен быть больше). За этим должен следить пользователь. но если такая не корректность все же допущена - катастрофа не произойдет. Просто ос4 попытается создать огромный файл, который заведомо не уместится на диске и будет выведено сообщение об ошибке.

команда "r" - переименование имени файла.

а>r bru$ ch{вк}

Как видно из примера, первым вводится новое имя файла, а затем старое имя (в старом имени признак самозапуска ($) можно опускать), т.е. имя которое необходимо переименовать. Выполнение команды происходит по нажатию клавиши - {вк}.

команда "е" - удаление файла из диска.

а>e text.tx{вк}
да?{вк}

После нажатия клавиши {вк} ос4 выведет запрос на дополнительное подтверждение выполнения данной команды - "да? {вк}" (так же как и в команде "f").
Если пользователь файл уничтожает не случайно - необходимо подтвердить это повторным нажатием клавиши {вк}, в противном случае нажать любую другую клавишу. Следует помнить, что при случайном форматировании диска ошибку можно исправить (с помощью программы м128$), а вот восстановить уничтоженные файлы командой "e" не возможно никакими средствами. поэтому нестоит торопиться при использовании этой директивы.

Команда "т" - просмотр содержимого текстовых файлов на экране дисплея. команда удобна тем, что нет необходимости загружать редактор для просмотра текстовых файлов. Однако этой командой не стоит просматривать файлы, содержащие шестнадцатиричные коды. В этом случае на экран будет выводиться не предсказуемая информация.

а>т ordos.tx{вк}

Если текстовый файл больше одной страницы экрана и необходимо вывод временно остановить - нажмите любую символьную клавишу. Чтобы продолжить вывод - отпустите клавишу. Для отмены директивы (до окончания просмотра всего файла) - нажмите клавишу {f4}.
В качестве загружаемых команд используются командные файлы, т.е. программы выполняющие служебные функции. Это M128$, или М256$ stat$, view$ и др.

При умении программировать на языке ассемблер или в машинных кодах, пользователь может сам создавать свои команды, хранить их на диске "а" или магнитной ленте, дискете в виде библиотеки. По мере необходимости их загружают в один из квазидисков по своему усмотрению.

Пакетный файл и extend-система

Подготовленные пользователи знают, что в операционных системах, к примеру, "ср/м-80" и "msdos" есть механизм обработки пакетных файлов. называются они пакетными потому, что содержат
в символьном виде набор (пакет) команд. это по сути программа на языке "высокого" уровня, где пользователь предписывает порядок действий операционной системе наперед, в автоматическом режиме.

Среди пакетных файлов есть "особые" - выполняемые при запуске и инициализации операционной системы. Практически любой пакетный файл может стать "особым", если записанная в нем последовательность действий операционной системы устраивает пользователя при включении компьютера. Для этого необходимо присвоить ему специальное (зарезервированное) имя. при включении компьютера или реинициализации операционная система просматривает каталог диска и, если встречает пакетный файл с зарезервированным именем - обязательно его выполняет, прежде чем вступить в диалог с пользователем.

В качестве механизма выполнения пакетных файлов в операционной системе "ср/м-80", к примеру, применяется специальная внешняя команда "submit", для которой создается текстовый файл с перечнем необходимых команд для выполнения. В "msdos" этот механизм уже вмонтирован в систему, поэтому достаточно создать только текстовый файл и присвоить ему зарезервированное имя "autoexec.bat", чтобы операционная система могла его опознать при реинициализации.

Теперь вернемся к "ordos-4". Наличие квазидиска в качестве внешней памяти накладывает определенные ограничения на механизм выполнения пакетных файлов, т.к. в момент включения компьютера и инициализации операционной системы "ordos-4", пакетный файл в квазидиске еще отсутствует, но если это очень важно - его можно хранить в rom-диске, т.е. диске "а".
Малые размеры "oс4" не позволяют расположить в теле операционной системы полный механизм обработки пакетных файлов, как это сделано в "msdos". Чтобы найти приемлемый компромис, создан только механизм загрузки файлов (драйверов, знакогенераторов и других программ).

Рассмотрим последовательность действий ос "ordos-4" с момента включения компьютера.
Загрузчик программы "монитор-2" считывает с rom-диска первые 2 кбайта содержимого и размещает их под "потолок" озу пользователя в адресах 0в800н - 0вfffн. после этого передается управление по адресу 0вffdh.

После загрузки "ordos-4" проводит первичную инициализацию операционной системы, формирует каналы управления, форматирует диски. Далее производится поиск файла с зарезервированным именем setup.tx на диске "в". Если данный файл не найден - управление передается сср - процессору консольных команд. Мы умышленно упростили остальные операции.
Файл setup.tx - это текстовый файл, где перечислены имена программ и драйверов предназначенных для автоматической загрузки. Это могут быть как само- запускаемые, так и не самозапускаемые программы, всевозможные драйверы (клавиатуры, дисплея, магнитофона и пр.). Выход с этих программ производится как по команде ret, так и по адресу 0bffdh. программы могут вести диалог с пользователем и затирать сср. Создается файл setup.tx текстовым редактором. например:

а:ch-rr - загрузить знакоген. б-м русские
а:key$ - загрузить драйвер клавиатуры
b:cls$ - загруз. программу, которая очистит область озу и экран.
конец файла обозначается символом "."(точка) с "красной" строки.

Синтаксис построения строк такой же, как и при вводе командной строки ос4, т.е. между символом имени диска, двоеточием и именем файла не допустимо вводить пробелы. Строка не обязательно должна начинаться с имени диска, но в этом случае система будет считывать с ранее определенного диска.

Для выполнения текстовый файл ос4 размещает по адресу его посадки. Поэтому следует проанализировать последствия выполнения данного файла с тем, чтобы не допустить его самоуничтожения. Исходя из этого следует определить безопасную область озу и откорректировать посадочный адрес с помощью программы м128$.
Из-за малого размера ос4 отсутствует механизм по контролю за синтаксисом и корректностью построения пакетного файла setup.tx. Эта задача целиком возлагается на пользователя.

Механизм обработки пакетного файла не ограничивает использование его только для загрузки драйверов. Пользователь может определить любые программы - м128$, edit$, assm$ и т.д. для запуска. При этом после выхода из одной программы ос4 будет загружать следующую. следует только побеспокоится о месте размещения (адресе загрузки) пакетного файла, с тем, чтобы он небыл уничтожен работающими программами.
На выполнение пакетный файл запускается при "холодном" стартe, т.е. это будет происходить каждый раз при нажатии на кнопку "сброс", пока файл не будет уничтожен или переименован.
Не допустить его выполнение можно и с помощью блокирования. Для этого перед отпусканием кнопки "сброс" удерживают любую символьную клавишу.
После выполнения setup-файла "ordos-4" загружает сср и передает ему управление. процессор консольных команд начинает свою работу с поиска на диске "в" файла с именем "ехт" (от слова extend - расширение).
"ordos-4" считывает ехт-файл (файл с именем "ехт") по тем же правилам, что и директива "load". этот файл должен находиться на диске "в". если необходимо, чтобы ехт-файлу было передано управление - добавьте в конце имени символ "$" (exт$).

В этом случае файл должен заканчиваться командой "ret" (ассембл.). Eхт-файл не должен нарушать структуру стека и в любом случае - не затирать сср.

Самый простой пример применения extend-системы - это автоматическая загрузка нового знакогенератора, допустим, учитывающего национальные особенности языка. для этого файлу с таким знакогенератором присваивают имя "ехт". Напомним, что знакогенератор в озу размещается с адреса 0f000h и имеет размер - три блока, т.е. до адреса 0f2ffh, поэтому необходимо проследить, чтобы был соответствующий адрес старта ("посадки") в реквизитах файла. теперь, при каждом "теплом" (по {f4}) перезапуске системы, внутренний знакогенератор будет замещаться новым из файла "ехт". как видим это можно сделать более просто и без setup.tx.

Более сложный пример использования extend-системы - это выполнение функции "print-screen", т.е. распечатки содержимого экрана. Следует иметь ввиду, что это будет графическая копия, а не символьная. Как это можно сделать? программе, которая будет распечатывать или сохранять в виде файла на диске "в" изображение экрана, присваивают имя "ехт$". Затем запускают ту программу, копию экрана (допустим это игра) с которой необходимо зафиксировать. В необходимый сюжетный момент нажимают клавишу "сброс". Выполнение программы прервется, но на экране сохранится необходимая фаза изображения. затем начнется инициализация ос4 и extend-система загрузит и передаст управление файлу "ехт$", который и будет выводить информацию на печать, или создаст файл на диске "в". по окончанию работы управление операционной системе необходимо возвращать командой "ret", т.к. в стеке уже хранится адрес возврата. Если возвращаться командой безусловного перехода (jmp) по адресу старта - 0bffdh, операционная система не сможет выйти из цикла вызова ехт-файла.

После выполнения (или только загрузки) ехт-файла управление вновь будет возвращено "ordos-4".
Как завершающий этап - операционная система ищет в диске "а" файл с именем "vc$". это зарезервированное имя графической оболочки операционной системы (по примеру известного "norton-commander'а"), в которой вместо директив используется удобные меню и окна.

Файл графической оболочки может затирать сср, однако при этом должен брать на себя функции по ведению диалога с пользователем и выполнению команд по обработке файлов.

Существующая в настоящее время программа 'nc$' v6.3, расчитанная на работу с 128 кбайтами озу (т.е. работает с дисками "а" и "в"), формирует сама файл "ехт$". С его помощью производится автоматическая перезагрузка экранной оболочки. Для"ordos-4" - это излишество, т.к. опознавание экранной оболочки происходит непосредственно, по ее имени. Тем не менее атавизм "старого" "norton'а" не вызывает конфликтной ситуации, а лишь мешает использовать ехт-систему для других целей. Для ос4 разработана новая графическая оболочка - "vc$", которая учитывает особенности новой операционной системы и обслуживает четыре диска - "a,b,c,d". .

Графическая оболочка VC - волков коммандер

Attachment:
p256-011.jpg
p256-011.jpg [ 181.36 KiB | Viewed 832 times ]
VC$ - Волков коммандер

_________________
https://mastodon.social/@Shaos :dj:
https://www.youtube.com/@Shaos1973


30 Jul 2024 21:57
Profile WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 23467
Location: Silicon Valley
Reply with quote
Файловая структура "ORDOS-4"

Рассмотрим структуру файла, а также размещение их на диске. Использование в качестве внешней памяти - квазидиска, резко упростило операционную систему. Отпала необходимость оперировать секторами, дорожками и другими атрибутами гибкого магнитного диска. поэтому в квазидиске (и в rom-диске тоже) файлы размещаются цельно и последовательно друг за другом. В начале каждого файла находится его оглавление - служебная часть, занимающая 16 байт. назначение каждого байта в оглавлении определено в таблице 3.

таблица 3

0 - 7 - имя файла. может содержать не более 8 символов. Если имя содержит меньше символов, свободные ячейки заполняются пробелами.
8 - 9 - начальный адрес размещения программы при считывании ее из диска в озу - адрес "посадки".
а - в - размер файла. в этот параметр оглавление файла (16 байт) не входит.
с - байт флагов. бит d7=1 - указывает на то, что файл защищен от уничтожения. Бит d0=1 - файл относится к разряду системных и игнорируется функцией 7. Изменение состояния бита d1,d7 производят внешние загружаемые программы.
d - f - служебные ячейки системы.

Чтобы легче понять структуру (см.табл.4) - представим ее в виде дампа памяти. в дампе каждая строка начинается с адреса, последний символ которого имеет нулевое значение. так и в операционной системе "ordos-4" оглавление файла всегда начинается с адреса кратного 16. Если предыдущий файл не имел кратную длину - "ordos-4" его округляет. Оглавление следующего файла будет размещаться как бы на следующей строке. Если взять точку отсчета - начальный адрес "тела" файла (0010н), а он на 16 (10н) ячеек больше, чем начальный адрес оглавления файла (0000) - (следующая строка после оглавления - см.таблицу 4), и прибавить к нему длину этого файла (в нашем примере 1fd0h), то легко отыскать начальный адрес оглавления следующего файла (1fе0н). В итоге нет необходимости "прощупывать" весь файл -можно вычислить адрес оглавления следующего файла и "перескочить". Помимо того, что такая файловая структура наглядно просматривается директивой "d" монитора - сокращается и время поиска файла на диске.

В конце последнего файла на диске - по адресу где будет размещаться начало оглавления будущего файла - "ordos-4", автоматически устанавливает "стоп-байт" - 0ffh, который указывает на то, что дальше файлов нет, и ячейка памяти диска по этому адресу относится уже к свободному пространству диска. По мере добавления или уничтожения файлов - "стоп-байт" соответственно перемещается. При записи на диск (за исключением диска "а") новых файлов, последние добавляются в конец всего массива, а при уничтожении последующие файлы смещаются на место уничтожаемого, тем самым дисковое пространство постоянно оптимизируется и не допускается наличие "пустот".

таблица 4
Attachment:
s-077.jpg
s-077.jpg [ 169.95 KiB | Viewed 832 times ]


Сообщения об ошибках

В процессе диалога и выполнения команд, "ordos-4" постоянно контролирует действия пользователя и при ошибочных или некорректных вводах - выводит сообщение об ошибке. На начальном этапе освоения (чаще всего) и приобретении навыков в работе, ос4 может выводить символ "?" после завершения ввода строки, а затем опять возвращаться в режим ожидания ввода.
Это говорит о том, что вы нарушили синтаксис при формировании командной строки, а точнее - ввели несуществующую команду, пропустили обязательный пробел или поставили его там, где это недопустимо, ввели некорректное шестнадцатиричное число и т.д.

В этом случае необходимо повторно ввести командную строку и обратить особое внимание на правильность своих действий. Помимо сообщения о синтаксической ошибке, ос4 выводит еще четыре сообщения при работе с файлами: "нет файла:", "повторный файл:", "только чтение:" и "мало диска:". Первое сообщение - на текущем диске нет файла с именем, которое указал пользователь, а второе - при попытке записать новый файл с именем уже имеющимся на текущем диске.

Теперь рассмотрим третье сообщение: "только чтение:". Оно может появиться при попытке уничтожить файл защищенный от уничтожения. Функцию установки защиты файлов и ее снятия выполняет программа из числа загружаемых команд "stat$". И последнее сообщение - "мало диска:". ОС4 выводит его при попытке записать на диск файл по размерам больше, чем там
осталось свободного места. В конце каждого сообщения стоит двоеточие - ос4 довыводит имя файла, операция с которым привела к ошибке.

Системные функции "ordos-4"

"ordos-4" состоит из трех составных частей: "сср" - процессор консольных команд, "bdos" - базовая дисковая операционная система и "bios" - базовая система ввода-вывода, в качестве которой используется резидентный монитор.
"bdos" наиболее интересная для пользователя часть операционной системы "ordos-4". Она постоянно находится в памяти компьютера и содержит набор унифицированых функций, (табл.2) к которым могут обращаться прикладные программы пользователя для операций с дисками, соблюдая соглашение об обмене информацией.

таблица 2

23. 0bfb8h mxdsk - конеч.адрес программ.на диске
22. 0bfbbh ver - номер версии ос ordos (20,24,40)
21. 0bfbeh adrp - изменение адреса "посадки" файла
20. 0bfc1h rmax - чтение максим. размера диска
19. 0bfc4h wmax - запись максим.размера диска
18. 0bfc7h atfm - чтение атрибутов файла
17. 0bfcah watf - запись адресов (н/к) блока озу
16. 0bfcdh atf - чтение адресов размещения файла
15. 0bfd0h sdma - запись н/адреса буфера имени файла
14. 0bfd3h ldma - чтение н/адреса буфера имени файла
13. 0bfd6h wnd - определение текущего диска
12. 0bfd9h rnd - чтение имени текущего диска
11. 0bfdch rdisk - чтение байта из диска
10. 0bfdfh wdisk - запись байта в диск
9. 0bfe2h stop - запись стоп-слова в диск
8. 0bfe5h pscf - поиск файла в диске
7. 0bfe8h dirm - вывод каталога диска в буфер
6. 0bfebh renum - пп. переименования файла
5. 0bfeeh eras - пп. уничтожения файла
4. 0bff1h ofill - открыть последовательный файл
3. 0bff4h cfill - закрыть последовательный файл
2. 0bff7h wfile - пп.записи файла на диск
1. 0bffah rfile - пп.чтения --"-- из --"--
0. 0bffdh start: db 0c3h ;вход в ос "ordos"
0bffeh stadr: dw address;адрес перехода

Рассмотрим функции "bdos". они условно делятся на четыре группы: функции, выполняющие операции на уровне файлов, подготовительные, служебные и информационные.
Первая группа - функции оперирующие на уровне файлов - это самые мощные подпрограммы "ordos-4", собственно директивы или резидентные команды. к этой группе относятся функции с номерами 1-8. Однако, прежде чем вызывать на выполнение эти функции, необходимо выполнить ряд подготовительных операций (это и выполняет вторая группа функций) или установок. К примеру: установить текущий диск, указать, по какому адресу находится имя файла, или определить адреса той области памяти, которую пользователь предполагает записать в виде файла на диск и т.д.

К подготовительным относятся функции с номерами 13,15,17. Третья группа выполняет ряд служебных операций. Это функции 9,10,11,19 и 21. Они выполняют операции с диском на уровне байта, а также другие служебные функции.

И последняя группа функций: 12,14,16,18,20,22,23. Они необходимы для получения информации о состоянии диска, положения указателей, адресов.
Предварительно рассмотрим две установочные функции: установка (выбор) диска и установка начального адреса буфера имени файла. Об остальных функциях этой группы расскажем далее.

- установка текущего диска: функция 13
wnd: 0bfd6h
пример: mvi a,'a'; или 'в'
call wdn
;
используемые регистры: a

- установка начального адреса буфера
имени файла: функция 15
sdma: 0bfd0h
пример: lxi h,name
call sdma
;
name: db 'basic$ '

используемые регистры: hl

имя файла может содержать не более восьми символов. В конце, в качестве "тормозного" символа используется пробел (20н) или возврат каретки (0dh).
Информация о текущем диске и начальном адресе буфера имени файла не изменяется другими функциями, поэтому может быть определена в программе пользователя только один раз. Однако в примерах поясняющих принцип вызова других функций "ordos-4" мы будем постоянно включать и эти функции для наглядности.

- запись адресов блока озу: функция 17
watf: 0bfcah
пример: lxi h,н/адрес
lxi d,к/адрес
;
call wtfld
;
используемые регистры: hl,de вернемся к функциям, работаюших с файлами.

- чтение файла из диска в озу: функция 1
rfile: 0bffаh
пример: mvi a,'b'
call wnd ; уст.текущ.диск'в'
lxi h,name
call sdma ; уст.указ.имени
;
call rfile
;
результат выполнения: а = 0 - успешно
а = 1 - нет файла
а = 80н - com-файл ($)
hl - адрес старта
sp+2 - адрес возврата в ос4
;
используемые регистры: а,hl,de,bc файл в озу размещается начиная с адреса "посадки", который хранится в оглавлении. Самозапуск функция не производит.

- запись файла на диск 'в': функция 2
wfile - 0bff7h
пример: mvi a,'b' ; или "c","d"
call wnd ;уст.диска 'в'
lxi h,name
call sdma ;уст.указ.имени
;
lxi h,adr1;нач.адрес oзу
lxi d,adr2;конеч.адр.озу
call watf ;функция 17
call wfile
;
результат выполнения: а = 0 - успешно
а = 2 - повтор.файл
а = 3 - мало диска
;
используемые регистры: а,hl,de,bc
Перед вызовом этой функции необходимо занести в служебные ячейки "ordos-4" информацию о начальном и конечном адресах массива озу, который предполагается записать на диск в виде файла. это выполняет функция 17.

- открытие последовательного файла на диске 'в' и его заполнение: функция 4.
оfile: 0bff1h
пример: mvi a,'b'
call wnd ;уст.диска 'в'
lxi h,name
call sdma ;уст.указ.имени
;
lxi h,adr ;адрес старта
lxi d,masiv
opfl: ldax d
inx d
call dpcmp;конец?
jz end
call ofile
ana a
jz opfl
...
;
результат выполнения: а = 0 - успешно
а = 2 - повтор.файл
а = 3 - мало диска
;
Используемые регистры: а,hl,de,bc

Эту функцию используют в тех случаях, когда на момент создания файла невозможно определить его размер, а содержимое накапливается по мере работы другой программы. Например: можно впрограмме пользователя вывод информации на дисплей заменить на накопление в последовательном файле. вызов функции первый раз производит открытие файла. И одновременную запись в него первого сохраняемого байта. Последующие вызовы только сохраняют очередной байт. функция автоматически управляет счетчиком и указателем текущего адреса озу диска. По окончанию занесения информации в последовательный файл, необходимо его закрыть с помощью функции 3.
Следует иметь ввиду, что после открытия последовательного файла недопустимо выполнение других операций над файлами на диске до его закрытия.

- закрыть последовательный файл: функция 3
cfile: 0bff4h
пример: call cfile
;
используемые регистры: а,hl,de

- уничтожение файла на диске: функция 5
eras: 0bfeеh
пример: mvi a,'b'
call wnd ;уст.диска 'в'
lxi h,name
call sdma ;уст.указ.имени
;
call еras
;
результат выполнения: а = 0 - успешно
а = 1 - нет файла
а = 4 - файл 'r/o'
;
используемые регистры: а,hl,de,bc если файл защищен от уничтожения, т.е. в байте флагов d7=1 - функция не выполняется.

- переименование файла на диске : функция 6
renum: 0bfebh
пример: mvi a,'d'
call wnd ;уст.диска 'd'
lxi h,bufer
call sdma ;уст.указ.имени
;
call renum
;
результат выполнения: а = 0 - успешно
а = 1 - нет файла
а = 2 - повтор.файл
;
используемые регистры: а,hl,de,bc перед вызовом данной функции необходимо в буфере разместить не одно имя файла, а два - новое и через пробел старое имя. В конце обязательно должен находиться символ "пробел" или "возврат каретки".

- вывод оглавлений файлов диска в буфер: функция 7
dirm: 0bfe8h
пример: mvi a,'с'
call wnd ;уст.диска 'с'
;
lxi h,адрес буфера
call dirm
;
результат выполнения: а = кол.файлов на диске
;
используемые регистры: а,hl,de,bc
адрес буфера, куда будет размещаться каталог диска, должен содержать ноль в качестве младшего символа. например: 1000н, 7020н, 9880н т.д. функция переписывает оглавление каждого файла в буфер не изменяя его структуру.

- поиск файла на диске: функция 8
pscf: 0bfe5h
пример: mvi a,'b'
call wnd ;уст.диска 'в'
lxi h,name
call sdma ;уст.указ.имени
;
call pscf
;
результат выполнения: 1. а = 0 - нет файла
hl= адрес стоп-байта
2. а = ff - файл найден
;
используемые регистры: а,hl,de,bc это вспомогательная функция. она выполняется в составе предыдущих, однако может использоваться и автономно.

Служебные функции

- запись стоп-байта (0ffh) на диск: функция 9
stop: 0bfe2h
пример: mvi a,'с'
call wnd ;уст.диска 'с'
;
lxi h,адрес
call stop
;
используемые регистры: hl

- запись байта на диск : функция 10
wdisk: 0bfdfh
пример: mvi a,'b'
call wnd ;уст.диска 'в'
;
lxi h,адрес
mvi а,bite
call write
;
используемые регистры: а,hl

- чтение байта из диска: функция 11.
rdisk: 0bfdсh
пример: mvi a,'b'
call wnd ;уст.диска 'в'
;
lxi h,адрес
call write
;
результат выполнения: а = считанный байт используемые регистры: а,hl

- установка максимального адреса диска 'в': функция 19.
wmax: 0bfc4h
пример: lxi h,адрес
call wmax
;
используемые регистры: hl
функция позволяет ограничить максимальный размер диска 'в'. Одним из примеров применения функции - это ограничение диска при работе компьютера в цветном режиме. В этом случае устанавливается максимальный адрес - 0bfffh.

- изменение адреса "посадки" программы: функция 21.
adrp: 0bfbeh
пример: lxi h,адрес ;нов.а/посадки
call adrp
;
Результат выполнения: hl = старый адрес "посадки" используемые регистры: hl

Информационные функции

- чтение имени текущего диска: функция 12
rnd: 0bfd9h
пример: call rnd
;
результат выполнения: а = 'а'..'d' (41..44h)
используемые регистры: a

- чтение адреса указателя имени файла: функция 14.
ldma: 0bfd3h
пример: call sdma
;
результат выполнения: hl = текущий адрес указателя используемые регистры: hl

- чтение адресов размещения файла на диске: функция 16.
атf: 0bfсdh
пример: mvi a,disk
call wnd ;уст.диска
lxi h,name
call sdma ;уст.указ.имени
call pscf
;
call atf
;
результат выполнения: hl = нач.адрес файла
de = конеч.адрес файла
используемые регистры: hl,de,bc

- чтение атрибутов файла : функция 18.
atfm: 0bfс7h
пример: mvi a,disk
call wnd ;уст.диска
lxi h,name
call sdma ;уст.указ.имени
call pscf
;
call atfм
;
результат выполнения: hl = адрес "посадки"
de = длина файла
bc = адрес оглавления используемые регистры: hl,de,bc

- чтение максимального адреса диска: функция 20.
rmax: 0bfc1h
пример: call rmax
;
результат выполнения: hl = максимальный адрес диска используемые регистры: hl

- чтение номера версии "ordos": функция 22.
ver: 0bfввh
пример: call ver
;
результат выполнения: а = номер версии (40н) используемые регистры: а

- конечный адрес программ на диске: функция 23.
мxdsk: 0bfb8h
пример: call mxdsk
;
результат выполнения: hl = адрес "стоп-байта" используемые регистры: hl

_________________
https://mastodon.social/@Shaos :dj:
https://www.youtube.com/@Shaos1973


30 Jul 2024 22:01
Profile WWW
Display posts from previous:  Sort by  
Reply to topic   [ 3 posts ] 

Who is online

Users browsing this forum: No registered users and 1 guest


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
Powered by phpBB® Forum Software © phpBB Group
Designed by ST Software.