┌────────────────────────────┐
│ ░▒▓▒▓▓█▓█ TR-DOS █▓█▓▓▒▓▒░ │
└────────────────────────────┘
(C) TimeKeeper/MHCG
Открывая эту рубрику я хотел
бы для начала сказать пару слов
о том, зачем это и для кого. Де-
ло в том, что разговоров на эту
тему было уже довольно много и
может показаться, что ничего но-
вого здесь уже не придумаешь,
так вот, сразу спешу вас заве-
рить в том, что осталось еще
достаточно проблем и загадок,
которые общими усилиями можно
попытаться разрешить. Да и не
все что было опубликовано или
кем-то сказано по поводу TR-DOS
было правильно и понятно. Я уже
довольно давно пытался написать
драйвер дисковых операций с пол-
ным перехватом дисковых ошибок,
но никак не мог найти все необ-
ходимые для этого данные. Даже в
знаменитой ZX-Ревю я не нашел
ответов на интересующие меня
вопросы, а в листингах драйве-
ров, которые я пытался набирать,
зачастую было очень много ошибок
или же они мне просто не подхо-
дили. Кстати, раз уж я начал,
так скажу несколько "ласковых"
про статьи из ZX-Ревю. Интерес-
ного там, конечно, очень много,
но вот листинги оставляют желать
лучшего. Драйвер дисковых опера-
ций, который стоит в этом номере
журнала, был набран именно из
Ревюшки, но отассемблировать его
в первоначальном виде так и не
удалось. Часть подпрограм просто
отсутствовала, а часть была на-
писанa неправильно. Мне лишь чу-
дом удалось довести драйвер до
рабочего состояния. В связи с
этим случаем у меня создалось
такое впечатление, что листинги
програм печатаются вообще без
какой либо предварительной про-
верки на работоспособность. Но
это уже к вопросу о профессиона-
лизме и, возможно, мы еще вер-
немся к этому, но в другой
раз...
Первое, о чем бы я хотел напи-
сать, - это как можно определить
наличие дисководов. Не присут-
ствие или отсутствие дискеты в
дисководе, а именно наличие са-
мого дисковода. Вы спросите за-
чем? Ну это уже на ваше усмотре-
ние. Я использовал эту проверку
в Hard Core ver 3.01 full, чтобы
знать, сколько панелей можно вы-
водить, две или одну, да и прос-
то в последнее время входит в
моду вставлять в программу тест
компьютера, так вот туда то и
можно приспособить эту процеду-
ру:
ORG #8000
ENT
XOR A
CALL TEST
LD (DRV_0),A
LD A,1
CALL TEST
LD (DRV_1),A
LD A,2
CALL TEST
LD (DRV_2),A
LD A,3
CALL TEST
LD (DRV_3),A
RET
TEST OR #3C
LD C,#FF
LD HL,#1FF3
CALL DOS
LD A,#08
LD HL,#2FC3
CALL DOS
LD IY,10000
; число в IY подобрано
; опытным путем.
; (максимальное время передвиже-
; ния головки дисковода от пос-
; леднего трека на нулевой)
AGAIN LD HL,#1FDD
CALL DOS
LD A,(#5CD7)
CP #50
RET NZ
DEC IY
LD A,LY
OR HY
JR NZ,AGAIN
RET
DOS PUSH HL
JP #3D2F
DRV_0 DEFB 0
DRV_1 DEFB 0
DRV_2 DEFB 0
DRV_3 DEFB 0
Вообще говоря, в контроллере
есть специальное средство, для
определения "готовности" диско-
вода, но у меня это средство
срабатывает только когда в дис-
ковод вставлена дискета. А при-
веденная процедура правильно
определяет наличие дисковода не
зависимо от того, есть в нем
дискета или нет.
Как это работает: когда мы по-
даем контроллеру команду выхода
на нулевую дорожку, он пытается
получить от дисковода подтвер-
ждение о выполнении операции.
(сигнал 'головка в исходном сос-
тоянии' - 2_ой бит порта #1F)
Если дисковод подключен и голов-
ка находится на нулевой дорожке,
то контроллер сразу вырабатывает
этот сигнал, а если дисковода
нет, то контроллер не получит
от дисковода подтверждения и не
будет выдавать сигнал подтвер-
ждения, сигнализируя о том, что
команда еще не выполнена. Ес-
тественно, проверка должна осу-
ществляться при отключенном тур-
бо режиме, если он у вас есть.
После запуска программы будут
по очереди загораться светодиоды
дисководов. На проверку каждого
из них затрачивается примерно
1/25 секунды если дисковод
подключен и около 1/2 в против-
ном случае, так что при провер-
ке, перед обращением к следующе-
му дисководу, неплохо было бы
выводить сообщение типа: "подож-
дите, тестируется дисковод номер
N", чтобы пользователь не поду-
мал, что программа зависла.
После тестирования, в соответ-
ствующую переменную заносится
нолик, если устройство не обна-
ружено или #28 при положительном
результате.
На этом про определялки все.
Возможно, в следующий раз я рас-
скажу вам о том, как определить
параметры дисковода: кол-во сто-
рон, дорожек, скорость перемеще-
ния головок, и, быть может, даже
фирму, изготовившую данную мо-
дель. :-))