SoundTrack: ...HAPPY RAVE 4EVA... RLA/CRG
__________________________________________
Автор: Card!nal/PGC/BD
__________________________________________
Сверхбыстрое форматирование дисков на
Speccy - это реальность.
- Что-то ты сегодня неважно выглядишь.
- Да моча в голову ударила :-(
- А почему синяк под глазом?
- А ты думал, горшок мимо пролетел?
(вместо эпиграфа)
Привет, уважаемые читатели Deja Vu! С
вами опять я. На этот раз я расскажу вам о
быстром форматировании TR DOS дисков. На
страницах Ревюшек неоднократно появлялись
статейки, в которых люди высказывали раз-
личные идеи на счет форматирования дорожки
за один оборот. Предположений было много,
но все они сводились к одному - нужно фор-
матировать дорожку не полностью, а чуть-
-чуть не доходить до конца и прерывать вы-
полнение операции "запись дорожки". После
этого должно остаться время на перепозици-
онирование головки дисковода, и прежде,чем
текущая дорожка закончится,т.е. до прихода
индексного импульса, нужно все успеть под-
готовить для форматирования следующей до-
рожки. Но вся загвоздка в том,что прервать
форматирование практически невозможно. А
почему? - спросите вы. Потому что для за-
писи дорожки обычно используется подпрог-
рамма по адресу #3FCA в ПЗУ TR DOS. Вот ее
листинг, HL указывает на данные:
#3FCA IN A,(#FF)
AND #C0
JR Z,#3FCA
RET M
OUTI
JR #3FCA
Из него видно,что, действительно, выход
осуществляется по приходу индексного им-
пульса. Но в ПЗУ TR DOS есть еще одна под-
программа записи данных на диск. Находится
она по адресу #20AF:
#20AF LD B,1
#20B1 IN A,(#FF)
AND #C0
JR Z,#20B1
RET M
OUT (C),D
DJNZ #20B1
RET
Вот ее мы и возьмем на вооружение.Здесь
сразу видно, что выход возможен не только
по приходу индексного импульса, но и когда
регистр B станет равен нулю. Но прежде,да-
вайте немного посчитаем. Дисковод крутит
диски со скоростью 300об/мин. На один обо-
рот диска уходит 0.2 секунды. На одной до-
рожке располагается, примерно,6150 байтов,
значит на запись одного байта должно быть
потрачено не более 0.2*50*70000/6150=113.8
тактов. Но т.к. есть тормозные Спектрумы,
то будем считать, что предел 100 тактов.
Итак, чтобы воспользоваться процедурой по
адресу #20B1, нужно максимально ускорить
процесс вызова этой процедуры с нужными
данными в регистре D. Один несознательный
пипл утверждал, что это невозможно, но он
был неправ. Сделать это можно, примерно,
так:
LD HL,#3D2F
LD (STACK1+1),SP
LD SP,ADRTAB
LD C,#7F
FAQ POP DE
LD B,E
JP (HL)
STACK LD A,#D0 ;принудительное прерывание
LD C,#1F
JP (HL)
STACK1 LD SP,0
RET
Формат таблицы ADRTAB таков:
ADRTAB DEFB COUNTER ;сколько байтов записывать
DEFB BYTE ;байт для записи
DEFW #20B1
DEFW FAQ ;метка FAQ
...
и так далее... заканчивается таблица так:
DEFB COUNTER
DEFB BYTE ;последний байт для записи
DEFW #20B1
DEFW STACK
DEFW #2A53
DEFW STACK1
Скорость работы процедуры = 92 такта,
как видите, вполне хватает времени, чтобы
успеть выдать следуюций байт для записи
его на диск. К тому же на дорожку записы-
ваются не все 6150 байтов, а только 5980.
После записи последнего сектора с конт-
рольной суммой, форматирование дорожки об-
рывается. Можно еще ускорить процедуру,ес-
ли в HL занести #3D30 вместо #3D2F. Ско-
рость при этом увеличится на 4 такта и со-
ставит 88 тактов. Правда кое-кто утвержда-
ет, что на некоторых Спектрумах на перек-
лючение страничек ПЗУ требуется парочка-
-другая тактов процессора. Я хорошо пред-
ставляю себе как происходит, грубо говоря,
переключение ПЗУ. ПЗУ'шка TR DOS включает-
ся, когда на шине адреса появляются адреса
#3D00 - #3DFF, кроме того,в это время дол-
жно быть подключено ПЗУ BASIC-48, а не BA-
SIC-128, иначе TR DOS не подключится. Всем
этим занимаются микросхемы,и по-моему так-
ты процессора здесь не причем. Мое мнение,
что к TR DOS можно спокойно обращаться и
по #3D30. Все должно работать. Я лично не
слышал, что у кого-то не работали игры:
DOUBLE XINOX; 48 утюгов (crack by MAFIA)
или там ZX-FORMAT'ы. А ведь в этих прог-
раммах во всю используется #3D30. Сам ви-
дел. Я изменю свое мнение,если мне докажут
(а лучше покажут) обратное. Но я отвлекся.
Конечно, перед вызовом этой программы надо
раскрутить дисковод, спозиционировать го-
ловку, подправить значения в таблице (но-
мера секторов и дорожек),а после этого еще
и смочь прочесть регистр состояния ВГ'шки
(вдруг диск заклеен). Полностью программу
форматирования я не привожу,вы все найдете
в исходнике этого форматера в Приложении
журнала под именем FASTFORM.H в формате
ассемблера ALASM. Еще скажу, что табличка
ADRTAB не очень большая,чуть меньше 1.5Kb.
Про другие мелочи я говорить не буду, вы
сами все поймете, загрузив исходник с под-
робными комментариями. Попробуйте отформа-
тировать диск,а потом проверить его на ка-
чество RDS'кой.Желательно использовать ка-
чественные дискеты. Ведь фактической про-
верки качества формата не делается,но зато
скорость высокая - 32 секунды!
Напоследок хочу сказать одно пояснение
на несколько другую тему. Некоторые,опять-
-таки несознательные элементы,пытаются за-
пудрить мозги, говоря следующее. Мол, на
Scorp'е можно напрямую обращаться к регис-
трам ВГ. А для этого надо занести в порт
#1FFD единицу, чтобы подключить страницу
ОЗУ вместо ПЗУ и свободно программировать
ВГ'шку. А я заявляю,что таким образом дос-
туп к регистрам ВГ напрямую невозможен.
Сам проверял различными способами. Хочется
пожелать, что идею надо сначала проверить
на деле прежде, чем так говорить. Но зато
на Scorp'е можно без проблем читать ре-
гистр состояния контроллера. Видимо разра-
ботчики учли этот факт и по адресу #3FF3
прошили команды: IN A,(C):RET. У меня все.
Bye.