:: СОДЕРЖАНИЕ НОМЕРА
:: Газетные рубрики
:: АВТОРЫ
:: Поиск
:: Поддержка проекта
Webmoney:
|
:: №16 (16.05.2003) Просмотров: 4702
Автор: Евгений Илясов. Рубрика: В помощь разработчику. Номер: №16 (16.05.2003). Тормоз для винчестераСчастливым обладателям «винтов» посвящается.
Приведены «цитаты из классики», то бишь «надерганные» из информационных сборников «Open letters» мнения по поводу использования винчестеров с контроллером IDE DRIVE в системе IS-DOS. Довольно долгое время они вызывали у меня улыбку. До тех пор, пока... Пока архив на дискетах не «разбух» на столько, что стал серьезно тормозить дела. И вот, настало время, когда мне не остается ничего другого, как только присоединить свой голос к вышеприведенным восторгам. Но у каждой медали есть две стороны. Есть у Sinclair-совместимого компьютера с винчестером некоторая особенность, не то, чтобы очень уж неприятная, но скажем так, заставляющая время от времени хмурить брови. Речь в данном случае идет о том, что магнитные диски винчестера, в отличие от флоппи-родственников, пока включен компьютер, вращаются безостановочно. Во время работы в операционной системе IS-DOS, это существенно ускоряет операции обмена данными с накопителем и повышает общую производительность системы. А вот когда приходится использовать TR-DOS’ные программы (любимый ассемблер, любимый граф. редактор, любимый архиватор, или же любимый гейм-блокбастер), тогда этот же самый фактор способствует лишь бесполезной выработке хотя и значительного, но все же конечного ресурса работы винчестра. Есть, конечно, способы «заткнуть» движок накопителя. Можно, например, использовать драйвер винчестера под IS-DOS, содержащий функцию «standby» («ide+3sby.blk» или «ide+5sby.blk»), которая «перекрывает кислород» жесткому диску по истечении заданного времени (от одной секунды до, примерно, шестнадцати с половиной минут). Или, если TR-DOS’ная программа была загружена в RAM-дисковод (это, естественно, только для KAY’ев) утилитой «trd_ram.com», включить в стартовом меню утилиты флажок «Standby Y». По разным причинам идеальным выходом из положения ни один из этих способов назвать нельзя, и те, кто имеет некоторый опыт работы с винчестером в IS-DOS, хорошо об этом знают. Здесь предлагается альтернативный вариант «тормоза» - короткая программулька, которая тоже «глушит» винчестер до очередного обращения к нему, но вызывается для этого из-под TR-DOS. Исходным материалом для этой программы послужила IS-DOS’ная утилита «standby.com» (IskraSoft, 1998 г.), практически без изменений перенесенная в TR-DOS и снабженная для загрузки машиннокодового блока и его устойчивой отработки простейшим интерфейсом на Бейсике. Варианты использования могут быть самыми разными - «на вкус и цвет товарищей нет». Например, «автопилотный» - помещаем ее на диск под именем «boot», а в Бейсик-загрузчик дописываем строку, которая после свершения программой своего «тормозного» дела запускает «настоящий бут», естественно, уже имеющий к этому времени другое имя; если «автостоп» будет находиться в начале дискеты, то в этом случае вы даже не заметите его присутствия. Или, скажем, просто добавляем эту скромную утилитку на свой диск с TR-DOS’ыми программами, и в самом начале общения с диском, выбираем ее для исполнения. Именно такой вариант, не требующий дополнительных затрат времени на реорганизацию дисковой структуры, и реализован в приведенном листинге Бейсик-загрузчика: «Standby.B» 10 CLEAR 29999 20 RANDOMIZE USR 15619: REM: LOAD «standby» CODE 3e4 30 RANDOMIZE USR 3e4 40 REM CLEAR 65367 50 RANDOMIZE USR 15619: REM: RUN «boot» Восстановление стандартного адреса RAMTOP в строке с номером 40 может быть полезным, если заведомо предполагается работа компьютера в режиме 48 Кб (например, «старые» игрушки, адаптированные для загрузки с диска), поскольку сама TR-DOS не очень-то корректно ведет себя с областью памяти UDG, переустанавливая ее адрес по своему собственному усмотрению (точнее - ликвидируя совсем). Шестнадцатеричный листинг кодов программы, или так называемый, «дамп»: «standby.C», адрес 24000, размер 17 байт. F3, DB, F0, 07, 38, FB, 3E, A0, D3, D0, 3E, E0, D3, F0, FB, AF, C9. Загрузка «не в свои» адреса введена потому, что вполне обычный для IS-DOS адрес загрузки 24000 слишком низок для использования в рамках TR-DOS. Впрочем, ничто не мешает перетранслировать процедуру «торможения» винчестера, благодаря ее релоцируемости, на какой-нибудь более высокий адрес. Ассемблерный листинг в формате ассемблера для этой цели также приводится: ORG 24000 DI LABEL IN A,(#F0) RLCA JR C,LABEL LD A,#A0 OUT (#D0),A ;кидаются значения... LD A,#E0 OUT (#F0),A ;... в порты винчестера. EI XOR A ;обнулить аккумулятор RET ;выход Удачного торможения! |