M.M.A/SPEED CO.'97
Проблема запуска файлов с диска всегда ин-
тересовала как простых пользователей, так
и программистов. Казалось бы и проблемы то
никакой нет - нашёл файл и запустил коман-
дой RUN "GLUK". Так нет, даже этот каза-
лось бы, примитивный процесс, и то удалось
автоматизировать!
Какой-то коварный программист в TECHNOLOGY
RESEARCH реализовал в TR-DOS функцию, бла-
годаря которой команда LOAD или RUN (а так
же POKE и PEEK ) без операнда запускают
бейсик-файл с именем "boot". По-видимому,
этим действием он хотел загладить свою ви-
ну по сверхлевому кодированию самой дис-
ковой системы. Так начали появляться на
свет программы, позволяющие так или иначе
облегчить выбор и запуск файлов из катало-
га.
Ниже я хочу изложить ряд своих (да и не
только своих) мыслей по поводу развития
BOOT'остроения и некоторых современных его
тенденций. Особо рекомендуется для прочте-
ния тем начинающим программистам, которые
уже выросли из переделок чужих загрузчиков
и хотят попробовать написать что-то
своеобразное - boot'ообразное!
Для начала давайте посмотрим на то, что
уже было сделано в этой области за тот
период времени, что SPECTRUM существует на
просторах нашего необъятного ZX-USSR. Но
для начала, следует провести чёткую грани-
цу между boot-программой и файл-комманде-
ром. Будем считать, что любая программа,
позволяющая запускать на исполнение файлы
с диска,будет именоваться boot'ом. Если же
в этой программе есть намёк на копирование
информации, то это уже commabder. Тема
идеального файл-командера тоже очень инте-
ресна, но её обсуждение оставим на следую-
щий номер журнала. А сейчас: "Назад - в
будущее!".
Итак, история boot'остроения в России на-
чалась с появлением первых образцов BETA
DISK INTERFACE. Ни одного западного boot'а
я, да скорее и никто другой, не видел. Да
и единственной фирменной программой, рас-
считанной на TR-DOS, был DISK DOCTOR.
Как только отечественные программисты оч-
нулись ото сна, на свет стали появляться
первые поделки на тему boot'ов. Первые по-
добные программы были написаны по следую-
щему принципу: составлялся сборник игр,
названия программ зашивались в строку DATA
в BASIC'е и затем, вводя номер программы
или выбирая её дико дергающимся курсором
(тоже естественно от BASIC'а) можно было
наконец запустить полюбившийся файл. Этот
способ был интересен еще и тем, что зачас-
тую программы на подобных дисках были за-
щищены следующим способом. Все BASIC и
CODE файлы переименовывались в буквенно-
цифровую комбинацию. Затем файлы на диске
усиленно перемешивали и простому пользова-
телю было трудно понять,какой файл являет-
ся той или иной игрой, и какие кодовые
блоки нужны ей для работы. Вывод же ката-
лога был запрещён путем занесения непечат-
ных символов в имя диска.
Как видите, boot стал не просто средством
автоматизации, а единственным способом
достижения цели в борьбе за запуск файла.
К тому же пользователь не мог использовать
подобный boot в своих целях, переписав его
на другой диск, так как все имена запуска-
емых файлов изначально хранились в boot'e.
Но время шло и стали появляться первые об-
разцы настоящих boot-программ. Их появле-
ние сдерживалось ещё и тем, что традицион-
ными средствами БЕЙСИКА было невозможно
считать в память нулевую дорожку, содержа-
щую файловую информацию. Освоив азы
TR-DOS'а, первые программисты родили на
свет первые настоящие boot'ы! Большинство
из них по-прежнему состояло из 80-90 про-
центов BASIC'а и нескольких машинно-кодо-
вых процедур для работы с диском. Этот
этап развития характерен появлением одного
из основополагающих принципов - выбор фай-
ла производится курсором, для управления
которым нужно всего 5 клавиш или один
джойстик.
Следующим ключевым ша-
гом стало написание
полностью ассемблерных
boot-программ. Один из
самых известных подоб-
ных boot'ов был напи-
сан в 1991-ом году.
Автором его был скорее
всего некто M.RUSALOV,
и так как этот boot
очень понравился нашим
хаккерам, только са-
мые ленивые из них не создали собственную
его переделку. Стоит отметить, что при на-
личии в каталоге более 20 BASIC файлов,
данная программа не работала и выдавала
сообщение "No more 20 files". Это, каза-
лось бы, чисто техническое ограничение вы-
лилось затем в теорию игровых boot'ов
(т.е. специальных boot'ов для дискет с иг-
рами).
Интересная идея была
предложена в boot'е от
TOLLYSOFT'92, где выбор
файлов происходил в
окошке, очень похожем
(фактически копией) на
окно меню в машинах с
128кб памяти. К тому же
этот boot занимал всего
5 секторов! Так началась
еще одна эпопея в созда-
нии boot'ов - минимиза-
ция размеров программы.
В том же 1992-ом, Shi-Soft выпускает впол-
не удобный boot размером в два сектора.
Фактически эта программа поставила рекорд,
который превзойти было невозможно. И лишь
в 1995/96-ом годах наши самарские хаккеры
POLTERGEIST и MAXSOFT смогли реализовать
сначала несколько примитивный, а затем
вполне рабочий вариант односекторного
boot'a!
Ситуация на рынке boot'остроения испытыва-
ла некоторый застой, пока не появилось во-
истину эпохальное творение - ZYX BOOT.
Эта программа фактически положила начало
современной концепции BOOT-DEMO. Здесь бы-
ло всё, о чём только мог мечтать простой
пользователь!
Как и любую другую подобную программу,
ZYX-BOOT постигло немыслимое количество
взломов, переделок и мутаций. Припоминаю
даже диск, на котором было записано по-
рядка 60-ти разных видов и подвидов этого
boot'а с разной музыкой и спрайтами.
Долгое время программирующий народ пребы-
вал в бездействии, так как практически не
было новых идей по ещё большей автоматиза-
ции и упрощению запуска программ. И вот
явилось новое чудо, CODEBUSTERS BOOT by
RST#7.
Впервые (для boot'остроения) применённая в
этом шедевре программирования технология
смены дисков просто вдохнула новую жизнь в
саму идею! Сотни программистов выдрав про-
цедуру опроса дисковода, бросились на
штурм вершин автоматизации и дизайна. А
когда ещё один гениальный человек из
Харькова - COBRA - догадался поддержать
способ замены музыки, предложенный RST#7,
у простого народа проснулся новый интерес.
Теперь на диски стали записывать самые но-
вые и модные boot'ы, да и музыка в них
стала играть самая крутая и престижная.
Последним штрихом к этой истории стало по-
явление boot-программ,требующих для работы
128K памяти! Кто первым "додумался" до
этого, точно сказать трудно, но претенден-
та два: ROM BOOT (BY ROM/S.B.U.H.G.) и
BOOT by SILICON BRAINS. Обе эти программы
были выпущены в 96-ом году и используют
режим 128KB только для реализации более
крутых визуальных эффектов.
Так каким же должен быть идеальный boot с
точки зрения современного пользователя ?
Для начала, стоит уяснить, что boot может
быть игровой и системный. Бля первого
очень удобен принцип скроллирующего окна,
а для второго просто необходимо как можно
больше файлов отобразить на экране однов-
ременно. На системных дисках может нахо-
диться от 30 до 60 запускаемых файлов и
лазить по ним в маленьком окне очень неу-
добно. Именно поэтому, на всех своих сис-
темных дисках я записываю ZYX-BOOT! C дру-
гой стороны, в последнее время подобные
системные boot программы появляются всё
реже и реже. И это вполне объяснимо! Сей-
час новый boot пишется не столько ради не-
обходимости, сколько ради того визуального
эффекта, которым собирается вас поразить
новоявленный RST#7. А если на всём экране
будет каталог диска, то где же будет тот
самый гиперкрутой эффект? Вот и плодят
наши программисты огромную массу игровых
boot'ов, а системных и не видать! Многие
мои знакомые уже дошли до того, что на
системных дисках держат вместо boot'а ка-
кой либо коммандер. Но это же противоес-
тественно!
Итак, продолжим.Поскольку стандарт на сис-
темные boot'ы придумать трудно за их неи-
мением, рассмотрим игровые.
Выбор файла в подобной программе обычно
производится курсором из окошка, в котором
происходит скроллинг. Размеры окна должны
быть не меньше 6-8 символов в высоту, ина-
че трудно охватить взглядом содержимое
диска.
Скроллинг в окне должен управляться макси-
мальным числом возможных комбинаций клавиш
и джойстиков. Разумно поддержать следующие
варианты:
┌----------------------┬-----------------┐
│вверх попиксельно │ Q,S,9,вверх │
├----------------------┼-----------------┤
│вниз попиксельно │ A,X,8,вниз │
├----------------------┼-----------------┤
│вверх на один файл │ O,6,влево │
├----------------------┼-----------------┤
│вниз на один файл │ P,7,вправо │
├----------------------┼-----------------┤
│выбор файла │ ENTER,SPACE,0,М │
└----------------------┴-----------------┘
Если у вас под рукой есть такие устройства
как KEMPSTON MOUSE или AY-MOUSE, никто не
запрещает (а даже рекомендует) их тоже
поддерживать.
Хочу предостеречь начинающих программистов
от одной часто встречающейся ошибки. Если
у вас клавиша "ПРОБЕЛ" опрашивается как
выбор файла, то может произойти следующая
ситуация: пользователь наводит на нужный
ему файл курсор, нажимает на клавишу BREAK
(CAPS SHIFT + SPACE) и происходит запуск
программы. Но в ближайшие миллисекунды всё
останавливается и вы вываливаетесь в
BASIC. Почему это происходит и как с этим
бороться, понять не трудно. Важно недопус-
кать таких ошибок в своих творениях.
Смена дисков - это тоже важный элемент в
современном boot'е. C одной стороны, сле-
дует обрабатывать этот процесс автомати-
чески, но с другой стороны, не на всех
дисководах этот способ работает без проб-
лем. На некоторых машинах, из-за непра-
вильно собранного контроллера или не-
исправности самого дисковода, автоматичес-
кая перезачитка диска порождает дикое тре-
щание, грозящее полным выходом системы из
строя. Естественно,есть и такие программы,
которые даже на таких дисководах функцио-
нируют вполне нормально, хотя диски пере-
читываются автоматически. Всё дело в том,
насколько правильно реализован ассемблер-
ный алгоритм. Возможо, в ближайших номерах
журнала мы приведем текст правильно рабо-
тающей процедуры опроса дисковода. Ну а
пока, давайте попробуем решить проблему в
корне - как определять смену диска, авто-
матически или вручную ?
Кардинально к решению этого вопроса подо-
шёл самарский программист MAXSOFT. Его аб-
солютно не устраивало автоматическое зачи-
тывание дисков ни в какой форме, так как
на эмуляторе SPECTRUM'а на IBM этот метод
приводит к страшнейшим глюкам. Вот не-
большой дизассемблер программы MAXBOOT 11:
LD A,(#5DбE) : Проверка
CP #31 : номера
CALL Z,#CEDB : MODE
LD A,(#5DбE)
CP #32
CALL Z,#CEDЧ
......................
#CEC8 LD C,#13
CALL #3D13
LD A,(#SCDD) : Проверка на
CP #49 : эмулятор
RET NZ : UKV-DEBUGGER
#CEDЧ POP HL : Отключение
LD HL,#C9AF : автозачитки
LD (START_OF_AUTOCHECK),HL
RET
#CEDB LD HL,#801 : Проверка на
CALL #CEC8 : эмулятор
CP #1C : Z80
JR Z,#CEDЧ : (LUNTER)
LD HL,#ЗDAD
CALL #CEC8
LD HL,#ЗEB5
CALL #CEC8
LD HL,#1FFD
CALL #CEC8
RET
Идея заключается в следующем. В BASIC заг-
рузчике находится строка текста "MODE 1"
где единица - это один из трёх режимов ра-
боты:
1 - тест на эмулятор SPECTRUM'а и если да,
то отключение автозачитывания.
2 - автозачитывание всегда выключено.
3 - автозачитывание всегда включено.
Таким образом, если вас не устраивает, что
ваш дисковод гудит от автозачитки, то вам
достаточно с помощью дискового доктора по-
менять одно число в BASIC'е и программа
будет работать так как надо.
Ручное перезачитывание удобнее всего пове-
сить на клавишу SPACE (естественно если
она не задействована у вас как ВЫБОР),а
продублировать клавишей R.
При создании автозачитывающей проце-
дуры, нужно обратить внимание на сам алго-
ритм работы. Зачастую, неправильно напи-
санный алгоритм приводит к ошибкам при ра-
боте с защищёнными от записи дисками. К
тому же, само зачитывание диска нужно на-
чинать только тогда, когда пользователь
уже вынул старый диск и начал вставлять
новый ( см. MAXBOOT#11 ).
На время считывания нового диска, прихо-
дится полностью останавливать работу всех
визуальных эффектов и проигрывание музыки.
Радикально решил эту программу хаккер
UNWINDER/CODERS ACADEMY. В его boot'е при-
менён квази-мультизадачный драйвер чтения
с диска (как в BATTLE COMMAND и INSULT).
Поэтому, при смене диска экран гасится, но
музыка продолжает играть, что создает не-
повторимое ощущение живости происходящего.
Вообще, если бы этот boot не требовал 128K
памяти, то можно было бы признать его луч-
щим на сегодняшний день как по сервису,
так и по дизайну.
Буквально после первого же boot'а,написан-
ного на свете, люди поняли ненужность вы-
вода в окно выбора файлов самого файла
"boot". Мотивировалось это тем, что boot
всегда записывается на диск первым и будет
только мешаться при выборе файлов. От-
дельные "горячие головы" призывали даже к
полному игнорированию не только этого фай-
ла, но и любого другого, начинающегося на
маленькую букву.
Действительно, это предложение было акту-
ально во времена, когда существовали дис-
ковые версии по "методу Родионова", то
есть содержащие в себе не один, а два
BASIC блока. Запускаемым являлся лишь пер-
вый, а при попытке запуска второго, в луч-
шем случае пользователь отделывался лёгким
испугом.
Сегодня подобных дисковых версий практи-
чески не осталось, зато появились новые
форматы игр и журналов - disk size. Такая
игра или электронный журнал занимают целый
диск и естественно имеют имя boot. Если
подобный диск вставить в игнорирующий
boot, то вы не сможете запустить игру или
журнал, так как файл с именем "boot" на
экране не отображается. Надеюсь, я убедил
вас в нужности отображения самого файла
"boot" ? Ну а для тех, кому противно пос-
тоянно видеть перед глазами слово boot в
первом пункте каталога, могу предложить
следующий способ. После зачитывания диска
в окне выбора печатается первым файлом
boot, а уже затем названия всех остальных
программ. При этом курсор сразу устанавли-
вается на вторую программу. Таким образом
даже если сразу после загрузки нажать кла-
вишу ВЫБОР, то запустится не boot, а
действительно первая на диске (после
boot'a) программа.
Естественно, современный boot должен уметь
переходить с одного дисковода на другой по
нажатии на клавиши 1 (дисковод A), 2 (дис-
ковод B), 3 (дисковод C) и 4 (дисковод D).
Конечно можно возразить - у большинства из
простых пользователей нет даже второго
дисковода, ну, а третий или четвёртый во-
обще является излишеством. Но не стоит за-
бывать про намечающуюся тенденцию перехода
на диски и дисководы 3.5', и в этом случае
конфигурация с двумя 5.25' и одним 3.5'
дисководами может стать объективной
реальностью.Да и возвращаясь к пресловутым
эмуляторам, стоит заметить, что в послед-
ней версии UKV можно создавать на жёстком
диске образы гибких дисков, а затем рабо-
тать с ними, как с дисководами "C" и "D".
Естественно, может произойти такая ситуа-
ция, когда пользователь пытается выбрать
дисковод "D", хотя имеет лишь дисковод
"A". В таком случае, самый эффективный
способ заключается в том, чтобы сделать
5-10 циклов попыток перехода на другой на-
копитель, и если они завершились неудачей,
вернуться на исходный дисковод.
Музыка является неотъемлемой частью совре-
менного boot'а и задача программиста как
можно более облегчить пользователю ее за-
мену. Самым распространённым является спо-
соб записывания музыки в отдельный файл
сразу после самого boot'a. Музыка должна
быть скомпилирована соответствующим ре-
дактором, без проигрывателя. Таким образом
сам проигрыватель должен быть стандартным
и находиться внутри тела программы. Обычно
один boot играет музыку, созданную лишь в
одном из редакторов (ASM,ST,PT,STP). Под-
держка сразу всех известных форматов музы-
ки трудна ещё и тем, что хранить в памяти
3-4 проигрывателя довольно расточительно
и опять начинается нехватка памяти для ре-
ализации супер-гипер-видео эффектов.
В качестве выхода из этой ситуации могу
предложить следующее. После загрузки в па-
мять boot'а содержащего все проигрыватели,
подгружается сама мелодия и тестируется на
принадлежность к тому или иному редактору.
Затем все остальные проигрыватели, не нуж-
ные для работы, уничтожаются и на их место
декомпрессируется сам boot. Так можно эко-
номить память и поддерживать все существу-
ющие музыкальные форматы. Хотя в принципе
достаточно включить в boot два проигрыва-
теля - от PRO TRACKER'а и SOUND TRACKER
PRO. Сейчас мало пишут музыки в ASM'е, а
любую мелодию из обычного SOUND TRACKER'а
можно легко перевести в формат STP.
Стоит также помнить о том, что пользова-
тель может случайно или специально запи-
сать после boot'а вместо музыки нечто дру-
гое. В этом случае, достаточно провести
тест мелодии на принадлежность к редакто-
ру и если есть предположение что это вовсе
не музыка, то просто не воспроизводить её!
Кстати, вопрос однозначного определения на
принадлежность компилированной мелодии к
тому или иному редактору, очень непростой!
Конечно, можно разломать такую программу
как VIRTUAL PLAYER(by DISMASTER) и выдрать
все проверки, но нам хотелось бы, чтобы
сами авторы муз.редакторов (в частности
KSA) дали официальные способы однозначного
определения принадлежности компилированной
музыки к тому или иному редактору. Наш
журнал с удовольствием опубликует подобную
информацию.
Вот и всё, что я хотел сегодня вам расска-
зать о том, какие boot'ы были, есть и бу-
дут. Естественно, моё мнение может быть
необъективно. Поэтому прошу всех, кому ин-
тересна данная тема - пишите письма с со-
ветами, комментариями и предложениями. Мы
всё обязательно опубликуем.
-════════════════════════════════════════-
* * * * *
Other articles: