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.



Другие статьи номера:

Аперативчик - Об управлении в оболочке DEJA VU

Аперативчик - Точность - вежливость королей; о новом выпуске журнала.

Тема - Fun Top-98 или очевидное и невероятное.

Тема - Интервью с Вл. Балчукеем перед Fun Top-98.

Тема - Результаты Fun Top-98.

Тема - Фоторепортаж с Fun Top-98.

Капля припоя - ПЗУ, которые мы выбираем.Обзор ПЗУ: Penatagon128, Scorpion ZS256,Spectrum128-фирменный вариант,Spectrum+2,Spectrum+2, Spectrum+3, ПЗУ от PROFI CLUB.

Капля припоя - Дополнительный графический режим 512x192.

SOFTWARE - Новинки демосцены: FOREVER, ADRENALIZE, BOOM,TYRANY,BLAME, EMERGENCY, KATNARSIS.

SOFTWARE - Новинки игровых программ: A LAST HERO of the LIGHT FORCE, MONSTR LAND, ЗЕРКАЛО.

CODING - Сверхбыстрое форматирование дисков SPECCY.

CODING - Уроки кодера: Фрактальный папаратник.

CODING - Драйвер чтения/записи.

CODING - Уроки кодера: Генерилка шариков.

CODING - Алгоритмы сжатия информации.

CODING - Об обечатке в листинге использования стека (в 5 номере).

ANOTHER WORLD - WINDOWS-95 и не только.

ANOTHER WORLD - Новости от INTEL-а...

ANOTHER WORLD - РС и работу софта

Доска почета - О спектрумских журналах.

Доска почета - письма в редакцию.

Доска почета - О CD-ROM проекте из города Кемерово.

Семь и 1/2 - Особенности национального рулеза 2 или упорядоченное движение электронов.

Семь и 1/2 - Руководство для потребителей пива.

Семь и 1/2 - Что делать , если не работает компьютер (Инструкция для хаккеров).

Семь и 1/2 - Гадание на таракане (Советы начинающему охотнику).

Семь и 1/2 - Инструкция по пользованию шариковой ручкой.

Проба пера - Стихи А. Баженова: Свечи, Смятение, Осень, Безисходность.

Проба пера - Приключения Винни Пуха (часть 3).

Проба пера - Сутки хаккера обыкновенные.

Реклама - Реклама и объявления ...


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

Похожие статьи:
Обзор - Шахматные игры для "ZX-SPECTRUM".
Я сама - Модемы: Описание команд - описание команд терминала.
Вступление - От авторов.

В этот день...   25 февраля