Системные программы для «ZX-Spectrum» 1992 г.

Mons-4 - введение. Запуск. Получение копии. Команды Mons-4.


MONS-4

РАЗДЕЛ 1. ЗАПУСК

MONS4 поставляется в перемещаемой форме. Вы просто загружаете его с
желаемого адреса, и затем вызываете с этого же адреса. Если вы хотите запустить
MONS4 вновь (вернувшись из MONS4 в BASIC), то вы должны ввести адрес, с
которого первоначально загрузили отладчик.

Пользователи "PLUS 3" должны прочитать дополнительный листок с
особенностями внешнего отладчика, который расположен на адресуемом диске и
требует только 100 байтов в обычном 48К-байтовом ОЗУ.

ПРИМЕР:

Скажем, вы хотите загрузить MONS4 по адресу #С000 (49152 - десятичный).
Для этого выполните следующие операции:

LOAD ""CODE 49152 <ENTER>

RANDOMIZE USR 49152 <ENTER>

Для повторного входа используйте:

RANDOMIZE USR 49152 <ENTER>

Будучи однажды помещенным в память, MONS4 занимает приблизительно 6К в
длину, но вы должны предоставить непрерывную область 7К на загрузку MONS4,
т.к. после основных кодов надо поместить таблицу перемещаемых адресов. MONS4
содержит собственный внешний стек, так что он является самообслуживающейся
программой.

MONS4 по умолчанию загружается с адреса 55000, хотя вы можете загрузить
его с любого разумного адреса. Обычно удобно загружать MONS4 в верхние адреса
памяти.

ПОЛУЧЕНИЕ КОПИИ.

Однажды загрузив MONS4 в память вашего SPECTRUM'a, вы можете сделать
копию, проделав следующие операции:

SAVE "MONS4" CODE XXXXX,6656 <ENTER> — на кассету

SAVE *"M",1,"MONS4"CODE XXXXX,6656 <ENTER> —на дискету

SAVE *"M",1,"MONS4"CODE XXXXX,6780 <ENTER> — на диск OPUS

где ХХХХХ — адрес, с которого вы загрузили MONS4.

Заметьте, пожалуйста, что мы позволяем вам делать копию MONS4 только для
вашего пользования, так что вы можете программировать уверенно. Пожалуйста,
не делайте копий MONS для передачи (или, что еще хуже, для продажи) вашим
друзьям Мы поставляем программное обеспечение по разумным ценам с полной
послепродажной поддержкой. Покупайте, а не крадите!

Когда вы войдете в MONS4, Вам предоставляется изображение так называемой
фронтальной панели (в дальнейшем — ФП). (см. примечание с примером) Оно
состоит из регистра Z Z80 и флага ОВ вместе с их содержимым плюс 24-х байтовая
секция памяти, сосредоточенная вокруг указателя памяти, первоначально
указывающего на нулевой адрес. В верхней части экрана находится
дезассемблированная инструкция, на которую указывает указатель памяти, (в
дальнейшем — МР).

На входе MONS все адреса, отображаемые внутри ФП, представлены в
шестнадцатиричном формате. Вы можете изменить это с помощью команды:

<SYMBOL SHIFT> 3

и адреса будут представлены в десятичном формате (см. следующий раздел).
Заметим, однако, что адреса всегда должны вводиться в шестнадцатиричном
формате. Команды вводятся с клавиатуры в соответствии с подсказкой ">" как с
верхнего, так и с нижнего регистров.

Некоторые команды, эффект от которых может быть гибельным в случае их
ошибочного использования, требуют нажатия клавиши <SYMBOL SHIFT>. Это
ручное нажатие клавиши <SYMBOL SHIFT > будем представлять знаком "_", т.е.
запись "_Z" означает нажатие <SIMBOL SHIFT> и "Z" вместе.

Команды выполняются немедленно и не требуют после себя ввода <ENTER>.
Неверные команды просто игнорируются

