Adventurer #13
31 марта 2002

Обмен опытом - работа с западными дисковыми системами MDOS и MD02.

<b>Обмен опытом</b> - работа с западными дисковыми системами MDOS и MD02.
     (C) 2000 d40/d80.mdos info by Pol/PHT
       <jurica@sknet.sk>
     (C) 2000 mb02.bs-dos info by LaesQ/RA
       <laesq@ethree.demon.co.uk>
     (C) 2000 imported by Faster/TNL+PHT
       <faster@hotbox.ru>
     (C) translated by Alff/CPU
     (C) corrected by Elf/CPU

              Here's the file u wanted :)
                                 Have fun
                          LaesQ/Raww Arse

     jo! Как-то давно я просматривал/про-
читывал se#3 и наткнулся на статью MacBu-
ster'а,  где  он  сетовал на то, что west
хает  "russian"  tr-dos и не дает доку на
свои  дисковые системы... Мне все это по-
казалось давольно-таки забывным, посколь-
ку  спросить разве нельзя было? Например,
когда  мне  понадобилась  документация на
d40/d80 и mb02, мне ее сразу же прислали,
за  что  огромное  спасибо  Pol/PHT.sk  и
LaesQ/RA.uk соответственно! Что же касае-
тся  обхаивания tr-dos'a в плане програм-
мирования на низком уровне, то я абсолют-
но  солидарен  с  MacBuster'ом, поскольку
здесь tr-dos рулит без базара! Ну а вооб-
ще, если брать в сравнении эти три диско-
вые  системы,  то,  безусловно, 1-е место
держит  mb02  -  rulez  foreva!!! Если Вы
хоть немного разбираетесь в дисковых сис-
темах,  Вы поймете почему... Скажу, что я
так последний раз протащился только когда
ознакомился с документацией на z380!
     Уже   более   года  назад  я  сделал
ответный  шаг  и  послал Pol'у в Словакию
книжку-малышку ;-) по tr-dos:

-----------------------------------------

From: "Pol" <jurica@sknet.sk>
Organization: Phantasy
To: Alexander Yudin <fas7er@yahoo.com>
Date: Wed, 13 Sep 2000 21:58:21 +0200
Subject: trdos manual

hello faster!

     big  thanks  for  manual  for trdos!
it's  great  piece of spectrum literature
and  it's  curiosity  for  us!  i'll scan
cover  and send to my friends in UK where
trdos originated. once again - THANK YOU!

pol/pht.sk

-----------------------------------------

     Судя  по всему, на западе уже должны
были поиметь english version of trdos ma-
nual. Поэтому настала Ваша очередь знако-
миться с ихними дисковыми системами. Если
возникнут  какие-либо  вопросы, то можете
обращаться на контактные адреса!
     Напоследок хотелось бы отметить, что
mb02  - самая (???) распространенная дис-
ковая  система,  которой пользуются от UK
до Portugal и Slovakia... А d40/d80 испо-
льзуют в основном в Чехии/Словакии - (ти-
па как у нас tr-dos :). Например в Польше
это FDD3000, ну и тд.

Have a good luck!

p.s. dos'em all! dos'em up! dos'em fuck!
                                 09.10.01



From: "Pol" <jurica@sknet.sk>
To: fas7er@yahoo.com
Date: Tue, 1 Aug 2000 19:03:10 +0200
Subject: bios for mdos


              BIOS для MDOS
           описание подпрограмм

BIOS  для  MDOS это программа длиной 1024
байта,  которая может быть использована в
программах  для  легкой  работы с диском.
Весь код является релоцируемым.

Вызов операций:

А  -  номер  функции,  другие регистры по
описанию.

           Операция 0 - Запись

Запись участка памяти на диск.

Обрабатываются ошибки:

