Voyager
#02
19 октября 1998 |
|
Лаборатория - Ошибка в STS v6.2 и ее исправление.
(C) Иван Рощин, Москва Music BREEZE (C) MR.Z/HWC ─────────────────────────────────────────────────── ╔════════════════════════════════════════╗ ║ ║ ║ Ошибка в STS 6.2 и ее исправление ║ ║ ║ ╚════════════════════════════════════════╝ При обращении к диску STS 6.2 (как и более старые версии) считает, что в регистре дорожки ВГ записан действительный номер дорожки, на которой находится магнитная головка дисковода. Но по ряду причин в регистре дорожки может содержаться невер- ное значение, и в этом случае любая операция с дис- ком будет завершена с ошибкой. Пусть мы загрузили STS с дисковода 'A', и по- сле окончания загрузки магнитная головка находится, например, на 10-й дорожке (а содержимое регистра до- рожки, соответственно, равно 10). Установим Drive = 'B'. Что при этом произой- дет? STS не будет выполнять инициализацию диско- вода для установки магнитной головки в исходное со- стояние (на нулевую дорожку). STS не будет выпол- нять и команду чтения первого попавшегося заголовка сектора, чтобы узнать, на какой дорожке находится магнитная головка (как это делает TR-DOS). STS по- считает, что и у дисковода 'B' магнитная головка находится на 10-й дорожке и переместит ее на 10 шагов назад для позиционирования на 0-ю дорожку (для чтения каталога). Если магнитная головка дейст- вительно находилась на 10-й дорожке или на дорожке с меньшим номером, все закончится успешно. Ну а в противном случае, сами понимаете - после продолжи- тельного ожидания цвет бордюра изменится на крас- ный, сигнализируя о дисковой ошибке. Более того, мы не сможем обратно перейти на дисковод 'A' - STS считает, что он уже установил магнитную головку на 0-ю дорожку, а она осталась на 10-й... Такие неприятности возникают не только при работе с двумя дисководами, но и, например, при от- ладке собственных программ для работы с диском, которые изменяют содержимое регистра дорожки. Ас- семблируем такую программу, запускаем - а после этого STS отказывается работать с диском. А ста- рые версии STS вообще зависают при дисковых ошиб- ках... К счастью, есть простой способ преодоления этой проблемы: достаточно выйти в TR-DOS, посмот- реть каталог диска и вернуться в STS. При этом со- держимое регистра дорожки приходит в соответствие с реальным положением магнитной головки дисковода. А если выходить в TR-DOS не хочется (или не- возможно)? В этом случае придется внести опреде- ленные изменения в STS. Как же это сделать? Можно определить, где в STS вызывается под- программа чтения каталога (она вызывается и при смене дисковода), и перед каждым ее вызовом выпол- нять фрагмент программы, инициализирующий диско- вод - и проблема решена! Но, немного подумав, я на- шел более простой способ: вместо инициализации дис- ковода нужно записать в регистр дорожки какое-ни- будь достаточно большое число (по крайней мере, большее 160), например, 255. В этом случае STS при позиционировании на 0-ю дорожку переместит магнит- ную головку на 255 шагов назад, и, где бы она ни была, она обязательно окажется на 0-й дорожке (что и требуется). Итак, вносимые в STS изменения: подпрограмма чтения каталога находится по адресу #E7F8, а вызы- вается она следующей командой: #E495: JP #E7F8. По адресу #E495 поставим команду перехода на фраг- мент программы, записывающий 255 в регистр дорож- ки. Вот этот фрагмент: LD A,255 ;это число заносим в регистр ;дорожки LD DE,#1E3A ;в ПЗУ TR-DOS: ;#1E3A - OUT (#3F),A : RET CALL #E4D3 ;обращение к ПЗУ TR-DOS JR #E7F8 ;переходим к чтению каталога Где же найти для него свободное место? По адресу #E7CF обнаруживаем участок программы, обну- ляющий атрибуты экрана. STS иногда использует для своих нужд нижнюю треть экрана (#D000- #D7FF), а чтобы это было незаметно, устанавливает для нее нулевые атрибуты. #E7CF: EXX LD HL,#D800 LD DE,#D801 LD BC,#02FF LD (HL),L LDIR EXX Здесь и разместим наш фрагмент: #E7CF: JR #E7DD ;для обхода фрагмента #E7D1: LD A,255 LD DE,#1E3A CALL #E4D3 JR #E7F8 По адресу #E495, соответственно, ставим ко- манду JP #E7D1. Ну что же, осталось только запи- сать измененный STS на диск - и можно работать. ───────────────────────────────────────────────────
Другие статьи номера:
Похожие статьи:
В этот день... 13 ноября