Железо - Исправление ошибки TR-DOS.

ZX Format #03

   Исправление ошибки TR-DOS

(C) MAD MAX
________________________________

   Наверное  многие  (а  точнее,
практически  все) сталкивались с
таким неприятным явлением, - при
чтении некоторых программ голов-
ка  дисковода яростно забивается
в  конец  дисковода, издавая при
этом  душераздирающие звуки. По-
чему  это  происходит?  Что это?
Ошибка  контроллера или ошибка в
программе?  Многие думали о раз-
ном.  Но  вот Константин Углеков
из  Москвы  (огромное ему спаси-
бо!) решил уделить внимание дан-
ной  проблеме более серьезно. Мы
приводим  его выкладку по поводу
устранения данного дефекта, взя-
тую  из описания эмулятора Спек-
трума.

   На входе в подпрограмму #3Е44
(TR-DOS) в регистре B должна со-
держаться константа позициониро-
вания (от #08 до #0B); с ней де-
лают OR #18 и кладут результат в
регистр команд контроллера (зна-
чения  #18-#1B соответствуют ко-
манде  ПОИСК без проверки адрес-
ных  маркеров  на  дорожке). При
вызове  #3Е44 из #3ЕB5 регистр B
никак  не  определен, и он может
содержать,  например, число сек-
торов при вызове #3D13 с C=5 или
C=6.   Если  же  число  секторов
больше #20 , то в регистр команд
будет  направлен  не код команды
ПОИСК, а что-то иное.
   Простая  проверка показывает,
что  все происходит именно таким
образом.  Вызывая  #3D13  с  BC=
#4005  несколько  раз подряд (DE
считаем   неизмененным),   можно
наблюдать   перемещение  головок
дисковода  на  один шаг к центру
диска перед позиционированием на
начало  читаемого  блока,  а при
вызовах  с  BC=#6005 наблюдается
один шаг в обратном направлении.
Если  учесть,  что  #40 OR #18 =
#58  - код команды шаг вперед, а
#60 OR #18 - код команды шаг на-
зад, то никаких сомнений быть не
может - это ошибка TR-DOS!
   Сразу   следует  вопрос  -  а
можно  ли  испортить  диск, если
задать  число  секторов  #A0-#BF
(чтобы  получить  команду записи
сектора), или #F0-#FF (чтобы по-
лучить  команду записи дорожки)?
Ответ  - нет. Даже если контрол-
лер воспринимает числа #B8 и #F8
как законные команды, то для то-
го,  чтобы  запись на диск нача-
лась,  контроллер должен сначала
получить первый байт данных; для
команды записи сектора этот байт
должен  поступить  не позже про-
хождения  8-го  байта  GAP перед
записываемым сектором, а для за-
писи дорожки - в течении прохож-
дения  3  байт  с момента подачи
команды. Если первый байт данных
не  получен в эти сроки, то опе-
рация сразу же завершается ошиб-
кой  LOST  DATA  (Потеря данных;
бит  2  регистра  состояний),  и
выставляется  сигнал  IRQ (как и
положено  для  завершения  любой
операции). Раз эта ошибка не мо-
жет  привести  к порче диска, то
закономерен  вопрос:  а стоит ли
на нее вообще обращать внимание?
Если  Вас  интересует  повышение
скорости  обмена  с  диском,  то
непременно!  Все модификации TR-
DOS  на базе версии 5.03 с прис-
тавочками  типа  "FAST", "TURBO"
и  т.п.  совершенно бесмысслены,
если   при   каждом  обращени  к
функциям  5,6 подпрограммы #3D13
будет теряться время либо на по-
зиционирование  (хорошо, если на
один  шаг), либо на поиск секто-
ра.

   Что  можно предложить взамен?
Вместо вызова #3Е44 из #3EB2 вы-
зываем   что-нибудь  вроде  #880
(если  там  пусто),  а по адресу
#880  помещаем  небольшую  прог-
раммку:

PUSH  HL    ;в H номер дорожки
            ;который еще нужен
PUSH  AF    ;то же Замечание
CALL  #3E08 ;регистры HL и DE
            ;будут испорчены, а
            ;DE можно не сохран.
LD    B,A   ;наконец-то в B
            ;попадет значение
            ;константы позицио-
            ;нирования
POP   AF
POP   HL
JP    #3E44 ;и никакой ошибки!

   Чтобы  выполнить данную дора-
ботку,  Вам придется стереть со-
держимое  ПЗУ, и прошить его за-
ново. Для тех ПЗУ, в которых нет
пустого места (Scorpion), возмо-
жен  вариант  записи данного ку-
сочка  на  какое-нибудь ненужное
текстовое сообщение типа "INTER-
FACE ONE FITTED". Интересно, как
много  Скорпионов  с этим интер-
фейсом?
   К  вышесказанному следует до-
бавить, что данная доработка бы-
ла произведена на реальном Спек-
труме  и показала себя наилучшим
образом, не дав никаких побочных
эффектов. И посему рекомендуется
для употребления.