Справочник по системным программам для компьютера ZX Spectrum 1991 г.

Описание MONS4 - запуск, получение копии, команды.


Н Монитор MONS4

1. Запуск.

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

Пример:

Пусть вы хотите загрузить M0NS4 с адреса #СООО (49152
десятичный).

Для этого выполните следущие операции:

LOAD ""CODE 49152 <ENTER>
RANDOMIZE USR 49152 <ENTER>

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

RANDOMIZE USR 49152 <ENTER>

Монитор MONS4 занимает в ОЗУ приблизительно 6К. Однако
для загрузки MONS4 необходима непрерывная область 7К, т.к. после
основных кодов размещается таблица перемещаемых адресов.

MONS4 содержит собственный внешний стек, так что он явля-
ется самообслуживающейся программой.

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

1.1. Получение копии.

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

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

SAVE *"М", 1, "MONS4"CODE ХХХХХ, 6656 <ENTER> - на
дискету

SAVE *"М", 1, ,,MONS4,,CODE ХХХХХ, 6780 <ENTER> - на
диск OPUS

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

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

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

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

<SYMBOL SHIFT> 3

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

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

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

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

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

2. Команды MONS4.

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

1. <SYMBOL SHIFT> 3 или #

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

2. <SYMBOL SHIFT> 4 или $

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

3. <ENTER>

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

4. Стрелка вверх

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

5. Стрелка влево

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

6. Стрелка вправо

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

7. <,> (Запятая)

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

8. <G>

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

Например:

Пусть необходимо исследовать память, начиная с адреса #80000
на появление образа #ЗЕ #FF (2 байта). Последовательность дейст-
вий должна быть следующей:

M:80000<ENTER> -устанавливает MP

G:3E<ENTER> -определяет 1-й байт строки

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

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

После последнего <ENTER> (или любого не 16-ричного симво-
ла) G начинает поиск с адреса #80000 первого появления #3 #FF.
Когда будет найдена строка, то обновится изображение на Ф.П. Для
поиска дальнейших появлений строки используйте команду N.

9. <Н>

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

Например:

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

10. <1>

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

11.<J>

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

Например:

J:B0000 <ENTER> - выполняет программу с адреса #В0000

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

12. <SYMBOL SHIFT> К

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

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

891Е 3EFF LD А,-1

8920 CD0090 CALL 39000

8923 2А0080 LD HL, (#8000)

8926 7Е LD A, (HL)

8927 111488 LD DE,#8814

892A CD0088 CALL #8800

892D 2003 JR NZABEL

892F 320280 LD (#8002), A

8932 211488 LABEL LDHL,#8814

Действуйте в следующем порядке:

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

13. <L>

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

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

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

14. <М>

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

15. <N>

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

16. <0>

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

Например:

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

Помните, что относительные перемещения выше #7FF (127)
трактуются процессором как отрицательные, принимает это в рас-
чет.

См. также команду <U> в связи с <0>.

17. <Р>

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

Например:

<Р>

FIRST: 7000 <ENTER>

LAST: 77FF <ENTER>

WITH: 55 <ENTER>

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

18. <Q>

Переключение наборов регистров. На входе Ф.П. Отображается
стандартный набор регистров (AF, HL, DE, ВС). При использовании
<Q> будет отображаться альтернативный набор регистров (AFM, HL",

DE", ВС"), который отличается от стандартного штрихом......после

имени регистра. Если <Q> используется, когда отображается альтер-
нативный набор регистров, то на экран будет выдан стандартный
набор.

19. <SYMBOL SHIFT> Т

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

Например:

9000 В7 OR А

9001 С20098 CALL NZ,#9800
9004 010000 LD BC,0
9800 21FFFF LD HL,-1

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

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

20. <Т>

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

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

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

Например:

Техт: 2: DCODE <ENTER>

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

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

После этого повторно появляются запросы на начальный и ко-
нечный адреса любых областей данных, существующих внутри бло-
ка, который вы желаете дизассемблировать. Области данных - это
области, скажем, текста, который вы не желаете представлять как
инструкцию Z80 - вместо этих областей дизассемблером должны быть
сгенерированы директивы DEFB.

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

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

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

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

END OF THE TEXT XXXXX

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

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

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

Например:
Т

FIRST: 8В <ENTER>

LAST: 9Е <ENTER>

PRINTER: Y <ENTER>

Техт: <ENTER>

FIRST: 95 <ENTER>

LAST: 9E <ENTER>

FIRST: <ENTER>

LAST: <ENTER>

Может быть произведено нечто подобное:

008В FE16 CP #16

008D 3801 JR С, L0090

008F 23 INC HL

0090 37 SCF

0091 225D5C LD (5C5D),HL

0094 С9 RET

0095 BF524E DEFB #BF, "R", "N"
0098 C4494E DEFB #C4,TV'NM
009В 4B4559 DEFB "KVEVY"
009E A4 DEFB #A4

21. <U>

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

Например:

7200 А7

71F3

77

7201 20

71F4

С9

7202 F2

71F5

F5

7203 06

71F6

С5

Картинка 1

Картинка2

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

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

22. <V>

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

Например:

8702 AF 842D 18

8703 CD 842Е А2

8704 2F 842F Е5

8705 44 8430 21

Картинка 1 Картинка 2

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

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

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

23. <W>

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

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




СОДЕРЖАНИЕ:


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

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



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

Похожие статьи:
From Internet - о "небезопасной" жизни пользователей незарегистрированных модемов.
Навезли новья - Обзор новинок ПО: Chainick: Horror in Flat.
Жизнь вне спектрума - продолжение рассказа РУЛЕЗНИКИ (часть 5).
Таланты - Записки сумасшедшего СисОпа.
FIDO rulez! - пусть духовного апргрейда до уровня фидошника.

В этот день...   28 апреля