Многие команды требуют ввода 16-ричного числа. При вводе такого числа вы
можете ввести любое количество 16-ричных цифр (0...9 и A...F) и закончить ввод
любым отличным от 16-ричного числа символом. Если ограничителем является
значащая команда, то эта команда выполняется после того, как будет выполнена

-1—1 и п

предыдущая. Если ограничителем является знак - , то введенное отрицательное
число будет возвращено в двойном дополнительном коде: "1800-" дает "Е800". Если
при вводе 16-рич-ного числа вы ввели более 4-х цифр, то только 4 последние
введенные цифры сохраняются и отображаются на экране.

Для возврата из MONS4 в BASIC просто нажмите <STOP> (т.е. "_А").

Пользователи "SPECTRUM PLUS 3" должны ознакомиться с дополнительными
инструкциями, поставленными с этим руководством, прежде чем идти дальше.

РАЗДЕЛ2. КОМАНДЫ!MONS4

В MONS4 используются нижеприведенные команды. В этом разделе <ENTER>
употребляется в качестве ограничителя 16-ричного числа. Фактически это может
быть любой не 16-ричный символ (см. раздел 1).

• 1. <SYMBOL SHIFT> 3 или #

Переключает систему счисления, в которой отображаются адреса, с 16-ричной
на десятичную и обратно. На входе MONS4 все адреса показываются в 16-ричном

' V II о п ПОП

виде, для десятичного отображения используите _3 и вновь _3 для возврата в
16-ричную форму. Это влияет на все адреса, отображаемые MONS4, включая
адреса, получаемые дизассемблером, но это не меняет отображения содержимого
памяти, которое всегда выдается в 16-ричном виде.

• 2. <SYMBOL SHIFT> 4 или $

Отображает дизассемблированную страницу, начиная с адреса, указанного МР
полезно посмотреть и следующие инструкции. Нажмите "4" вновь или <EDIT> для
возврата к отображению ФП или другую клавишу для получения следующей
дизассемблированной страницы.

• 3. <ENTER>

Наращивает счетчик адресов на 1, так что 24-х байтовая область памяти
сдвигается на 1 байт вперед.

• 4. < t >

Уменьшает МР (указатель памяти) на 1.

• 5. <^>

Уменьшает значение МР на 8. Используется для быстрого просмотра.

• 6. <^>

Увеличивает значение МР на 8. Используется для быстрого просмотра.

• 7. <,> (запятая)

Заменяет МР адресом, находящимся в стеке (SP). Это полезно, когда вы хотите
посмотреть адрес возврата вызванной подпрограммы.

•8.<G>

Поиск по образцу введенной строки. Сначала высвечивается на ввод первого
байта, который необходимо найти. За байтом следует <ENTER>. Затем вводите
следующий байт (и <ENTER>) в ответ на ":" до тех пор пока вы не определите всю
строку образа. После этого введите только <ENTER>, это ограничит строку образа.
Будет произведен поиск образа, начиная с текущего адреса до первого появления
введенной строки. Когда эта строка будет найдена, обновится ФП так, что ФП
будет указывать на первый символ строки.

Например:

Скажем вы хотите исследовать память, начиная с адреса

#8000 на появление образа #ЗЕ #FF0 (2 байта). Последовательность действий
должна быть следующей:

M:8000 <ENTER> — устанавливает МР

G:3E <ENTER> — ОПРЕДЕЛЯЕТ 1-Й БАЙТ СТРОКИ

FF <ENTER> — определяет 2-й байт строки

<ENTER> — ограничивает строку

После последнего <ENTER> (или любого не 16-ричного символа) G начинает
поиск с адреса #8000 до первого появления

#ЗЕ #FF. Когда будет найдена строка, то обновится изображение на ФП. Для
поиска дальнейших появлений строки используйте команду N.

• 9. <Н>

Вам выводится подсказка ":" на ввод десятичного числа, ограниченного не
цифрой (любым символом, кроме 0...9) .Как только вы введете число и
ограничитель, в той же строке высветится знак " = " и 16-ричный эквивалент
введенного десятичного числа. Теперь нажмите любую клавишу для возврата в
командный режим.

Например:

Н:441472 =А200 — пробел использован как ограничитель

