В. ЗЫКОВ,
684010, Камчатская обл., г. Елизово, ул.
Рябикова, 48.
НЕСТАНДАРТНЫЕ ВОЗМОЖНОСТИ ОТЛАДЧИКОВ - ДИЗАССЕМБЛЕРОВ ПРИ РАБОТЕ С ДИСКОВОДОМ
Как это ни печально, приходится признать, что на данный момент БК является наиболее доступным персональным компьютером для рядового россиянина. Но после внесения в схему некоторых изменений (ИНФО 4/90) и подсоединения дисковода он вполне отвечает требованиям невзыскательного пользователя, не имевшего дела с продукцией таких "китов" как APPLE и IBM. Довольно обширное программное обеспечение на данный момент также может удовлетворить практически любые капризы.
И все бы хорошо, но очень многие "БК-шечники" практически лишены возможности приобрести где бы то ни было не только новые разработки, но и программы вообще, и вынуждены довольствоваться десятком-другим "игрушек" и таким же количеством рабочих программ. Речь идёт о жителях периферии, где отсутствуют, как правило, клубы "БК-менов", да и самих пользователей - считанные единицы. Им и приходится порой искать способы "заставить" свои программы выполнять не совсем обычные для них функции.
Сразу оговоримся: для более полного использования возможностей отладчиков все же необходимо дополнительное ОЗУ, желательно не менее чем на 16 Кб. Конечно, почти все сказанное ниже можно, при известной сноровке, реализовать и с 8 Кб, и даже просто в режиме РП.
Так, например, с помощью отладчика DEBU10D0 (автор - А.Г. Прудковский), входящего как утилита в дисковую операционную систему NORTON - БК V 2.0, удалось осуществить следующие операции:
- копирование защищённых файлов МЛ - диск;
- копирование файлов между несовместимыми ДОС (NORTON - БК и DOSB10);
- осуществление перехвата ЕМТ 36 в ОС NORTON - БК;
- частичное "спасение" испорченных файлов на диске и МЛ;
- копирование файлов с диска со стёртым каталогом.
Для нормальной работы отладчик требует незначительной переделки. Как правило, область стека у этих программ находится в адресном пространстве &700...&1000, что мешает считывать программы с начальным адресом, располагающимся в этих же адресах. Так как предполагается, что отладчик работает в дополнительном ОЗУ, область стека необходимо перенести туда же.
Запустив DEBU10D0, переписываем самую первую строку (&1000): вместо MOV #770,SP - MOV #132000,SP. Если программа располагается с адреса &120000, для возвращения в отладчик достаточно выполнить команду В,ВВОД. Желательно также изменить начальный адрес вывода на экран содержимого ячеек (у DEBU10D0 это &15000), переписав заодно строку "АДРЕС ЗАГРУЗКИ +&772": MOV #15000,R5 на MOV #1000,R5. Теперь можно записать исправленную программу по команде Z. В других версиях, аналогичных рассматриваемой, следует произвести подобные же изменения. Практически всегда подобные команды располагаются в самом начале.
Для удобства работы можно скомпоновать из утилит универсальную программу. В авторском варианте "под одной крышей" располагаются:
&120000 - отладчик DEBU10D0;
&135000 - драйвер принтера;
&140000 - ассемблер M19AD0;
&156000, &157000 - "читалки".
в данном ассемблере команда MOV #1000,SP располагается по адресу &1000, а команда, задающая адрес вывода на экран ячеек памяти MOV #15000,R5 - "адрес загрузки + 772".
1. КОПИРОВАНИЕ ЗАЩИЩЁННЫХ ФАЙЛОВ МЛ - ДИСК
По своему опыту знаю, что достаточно пять минут поработать с дисководом, чтобы на всю жизнь выработалась устойчивая аллергия к магнитофонным накопителям. Пользоваться ими тогда уже приходится только для перезаписи новых приобретений с ленты на диск, что, однако, не всегда удаётся из-за всевозможных систем защиты файлов от перезаписи. Рассмотрим, каким же образом можно "обмануть" некоторые системы. Многие из программ защиты представляют собой короткий файл, расположенный перед основной программой и проверяющий адресное пространство на предмет: а нет ли там копировщика? Если таковой присутствует, загрузка прекращается.
Производим следующие операции:
- Загружаем отладчик в ОЗУ по команде NORTONa L А: 120000 (это необходимо для того, чтобы избежать автозапуска программы).
- Нажатием клавиши "СТОП" выходим в монитор;
- Загружаем копируемую программу обычным способом (М "ВВОД", ИМЯ?).
После этого остаётся выйти в монитор любым способом (большинство программ предусматривают такую возможность), по команде "В - ВВОД" запустить "спрятанный" отладчик и записать файл по команде Z с адреса &1000. Почти всегда удаётся запустить программу с этого адреса. Если нет, можно поэкспериментировать - попробовать запуск с адресов &1002, &1004 и т.д. Установив адрес запуска, все предшествующие строки необходимо переписать на "холостую" команду NOP. Для примера приведём адреса запуска у недавно появившегося пакета TERMINATOR:
TERMINATOR1,4 - &1004;
TERMINATOR2, 3 - &1000;
TERMINATOR5 - &1002.
2. КОПИРОВАНИЕ ФАЙЛОВ МЕЖДУ НЕСОВМЕСТИМЫМИ ДИСКОВЫМИ ОПЕРАЦИОННЫМИ СИСТЕМАМИ (NORTON - БК И DOSB10)
Для копирования файлов между этими системами распределяем адресное пространство ОЗУ следующим образом:
&120000 - отладчик DEBU10D0;
&140000 - загрузочный модуль DOSB10.
При копировании NORTON - DOSB10 необходимо в режиме РП считать в отладчик с МЛ операционную систему DOSB10 (её длина в оригинале &45000) с адреса & 1000 и записать необходимый для работы модуль длиной &20000 с адреса &26000 на диск.
Копирование ведётся следующим образом:
- Запускается отладчик;
- По команде Ч считывается копируемый файл;
- Нажатием клавиши "СТОП" осуществляется выход в монитор;
- Командой "Р- ВВОД" запускается DOSB10;
- Командой SAVE FAYL/A:/D: записываем файл в DOSB с именем "FAYL" по адресу А:, длиной D:.
Копирование из DOSB в NORTON осуществляется аналогичным образом.
3. ОСУЩЕСТВЛЕНИЕ ПЕРЕХВАТА ЕМТ 36 В NORTONE - БК
Большинство программ, написанных для БК, как правило, рассчитаны для работы с магнитофоном. В некоторых ДОС предусмотрен перехват ЕМТ 36, что позволяет работать с дисководом. К сожалению, NORTON такими качествами не обладает, поэтому приходится терять много сил, используя вместо диска его советский аналог МК-60. С помощью отладчика можно частично облегчить этот процесс. Расположение его, как и в предыдущих примерах, - ОЗУ, &120000.
После запуска отладчика происходит подключение драйвера дисковода. Если теперь считать нужный файл и запустить его на выполнение, команда ЕМТ 14, имеющаяся почти во всех программах, устанавливает, все ячейки в исходное состояние и подключает драйвер магнитофона. Однако если, считав программу, переписать строку с ЕМТ 14 на "холостую" команду NOP (как правило, эта команда находится в самом начале), после её запуска можно свободно производить чтение и запись на Диск - работать будет драйвер дисковода отладчика. Исключение могут составить лишь программы, в которых реализовано прямое обращение к подпрограммам драйвера МГ. Примером может служить ИПС.01К (информационно-поисковая система KSA), где нормально осуществляется запись информации, но невозможно её чтение. К сказанному можно лишь добавить, что в популярном музыкальном редакторе KLAVESIN ЕМТ14 находится по адресу &21070.
4. ЧАСТИЧНОЕ "СПАСЕНИЕ" ИНФОРМАЦИИ С ИСПОРЧЕННЫХ ФАЙЛОВ
Конечно, существуют прекрасные программы, позволяющие "спасти" хоть часть информации с испорченных файлов, но в крайнем случае это может сделать и отладчик, причём достаточно просто - надо лишь попытаться считать испорченную программу по команде "ЧТЕНИЕ". Само собой, выдаётся сообщение "ОШИБКА", но какая-то часть все же оказывается загруженной. Остаётся только определить её длину и записать как отдельный файл.
5. КОПИРОВАНИЕ ФАЙЛОВ С ДИСКА ПРИ ИСПОРЧЕННОМ КАТАЛОГЕ
Бывают случаи, когда по небрежности или по какой-то другой причине каталог диска оказывается испорченным, а его копия отсутствует. Программа, листинг которой приводится ниже, позволяет в паре с отладчиком по номеру начального блока считать любой файл. Номер блока, если отсутствует отпечатанная копия каталога, можно определить, просмотрев диск, к примеру, в SuperFormat или в подобной, позволяющей поблочный просмотр диска. Программа перемещаема и расположить её можно в любом удобном месте. При необходимости её можно использовать и автономно.
После введения номера блока, адреса загрузки и длины происходит считывание файла. По команде "G" записанную программу можно запустить на выполнение; "М" - выход в монитор, "СТОП" - продолжение работы. Из отладчика программа записывается обычным образом.
NAT: EMT 14 MOV #650,SP MOV PC,R1 ;ДРАЙВЕР КЛАВИШИ "СТОП" ADD (PC)+,R1 .@N+2 MOV R1,@#4 MOV PC,R1 ADD (PC)+,R1 .@W+2 MOV R1,@#260 MTPS #0 MOV #14,R0 EMT 16 CLR R1 ;НАДПИСЬ В СЛУЖЕБНОЙ ;СТРОКЕ MOV #64,R3 MOV PC,R2 ADD (PC)+,R2 .@TEXT3+2 A1: MOVB (R2)+,R0 EMT 22 INC R1 SOB R3,A1 MOV PC,R1 ;ВЫВОД TEXT НА ЭКРАН ADD (PC)+,R1 .@TEXT1+2 CLR R2 EMT 20 MOV #3,R5 BAL: JSR PC,PARAM ;ПЕРЕХОД К ПОДПРОГРАММЕ ; ПРИНЯТИЯ ДАННЫХ MOV R0,-(SP) SOB R5,BAL MOV #500,R3 ;ПОДГОТОВКА РАБОЧЕЙ ЗОНЫ ДИСКА JSR PC,@#160010 ;ЧТЕНИЕ ФАЙЛА ПО ПАРАМЕТРАМ: MOV (SP)+,R2 ;АДРЕС ЗАГРУЗКИ MOV (SP)+,R1 ;ДЛИНА ASR R1 MOV (SP)+,R0 ;НОМЕР НАЧАЛЬНОГО БЛОКА MOV R2,@#346 MOV #500,R3 JSR PC,@#160004 CLR @#177130 EMT 6 ;ПРИНЯТИЕ КОМАНДЫ MOV #100442,@#4 W: CMP R0,#107 ;"G"-? BNE A5 ;ЕСЛИ НЕТ, ТО А5 MOV @#346,R1 ;ПУСК ПРОГРАММЫ НА ВЫПОЛНЕНИЕ JMP @R1 A5: CMP R0,#115 ;"М"-? BNE A2 ;ЕСЛИ НЕТ ТО А2 JMP @#100000 ;В МОНИТОР N: JMP NAT PARAM: MOV PC,R1 ;ПОДГОТОВКА БУФЕРА ;ПАРАМЕТРОВ ADD (PC)+,R1 ;ИХ ПРИНЯТИЕ С КЛАВИАТУРЫ .@BPAR+2 MOV R1,R3 MOV #5007,R2 EMT 10 SUB #2,R1 MOV R1,R4 CLR R0 CMP R3,R4 BEQ A3 A4: MOVB (R3)+,R1 SUB #60,R1 ADD R1,R0 ASL R0 ASL R0 ASL R0 CMPB R3,R4 BNE A4 A3: MOVB (R3)+,R1 SUB #60,R1 ADD R1,R0 A2: RTS PC BPAR: .E.E.E TEXT1: .B:12.B:12 .A:......B1 .B:12 .A:......Ln .B:12 .A:......Add .B:22.B:12.B:12 .E TEXT3: .A:(C)*ZW* .B:40.B:40 .A:СТОП - СБРОС;М - МОНИТОР;G - ПУСК ПРОГРАММЫ .E END