Voyager #02
19 октября 1998
  Софт  

Лаборатория - Ошибка в STS v6.2 и ее исправление.

<b>Лаборатория</b> - Ошибка в 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 на диск - и можно работать. 


───────────────────────────────────────────────────



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

Информбюро - В Москве прошел FunTop'98, Sergsoft в гостях Diogen и т.д.

Информбюро - авторы журнала.

Информбюро - описание оболочки журнала.

Информбюро - Flying greetz: приветы.

Лоцман - новелла по игре "Бегство на Хархан" (предистория от AiR'a).

Лоцман - Лодырь: список паролей к игре Net Walk. Cheat-mode в игре Mnoster Land.

Калейдоскоп - О новых глобальных проектах на Speccy: Monstr Land , Рыбак, Net Walk, Head Ball.

Калейдоскоп - Новые системные программы: Art Work demo version, RUSH-Copy, Maxsoft Screen Packer v1.4.

Калейдоскоп - Презентация игры EMPIRE demo version 3.00.

Тусовка - Полный отчет с FunTop'98: вступление.

Тусовка - Полный отчет с FunTop'98: часть первая. Миниинтервью с дедушкой Welcome и Mike Blum.

Тусовка - Полный отчет с FunTop'98: часть вторая. Миниинтервью с Hardwave Crew.

Тусовка - Полный отчет с FunTop'98: часть третья. Мысли во время Music compo: Virtual Vision group, Rage Technology.

Тусовка - Полный отчет с FunTop'98: часть четвертая. Мнения о Demo compo от Logros, Daniil/Playgear.

Тусовка - Полный отчет с FunTop'98: день второй.

Тусовка - итоги FunTop'98.

Тусовка - мнения очевидцев FunTop'98.

Тусовка - FunTop'98: Интервью с Serzh Soft.

Скелет - Схема и перечень элементов для VICOMM-модема.

Скелет - Dangerous ответчает на наезды по поводу General Sound.

История - В логове GARGOYLE (история и софтография).

История - О западном журнале Sinclair User 1982-1993.

Лаборатория - Ошибка в STS v6.2 и ее исправление.

Лаборатория - Как подружить ALASM v4.1 и STS v6.2.

Profi Club - Описание программы GRF Viever v1.6b.

Profi Club - Музыкальные редакторы в CP/M: ADJ, Synthmaster v1.3, Music.com.

Profi Club - Глюк в View Screen v2.0 - что бы это значило?

Пишите письма - Письмо от AiR'a с отзывом о журнале.

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


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

Похожие статьи:
Рабочий стол - Как работать с программами: ZX-Turbo Disassembler.
Презентация - Turbo Debugger: демо-версия нового монитора-отладчика для компьютера ZX-Spectrum.
Hints - несколько читов. Инструкция по работе с теневым монитором на Scorpion 256.

В этот день...   10 мая