Virtual Worlds
#01
31 декабря 1999 |
|
Ассемблер - Секреты TR-DOS: о методах пределения наличия дисководов.
┌────────────────────────────┐ │ ░▒▓▒▓▓█▓█ 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 при положительном результате. На этом про определялки все. Возможно, в следующий раз я рас- скажу вам о том, как определить параметры дисковода: кол-во сто- рон, дорожек, скорость перемеще- ния головок, и, быть может, даже фирму, изготовившую данную мо- дель. :-))
Другие статьи номера:
Похожие статьи:
В этот день... 21 ноября