Info Guide
#07
31 мая 2005 |
|
For Coderz - Программирование под DNA_OS ZET-9, пакет утилит для работы с устройствами хранения данных.
Программирование под DNA_OS ZET-9 29.05.2005 Отсюда вы узнаете,как можно будет испо─ льзовать функции системы DNA в ваших прог─ раммах. Этот файл постепенно будет допол─ няться.Пока что это просто сборник текстов с описанием структуры системы DNA и прог─ рамм, использующих её функции. Система предоставляет программам внеш─ нюю (долговременную) память в виде диско─ вых накопителей. Работа с различными нако─ пителями осуществляется одинаково.П-мам не требуется знание о том, каков тип накопи─ теля (гибкие либо жесткие магнитные диски, оптические диски либо микросхемы динамиче─ ской/статической памяти), какая файловая система на том или ином накопителе.Все за─ боты о существующем многообразии у-в внеш─ ней памяти берёт на себя система. Работа с файлами сводится к вызову фун─ кций системы с указанием номера устройст─ ва, имени (под)каталога,в котором располо─ жен файл/(под)каталог,имени нужного файла/ (под)каталога и типа операции,которую нео─ бходимо выполнить с файлом/(под)каталогом: чтение/запись/создание/удаление. Режимы распределения памяти Система работает в 1-м режиме, 2-й пока не используется - в резерве: 1 - однозадачный режим В памяти находится ядро системы и п-ма. П-ма может использовать различные режимы прерываний (в том числе IM 2), переустана─ вливать стек и т. п. В этом режиме работа п-мы почти не отличается от работы обычной TR-DOS п-мы,но для вызова дисковых функций используется вызов функций системы (через резидент системы), и вместо прямого перек─ лючения страниц через порты п-ма использу─ ет драйвер страничной памяти.Драйвер нахо─ дится в резиденте системы, а резидент сис─ темы расположен в нижней памяти (сейчас 23296-23551). Система также использует об─ ласть #5d40..#5fff. Таким образом, п-ме доступна экранная область (16384-22527), область от 24576 по 65535 и страничная па─ мять,за исключением системной страницы.При вызове дисковых функций система по своему усмотрению может включать режим прерываний IM 1 (если будет обращение к TR-DOS) и ос─ тавлять его. П-ма должна это учитывать. В случае нехватки нижней памяти п-ма может использовать область 23296-24575, предварительно сохранив её в свободной об─ ласти и восстанавливая 23296-24575 перед обращением к резиденту системы.Перед запу─ ском п-мы в этом режиме включается 0-я страница. 2 - режим "переключение задач" Доступен при наличии верхней памяти (>128k), реально д/б 512k (если не исполь─ зуется RAM-диск) или 1024k.Отличается тем, что в верхней памяти могут находиться дру─ гие п-мы. Поэтому перед тем, как использо─ вать страницу верхней памяти в этом режи─ ме, надо проверить, свободна ли она. Страница считается свободной, если пос─ ледний байт в странице равен 0. Иначе там находится другая п-ма,и использовать стра─ ницу нельзя. В этом режиме возможен временный выход из п-мы с сохранением текущего состояния ("сворачивание").Для этого п-ма должна по─ местить ненулевой байт во все страницы, в которых будет сохранять код/данные, и сох─ ранить экран и 24576-49151 в страницах.По─ сле этого управление передаётся в рези─ дент,в процедуру выхода в оболочку.В даль─ нейшем можно будет вернуться в п-му, при этом передаётся управление по адресу 49152 в основную страницу п-мы - ту, которая ре─ зервируется для п-мы осью. Она включается при загрузке файла с п-мой. П-мы для ОСи имеют расширение .SEP и загружаются с адреса 24576 до 65535. Если файл п-мы длиннее,чем 40960, грузятся пер─ вые 40960 байт. Перед выходом п-ма должна САМА освобо─ дить все страницы, которые использовала, иначе эти страницы будут недоступны другим п-мам (надо поместить 0 по адресу #FFFF в каждой странице, в том числе в основной). Первый вход в программу После загрузки с адреса #6000 управле─ ние передаётся п-ме. IX указывает на таб─ лицу с данными.П-ма должна взять из табли─ цы нужные ей данные для дальнейшего испо─ льзования. Подробно см. "Блок данных,пере─ даваемых программе при запуске". При получении сообщения #0001 п-ма дол─ жна взять имя открываемого файла и про─ вести с ним операцию согласно назначению п-мы. (Загрузить файл и "показать" его,на─ пример: музыку играть,картинку,текст - вы─ вести на экран, архив - распаковать...) Повторные входы в программу Если п-ма была "свёрнута", в неё можно вернуться. Возврат осуществляется либо из оболочки, либо из другой запущенной п-мы. Включается основная страница данной п-мы,передаётся управление на адрес 49152. Регистровая пара IX указывает на таблицу параметров. Имеют значение байты IX-2,IX-1 (2 байта) - сообщение для п-мы. Может при─ нимать значения: #0001 - открыть файл (см. выше); #0002 - завершить работу п-мы (это со─ общение означает, что пользователь хочет удалить п-му из памяти); #0003 - п-ма стала текущей (пользова─ тель переключился на эту п-му). Резидент системы Все вызовы функций осуществляются через резидент системы (его адрес передаётся п-ме при первом запуске). Резидент имеет 3 точки входа (пока): 1-я точка входа Адрес резидента+0: вызов драйвера стра─ ничной памяти для переключения страниц. В регистровой паре DE передаётся номер стра─ ницы. Если в компьютере есть страница с данным номером,она будет включена,при этом устанавливается флаг Z. Если в компьютере нет страницы с таким номером, сбрасывается флаг Z, а в рег.паре HL будет максимальный номер страницы для данного компа (для 128k - 7,для 256k - 15, для 512k - 31,для 1024k - 63 и т.д.). Дополнительные функции вызываются при DE=2, при этом используется регистр C: C=0: включить страницу с номером 2 (т.е. область 32768-49151 будет подключена в об─ ласть 49152) C=1: включить 1-й экран (станет видимым экран с адреса 16384); C=2: включить 2-й экран (станет видимым экран с адреса 49152 в странице 7); C=3: включить ПЗУ BASIC 48; C=4: включить ПЗУ BASIC 128; C=5: получить информацию о включенной странице, экране и ПЗУ. Возвращает: DE=номер последней включенной стр.; B=bit 3=0 включен 1-й экран; B=bit 3=1 включен 2-й экран; B=bit 4=0 включено ПЗУ BASIC128; B=bit 4=1 включено ПЗУ BASIC48; HL=макс.номер стр.для данного компа. 2-я точка входа Адрес резидента+2: выход в оболочку. Сюда п-ма должна передавать управление при завершении работы,либо при "сворачива─ нии". Происходит запуск подпрограммы пользо─ вателя,расположенной здесь же,в резиденте. В зависимости от этой подп-мы будет осуще─ ствлён переход в ПЗУ BASIC128, либо в ПЗУ TR-DOS с запуском boot'а, либо переход в CACHE, либо поиск в памяти п-мы-оболочки и передача управления ей, либо выход в опре─ делённую страницу, в STS, в ALASM (зависит от содержимого подпрограммы). 3-я точка входа Адрес резидента+4: вызов ф-ций системы. Сюда надо передавать управление, чтобы вызвать любую из функций системы. При этом в рег. паре IX должен быть адрес таблицы ПАРАМЕТРОВ ВЫЗОВА (см. "Функции системы"). А сама таблица должна быть расположена в нижней памяти (последний байт таблицы дол─ жен иметь адрес ниже 49152,система за этим не следит, так что МОЙТЕ РУКИ ПЕРЕД ЕДОЙ). Загрузка системы 1. Сначала в память должен быть помещён загрузчик оси (приветствуются любые вариа─ нты): а) загрузчик копируется из ПЗУ в ОЗУ при выборе пункта меню (как в KAY-1024 пункт "HDD Boot"); б) загружается с внешнего носителя (в виде отдельной п-мы, либо как подп-ма дру─ гой п-мы - напр.,плагин к Real_Commander); в) ваш вариант (перекидыв-ся из Cache, загружается с магнитофонной кассеты :) ). Загрузчик системы - это подп-ма,предна─ значенная для загрузки ядра с КОНКРЕТНОГО физического у-ва. Примеры: загрузка с HDD, CD-ROM, из конкретной страницы верхней па─ мяти, из кэша,из 4-й страницы ПЗУ (у неко─ торых там драйвер принтера, у кого-то Gluk Service ). Ядро будет загружено на адрес #BE00, и ему передаётся управление. 2. Ядро устанавливает стек,далее опраши─ вает клавишу "Space". Если не нажата,прои─ зводится попытка загрузить файлы конфигу─ рации с ЗАГРУЗОЧНОГО у-ва из корневого ка─ талога: а) файл HIMEMORY.DNA - драйвер страни─ чной памяти для компьютера пользователя. После успешной загрузки он устанавливается в систему,дальнейшая работа ведётся с ним. б) SYSTEM.DNA - файл системных пере─ менных (в нём описание логических у-в, но─ мера загрузочного, системного,быстрого,те─ кущего и у-ва для свопа,страница,в которой должно располагаться ядро при работе, и т.д. Подробнее далее). После успешной заг─ рузки ядро будет перенесено в указанную страницу и далее будет работать там. Вни─ мание!Теперь номер загрузочного у-ва может измениться,и дальнейшие файлы будут загру─ жены с него. в) CONFIG.DNA - файл с именами авто─ стартующей п-мы и с именами эл-тов,которые должны быть установлены в систему. После успешной загрузки из файла берётся имя ав─ тостартующей п-мы (т.е. п-мы,которая будет загружена первой):это первые 8 байт файла. Загруженный файл перекидывается на #8000. 3. Загружается п-ма CONFIG.SEP. Она бе─ рёт имена элеметов,начиная с адреса #8009, первые 8 байт из каждой строки (конец строки - байт 13 ), конец файла - байт 3. П-ма ищет в корневом каталоге ЗАГРУЗОЧ─ НОГО у-ва эл-ты с указанными именами (фай─ лы .DNK ), загружает их в системную стра─ ницу, устанавливает в цепочку, настраивает на адрес загрузки - и теперь элементы ста─ новятся частью ОСи. Все эти файлы конфигурации загружаются на адрес #6000.Если файлы отсутствуют,либо не удаётся их загрузить (ошибка чтения и т.д.),то они НЕ БУДУТ установлены в систе─ му. Eсли нажата клавиша "Space", пропускае─ тся загрузка всех файлов конфигурации. 4. Далее будет загружена п-ма с именем SHELL.SEP (либо с другим именем, взятым из файла CONFIG.DNA ) из корневого каталога ЗАГРУЗОЧНОГО у-ва. При этом этой п-ме пре─ доставляется страница с номером 0. После успешной загрузки управление передаётся п-ме. Иначе в 7-ю страницу в STS, на адрес 56064 (если STS'а там нет - зависон). Теоретически предполагается, что загру─ женная п-ма - это оболочка, а практически может быть любая п-ма. Программа-оболочка П-ма-оболочка может быть любой (это мо─ жет быть даже Real Commander 2.6 с соотве─ тствующими плагинами).Она должна обеспечи─ вать следующие функции: - Предоставлять пользователю информацию о п-мах, находящихся в страницах памяти, а также возможность выбрать и переключиться на одну из них. - Предоставить пользователю каталоги у-в и возможность запуска п-м (файлы SEP), а также возможность открывать файлы соот─ ветствующими п-мами.Для последнего оболоч─ ка загружает файл EXTEND.TXT, который дол─ жен располагаться на у-ве с открываемым файлом, берёт из него имя п-мы и у-во, на котором эта программа расположена (номер 0-9, либо S,W,T,Q,L - т.е.: системное, для свопа,текущее,быстрое,загрузочное) и вызы─ вает систему для запуска этой п-мы (из ко─ рневого каталога). Если файла EXTEND.TXT нет, оболочка ищет его на СИСТЕМНОМ у-ве. (Пример: пользователь нажал на файле *.SCR - это картинка, в файле указано имя п-мы OPEN_SCR.SEP, будет загружена эта п-ма, и она сама загрузит файл *.SCR и выведет его на экран.) В эту оболочку будет производиться пе─ реход из других п-м (но не обязательно,за─ висит от подпрограммы в резиденте). Блок данных, передаваемый программе при запуске Максимальная длина блока 768 байт, сей─ час блок располагается начиная с адреса #5d00. Когда запускаемая п-ма получает управ─ ление, регистр IX указывает на адрес блока данных + 15. Содержимое блока данных следующее: IX-15 defw X ;длина данных про открываемый файл IX-13 defw Y ;длина данных про параметры запуска (ключи) IX-12 defw Z ;длина данных про запущенную п-му IX-10 defb 0 ;расположение системы в памя─ ти компьютера:0 - в странице IX-9 defb 0 ;режим работы системы: 0 - однозадачный IX-8 defw 0 ;номер страницы,где система и буфер для каталогов IX-6 defw 0 ;длина резидента системы IX-4 defw 0 ;адрес резидента системы (сейчас #5b00) IX-2 defw 0 ;сообщ-е для п-мы от системы: 0=первый запуск; 1=первый запуск+открыть файл; остальные сообщения пока не используются (см. выше) IX+0 defs Z ;здесь Z байт - данные про запущенную п-му. (max=352 байта) IX+Z defs Y ;здесь Y байт - данные про параметры запуска (ключи) (max=49 байт, если IX-13 не равен 0) IX+Z+Y defs X ;здесь X байт - данные про открываемый файл. (max=352 байта) Итого 15+352+49+352=768 байт. Первым делом п-ма должна взять адрес резидента (IX-4), потом проверяет сообще─ ние от системы (IX-2) - нужно ли открыть файл (т.е. пользователь запускает файл, а оболочка запускает эту п-му),или пользова─ тель сам запустил эту п-му. Данные про запущенную п-му нужны п-ме, если: - она состоит из нескольких файлов, в этом случае п-ма берёт эти данные и вызы─ вает элемент DOS,чтобы загрузить остальные файлы; - или п-ма хочет сохранить свои настрой─ ки в файл *.ini, тогда она сохраняет этот файл туда, где расположена сама; - и т.д. Функции системы DNA версии 0.431 Элементы выбираются по имени (8 байт по адресу IX ). Элемент SYSTEM Входные данные: IX+8 (1 байт) - номер функции. Функция 0 (получить системные переменные) IX+9 (2 байта) - адрес,куда положить ко─ пию системных переменных.Потом п-ма должна прибавить 5 к адресу и использовать их. Системные переменные имеют свойство из─ меняться :),поэтому необходимо получать их непосредственно перед использованием. Функция 1 (установить режим работы ОС) IX+9 (1 байт) - нужный режим работы: 0 - однозадачный режим 1 - режим переключения задач 2,3 - многозадачный режим 5 - восстановить предыдущий режим работы Элемент RUNEXE Запускает программы (файлы с расширени─ ем SEP ). Если п-ма хочет запустить другую п-му, она должна подготовить блок данных и вызвать элемент RUN_EXE. Блок данных,передаваемый эл-ту RUN_EXE: IX-2 defw 0 ;здесь будет сообщение от эл-та RUN_EXE о результате выполнения в случае каких-либо ошибок IX+0 defb "RUNEXE " ;имя эл-та 8 байт IX+8 defb 0 ;резерв IX+9 defb 1 ;0-первый запуск 1-запуск с открытием файла IX+10 defb X ;длина имени п-мы X IX+11 defw XX ;смещение до начала имени п-мы XX от IX+0 IX+13 defw YY ;смещение до начала имени открываемого файла от IX+0 IX+15 defb Y ;длина пути к п-ме IX+16 defb Z ;дл.пути к открываемому файлу IX+17 defb W ;дл.имени открываемого файла IX+18 defb V ;длина параметров запуска (количество ключей) IX+19 defb 0 ;номер у-ва,где файл IX+20 defb 0 ;длина подкаталога, где файл (в блоках по 256 байт) IX+21 defw 0,0 ;начало подкат., где файл: 0 - в корневом каталоге IX+25 defb 0 ;номер у-ва, где п-ма IX+26 defb 0 ;длина подкаталога, где п-ма IX+27 defw 0,0 ;начало подкат., где п-ма IX+31 defs X ;имя п-мы IX+31+X defs Y ;данные про путь к п-ме IX+31+X+Y defs W ;имя открываемого файла IX+31+X+Y+W defs Z ;данные про путь к открываемому файлу IX+31+X+Y+W+Z defs V ;параметры запуска п-мы (ключи) Элемент DOS Дисковые функции. Входные данные: IX+8 (1 байт) - номер функции. Функция 0 (инициализация логич.у-ва) IX+30 (1 байт) - номер логич. у-ва. Будет вызван драйвер блочного ввода-вы─ вода для данного у-ва с функцией 0 - ини─ циализация. Функция 1 (вызов драйвера файловой системы) Для работы с файлами необходимо вызы─ вать именно эту функцию. IX+28,29 (2 байта) - номер ф-ции и под─ функции драйвера файловой системы: 0 - инициализация файловой системы. По смещению IX+30 будет помещено имя файловой системы, 11 байт (например: TR-DOS ). 1 - установка каталога (сделать текущим этот каталог). Номер подфункции: * 0 - корневой 1 - с именем в буфере * 2 - вверх на уровень (выход из теку─ щего подкаталога) * 3 - имя+полный путь в буфере 2 - создать. Номер подфункции: 0 - файл * 1 - подкаталог 3 - удалить. Номер подфункции: 0 - файл * 1 - подкаталог 4 - загрузить. Номер подфункции: 0 - файл 1 - подкаталог 5 - записать. Номер подфункции: 0 - файл 1 - подкаталог * 6 - переименовать. Номер подфункции: 0 - файл 1 - подкаталог * Функция отсутствует (ещё нет в системе) Для функций 2-6 имя файла/подкаталога должно быть указано в буфере. Эти операции выполняются в текущем подкаталоге. Блок данных, передаваемый эл-ту DOS: DEFW 0 ;IX-23;контр.сумма переменных ДОС DEFB 0 ;-21;длина блока данных ;в секторах по 256 байт DEFB 0 ;-20;длина пути к файлу DEFB 0 ;-19;смещ.до начала имени файла DEFB 0 ;-18;длина имени файла DEFB 0 ;-17;БАЙТОВ В КОНЕЧ.БЛОКЕ ФАЙЛА DEFW 0,0 ;-16;ДЛИНА ФАЙЛА В БЛОКАХ DEFB 0 ;-12;ДЛИНА ТЕКУЩЕГО КАТАЛОГА DEFW 0,0 ;-11;НАЧ.БЛОК ТЕКУЩЕГО КАТАЛОГА DEFB 0 ;-7;смещение внутри кластера ;(в блоках по 256 байт) DEFW 0,0 ;-6;НАЧАЛЬНЫЙ НОМЕР БЛОКА ФАЙЛА DEFW 0 ;-2;АДРЕС БУДEТ PARAMETR DEFB "DOS " ;+0;ИМЯ ЭЛЕМЕНТА DOS DEFB 1 ;+8;ФУНКЦИЯ ЭЛЕМЕНТА DOS DEFB "TR_DFS " ;+9;БУДЕТ ИМЯ ЭЛЕМЕНТА DFS ;DEFB"PAGE_DRV";+17;ИМЯ ФАЙЛА 8,если длина ;имени =0. Если длина имени не 0 (байт из ;-18), то здесь следующие данные: DEFB 0 ;+17;резерв,не используется DEFW XX ;+18;смещение до начала пути ;к файлу от +17 DEFB X ;+20;длина пути к файлу DEFB Y ;+21;длина имени файла DEFW YY ;+22;смещение до начала имени ;файла от +17 DEFB 0 ;+23;резерв DEFB "DNA" ;+25;расширение файла,при длине ;имени 255 байт DEFB 4,0 ;+28;НОМЕР Ф-ЦИИ И ПОДФУНКЦИИ DFS DEFB 0 ;+30;НОМЕР ТЕКУЩЕГО УСТРОЙСТВА DEFB 1 ;+31;ФЛАГ ЗАГРУЗКИ: ;bit0:0-В АДР.ИЗ КАТ.;1-В УКАЗАННЫЙ АДР ;bit1:0-ВЕСЬ ФАЙЛ;1-УКАЗАННОЙ ДЛИННЫ ;bit2:0-С НАЧАЛА ФАЙЛА;1-С УКАЗ.СМЕЩ-Я ;bit4:0-нач.работу с файлом;1-продолж. ;bit5:1-преобр.каталог в универс.форму DEFW #6000,0 ;+32;АДРЕС ЗАГРУЗКИ, ;ЕСЛИ ФЛАГ=%xx1 DEFB 0,0,0,0 ;+36;ДЛИНА ЗАГРУЗКИ, ;ЕСЛИ ФЛАГ=%x1x DEFB 0,0,0,0 ;+40;СМЕЩЕНИЕ ЗАГРУЗКИ, ;ЕСЛИ ФЛАГ=%1xx DEFB "FDD_DRV " ;+44;ЗДЕСЬ БУДЕТ ИМЯ ЭЛ-ТА ;DRV DEFB 0 ;+52;НОМЕР ФУНКЦИИ DRV DEFW 0,0 ;+53;НАЧАЛЬНЫЙ НОМЕР БЛОКА 0...N DEFW 0,0 ;+57;КОЛ-ВО БЛОКОВ DEFW 0,0 ;+61;АДРЕС КУДА/ОТКУДА LOAD/SAVE DEFB 0 ;+65;НОМЕР ВИРТ.ДИСКА KUS_AUTO1 DEFS 256 ;+66;здесь путь и имя файла ;(если длина имени не равна 0 ;и длина пути не 0) ЭЛЕМЕНТ DOS УСТАНОВИТ ИМЕНА ДРАЙВЕРА ФАЙ─ ЛОВОЙ СИСТЕМЫ И БЛОЧНОГО ВВОДА-ВЫВОДА (DFS И DRV) САМОСТОЯТЕЛЬНО. Практически нужно изменять только флаг операции, адрес LOAD или SAVE, смещение от начала файла (если установлен флаг "гру─ зить с указанного смещения) и длину куска для LOAD/SAVE (если установлен флаг "гру─ зить указанной длины"). П-ма берёт данные, получаемые при запу─ ске,копирует в своё адресное пространство, изменяет несколько параметров и вызывает эл-т DOS. Регистр IX должен указывать на имя эл-та DOS. Эл-т DOS контролирует целостность дан─ ных про файл,с которым работает п-ма. Под─ считывается контрольная сумма (CRC16), от начала области данных DOS берёт 53 байта. Если открываемый файл не был загружен (записан) за один раз,то при следующих об─ ращениях надо устанавливать флаг "продол─ жить работу с файлом".Иначе при каждом об─ ращении драйвер будет загружать каталог и искать файл там,а потом уже читать/записы─ вать. Если загружать/записывать данные ука─ занной длины, а флаг "грузить с указанного смещения" не устанавливать, то смещение внутри файла изменяется автоматически.Т.е. если 3 раза вызвать DOS и каждый раз заг─ ружать 1 кб, то первый килобайт будет заг─ ружен с начала файла, следующий килобайт будет загружен со смещением 4 (4 блока по 256 байт),а третий килобайт будет загружен со смещения 8 (8 блоков по 256 байт от на─ чала файла). Флаг "грузить с указанного смещения" нужен,чтобы обеспечить произвольный доступ к данным внутри файла,а при последователь─ ном доступе (например,при копировании) его устанавливать не надо. Коды ошибок Передаются приложению в виде сообщения длиной 2 байта. Если оба байта равны нулю, то ошибок нет. 1-й байт - условный номер эл-та (IX-1); 2-й байт - номер ошибки (IX-2). Для всех эл-тов общими номерами ошибок являются: 0 - нет вызываемой функции (подфункции) (после такой ошибки приложение может вы─ дать сообщение пользователю типа "обновите элемент"). 1 - ошибочные параметры команды (провер─ ка на правильность параметров идёт только в тех эл-тах,где запуск функции c неправи─ льными параметрами может повредить систе─ ме). 2 - испорчены данные в таблице данных (имеется в виду, что испорчены некоторые переменные вызываемого элемента). Условные номера элементов: 0. Элемент FINDER (ищет эл-т в цепочке и вызывает его). 0 - в цепочке эл-тов нет эл-та с ука─ занным именем. 1. Элемент SYSTEM (менеджер системных ресурсов). 5. Элемент DFS (драйвер файловой систе─ мы). 3 - нет файла с указанным именем (при чтении/удалении файла/каталога); 4 - файл с таким именем уже есть (при создании файла/каталога); 5 - нет места в каталоге (при создании файла/каталога); 6 - нет места на диске (при создании файла/каталога); 7 - конец файла (при попытках чтения/ записи за концом файла/каталога). 6. Элемент DRV (драйвер блочного ввода- вывода). 3 - нет виртуального диска с указанным номером; 4 - у-во не готово; 5 - ошибки ввода-вывода. Потом будут введены ошибки для каждой операции отдель─ но (чтение/запись). 14. Элемент RUNEXE (запускает файлы). 15. Элемент DOS (менеджер дисковых у-в). 3 - нет у-ва с заданным номером. Формат (под)каталога (универсальная форма) 2 байта - количество файлов в загружен─ ной части каталога (M); 2 байта - количество файлов всего в ка─ талоге (N). Далее для каждого из M файлов по X+16 байт: смещение длина описание +0 1 длина имени файла (X) Значение 1-го байта,равное 0, воспринимае─ тся как 8 (т.е. длина имени файла 8 байт), расширение файла 3 байта. +1 5 длина файла в байтах +6 2 атрибуты файла 1-й байт (из FATx): bit0: только чтение; bit1: невидимый; bit2: системный; bit3: метка тома; bit4: подкаталог; bit5: архив; bit6-7: резерв. 2-й байт - резерв. +8 4 время создания файла 1-й байт: bit0-5 - минуты (0..59); 1-й:6-7 и 2-й:0-2 - часы (0..23); 2-й:3-7 - число (1..31); 3-й:0-3 - месяц (1..12); 3-й:4-7 - ст.часть года минус 1982; 4-й: мл.часть года минус 1982. Пример: дата создания файла 26 марта 2003 года, 9 часов 30 минут - получаем 30+9*64+26*2048, 1-й и 2-й байты. 2003-1982=21 год (значит, старшие 4 бита года равны 0). 3-й байт равен 3+0*16=3. 4-й байт равен 21. +12 X имя файла +12+X 4 расширение файла Пример: пусть в подкаталоге Raznoe 4 файла, все файлы имеют разную длину имени: HIMEMORY.DNA spectrum_os_history.text The Best Games for ZX-SPECTRUM.hlp Ну прямо очень длинное сверхимя для файла,которое не помещается ни в одну файловую систему,кроме универсальной формы каталога,предоставляемой операционной системой DNA.joke После вызова функции "загрузить подка─ талог с именем Raznoe, начиная с адреса ADRESS и преобразовать его в универсаль─ ную форму" (должен быть установлен бит 5 флага операции),получаем по адресу ADRESS: 4,0 ;2 байта - кол-во файлов ;в загруженной части каталога 4,0 ;2 байта - всего файлов в кат. ;первый файл +0 0 ;длина имени: 0 -> 8 байт имя ;и 3 байта расширение +1 255,0,0,0,0 ;длина файла 255 байт +6 4,0 ;2 байта атрибуты файла ;установлен бит 2 - системный +8 0,0,0,0 ;4 байта:время создания файла +12 "HIMEMORY" ;8 байт имя файла +20 "DNA " ;4 байта расширение файла ;второй файл +0 19 ;длина имени файла 19 символов +1 0,100,0,0,0 ;длина файла 25600 байт +6 2,0 ;атрибуты файла: бит1 - read only +8 0,0,0,0 ;время создания файла +12 "spectrum_os_history" ;19 байт имя +31 "text" ;4 байта расширение ;третий файл +0 30 ;длина имени файла 30 символов +1 0,100,0,0,0 ;длина файла 25600 байт +6 2,0 ;атрибуты файла: бит1 - read only +8 0,0,0,0 ;время создания файла +12 "The Best Games for ZX-SPECTRUM" ;30 байт имя +42 "hlp " ;4 байта расширение ;четвёртый файл +0 167 ;длина имени файла 167 символов +1 0,100,0,0,0 ;длина файла 25600 байт +6 2,0 ;атрибуты файла: бит1 - read only +8 0,0,0,0 ;время создания файла +12 "Ну прямо очень длинное сверхимя для файла,которое не помещается ни в одну файловую систему,кроме универсальной формы каталога,предоставляемой операционной системой DNA" ;167 байт имя +189 "joke" ;4 байта расширение Разработанный формат каталога позволяет представить любую известную (мне) (TR-DOS, NEOS,iS-DOS,FAT12,FAT16,FAT32,VFAT,CDFS и др.) файловую систему в универсальной фор─ ме без потерь информации о файлах. Как бу─ дет предоставляться каталог других файло─ вых систем (NTFS,UFS и подобные),неизвест─ но :( Выяснилось, что надо ещё где-то хранить длину бейсик-файла,когда он моноблок с ко─ довым блоком, и потом, при копировании на у-во с файловой системой TR-DOS, ставить эту длину. А на данный момент ставится об─ щая длина моноблока.
Другие статьи номера:
Похожие статьи:
В этот день... 7 октября