Deja Vu
#0A
30 сентября 2000 |
|
Программирование - Доработка GLOBAL COMMANDER'а.
__________________________________________ (C) Колесников Сергей aka SKL-KEEPER __________________________________________ Доработка GLOBAL COMMANDERа. Прежде всего я хочу попросить прощения у очень уважаемых мной авторов этого зна- менитого командира.Они создали ве- ликолепный коммандер с сумасшедшей скоростью копирования и многими другими наворотами, выгодно отли- чающими его от других подобных программ. В частности, они приме- нили просто идеальную процедуру автоопределения наличия диска в дисководе, сравнимую разве что с BEST VIEW. В общем, GLOBAL COMMANDER 1.31i работает, как часы! И ни за что и никогда я не полез бы внутрь этой программы, если бы не одно "но"... На экране моего "Шилялиса" очень плохо читается второе правое окно сверху, где написано "marked files". Это и неудиви- тельно, т.к. оно напечатано с атрибутами #02, т.е. красным по черному без повышен- ной яркости (хотя все остальные надписи в окнах сделаны с bright #01). Второе: в са- мом нижнем правом окне при входе в режим копирования, уплотнения, форматирования и т.д. очень неудачно подобрано соотношение ink/paper - приходится даже уменьшать яр- кость свечения экрана, чтобы прочесть, что там написано:-( Представляю, как мучаются те, у кого черно-белый монитор или цвет- ной, но с "севшим" кинескопом! А такие вещи, между прочим, сильно пор- тят общее впечатление от программы, как бы хороша она не была... Я, например, больше предпочитал REAL COMMANDER, у которого есть, конечно, свои достоинства, но и не- достатки тоже есть, и немалые (на Скорпио- нах в турбо-режиме плохо определяется на- личие диска в трехдюймовом дисководе). И вот решил я это дело исправить. У ме- ня Скорпион с профПЗУ, поэтому было проще. Не вдаваясь в подробности, для тех, у кого компьютер с "теневиком" сообщаю, что ячей- ки памяти, в которых хранятся данные по атрибутам печати в окнах, следующие : #70FD - атрибуты рамки; #70FE - в фирменной версии там стоит #45 (голубым по черному с bright #01)- это атрибуты самого верхнего правого окна; #70FF - там стоит #02 (красным по чер- ному bright #01) - это атрибуты второго окна сверху; #7100 - там #43 (синий по черному bright #01) - третье окно сверху; #710B - стоит #27 (белым по зеленому с обычной яркостью) - это атрибуты самого нижнего окна, которое выводится при запро- сах "delete file?" и т.п. Попробуйте выйти в "теневик" и изменить эти значения. Интерфейс коммандера можно менять, как угодно! А интересно-то как!-) Ну, это-то все хорошо, но ведь не бу- дешь каждый раз лезть в теневик и менять эти значения! А если нет теневика, тогда что? Вывод напрашивается сам - надо менять эти данные в самой программе! Как это сде- лать? А вот это я и хочу Вам рассказать... Возьмите чистый диск и запишите туда GLOBAL COMMANDER 1.31i. Переименуйте его в "boot" (так удобнее будет работать с ним дальше, меньше лишних телодвижений). Те- перь запустите его. GLOBAL загрузится и Вы с его помощью разрезаете файл "boot" (кла- вишей "U") на две части с одним названием: "boot.B". Второй получившийся файл переи- менуйте с помощью то же GC в "boot.C". У нас получилось два файла с длиной в 1 сектор и в 55 секторов. Бейсиковая часть - это загрузчик, нас он не интересует, а вот второй файл, кодовый, представляет из себя наполовину запакованный кодовый блок, а наполовину - незапакованные оверлеи. Нам нужна именно запакованная половинка. Упа- кована она с помощью codepacker'а HRUST 1.0, в память грузится с адреса 42278, а распаковывается в адрес 24192 и занимает после этого объем 9330 байт. В любом ассемблере наберите программу: ORG 24950 ;Здесь мы ее расположим. LD HL, 45000 ;Здесь будет файл, кото- ;рый надо распаковать. LD DE, 25000 ;Это - адрес, куда будем ;распаковывать. JP 23296 ;Здесь будет находиться ;распаковщик. Отассемблируйте ее и получившийся кодо- вый блок длиной 9 байт запишите на Ваш диск под именем, например, "depack.C". Найдите в своей коллекции HRUST 1.0, загрузите его и запишите на диск депакер с именем "DEHRUST.C" и адресом 23296. Наберите программу на бейсике: 10 CLEAR 24949: RANDOMIZE USR 15619:REM :LOAD "depack" CODE 20 RANDOMIZE USR 15619: REM: LOAD "DEHRUST" CODE 30 RANDOMIZE USR 15619: REM: LOAD "boot" CODE 45000 40 RANDOMIZE USR 24950 50 RANDOMIZE USR 15619: REM: SAVE "prog" CODE 25000,9330 Запустите эту программу (если кто не знает как, напоминаю: нажмите клавишу "R", потом ENTER;-) ). После ее выполнения Вы будете иметь распакованный кодовый блок с адреса 25000 длиной 9330 байт, который бу- дет записан на дискету под именем "prog". Именно в таком виде он и находится в прог- рамме. ...(Уже после написания этой статьи у меня появился BEST VIEW 2.9 - удивительно полезная и нужная программа! Спасибо Ивану Рощину за бесценный подарок! С ее помощью можно записать на диск распакованный файл без всех вышеописанных выкрутасов, простым нажатием двух клавиш - "SS + ENTER". Не забудьте только перед этой операцией на- вести курсор на запакованный файл;-) ... Наступила пора внести свои изменения. Загрузите CONVER COMMANDER версии 4.50 и выше. Войдите в дисковый доктор, затем не- посредственно на файл "prog". Почему имен- но этот командир? Да у него самый лучший дисковый доктор из всех коммандеров, и, главное, есть функция нахождения последо- вательности кодов на дискете. Нажмите "EXTEND MODE", он запросит ко- манду. Нажмите "F" (FIND) и введите после- довательность, которую Вам надо найти. Она написана в начале статьи, а именно : #45 #02 #43 #45 #01 Я в своем варианте сделал верхнее пра- вое окно с атрибутом #44, т.е. зеленое по черному bright #01, второе окно сверху с атрибутом #42 (красное по черному bright #01), и атрибут служебного окна с запроса- ми на копирование и т.п. - #42 (на 9 байт дальше последней исправленной цифры). Внеся эти изменения, запишите дорожку, или просто выйдите из доктора, а программа сама спросит, записать ли изменения. От- ветьте утвердительно, и на дискете Вы бу- дете иметь именно то, что Вам нужно! Теперь опять загрузите HRUST 1.0 и с его помощью запакуйте файл "prog" БЕЗ ДЕ- ПАКЕРА. Имя роли не играет, ну, например, "pack". Перенесите бейсик-файл "boot" в конец диска. Напоминаю, что его длина 1 сектор. Наберите программу на BASIC'е : 10 CLEAR 24999 : RANDOMIZE USR 15619 : REM : LOAD "boot" CODE 25000 20 RANDOMIZE USR 15619 : REM : LOAD "prog" CODE 25000 30 RANDOMIZE USR 15619 : REM : SAVE "GLOBAL" CODE 25000, 14080 Как Вы поняли, мы просто записали изме- ненную часть на свое прежнее место. После выполнения этой программы у нас получились два файла друг за другом - "bo- ot.B" и "GLOBAL.C". Первый длиной 1 сек- тор, второй - 55 секторов. Попробуйте за- пустить файл "boot" и Вы убедитесь, что коммандер работает уже с нужными Вам атрибутами. Последняя операция - склеивание двух этих файлов для получения исходного вида. В том же коммандере отметьте два вышеупо- мянутых файла и нажмите "Z". Вот теперь вся работа завершена! Согласитесь, что те- перь с этим командиром гораздо приятнее работать:-) И последнее, что я хотел Вам сообщить. Это будет интересно владельцам Скорпионов с профПЗУ. Общеизвестно, что Вы можете прямо из теневого монитора записать или загрузить любой кодовый блок из памяти без ущерба для ее содержимого. Вот теперь я с Вами не соглашусь! Во время копания в GLOBAL COM- MANDER'е я совершенно случайно обнаружил, что все-таки что-то там портится...-( Вот попробуйте загрузить GLOBAL и записать ко- довый блок с адреса 24192 длиной 9330 (тот, что мы с Вами распаковывали и потом запаковывали). Теперь сразу же загрузите его обратно. Вернитесь в программу и поп- робуйте поработать. Пошли глюки? А я Вам что говорил? Может, найдется сведущий че- ловек и напишет на адрес редакции, почему так происходит? В заключение несколько слов "без прото- кола";-) Ребята! Раз вы читаете эти строки, зна- чит вы такие же фанатики Спектрума, как и я. Не будьте пассивными! Пусть эта фраза уже избита, но это правда: судьба нашего SPECCY в наших же руках. Поддерживайте платформу Спектрума хоть чем-нибудь! Не может быть, чтобы у вас нечем было поде- литься с друзьями по увлечению! Напишите хоть несколько строк в журнал! А если уж вы так пассивны, то хотя бы материально поддерживайте производителей ПО, не поль- зуйтесь услугами "пиратов", которым судьба Спектрума "до лампочки"! Добра вам всем и удачи во всех ваших делах! ------------------------------------------
Другие статьи номера:
Похожие статьи:
В этот день... 21 ноября