ZX Pilot #29
30 сентября 1998
  Софт  

HARD and SOFT - Ошибка STS v6.2 и ее исправление.

<b>HARD and SOFT</b> - Ошибка STS v6.2 и ее исправление.
╔══──══──══──══──══──══──══──══──══──══──══──══──══──══──══──══╗
 HARD AND SOFT      
╚══──══──══──══──══──══──══──══──══──══──══──══──══──══──══──══╝

(C) ИВАН РОЩИН

       Ошибка в STS 6.2 и ее исправление.

   При  обращении  к  диску  STS 6.2 (как и более старые версии)
считает,  что  в  регистре  дорожки  ВГ93 записан действительный
номер дорожки, на которой находится магнитная головка дисковода.
Но  по ряду причин в регистре дорожки может содержаться неверное
значение,и в этом случае любая операция с диском будет завершена
с ошибкой.
   Пусть  мы  загрузили  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 в регистр дорожки. Вот этот
фрагмент:

LDA,255 ;это число заносим в регистр дорожки
LDDE,#1E3A ;в ПЗУ TR-DOS: #1E3A - OUT (#3F),A: RET
CALL#E4D3 ;обращение к ПЗУ TR-DOS
JR#E7F8 ;переходим к чтению каталога

   Где  же  найти  для  него  свободное  место?  По адресу #E7CF
обнаруживаем  участок программы, обнуляющий атрибуты экрана. STS
иногда   использует   для   своих   нужд   нижнюю  треть  экрана
(#D000-#D7FF), а чтобы это было незаметно, устанавливает для нее
нулевые атрибуты.

 #E7CF: EXX
LDHL,#D800
LDDE,#D801
LDBC,#02FF
LD(HL),L
LDIR
EXX

   Здесь и разместим наш фрагмент:

 #E7CF: JR#E7DD;для обхода фрагмента
 #E7D1: LDA,255
LDDE,#1E3A
CALL#E4D3
JR#E7F8

   По  адресу #E495, соответственно, ставим команду JP #E7D1. Ну
что  же,  осталось  только  записать  измененный STS на диск - и
можно работать.


°   °   °   °   °



Другие статьи номера:

Введение - Новостей с гулькин... нос.

TOP TEN - Десяточка лучших игр.

HARD and SOFT - Ошибка STS v6.2 и ее исправление.

HARD and SOFT - О компрессорах экранных файлов и не только...

HINTS! - Пароли 50 уровней игры QUADRAX.

О разном - Проблемы ELITE-2.

О разном - Выбери себе лучший компрессор данных.

BIRTHDAY - Поздравление нашего друга MAXWELL-а.

Розыск - Разыскиваются особо нужные игры: BATTLE COMMAND 128, ART STUD 128, VICTORY ROAD, SCRABBLE, BRUCE LEE, SW,STTY

Реклама - Реклама и объявления...


Темы: Игры, Программное обеспечение, Пресса, Аппаратное обеспечение, Сеть, Демосцена, Люди, Программирование

Похожие статьи:
Scene - pyromaniac CAF'e 2003 report.
DIY - Изготовление хвоста для мышки.
Навiны - новая версия EWS, прошло SHIT 2001, вышли несколько номеров АБЗАЦА, новые газеты "Птичка KAP KAР" и "ZaRulem Печатное Слово", газеты KrNews#15 и Insanity #10, новая звуковая карта DMA USC, ZX-Spectrum медленно умирает, идея модульной игры про Dizzy.
У костра - Здраствуйте! Рыбку ловите?.. Конечно вижу... Это хорошо...
Реклама - Реклама и объявления.

В этот день...   21 ноября