ZX-Ревю 1996 №4-5 1996 г.

Форум - доработка посекторных загрузчиков.


ДОРАБОТКА ПОСЕКТОРНЫХ ЗАГРУЗЧИКОВ.

Часто при работе посекторных загрузчиков, использующих функцию 5 TR-DOS и точку входа #3D13, дисковод "спотыкается". Вместо того, чтобы начать чтение нового блока с уже найденной дорожки, головка дисковода начинает судорожно что-то искать, затем откатывается к началу диска, потом заново устанавливается на ту же дорожку и, наконец, приступает к чтению. Очевидно, происходит какой-то сбой, связанный с потерей данных. Загрузчики, использующие точку входа в DOS #3D2F, такого себе не позволяют, а при загрузке из BASICS головка каждый раз "ездит" на нулевую дорожку, чтобы прочесть заголовок, так что ошибки позиционирования не происходит.

Исправить досадный недостаток в работе посекторного загрузчика просто. Зная, что в данном месте программы происходит такая неприятность (а раз уж она случилась, значит, будет повторяться), добавьте 12 байт:

:Номер дорожки и сектора. Или INC D, переход на другую дорожку. Чтение заголовка сектора.

Или DEC D, восстановление номера дорожки.

ЧТЕНИЕ БЛОКА

Можно еще сократить эту добавку, сохраняя содержимое регистровой пары DE на стеке.

Еще я хочу сказать о профзабывчивости, связанной с компьютерами. Интересующая читателей "ZX-РЕВЮ" разновидность его называется так:

Звездная болезнь "крутизны" в синклеризме.

Главный симптом этого заболевания состоит в том, что больной, устремляя взор в небеса, перестает смотреть под ноги. Один из интересных случаев связан с книгой Ларченко и Родионова "ZX Spectrum & TR-DOS для пользователей и программистов".

В драйвере дисковых операций допущена грубая ошибка - в функции 2 (позиционирование на заданный логический трек) неверно рассчитывается номер физической дорожки. Привожу фрагмент программы:

#F88A SLA D

BIT 7,E

JR Z,#F895

BIT 1,D

JR Z,#F895

DEC D

#F895 BIT 7,E

JR Z, #F8AA

#F899 BIT 7, (HL) JR Z,#F882

SRL D

Итак, что мы видим? Содержимое регистра D (номер логической дорожки) умножается на 2 вместо того, чтобы делиться. В результате происходит следующее: Вы задаете номер логического трека, скажем, 50 или 51, и дисковод усердно принимается искать физическую дорожку с номером 100 (в обоих случаях). Естественно, это не удается, и головка устанавливается на последнюю существующую дорожку. Если дорожка с искомым номером все же существует, выбирается всегда головка 0.

Терапия (для программы): по адресу #F88A поставить JR #F899 (байты #18 и #0D). Следующие 9 байт можно обнулить. После этого номер логического трека, как и положено, делится на 2 (см. последнюю строку листинга). Функция 2 (и все остальные) после внесенных изменений на моем дисководе (80 дорожек, 2 головки) работают нормально. Не поручусь, что для других типов дисководов дела будут обстоять так же.

Все бы ничего, подумаешь - часто ли она нужна, эта опция? Жаль только, если исправление этой ошибки не вошло в число тех "несущественных изменений", с которыми драйвер "вошел в базовое программное обеспечение компьютера "Scorpion ZS256"" (с.212), то есть, скорее всего, был "зашит" в ПЗУ.

Вторая история болезни связана с той же книгой. На с.181 читаем: "нулевой логической дорожке соответствует нулевая нижняя физическая, первой логической - нулевая верхняя физическая". На с. 202 узнаем, что занесенный в бит 4 системного регистра "0" соответствует первой магнитной головке или нижней стороне дискеты, 1 - второй магнитной головке или верхней стороне". Логично? Вполне! Тем более, что создатели ADS даже позаботились изобразить дискету, чтобы ни у кого не возникло сомнений, что нулевая сторона - нижняя, а первая - верхняя.

Я, помнится, пару дней ломал голову над вопросом, почему же, в таком случае, при чтении с нечетной логической дорожки в бит D4 системного регистра засылается 0, а при чтении с четной дорожки - 1 (См., например, "ZX-РЕВЮ", 1994, N4, с.9.). Кто же неправ? Некоторое облегчение принесла брошюра Ю.

LD DE, (#5CF4)

DEC D

LD BC,5

CALL #3D13

LD DE,(#5CF4)

INC D

Поморцева "TR-DOS для профессионалов и любителей", присланная "ИНФОРКОМОМ". Я узнал, что есть, по крайней мере, еще один человек, который, как и я, считает, что нулевая сторона дискеты - верхняя, и логические дорожки с четными номерами находятся именно на верхней, нулевой стороне.

Несмотря ни на что, у программистов болезнь протекает в мягкой, SOFT - форме. Наверное, еще ни один пользовательский "Спектрум" не сгорел из-за ошибки в программе. Оценить тяжесть заболевания у "жестянщиков", присылающих в журнал схемы с несущественными изменениями вроде перепутанных выводов или пропущенных буферных элементов не берусь - пусть это сделают те, кто эти схемы спаял.

Господа гении! Вы очень умные, но все же вряд ли создаете свои творения за пять дней, как господь бог. Так будьте добры, потратьте еще несколько дней на проверку вашего детища! Помните: если вам кажется, что все хорошо и правильно, но вы не проверили, значит, ошибка есть.

© Колотов Сергей, 1996.




СОДЕРЖАНИЕ:


  Оставте Ваш отзыв:

  НИК/ИМЯ
  ПОЧТА (шифруется)
  КОД



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

Похожие статьи:
Система - Процедуры, приемы программирования и различные системные программы.
Разное - Так устоим! Размышления о судьбе Спектрума.
Чугуний - Модем.
Пишите письма - Письма читателей в журнал.
Part 13 - Spectrum on the Net.

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