• 10. <I>

Используется для копирования блока памяти из одного места в другое, причем
блок памяти может быть скопирован в ячейки с перекрытием своего
первоначального местоположения. <I> выдает подсказки на ввод стартового и
конечного адресов блока, который должен быть скопирован (<FIRST:>, <LAST:>) и
затем для адресов, по которым он должен быть помещен (<ТО:>). Введите в ответ
на каждую подсказку 16-ричные числа. Если стартовый адрес больше конечного, то
команда прерывается, в противном случае блок перемещается как указано.

•11. <J>

Выполняет задачу с определенного адреса. Эта команда выдает подсказку ":"
для 16-ричного числа, после введения которого сбрасывается внешний стек, экран
очищается и выполнение перемещается в область определенного адреса. Если вы
желаете вернуться к ФП после выполнения, то установите точку останова (см.
команду W) в месте, где вы желаете вернуться к отображению.

Например:

J:B000 <ENTER> — выполняет программу с адреса #В000

Вы можете прервать программу перед концом ввода адреса, используя <EDIT>.
Отметим, что выполнение команды <J> портит регистры Z80, поэтому программа в
машинных кодах не должна делать присвоений значений, содержащихся в
регистрах. Если вы желаете выполнять программу с регистрами, то нужно
использовать "_К".

• 12. <SYMBOL SHIFT> K

Продолжает выполнение с адреса, находящегося в счетчике инструкций. Эта
команда, вероятнее всего, будет использована совместно с командой W — пример
пояснит это.

Скажем, вы в пошаговом режиме (используя "_Z") проходите через коды,
приведенные ниже, и вы дошли до адреса #9000, но вы хотите увидеть, как
выставляются флаги после вызова подпрограммы в #8800.

891E 3EFF LD A,-1

8920 CD0090 CALL 39000

