Info Guide #07
31 мая 2005
  Софт  

For Coderz - Программирование под DNA_OS ZET-9, пакет утилит для работы с устройствами хранения данных.

<b>For Coderz</b> - Программирование под 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, ставить
эту длину. А на данный момент ставится об─
щая длина моноблока.



Другие статьи номера:

Классика - Альманашник. А. С. Пушкин.

For Coderz - Распознавание и вычисление арифметических выражений по их символьной записи.

Inferno - Авторы журнала.

For Coderz - О дисциплине при создании больших проектов.

Интервью - Вопросы Константину Свиридову (Conan) о сайте zxnext.narod.ru.

Ликбез - Принципы конвертирования графики PC-ZX.

For Coderz - Программирование смены диска/дисковода на Скорпионе.

Sofтинка - DNA_OS v0.431 - пакет утилит для работы с винчестерами, RAM-дисками и дискетами.

For Coderz - Программирование под DNA_OS ZET-9, пакет утилит для работы с устройствами хранения данных.

Sofтинка - Проблемы и недоработки пакета утилит для работы с устройствами хранения данных DNA_OS.

Ликбез - Подробно о дисковых форматах, имеющих FAT.

Inferno - Вступление от редактора.

Inferno - Ошибки в предыдущих номерах.

For Coderz - Маленькие программерские хитрости.

Gameland - О новых играх: Oneyroid, Dizzy forever, Dridlock.

For Coderz - Пишем архиватор. Практические принципы LZ упаковки.

Gameland - Прохождение новых отгрузок для игры "Чёрный Ворон".

For Coderz - Программирование для видеорежима 384x304.

Inferno - Письма в редакцию.

Звук - Идеи Megus'а по поводу трекера для AY/YM.

Inferno - Об оболочке.

For Coderz - Основы оптимизации под процессор Z80.

Ликбез - Расположение разделов на винчестере.

Gamedev - 3D проецирование пола/трассы в играх.

Звук - Дикие идеи для AY трекеров.

Реклама - Реклама от Романа Чунина.

Реклама - Реклама от В. Богдановича

For Coderz - Как делается крупная перемещаемая программа.

Ремонт - Неисправности Pentagon 128+ и их ремонт.

Inferno - Содержание номера.

Разное - Мысли о конкурсе на лучший софт.

Others - Перенос программного обеспечения на ZX Spectrum с PC.

Видео - Об упаковке видео для ZX Spectrum.


Темы: Игры, Программное обеспечение, Пресса, Аппаратное обеспечение, Сеть, Демосцена, Люди, Программирование

Похожие статьи:
Игры - коды к игре Boovie 2.
Авторы - авторы и их адреса.
Панорама ТV - О мультиках и агрессивном маркетинге.
For Coderz - Муза from PC (описание форматов звуковых файлов).
Обзор - новые игры и софт: Double Xinox 128, UFO 2, Shadow Dancer, Multicolor Studio v1.2, X-RAY #1, Emulate #1.

В этот день...   21 ноября