В. ЗЫКОВ,
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