Deja Vu
#06
30 сентября 1998 |
|
CODING - Сверхбыстрое форматирование дисков SPECCY.
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.
Другие статьи номера:
Похожие статьи:
В этот день... 21 ноября