Из журнала Adventurer#13, Ярославская область, г.Рыбинск, ?  2000 d40/d80.mdos info by Pol/PHT  2000 mb02.bs-dos info by LaesQ/RA  2000 imported by Faster/TNL+PHT  translated by Alff/CPU  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" Organization: Phantasy To: Alexander Yudin 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" 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" 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. Особенности дискового формата  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. Особенности дискового формата  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 Формат диска Сектор 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 - сектор не существует (конец физической области диска)