(c) A. Ларченко "Спускаясь с небес".
В ZX РЕВЮ 96/4-5, в разделе Форум, О.Литвинов "нашел"
две ошибки в нашей книге "ZX Spectrum & TR-DOS для пользователей и
программистов" (издательство "ПИТЕР"). Скажу сразу, опечаток в книге значительно
больше. Говорю это с грустью, потому что сам очень не люблю "натыкаться" на
ошибки в чужих книгах. Однако, я не могу вспомнить ни одной серьезной публикации
без них. И происходит это вовсе не от "болезни", диагноз которой так быстро,
видимо как "опытный врач", вывел Литвинов, а совсем по иным причинам.
Теперь по существу дела. Ниже приведен исходный текст начала подпрограммы
позиционирования драйвера, кусок которого, так раскритиковал О.Литвинов. Как
видно из текста, этот кусок относится к работе с 40-дорожечной дискетой,
работающей на 80-дорожечном дисководе. Так и хочется сказать:
"врачу - исцелися сам".
F86B MPOSIT:
F86B D5 PUSH DE
F86C CD F802 CALL CH_DRV ;реально выбрать диск для операции
F86F D1 POP DE
F870 CD F7B7 CALL SYSREG ;--> Akk код для системного р-ра BetaDisk
F873 CD F7A5 CALL DISADR ;--> (hl) код спецификации дискеты
F876 5E LD E,(HL) ;поместить код в E
F877 CD F7AA CALL DRVADR ;--> (hl) код спецификации дисковода
F87A CB 6B BIT 5,E ;установлен для 80-дорожечных дискет
F87C 28 08 JR Z,DIS_40 ;дискета на 40 дорожек
F87E CB 76 BIT 6,(HL) ;установлен для 80-дорожечных дисководов
F880 20 13 JR NZ,DIS_80 ;да, это 80-дор. дискета на 80-дор. дисководе
;ошибка -- дискету на 80 дорожек нельзя прочитать на 40-дор. дисководе
F882 DISERR:
F882 3E 08 LD A,8 ;код ошибки -- несоответсвие типов
F884 18 5B JR BIOSER ;завершение работы
F886 DIS_40:
F886 CB 76 BIT 6,(HL) ;установлен для 80-дорожечных дисководов
F888 28 0B JR Z,DIS_80 ;дисковод и диск на 40 дорожек
; следовательно физ. == лог.
;40-дорожечная дискета работает на 80-дорожечном дисководе
; для правильного позиционирования необходимо делать два шага
; головки для одной дорожки
F88A CB 22 SLA D ;физ. = лог*2 (что бы "попасть" на дорожку)
F88C CB 7B BIT 7,E ;установлен для двухсторонней дискеты
F88E 28 05 JR Z,DIS_80 ;диск односторонний -- закончили вычисления
;40-дор. диск на 80-дор. дисководе еще и двухсторонний
F890 CB 4A BIT 1,D
F892 28 01 JR Z,DIS_80
F894 15 DEC D ; коррекция на "две" дорожки
F895 DIS_80:
F895 CB 7B BIT 7,E ;установлен для двухсторонней дискеты
F897 28 11 JR Z,DISONE ;дискета односторонняя -- лог. == физ.
F899 CB 7E BIT 7,(HL) ;установлен для двухстороннего дисковода
F89B 28 E5 JR Z,DISERR ;ошибка: "нехватает головки"
F89D CB 3A SRL D ;для двух сторон -- физ. == лог./2
;в CY получается остаток -- номер стороны
F89F 21 FDE7 LD HL,BFLAG ;сохранить номер стороны в сл. флаге
F8A2 CB E6 SET 4,(HL) ;вот тут действительно ошибка,
; приводящая к неоправданным задержкам времени выполнения,
; и эту команду лучше "забить" 0 (это внесено в ПО Scorpion'а)
F8A4 30 04 JR NC,DISONE
F8A6 CB A6 RES 4,(HL) ;сюда, соответственно, тоже 0
F8A8 CB A7 RES 4,A ;установить вторую головку (в сист. р-ре)
F8AA DISONE:
Хочется заметить, что прежде, чем указывать на ошибки (да еще и "ставить"
диагноз") неплохо бы внимательнее разобраться что к чему.
Далее, О.Литвинов указывает на "разночтения" в названии и выборе
магнитных головок. И вот тут он совершенно прав (ах, правда "опять" не
во всем). Действительно на странице 202 вверху перепутаны местами значения
двух управляющих разрядов. Это D4 (управление головкой) и D6 (выбор
плотности записи). Для работы в режиме MFM этот разряд должен быть
сброшен. Разряд D4 определяет номер магнитной головки. Установленный, он
выбирает нижнюю или единственную на одностороннем дисководе (я не
поленился и разобрал один такой музейный экспонат - "нижнюю") магнитную
головку. Сброс разряда D4 приводит к выбору первой или верхней магнитной
головки.
По чьей вине в книгу "прокрались" ошибки? К сожалению, тут вина и авторов
и издательства. Помню, что на "вычитку" оригинал-макета (260 страниц) нам
было предоставлено ТРИ часа - на следующий день макет уходил в
типографию. Кстати, у книги не было технического редактора, только
"художественный". А "вычитку" мы делали уже после того, как книга
поступила в продажу. Вот список некоторых (наверное, не всех) опечаток,
допущеных "общими усилиями".
На стр. 79 в последнем абзаце не указано, что при работе пользовательских
функций в 3 банке процессора устанавливается нулеввая страница ОЗУ (RAM0).
На стр. 97 и 98 неправильно показаны диаграммы для команд OUTI, OTIR,
OUTD и OTDR. Кстати, случай анекдотичный. В предыдущих изданиях только две
диаграммы были неправильными, на них и было указано редакции. И вот что
получилось.
На стр. 183 из таблицы 11 (Байт настройки на дискету) при верстке куда-то
исчезли номера сторон:
#16 - 80-дорожечная, двухсторонняя;
#17 - 40-дорожечная, двухсторонняя;
#18 - 80-дорожечная, односторонняя;
#19 - 40-дорожечная, односторонняя.
На стр. 189 строка листинга с номером 1170, завершающая конец примера
должна выглядеть:
1170 end
На стр. 190 в последнем абзаце изменен на обратный порядок
проведения тестов дисковода.
На стр. 211 неправильно указан адрес подпрограммы записи сектора для
TR-DOS версии 5.03. Должно быть: "Подпрограмма чтения расположена по
адресу 16341 (16331), а подпрограмма записи -- по адресу 16314 (16304)."
Да, очень хотелось бы, что бы ошибок в изданиях было как можно меньше, и
мы, как авторы, стараемся делать для этого все от нас зависящее. И призываем
вас, наши читатели, сообщать обо всех встретившихся ошибках.
И еще одно, уже не относящееся к "техническим" ошибкам. В последнее время
все чаще на страницах многих компьютерных изданий (и ZX РЕВЮ тут, к
сожалению, не исключение) стало появляться довольно много публикаций с
"идеологическими" ошибками. Вот пример, в том же 4-5 номере на
стр. 83 приведена схема "установки порта FD", якобы "вылечивающая"
компьютер Scorpion. Однако, авторы пытаются лечить "больного", а не
"болезнь", да еще и "знахарскими" методами (вот, ведь, как "заразна"
"медицинская" терминология О.Литвинова). Не вдаваясь в подробности (см.
статью о доработке для совместимости с компьютером Scorpion ZS 256 в этом
номере журнала) отмечу лишь, что в схему не заведен сигнал M1, и бедный
музыкальный процессор может "откликаться" в цикле подтверждения
прерывания, при этом создавая проблем еще больше.
Я сознательно не называю авторов схемы, им ведь наверняка непритно читать
про себя в журнале, да еще в таком тоне. Вот и мне было неприяно и читать,
и писать этот ответ. Интересно, а О.Литвинову приятно?
Давайте добрее относиться друг к другу, не приклеивать ярлыков,
и внимательнее относиться к публикуемым материалам.