Oberon #03
14 марта 1997 |
|
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:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Similar articles:
В этот день... 21 November