Drive not ready (Дисковод не готов)
Disk full (На диске нет места)
Directory full (Каталог полон)
Corrupted FAT structure (Нарушение в структуре FAT'а)
Bad device type (Неправильный тип устройства)
Disk write protect... (Включена защита от записи)

Необрабатываемые ошибки:

CRC error (Ошибка CRC)
Sector not found... (Сектор не найден)

На входе:

HL - file identification (Описатель файла)
DE - start of memory block to save
     (Начало записываемого блока)
BC - length (Длина)

На выходе:

A=0 and Z=1 - no error (Ошибки не было)
A<>0 and Z=0 - error (Произошла ошибка)
HL - address of error message (in BIOS file)
адрес сообщения об ошибке (в файле BIOS'а)

          Операция 1 - Загрузка

Загрузка файла в память.

Обрабатываются ошибки:

Drive not ready (Дисковод не готов)
Bad device type (Неправильный тип устройства)
File too long... (Файл слишком длинный)

Не обрабатываются ошибки:

Corrupted FAT structure (Нарушена структура FAT'а)
CRC error (Ошибка CRC)
Sector not found... (Сектор не найден)

В регистр BC можно задать максимально возможную длину файла.
Я не знаю как это работает, но если туда занести -1, то все
файлы будут загружаться наверняка.

На входе:

HL - file identification (Описатель файла)
DE - where to load (Куда грузить)
BC - length (Длина)

На выходе:

A=0 and Z=1 - no error (Нет ошибки)
A<>0 and Z=0 - error (Ошибка)
HL - address of error message (in BIOS file)
     адрес сообщения об ошибке (в файле BIOS'а)

          Операция 2 - Удаление

Удаление файла(ов). Можно использовать символы с любыми кодами в
имени.

Обрабатываются ошибки:

Drive not ready (Дисковод не готов)
Bad device type (Неправильный тип устройства)
Disk write protect... (Диск защищен от записи)
File not found... (Файл не найден)

Не обрабатываются ошибки:

CRC error (Ошибка CRC)
Sector not found... (Сектор не найден)
Corrupted FAT structure (Нарушена структура FAT'а)

На входе:

HL - file identification (Описатель файла)

На выходе:

A=0 and Z=1 - no error (Нет ошибки)
A<>0 and Z=0 - error (Ошибка)
HL - address of error message (in BIOS file)
адрес сообщения об ошибке (в файле BIOS'а)

           Операция 3 - Каталог

File not found (A=27).

Это  Выборочный  Каталог. Это значит, что
если вы вызвали эту операцию, то получите
имя файла. Вы можете определять типы фай-
лов  в  каталоге (*.B, file??.*). Если не
найдено ни одного файла, то будет возвра-
щена ошибка - Файл не найден (А=27).

На входе:

HL  - file identification (Описатель фай-
ла).

На выходе:

A=0 and Z=1 - file found (Файл найден)
A<>0 and Z=0 - error - no other files in directory
(ошибка, нет файлов в каталоге)
HL - address of error message (in BIOS file)
     адрес сообщения об ошибке (в файле BIOS'а)

           Операция 4 - LOAD1ST

Загрузить  первый  сектор из файла. Можно
использовать для идентификации файла.

На входе:

HL - file identification (Описатель файла)
DE - where to load (Куда грузить)

На выходе:

A=0 and Z=1 - no error (Нет ошибки)
A<>0 and Z=0 - error (Ошибка)
HL - address of error message (in BIOS file)
адрес сообщения об ошибке (в файле BIOS'а)

            Операция 22 - VERS

на выходе:

HL - address of version name (адрес номера версии)

Я  полагаю,  что этих операций достаточно
для записи/загрузки или просмотра катало-
га.  Если  вы думаете, что это не слишком
полезно  для вас, то просто пришлите опи-
сание параметров загрузки/записи в alasm,
и я сделаю подпрограммы для MDOS. Я пола-
гаю, это наилучшее решение.

File identification: (Описатель файла)

Это  строка  содержащяя  номер дисковода,
имя файла и расширение.

FILE     defb   "A:filename.B"

Ну,  я  думаю это все. Да вот еще одно, я
предпочел  бы, если вы мне прислали вход-
ные  данные для процедур чтения/записи, и
я постарался бы сделать процедуры ввода/-
вывода,  и тогда мы могли бы обсудить эту
тему.  И постарайтесь делать системы чте-
ния/записи, ориентированые на файлы, а не
на чтение/запись сектора.

        Описание работы с дисководом
         в дисковой системе MDOS.

MDOS была получена из SinDos, так что ес-
ли вы найдете здесь что-либо знакомое, то
это естественно.

Каждый сектор имеет длину 512 байт.

MDOS использует два стандартных формата:

40x9 for 5.25" disks
80x9 for 3.5" disks

Скорость  загрузки  примерно  24  Кб/сек,
скорость записи немного меньше.

Существует  2  версии:  1.0 и 2.0. Потому
как  мы используем стандартные точки вхо-
да, проблем с совместимостью быть не дол-
жно. Системное ПЗУ подключается с помощью
команды RST 0 (или JP 0, или LD HL,0:PUSH
HL  (0):RET,  и т.д.). Перед тем как сде-
лать  это, надо занести число 79 в ячейку
памяти  16119  (#247 в basic с MDOS). Это
дисковое  теневое  ОЗУ.  Смотри  BIOS для
MDOS,  там  есть процедура на ассемблере,
которая переключает ПЗУ. MDOS может испо-
льзовать  2  дисковода  (в любой комбина-
ции).

Как переключать ПЗУ:

TAB   defw  0
      defw  #3EF7
START ld    a,#4F
      ld    de,TAB-26
      call  #25AB
      ld    hl,0
      ld    (TAB),hl
      ld    hl,#3EF7
      ld    (TAB+2),hl
      rst   0
      ...
Включаем дисковое ПЗУ. После jp 5888 в ПЗУ BASIC'a
вернется.

             Sector 0 - BOOT

смещение  длина    содержание           описание
!128      4     информация о диске  инфо о формате диска
                                     (tracks/sects/sides)
 177      4     информация о диске  инфо о формате диска
                                     (tracks/sects/sides)
!181      4     информация о диске  инфо о формате диска
                                     (tracks/sects/sides)
 192      10    имя диска (10 сим.) имя диска созданое с
                                     помощью FORMAT
 202      2      случайное число    идентификационный номер,
                     (1-65536)      созданный с помощью FORMAT
 204      4       строка "SDOS"     используется MDOS для
                                        идентификации

Информация, помеченная знаком "!", непри-
менима в повседневной работе, так как это
всего  лишь  копии инфы, и она может быть
повреждена (системой).

177 - установлен  4 бит, если диск двухс-
      торонний
    - установлен  3 бит, если диск форма-
      тировался на D40
178 - треков на одной стороне
179 - секторов на треке
180 - ноль

Другие  байты в BOOT могут быть использо-
ваны для программ,  проверок  копирования
или  чего-то в этом духе (не рекомендует-
ся:)

             Sector 1-5 - FAT

Это обычный 12-битный FAT (да-да FAT12 на
pC).  Это  место нас особо не интересует,
MDOS в курсе как работать с ним.

            Sector 6-13 - DIR

Каждый  файл занимает в каталоге 32байта.
(MDOS не имеет подкаталогов.)

Например:

байт        описание
----        --------
0       расширение (ASCII код: P, C, N, B, S, Q)
1-10    имя файла, имена короче 10 символов дополняются до 10
        нулями.
11,12   длина дайла
13,14   стартовый адрес,стартовая строчка для basic прог. (.P)
15,16   не используется (кроме длины basic без переменных)
17,18   номер первого сектора (входная точка в FAT)
19      ноль
20      флаги (каждый бит один из таких: HSPARWED)
21      еще один байт длины (для файлов типа seQuence)
22-31   заполнено числом 229

Как  вы  можете видеть, возможно написать
систему, которая будет использовать более
10  символов для имени файла, и все оста-
нется совместимо с старой MDOS (хе-хе, m$
sux:)

Используемые  расширения:
P - programm (basic)
C - character array
N - numeric array
B - bytes
S - snapshot
Q - sequence


флаги:

bit 7 - Скрытый (не виден в каталоге)
bit 6 - Системный
bit 5 - Защищен (not implemented) (не используется)
bit 4 - Архивный (not implemented) (--//--)
bit 3 - Только для чтения (файл можно читать:)
bit 2 - Записываемый (в файл можно записывать)
bit 1 - Исполняемый
bit 0 - Стираемый (Можно его стреть, при надобности)

              Sector 14-???

Сектор данных, смотри информацию о форма-
те выше.


From: "LaesQ" <laesq@ethree.demon.co.uk>
To: fas7er@yahoo.com
Date: Sat, 9 Sep 2000 12:00:03 +0100
Subject: mb02 manual

         MB-02 техническое описание

Содержание:

  1. ROM bios
  2. FDC bios
  3. BS-DOS операторы
  4. Особенности дискового формата

(C) Busy soft, Index 20000531171000

                 ROM-BIOS

ROM-BIOS  переключает  банки ОЗУ и запре-
щает запись в банки памяти MB-02. Это по-
зволяет  вызывать программу между банками
ОЗУ, без использования памяти выше #4000.

                  Обзор.
  CALL #3C98 ... Переключение на банк ROM, запись невозможна
                 (работает в обоих банках)
  CALL #3C9A ... Переключение на банк DOS, запись невозможна
                 (работает в обоих банках)
  CALL #3C9C ... Включение банка ROM, запись возможна
                 (работает в обоих банках)
  CALL #3C9E ... Включаем DOS банк, запись возможна
                 (работает в обоих банках)
  CALL #3CA0 ... Вызов из одного банка процедур другого
                 (работает в обоих банках)
  CALL #3CA2 ... установить магнитофон как текущее устройство
                 (работает только в банке ПЗУ)
  CALL #3CA4 ... установить дисковод как текущее устройство
                 (работает только в банке ПЗУ)

       Подробное описание процедур.

Процедуры   переключения  банков:  #3C98,
#3C9A,  #3C9C, #3C9E. Эти процедуры рабо-
тают  в  обоих банках памяти - ROM и DOS.
Настоятельно  рекомендуется  не использо-
вать комманду OUT для переключения банков
памяти, потому что адреса и данные перек-
лючения портов зависят от версии MB-02.

Межбанковый вызов: CALL #3CA0 Используйте
это  таким  образом: программа запущена в
банке  DOS и ей необходимо вызвать какую-
либо процедуру (например #22АА для расче-
та  координат) из банка ROM. Это делается
так:

program:
        ...
        CALL #3CA0
        DW #22AA
        ...

Таким  же образом можно действовать, если
включен  банк  ROM, и программе надо выз-
вать процедуру из банка DOS.

После того как вызываемая процедура заве-
ршила свою работу, программ продолжит ра-
боту  в  своем банке. Процедура по адресу
#3CA0  не изменяет ни регистров ни флагов
и  использует  всего  8 байт на стеке. SP
должен быть выше #4008.

В  банке  DOS для перехода на адрес #3CA0
можно использовать RST #28, таким образом
программа работающая с банком DOS и вызы-
вающая  процедуры  в банке ROM, может де-
лать это так:
        ...
        RST #28
        DW #22AA
        ...

Переопределение  ROM  load-save  процедур
между  лентой  и  диском:
CALL #3CA2,CALL #3CA4.

ROM load-save процедуры (точки входа #4C6
и #562) могут работать с классическим ма-
гнитофоном  класическим  путем, или могут
работать  с  дисководом.  Какое устройсто
будет  использоваться, определяется с по-
мощью  этих двух процедур. Это точный эк-
вивалент  команды  '@':  нулевой параметр
означает  то, что load/save команды пере-
направлены на работу с лентой, и не нуле-
вой означает работу с диском.

                 FDC-BIOS

Вся  работа с FDC контроллером происходит
с помощью FDC-BIOS. Процессор не загружен
работой, занимающей много времени, он мо-
жет  охлаждаться  или выполнять программы
на IM2 прерываниях пока происходит работа
дисковых операций.

Если вы выполненяете какие-либо процедуры
на IM2, то они не должны делать следующих
вещей:
- использовать  или  изменять  какие-либо
  установки FDC и DMA контроллеров;
- содержать циклов, занимающих много вре-
  мени  (потому  как  DMA  подтормаживает
  процессор);
- работать дольше 5-10 мс (но это не  так
  важно);
- переключать MB-02 банки памяти;
- и,  конечно,  все регистры должны  быть
  сохранены, а потом восстановлены.

Все операторы FDC-bios доступны с помощью
RST #18 в DOS банке. Регистр A должен со-
держать  номер  операции. Другие регистры
содержат  необходимую информацию для дан-
ной операции.

                  Обзор

 #00: RESET ..... сброс FDC контроллера
 #01: STATUS .... чтение информации о состоянии
 #02: RESTORE ... передвинуть головку на трек 0
 #03: SEEK ...... передвинуть головку на трек N
 #04: RDSEC ..... прочитать сектор
 #05: WRSEC ..... записать сектор
 #06: RDTRK ..... читать трек (прямое чтение)
 #07: WRTRK ..... форматировать тре
 #08: RDADD ..... прочитать идентификатор сектора
 #09: REZIM ..... установить плотность
 #0C: AKTIVE .... включить дисковод N
 #0D: PASIVE .... выключить все дисководы
 #0E: INFO ...... получить информацию о дисководе
 #0F: SETMAX .... установить максимальную длину для обмена
                  данными.
 #10: SETMLT .... установить процедуру многозадачности
 #11: SETOFF .... установить режим отключения мотора

       Подробное описание операций

  номер операции: мнемотехническое имя операции
                 i: регистр = значение [параметры на входе]
                 o: регистр = значение [параметр на выходе]

  ...описание операций...

 #00: RESET
   о: А=статус

Сброс FDC контроллера.
Неплохо  бы  использовать перед работой с
FDC bios в начале приложения.

 #01: STATUS
   о: А=статус

Возвращает  текущий статус, формат описан
ниже.

 #02: RESTORE
   о: А=статус

Двигает головку на трек 0.

 #03: SEEK
   i: D=трек
   o: А=статус

Двигает головку на трек, указаный в реги-
стре D.


 #04: RDSEC
   i: DE=физический номер сектора, HL=адрес
   o: А=статус

Чтение  сектора  (номер  в DE) в память с
диска адрес в HL.

 #05: WRSEC
   i: DE=номер физического сектора, HL=адрес
   o: A=статус

Запись  участка памяти на диск, в DE сек-
тор для записи и в HL адрес участка памя-
ти.  Перед выполнением операций RDSEC или
WRSEC  не  надо  вызывать  оператор SEEK,
т.к.  если  надо WRSEC или RDSEC все сде-
лают автоматически.

 #06: RDTRK
   i: D=трек, 7 бит регистра E=сторона, HL=адрес
   o: а=статус

Чтение  целого трека в память по адресу в
HL.  Этот  оператор читает и межсекторную
информацию  тоже,  crc  коды  секторов не
проходят.  Этот  оператор не подходит для
чтения информации с секторов.

 #07: WRTRK
   i: D=трек, 7 бит регистра E=сторона, HL=адрес
   o: А=статус

Форматирование  трека. В HL начало после-
довательности  для используемого контрол-
лера (обычно wd2797)


 #08: RDADD
   i: D=трек, 7 бит регистра Е=сторона, HL=адрес
   o: А=статус

Чтение  идентификатора  сектора. Читает в
память 4 байта: номер трека, сторона, но-
мер  сектора  и  длина сектора. Для более
подробной  информации  смотри  описание к
wd2797.

Нет  необходимости вызывать оператор SEEK
перед  операциями #04-#08. Если это необ-
ходимо,  то SEEK (поиск) будет произведен
автоматически.

 #09: REZIM
   i: E=0 для DD, 1 для HD, 2 для ED
   o: Z=все нормально, NZ=ошибка

Установка  плотности  текущего дисковода.
Если дисковод не поддерживает данную пло-
тность, то происходит NZ.


 #0C: AKTIVE
   i: E=номер дисковода
   о: А=результат

Включить дисковод Е и выключить все оста-
льные дисководы (если надо).

Результаты могут быть следующими:

   0 ... Неизвестный диск ... дисковод отсутствует
   1 ... Диск не готов ....  в дисковод не вставлена дискета
   2 ... Диск активизирован ... успешно, дискета не изменялась
   3 ... Диск активизирован ... успешно, возможно дискета
                                изменялась.
Если А=0 или 1,то ни один дисковод не бу-
дет активен.

 #0D: PASIVE
   i: E=номер дисковода

Выключить дисковод.

 #0E: INFO
   i: E=номер дисковода
   o: DE=информация о дисководе

Этот  оператор  возвращает такую информа-
цию:

   D = номер треков
   E = поддерживаемая плотность
       бит 0 = 1 ... DD
       бит 1 = 1 ... HD
       бит 2 = 1 ... ED

Если дисковод отсутствует, DE будет соде-
ржать 0.

 #0F: SETMAX
   i: BC=максимальная длина перемещаемых данных

Этот  оператор устанавливает максимальное
количество  байт  для  DMA  операций.  Не
очень важен для программ пользователя.

 #10: SETMLT
   i: HL=адрес процедуры многозадачности (или 0, если в  такой
      процедуре нет необходимости)

Пока  DMA оперирует данными между памятью
и  FDC контроллером, другая процедура мо-
жет  работать. HL содержит адрес процеду-
ры, вызываемой перед началом работы DMA с
данными.  DMA  используется  в  операциих
RDSEC  и  WRSEC. Если вы хотите выполнять
какие-либо  процедуры во время чтения или
записи сектора, тогда данная процедура не
должна  делать  следующее (тоже что и при
IM2):

- использовать  или  изменять  какие-либо
  установки FDC или DMA контроллеров;
- содержать циклов, занимающих много вре-
  мени  (потому  как  DMA  подтормаживает
  процессор);
- работать дольше 5-10 мс (но это не  так
  важно);
- переключать MB-02 банки памяти как уго-
  дно, т.е. никак.

Процедура может изменять любые регистры и
должна заканчиваться RET.

 #11: SETOFF
   i: E=включить режим отключения мотора

Если Е=0, тогда PASIVE отключит весь дис-
ковод  (доступность и мотор). Если Е=255,
тогда  PASIVE отключит только доступность
дисковода. В этом случае, мотор продолжит
вращаться.  Это  полезно,  если вы хотите
обратиться  к  двум дисководам в короткий
промежуток времени, тогда вам не придется
ждать включения мотора дисковода.

  Описание физических номеров секторов:

  биты 0-7 регистра D ... трек
  бит    7 регистра Е ... сторона (головка)
  бит  0-6 регистра Е ... номер сектора на треке D

        Описание статусного байта:

 Если ситуация произошла, то бит будет установлен.

Бит  Имя события       Возможная ситуация         Оператор

0.время вышло....Оператор слишком долго работал.#04-#05
1.диск не готов.......... Нет диска в дисководе.#04-#08
2.потеряна информация.. ....Ошибка в работе DMA.#04-#08
2.трек 0 ....................Головка на 0 треке.#00-#03
3.ошибка crc .................Ошибка при чтении.#04
4.записи нет ............Диск не отформатирован.#04,#05,#08
4.ошибка поиска..Drive не имеет 0-го трека (?!).#02
5.прерывание ........во время работы нажаты q+w.#02
6.защита от записи.......Диск защищен от записи.#0-#03,#05,#07
7.не готов ........невозможно включить дисковод.#04-#08

         MB-02 техническое описание

Содержание:

  1. ROM bios
  2. FDC bios
  3. BS-DOS операторы
  4. Особенности дискового формата

(C) Busy soft, Index 20000531171000

                 ROM-BIOS

ROM-BIOS  переключает  банки ОЗУ и запре-
щает запись в банки памяти MB-02. Это по-
зволяет  вызывать программу между банками
ОЗУ, без использования памяти выше #4000.

                  Обзор.
  CALL #3C98 ... Переключение на банк ROM, запись невозможна
                 (работает в обоих банках)
  CALL #3C9A ... Переключение на банк DOS, запись невозможна
                 (работает в обоих банках)
  CALL #3C9C ... Включение банка ROM, запись возможна
                 (работает в обоих банках)
  CALL #3C9E ... Включаем DOS банк, запись возможна
                 (работает в обоих банках)
  CALL #3CA0 ... Вызов из одного банка процедур другого
                 (работает в обоих банках)
  CALL #3CA2 ... установить магнитофон как текущее устройство
                 (работает только в банке ПЗУ)
  CALL #3CA4 ... установить дисковод как текущее устройство
                 (работает только в банке ПЗУ)

       Подробное описание процедур.

Процедуры   переключения  банков:  #3C98,
#3C9A,  #3C9C, #3C9E. Эти процедуры рабо-
тают  в  обоих банках памяти - ROM и DOS.
Настоятельно  рекомендуется  не использо-
вать комманду OUT для переключения банков
памяти, потому что адреса и данные перек-
лючения портов зависят от версии MB-02.

Межбанковый вызов: CALL #3CA0 Используйте
это  таким  образом: программа запущена в
банке  DOS и ей необходимо вызвать какую-
либо процедуру (например #22АА для расче-
та  координат) из банка ROM. Это делается
так:

program:
        ...
        CALL #3CA0
        DW #22AA
        ...

Таким  же образом можно действовать, если
включен  банк  ROM, и программе надо выз-
вать процедуру из банка DOS.

После того как вызываемая процедура заве-
ршила свою работу, программ продолжит ра-
боту  в  своем банке. Процедура по адресу
#3CA0  не изменяет ни регистров ни флагов
и  использует  всего  8 байт на стеке. SP
должен быть выше #4008.

В  банке  DOS для перехода на адрес #3CA0
можно использовать RST #28, таким образом
программа работающая с банком DOS и вызы-
вающая  процедуры  в банке ROM, может де-
лать это так:
        ...
        RST #28
        DW #22AA
        ...

Переопределение  ROM  load-save  процедур
между  лентой  и  диском:
CALL #3CA2,CALL #3CA4.

ROM load-save процедуры (точки входа #4C6
и #562) могут работать с классическим ма-
гнитофоном  класическим  путем, или могут
работать  с  дисководом.  Какое устройсто
будет  использоваться, определяется с по-
мощью  этих двух процедур. Это точный эк-
вивалент  команды  '@':  нулевой параметр
означает  то, что load/save команды пере-
направлены на работу с лентой, и не нуле-
вой означает работу с диском.

                 FDC-BIOS

Вся  работа с FDC контроллером происходит
с помощью FDC-BIOS. Процессор не загружен
работой, занимающей много времени, он мо-
жет  охлаждаться  или выполнять программы
на IM2 прерываниях пока происходит работа
дисковых операций.

Если вы выполненяете какие-либо процедуры
на IM2, то они не должны делать следующих
вещей:
- использовать  или  изменять  какие-либо
  установки FDC и DMA контроллеров;
- содержать циклов, занимающих много вре-
  мени  (потому  как  DMA  подтормаживает
  процессор);
- работать дольше 5-10 мс (но это не  так
  важно);
- переключать MB-02 банки памяти;
- и,  конечно,  все регистры должны  быть
  сохранены, а потом восстановлены.

Все операторы FDC-bios доступны с помощью
RST #18 в DOS банке. Регистр A должен со-
держать  номер  операции. Другие регистры
содержат  необходимую информацию для дан-
ной операции.

                  Обзор

 #00: RESET ..... сброс FDC контроллера
 #01: STATUS .... чтение информации о состоянии
 #02: RESTORE ... передвинуть головку на трек 0
 #03: SEEK ...... передвинуть головку на трек N
 #04: RDSEC ..... прочитать сектор
 #05: WRSEC ..... записать сектор
 #06: RDTRK ..... читать трек (прямое чтение)
 #07: WRTRK ..... форматировать трек
 #08: RDADD ..... прочитать идентификатор сектора
 #09: REZIM ..... установить плотность
 #0C: AKTIVE .... включить дисковод N
 #0D: PASIVE .... выключить все дисководы
 #0E: INFO ...... получить информацию о дисководе
 #0F: SETMAX .... установить максимальную длину для обмена
                  данными.
 #10: SETMLT .... установить процедуру многозадачности
 #11: SETOFF .... установить режим отключения мотора

       Подробное описание операций

  номер операции: мнемотехническое имя операции
                 i: регистр = значение [параметры на входе]
                 o: регистр = значение [параметр на выходе]

  ...описание операций...

 #00: RESET
   о: А=статус

Сброс FDC контроллера.
Неплохо  бы  использовать перед работой с
FDC bios в начале приложения.

 #01: STATUS
   о: А=статус

Возвращает  текущий статус, формат описан
ниже.

 #02: RESTORE
   о: А=статус

Двигает головку на трек 0.

 #03: SEEK
   i: D=трек
   o: А=статус

Двигает головку на трек, указаный в реги-
стре D.


 #04: RDSEC
   i: DE=физический номер сектора, HL=адрес
   o: А=статус

Чтение  сектора  (номер  в DE) в память с
диска адрес в HL.

 #05: WRSEC
   i: DE=номер физического сектора, HL=адрес
   o: A=статус

Запись  участка памяти на диск, в DE сек-
тор для записи и в HL адрес участка памя-
ти.  Перед выполнением операций RDSEC или
WRSEC  не  надо  вызывать  оператор SEEK,
т.к.  если  надо WRSEC или RDSEC все сде-
лают автоматически.

 #06: RDTRK
   i: D=трек, 7 бит регистра E=сторона, HL=адрес
   o: а=статус

Чтение  целого трека в память по адресу в
HL.  Этот  оператор читает и межсекторную
информацию  тоже,  crc  коды  секторов не
проходят.  Этот  оператор не подходит для
чтения информации с секторов.

 #07: WRTRK
   i: D=трек, 7 бит регистра E=сторона, HL=адрес
   o: А=статус

Форматирование  трека. В HL начало после-
довательности  для используемого контрол-
лера (обычно wd2797)


 #08: RDADD
   i: D=трек, 7 бит регистра Е=сторона, HL=адрес
   o: А=статус

Чтение  идентификатора  сектора. Читает в
память 4 байта: номер трека, сторона, но-
мер  сектора  и  длина сектора. Для более
подробной  информации  смотри  описание к
wd2797.

Нет  необходимости вызывать оператор SEEK
перед  операциями #04-#08. Если это необ-
ходимо,  то SEEK (поиск) будет произведен
автоматически.

 #09: REZIM
   i: E=0 для DD, 1 для HD, 2 для ED
   o: Z=все нормально, NZ=ошибка

Установка  плотности  текущего дисковода.
Если дисковод не поддерживает данную пло-
тность, то происходит NZ.


 #0C: AKTIVE
   i: E=номер дисковода
   о: А=результат

Включить дисковод Е и выключить все оста-
льные дисководы (если надо).

Результаты могут быть следующими:

   0 ... Неизвестный диск ... дисковод отсутствует
   1 ... Диск не готов ....  в дисковод не вставлена дискета
   2 ... Диск активизирован ... успешно, дискета не изменялась
   3 ... Диск активизирован ... успешно, возможно дискета
                                изменялась.

Если А=0 или 1,то ни один дисковод не бу-
дет активен.

 #0D: PASIVE
   i: E=номер дисковода

Выключить дисковод.

 #0E: INFO
   i: E=номер дисковода
   o: DE=информация о дисководе

Этот  оператор  возвращает такую информа-
цию:

   D = номер треков
   E = поддерживаемая плотность
       бит 0 = 1 ... DD
       бит 1 = 1 ... HD
       бит 2 = 1 ... ED

Если дисковод отсутствует, DE будет соде-
ржать 0.

 #0F: SETMAX
   i: BC=максимальная длина перемещаемых данных

Этот  оператор устанавливает максимальное
количество  байт  для  DMA  операций.  Не
очень важен для программ пользователя.

 #10: SETMLT
   i: HL=адрес процедуры многозадачности (или 0, если в  такой
      процедуре нет необходимости)

Пока  DMA оперирует данными между памятью
и  FDC контроллером, другая процедура мо-
жет  работать. HL содержит адрес процеду-
ры, вызываемой перед началом работы DMA с
данными.  DMA  используется  в  операциих
RDSEC  и  WRSEC. Если вы хотите выполнять
какие-либо  процедуры во время чтения или
записи сектора, тогда данная процедура не
должна  делать  следующее (тоже что и при
IM2):

- использовать  или  изменять  какие-либо
  установки FDC или DMA контроллеров;
- содержать циклов, занимающих много вре-
  мени  (потому  как  DMA  подтормаживает
  процессор);
- работать дольше 5-10 мс (но это не  так
  важно);
- переключать MB-02 банки памяти как уго-
  дно, т.е. никак.

Процедура может изменять любые регистры и
должна заканчиваться RET.

 #11: SETOFF
   i: E=включить режим отключения мотора

Если Е=0, тогда PASIVE отключит весь дис-
ковод  (доступность и мотор). Если Е=255,
тогда  PASIVE отключит только доступность
дисковода. В этом случае, мотор продолжит
вращаться.  Это  полезно,  если вы хотите
обратиться  к  двум дисководам в короткий
промежуток времени, тогда вам не придется
ждать включения мотора дисковода.

  Описание физических номеров секторов:

  биты 0-7 регистра D ... трек
  бит    7 регистра Е ... сторона (головка)
  бит  0-6 регистра Е ... номер сектора на треке D

        Описание статусного байта:

 Если ситуация произошла, то бит будет установлен.

Бит  Имя события       Возможная ситуация         Оператор

0.время вышло....Оператор слишком долго работал.#04-#05
1.диск не готов.......... Нет диска в дисководе.#04-#08
2.потеряна информация.. ....Ошибка в работе DMA.#04-#0
2.трек 0 ....................Головка на 0 треке.#00-#03
3.ошибка crc .................Ошибка при чтении.#04
4.записи нет ............Диск не отформатирован.#04,#05,#08
4.ошибка поиска..Drive не имеет 0-го трека (?!).#02
5.прерывание ........во время работы нажаты q+w.#02
6.защита от записи.......Диск защищен от записи.#0-#03,#05,#07
7.не готов ........невозможно включить дисковод.#04-#08

               Формат диска

               Сектор BOOT

 Физический номер: трек 0, сторона 0, сектор 1.
 Логический номер: 0.
 Этот сектор содержит:

  #00-#01 ... Переход на системный загрузчик (#18,#7E)
  #02 ....... не используется, обычно #80
  #03 ....... байт #02 (MB-02 маркировка)
  #04-#05 ... количество треков на диске (обычно 80)
  #06-#07 ... количество секторов на треке
  #08-#09 ... сторон на диске (обычно 2)
  #0A-#0B ... количество секторов на кластере (обычно 1)
  #0C-#0D ... логический номер DIRS сектора
  #0E-#0F ... количество FAT секторов FAT (oбычно 1 to 4)
  #10-#11 ... длина FAT (#400 * на кол-ов FAT секторов)
  #12-#13 ... логический номер первого сектора первого FAT
  #14-#16 ... логический номер первого сектора второго FAT
  #20 ....... байт #00 (MB-02 маркировка)
  #21-#24 ... дата и время форматирования диска
  #25 ....... byte #00 (MB-02 маркировка)
  #26-#2F ... имя диска
  #30-#3F ... расширение имени диска

MB-02 маркировки определяют, это ли MB-02 диск.

               DIRS сектор

Этот  сектор содержит 256 элементов, каж-
дый элемент состоит из 4 следующих байт:

  #00 ....... идентификатор
              #80 = существующий элемент
              для расширеного каталога
              другое = каталога нет (обычно #00)
  #01 ....... XOR имен каталога (для быстрого поиска)
  #02,#03 ... логический номер первого сектора каталога
             (только биты 0-13)


      SUBS сектор (сектор каталогов)

Он содержит элементы по 32 байта:

  #00 ....... идентификатор
              #90 = файл содержит только заголовок
              #A0 = файл содержит только данные
                    (без заголовка)
              #B0 = файл содержит и заголовок и данные
              #80 = файл не содержит ни данных ни заголовка
              (встречается не очень часто)
              Другие значения означают неправильный элемент
              каталога.
  #01-#04 ... дата и имя файла
  #05-#15 ... классический 17байтный заголовок для магнитофона
  #16-#17 ... добавочный адрес блока данных
  #18-#1B ... длина блока данных
              (#18=младший, #1B=старший байт)
  #1C ....... флаги для блока данных
  #1D ....... атрибуты файла
  #1E-#1F ... номер первого сектора файла

Нулевой элемент каталога не содержит фай-
ла, но имеет специальное значение:

  #00 ....... идентификатор (обычно #80)
  #01-#04 ... дата и время файла
  #05 ....... номер верхнего каталога в структуре дерева
              (да и не только в нем!)
  #06-#0f ... имя каталога (команда $"name" ищет именно его)
  #10-#1f ... расширение имени каталога

        File alocation table (FAT)

FAT содержит 16битные элементы, каждый из
которых описывает один сектор на диске.

 бит 15: 0 ... свободно
         1 ... не свободно (занато или "пробито")
     14: 0 ... последний сектор файла
         1 ... не последний сектор файла
   0-13: [бит 14=0] ... количество байтов до конца файла в
                        этом последнем секторе
         [bit14=1] ... логический номер следующего
                       сектора файла

Если  сарший байт (биты 8-15) установлены
в  #FF,  это значит что значение младшего
байта (биты 0-7) различны:

   #00 ... специальный сектор (boot, system, back-up)
   #F? ... неиспользуемый сектор:
       #FC - ошибка [форматер обнаружил CRC ошибку]
       #FD - ошибка [форматер обнаружил запись не найдена]
       #FE - сектор не существует
             (2ая сторона одностороннего диска)
       #FF - сектор не существует
             (конец физической области диска)





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

От авторов - help: описание оболочки журнала.

От авторов - о содержании нового номера журнала.

От авторов - Forever young, или Спектрум в новом тысячелетии. Призыв Jam/XPJ к спасению журнала ZX Power.

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

Презентация - новая игра от Studio Stall - Открывашка.

Презентация - новый редактор шрифтов Hewly Font Editor.

Презентация - новая версия музыкального редактора Sound Tracker Pro.

Презентация - программа для оптимизации черно-белых картинок сконверченных с PC.

Презентация - редактор ASCII графики для каталогов в TR-DOS.

Презентация - "Bard's Tale Merger Programm" - программа для работы с отгрузками из игры Bard's Tale.

Интерфейс - Новости от: Placebo, Brain- wave, Phantom Family, Volga Soft, Studio Stall, Gogin, Anarchia, Image Crew, Hackerz' Design Software, Петерс+, Fatal Snipe, Ellipse.

Интерфейс - посмотрим какие тусни намечаются для спекки фриков втечение года: Forever 3, ASCII^02, 2nd International Sinclair Sam days, Millenium 1902, Twilight Demoparty 2002, Syndeecate Demoparty 2002, Paradox 2002, CaFe 2002, Chaos Constructions 2002.

Интерфейс - письма читалей: NoViSeT/Brutal Creators, Di/LSg, Moroz1999, Shame/Madness Technology, Cannibal/Techno Lab.

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

Интерфейс - обзор Windows подобных оболочек и систем на ZX Spectrum.

Интерфейс - Город Дзержинск и его СПЕКТРУМовские обитатели.

Обмен опытом - Как написать 3D игру типа DOOM.

Обмен опытом - Метод Floyd-Steinberg для конвертации картинок из большего числа цветов в меньший.

Обмен опытом - ненаучный алгоритм получения Случайных Чисел (RND).

Обмен опытом - прямое программирование General Sound.

Обмен опытом - работа с западными дисковыми системами MDOS и MD02.

Chaos Construction 2001 - интервью с Raid.

Chaos Construction 2001 - интервью с Stanly/Studio Stall.

Chaos Construction 2001 - интервью с Gogin (Hacker Smir).

Chaos Construction 2001 - интервью с Constellation Team: Screamer, Kot, Justinas.

Chaos Construction 2001 - интервью с EYE-Q: Organism, Time Keeper, Mr. Wizard.

Chaos Construction 2001 - интервью с Justionas/Constellation.

Chaos Construction 2001 - интервью с московским кодером Asman/Proxium.

Chaos Construction 2001 - интевью с Vivid, Megus, Tiggr из Brain-Wave.

Chaos Construction 2001 - интервью с Stingrey и Steep из Ижевска.

Chaos Construction 2001 - интервью с амижником и организатором CC - Big Black.

Chaos Construction 2001 - интервью с кодером из Ульяновска Faster/TNL.

Chaos Construction 2001 - интервью с Cyberfreak (mooh).

Chaos Construction 2001 - интервью с минским спектрумистом Equator/PHD.

Chaos Construction 2001 - мини интервью с Kano.

Chaos Construction 2001 - эпический спор: Vivid VS Sairoos, Chanks VS Multicolor, Dogma VS Triptomine Dream.

Chaos Construction 2001 - интервью с Maddy и Drv53b6 из Phantom Family.

Chaos Construction 2001 - интервью с Paracels и Sairoos из Placebo.

Chaos Construction 2001 - интервью с Pheel и EA из Antares.

Chaos Construction 2001 - продолжение эпического спора между мегакодерами Vivid и Sairoos.

Chaos Construction 2001 - подробный репортаж от CPU.

Раскрутка - Еще одна разрушенная мечта или описания "500 игр" - где правда, а где ложь.

Раскрутка - история создателей игры Star Glider 2 - Steven dunn/Software developement and design.

Раскрутка - Диззи в подземелье или Омлет опять не получился: новелла по игре Dizzy Unterground.

Раскрутка - описание игры "Talisman" - RPG с элементами аркады.

Железо - доработанная схема IDE-HDD адаптера.

Оттяг - чиста оттяг: детская самодельная газета "Птичке Кар-Кар".

Оттяг - intro: Не будем тянуть кота за яйца и начнем с прогона...

Оттяг - Army Suxx или Как закосить от армии, если ты полностью здоров.

Оттяг - глубины сумрачного мировосприятия Максима Магнетика...


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

Похожие статьи:
Семь и 1/2 - Студенческая мифология.
Улыбнитесь - Оздоровительный дом отдыха в Новинках.
Игрушки - Pokes и Hints.
С миру по биту - о содеражнии раздела.
Видеообзор - Видеообзор новинок.

В этот день...   27 апреля