В. ЗЫКОВ,
684010, Камчатская обл., г. Елизово, ул. Рябикова, 48.

НЕСТАНДАРТНЫЕ ВОЗМОЖНОСТИ ОТЛАДЧИКОВ - ДИЗАССЕМБЛЕРОВ ПРИ РАБОТЕ С ДИСКОВОДОМ

Как это ни печально, приходится признать, что на данный момент БК является наиболее доступным персональным компьютером для рядового россиянина. Но после внесения в схему некоторых изменений (ИНФО 4/90) и подсоединения дисковода он вполне отвечает требованиям невзыскательного пользователя, не имевшего дела с продукцией таких "китов" как APPLE и IBM. Довольно обширное программное обеспечение на данный момент также может удовлетворить практически любые капризы.

И все бы хорошо, но очень многие "БК-шечники" практически лишены возможности приобрести где бы то ни было не только новые разработки, но и программы вообще, и вынуждены довольствоваться десятком-другим "игрушек" и таким же количеством рабочих программ. Речь идёт о жителях периферии, где отсутствуют, как правило, клубы "БК-менов", да и самих пользователей - считанные единицы. Им и приходится порой искать способы "заставить" свои программы выполнять не совсем обычные для них функции.

Сразу оговоримся: для более полного использования возможностей отладчиков все же необходимо дополнительное ОЗУ, желательно не менее чем на 16 Кб. Конечно, почти все сказанное ниже можно, при известной сноровке, реализовать и с 8 Кб, и даже просто в режиме РП.

Так, например, с помощью отладчика DEBU10D0 (автор - А.Г. Прудковский), входящего как утилита в дисковую операционную систему NORTON - БК V 2.0, удалось осуществить следующие операции:

Для нормальной работы отладчик требует незначительной переделки. Как правило, область стека у этих программ находится в адресном пространстве &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. КОПИРОВАНИЕ ЗАЩИЩЁННЫХ ФАЙЛОВ МЛ - ДИСК

По своему опыту знаю, что достаточно пять минут поработать с дисководом, чтобы на всю жизнь выработалась устойчивая аллергия к магнитофонным накопителям. Пользоваться ими тогда уже приходится только для перезаписи новых приобретений с ленты на диск, что, однако, не всегда удаётся из-за всевозможных систем защиты файлов от перезаписи. Рассмотрим, каким же образом можно "обмануть" некоторые системы. Многие из программ защиты представляют собой короткий файл, расположенный перед основной программой и проверяющий адресное пространство на предмет: а нет ли там копировщика? Если таковой присутствует, загрузка прекращается.

Производим следующие операции:

  1. Загружаем отладчик в ОЗУ по команде NORTONa L А: 120000 (это необходимо для того, чтобы избежать автозапуска программы).
  2. Нажатием клавиши "СТОП" выходим в монитор;
  3. Загружаем копируемую программу обычным способом (М "ВВОД", ИМЯ?).

После этого остаётся выйти в монитор любым способом (большинство программ предусматривают такую возможность), по команде "В - ВВОД" запустить "спрятанный" отладчик и записать файл по команде 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 на диск.

Копирование ведётся следующим образом:

  1. Запускается отладчик;
  2. По команде Ч считывается копируемый файл;
  3. Нажатием клавиши "СТОП" осуществляется выход в монитор;
  4. Командой "Р- ВВОД" запускается DOSB10;
  5. Командой 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

 

Performed by © gid, 2012-2022.