8923 2A0080 LD HL,(#8000)

8926 7E LD A,(HL)

8927 111488 LD DE,#8814
892A CD0088 CALL #8800
892D 2003 JR NZ<LABEL
892F 320280 LD (#8002) ,A
8932 211488 LABEL LD HL,#8814
Действуйте в следующем порядке:

Установите точку останова, используя W, по адресу #892D (напомним, что
сначала нужно использовать "_М" для установки МР) и затем вводите команду
"_К". Выполнение будет продолжаться до тех пор, пока не дойдем до адреса,
указанного в точке останова, затем будет обновлен экран и вы сможете проверить
состояние флагов и т.п. после вызова процедуры с адреса #8800 Затем можно
возобновить пошаговый режим. "_К" полезна для выполнения кода без
первоначального сброса стека или без разрушения содержимого регистров, что
делает <J>.

• 13. <L>

Распечатывает блок памяти, начиная с адреса, находящегося в данный момент в

МР.

<L> очищает экран и отображает 16-ричное представление и ASCII
эквиваленты 80 байтов памяти, начиная с текущего адреса, на который указывает
МР. Адреса будут указаны в 16-ричном или десятичном виде, в зависимости от
текущего состояния ФП (см. "_3"). Отображение состоит из 20 рядов по 4 байта в
каждом, ASCII эквиваленты показаны в конце каждого ряда. Применительно к
ASCII от отображения любого значения выше 127 отнимается код 128 и любые
значения между 0...31 включительно показаны как "."

В конце страницы листинга вы можете вернуться к основному отображению
ФП нажатием <EDIT> или продолжать со следующей страницы из 80 байтов
нажатием любой другой клавиши.

• 14. <М>

Заносит в МР определенный адрес. Выдается подсказка ":" на ввод 16-ричного
адреса (см. раздел 1). МР обновляется введенным адресом и соответственно на
экране меняется отображение области памяти.

• 15. <М>

Находит следующее появление строки, определенной в прошлый раз командой
<G>.<G> позволяет вам определить строку и затем осуществить поиск ее первого
появления. Если вы хотите найти следующее появление строки, используйте <N>.
<N> начинает поиск с адреса, указанного в МР и обновляет отображение памяти,
когда искомая строка будет вновь найдена.

• 16. <О>

Команда берет байт, адресуемый в данный момент МР, и представляет его как
относительное смещение, соответственно обновляя отображение.
Например:

Допустим, МР установлен в #6800 и содержимое ячеек #67FF и #6800 равны
#20 и #16 соответственно (это может быть представлено как JR NS,S + 24). Чтобы
выяснить, куда будет переход по ненулевому условию, просто нажмите <O>,тогда
МР адресуется на назначенный байт #16, экран будет обновлен и отобразится
область памяти с #6817, требуемого значения перехода.

Помните, что относительные перемещения выше #7F (127) трактуются
процессором как отрицательные, <0> принимает это в расчет. 1 См. также команду
<U> в связи с <O>.

•17. <Р>

Заполняет память между определенными границами нужным байтом. <Р>
выдает подсказки <FIRST:>,<LAST:>,<WITH:>. Введите 16-ричные числа в
соответствии с этими подсказками (соответственно: начальный и конечный адреса
(включительно) блока, который вы желаете заполнить, и байт заполнитель).

Например: <P>

FIRST: 7 000 <ENTER>

LAST: 7 7FF <ENTER>

WITH: 55 <ENTER>

Ячейки с #7000 по #77FF будут заполнены байтом #55. Если стартовый адрес
больше конечного, то <Р> будет оборвана.

• 18. <Q>

Переключение наборов регистров. На входе ФП отображается стандартный
набор регистров (AF,HL,DE,BC). При использовании <Q> будет отображаться
альтернативный набор регистров (AF^HL^DE'^C), который отличается от
стандартного штрихом '"" после имени регистра. Если <Q> используется, когда
отображается альтернативный набор регистров, то на экран будет выдан
стандартный набор.

• 19. <SYMBOL SHIFT> T

Устанавливает точку останова после текущей инструкции и продолжает
выполнение.

Например:

9000 В7 OR A

9001 С20098 CALL NZ,#9800

9004 010000 LD BC,0

9800 21FFFF LD HL,-1

Вы в пошаговом режиме продвигаетесь по кодам и достигли адреса #9001 с
ненулевым значением в регистре А, так что флаг "ZERO" будет в состоянии NZ
после инструкции OR A.

1—1 v II 1-7 It

Если вы сейчас используете "_Z" для продолжения пошагового режима, то
выполнение продолжится с адреса #9800 подпрограммы. Если вы не желаете
шагать по подпрограмме, то используйте команду "_Т", тогда инструкции с #9800 и
вызов будут пройдены автоматически и выполнение остановится на адресе #9004
для дальнейшего продолжения в пошаговом режиме. Помните, что "_т"
устанавливает точку останова после текущей инструкции и затем использует
команду "_К" (см. команду "_Z" с расширенным примером пошагового прохода).

• 20. <Т>

Дизассемблирование. Дизассемблирует блок кодов на принтер и/или дискету
(по ключу). Сначала выдается подсказка на ввод начального (<FIRST:>) и
конечного (<LAST:>) адресов кодов, которые вы желаете дизассемблировать.
Введите их в 16-ричном виде (как описано в разделе 1).

Если начальный адрес больше конечного, то команда аннулируется. После
ввода адресов выдается подсказка (<PRINTER?>). Для направления результатов
дизассемблирования на принтер отвечайте "Y". При наборе любого другого
символа результат будет выведен на терминал. Затем выдается подсказка <ТЕХТ:>
на ввод 16-ричного начального адреса текстового файла, который будет являться
результатом дизассемблирования. Если вы не хотите, чтобы был сгенерирован
текстовый файл, то просто нажмите <ENTER> после этой подсказки. Если вы
определили адрес то дизассемблированный файл будет получен, начиная с этого
адреса, в форме, пригодной для использования GENS4. Если вы хотите загрузить
этот файл с помощью GENS4, то вы должны заметить его конечный и начальный
адреса, вернуться в BASIC и сохранить текст как файл типа "CODE". Затем вы
можете загрузить код в редактор GENS4 прямо с помощью команды <G>.

Вместо ввода адреса в ответ на <ТЕХТ:> вы можете ввести имя файла на
дискете и на ней текст будет сохранен, как только пройдет дизассемблирование.

Например:

TEXT: 2: DCODE <ENTER>

Результат дизассемблирования будет сохранен на втором дисководе под
именем DCODE. Если вы дизассемблируете на дисковод, то листинг на экран
выдаваться не будет. Файл, полученный на дисководе, является
самозагружающимся с помощью команды <G>. Если на некоторой стадии
генерации текстового файла текст будет перекрывать MONS4, то
дизассемблирование будет прекращено — нажмите любую клавишу для возврата к
ФП.

Если вы определили адрес текстового файла, то вас попросят определить
"WORKSPACE:" — начальный адрес свободной области памяти, которая
используется как примитивная таблица символов для любых меток, которые
производит ассемблер. Требуется по два байта на каждую метку. По умолчанию
(когда вы просто нажимаете <ENTER> резервируется 4К пространства ниже
MONS4). После этого повторно появляются запросы на начальный и конечный
адреса любых областей данных, существующих внутри блока, который вы желаете
дезассемблировать. Области данных — это области, скажем, текста, который вы не
желаете представлять как инструкции Z80 -вместо этих областей дизассемблером
должны быть сгенерированы директивы DEFB.

Если значение байта данных лежит между 32 и 127 (#20 и #7F) включительно,
то дается интерпретация байта в коде ASCII, т.е. #41 заменяется на А после DEFB.
Когда вы закончили определение областей данных, или вы не желаете их
определять, то просто нажмите <ENTER> в ответ на обе подсказки. Команда <Т>
определяет область в конце MONS4 для хранения адресов областей данных и,
таким образом, вы можете определять столько областей данных, сколько позволяет
память. Каждая область данных требует 4 байта пространства. Отметим, что
использование <Т> уничтожает любые точки останова, которые первоначально
были установлены (см. команду W).

Байт после выполнения инструкции RST 8 дизассемблируется как DEF N, т.к.
этот байт собирается ПЗУ SPECTRUM'a и никогда не выполняется.

Экран будет очищен. Если будет запрос на создание текстового файла, то
произойдет короткая задержка (в зависимости от размеров секции памяти,
которую вы хотите дизассемблировать) пока создается таблица символов во время
первого просмотра. Когда это будет сделано, на экране (или принтере) появится
листинг дизассемблирования, если только вы не дизассемблируете на дискету — в
этом случае листинг не производится. Вы можете остановить листинг в конце
строки нажатием <ENTER> или <SPACE> последующее нажатие <EDIT>
возвращает к отображению ФП, любой другой ключ продолжает
дизассемблирование.

Если встречается неверный код, то он дизассемблируется как <NOP> и
отмечается звездочкой после кода в листинге. В конце дизассемблирования
изображение будет приостановлено и, если был запрос на создание текстового
файла, то возникнет сообщение:

END OF THE TEXT XXXXX

Метки генерируются там, где это уместно в форме LXXXX, где ХХХХ —
абсолютный 16-ричный адрес метки, но только если их адреса попадают внутрь
границ дизассемблирования. В противном случае метки не генерируются, а просто
даются 16-рич-ные и десятичные адреса в форме #ХХХХ.

Например, если вы проассемблировали область между #7000 и #8000, то затем
инструкция С30078 может быть дезассемблирована как JP L7800; с другой стороны,
если вы дизассемблируете с #9000 по #9800, то эта же инструкция может быть
дизассемблирована как JP #7800 или JP #30720, если используется десятичное
отображение.

Если особый адрес отнесен к инструкции внутри дизассемблирования, то его
метка появится в поле метки (перед мнемоникой) дизассемблированной
конструкции этого адреса, но только если листинг направляется в файл.
Например:

T

FIRST: 8B <ENTER>

LAST: 9Е <ENTER>

PRINTER: Y <ENTER>

TEXT: <ENTER>

FIRST: 95 <ENTER>

LAST: 9E <ENTER>

FIRST: <ENTER>

LAST: <ENTER>

Может быть произведено нечто подобное:
008В FE16 СР 116

008D 3801 JR C,L0 0 9 0

0 0 8F 2 3 INC HL

0090 37 SCF

0091 225D5C LD (5C5D),HL

0094 C9 RET

0095 BF524E DEFB #BF,"R","H"
0098 С4494У DEFB #C4,"I","N"
009В 4В4559 DEFB " K" ," E" ," Y"
009E A4 DEFB #A4

• 21. <U>

Используется совместно с командой <О>. Помните, что она обновляет
отображение памяти в соответствии с относительным смещением, т.е. показывает
эффект инструкций JR или DJNZ. <U> используется для возврата к отображению,
которое было при последнем использовании <0>.
Например:

7200 А7

7201 20
>7202 F2<

7203 06

КАРТИНКА 1

На вашем терминале — картинка 1 и вы хотите узнать, когда будет
относительный переход 20 F2. Нажмите клавишу <О> и появится картинка 2 —
обновленное отображение памяти.

71F3 77

71F4 С9

>71F5 F5<

71F6 C5

КАРТИНКА 2

Итак, вы нажимаете <0>, и появляется картинка 2. Теперь вы исследуете код
по адресу #71F5 и затем хотите вернуться к кодам, соответствующим
первоначальному относительному смещению для того, чтобы увидеть, что
происходит, если установлен флаг нуля. Нажмите <U>, и отображение памяти
вернется к картинке 1. Отметим, что вы можете использовать <U> только для
возврата к последнему появлению команды <0>, все предыдущие проявления <О>
утеряны.

• 22. <V>

Используется совместно с командой <Х> и подобна команде <U> по эффекту,
с той разницей, что она обновляет отображение памяти на картинку, которая была
перед последней командой <Х>.

Например:

8702 AF

8703 CD

>8704 2F<

8705 44

КАРТИНКА 1

На вашем экране — картинка 1 и вы хотите посмотреть подпрограмму с адреса
#842F. Для этого вы нажимаете <Х>. При данной картинке отображение памяти
обновляется на картинку 2.

842D 18

842Е А2

>842F Е5<

8430 21

КАРТИНКА 2

Вы просматриваете эту подпрограмму, и затем хотите вернуться к кодам
первоначального вызова подпрограммы. Для этого нажмите <V> и вновь появится
картинка 1.

Как в случае с <U>, используя эту команду, вы можете достичь только адресов,
при которых была введена последняя команда <Х>. Все предыдущие адреса, в
которых использовалась команда <Х>, будут утеряны.

• 23. <W>

Установка точки останова. Точка останова для MONS4 — это просто
инструкция вызова внутри MONS4 подпрограммы, которая отображает ФП так,
что программисту дается возможность остановить выполнение программы и
проверить регистры Z80, флаги и любые значащие ячейки памяти.

Таким образом, если вы хотите остановить выполнение программы в #9876, то
используйте команду <W> для установки МР на #9876 и затем используйте <W>
для установки точки основа по этому адресу. 3 байта кода, которые были
первоначально по адресу #9876, заменяются инструкцией CALL, которая
останавливает выполнение, когда на нее выходят. Когда достигается эта
инструкция CALL, то она восстанавливает три первоначальные байта по адресу
#9876 и высвечивает ФП со всеми регистрами и флагами в состоянии, в котором
они находились перед выполнением точки останова. Теперь вы можете
использовать любые возможности MONS4 обычным способом.




СОДЕРЖАНИЕ:


  Оставте Ваш отзыв:

  НИК/ИМЯ
  ПОЧТА (шифруется)
  КОД



Темы: Игры, Программное обеспечение, Пресса, Аппаратное обеспечение, Сеть, Демосцена, Люди, Программирование

Похожие статьи:
Блиц-опрос - интервью с Wild_Сlaus.
Checkout
Les oeuwrez - рассказ "Cмерть".
Intro - Сегодня мы представляем вашему вниманию первый номер нового журнала,посвященного спектрум-тематике.
Вступление - О газете.

В этот день...   3 мая