Игровые программы 1989 г.

Системные программы - описание MONS4.


16. M0NS4
Раздел 1. Запуск

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

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

Пример:

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

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

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

RANDOMIZE USR 49152 <ENTER>

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

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

Раздел 2. Получение копии

Загрузив M0NS4 в память Вашего SPEKTRUMa, Вы можете

сделать копию, проделав следующие операции:

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

SAVE *"M",1,"M0NS4" CODE ХХХХХ.6656 <ENTER> - на дискету
SAVE *"М",1,"MQNS4" CODE ХХХХХ,6780 <ENTER> - на диск OPUS,

где ХХХХХ - адрес, с которого Вы загрузили M0NS4.

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

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

<SIMBOL SHIFT> 3 ,

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

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

"^Z" означает нажатие (SIMBOL SHIFT) и клавиши "Z" вместе

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

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

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

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

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

Раздел 3. Команды М О N S 4

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

1. (SIMBOL SHIFT) 3 _или_ #

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

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

2. (SIMBOL 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 байта).
Последовательность действий должна быть следующей:

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

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

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

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

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

9. <Н>

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

Например:

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

10. <1>

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

11. <J>_

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

Например:

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

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

12. <SIMBOL SHIFT> К

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

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

89IE 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 NZ<LABEL
892F 320280 LD (#8002),A
'8932 211488 LABEL LD HL,#8814

Действуйте в следующем порядке:
установите точку останова, используя W, по ^ адресу #892D
(напомним, что сначала нужно использовать для установки

MP) и затем введите команду Выполнение будет

продолжаться с адреса, который находится в счетчике адресов
(PC). В нашем случае это #8920. Выполнение будет
продолжаться до тех пор, пока не дойдем до адреса,указанного
в точке останова,затем будет обновлен экран и Вы сможете
проверить состояние флагов и т.п. После вызова процедуры с
адреса #88000. Затем можно возобновить пошаговый режим. ,/чК"
полезна для выполнения кода без первоначального сброса стека
или без разрушения содержимого регистров, что делает <J>.

13. <L>

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

<L> очищает экран и отображает 16-ичное представление и

ASCII эквиваленты. 80 байтов памяти, начиная с текущего
адреса, на который'указывает MP. Адреса будут указами в
16-ичном или 10-ичном виде в зависимости от текучего
состояния Ф.П. (см. Отображение состоит из 20 рядов

по 4 байта в каждом, ASC11 эквиваленты показаны в конце
каждого ряда, применительно к ASCII от отображения любого
значения выше 127 отнимается код 128 и любые значения между
0...31 Включительно показаны как ".".

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

14. <М>

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

15. <N>

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

16. <0>

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

Например,

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

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

См. Также команду <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,ВС). При
использовании <0> будет отображаться альтернативный набор
регистров (AF ,HL , DE', ВС'), который отличается от
стандартного штрихом " ' " после имени регистра. Если <Q>
используется, когда отображается альтернативный набор
регистров, то на экране будет выдан стандартный набор.

19. <SIMBOL SHIFT)_T_

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

Например:

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 для^дальнейшего продолжения в пошаговом режиме.
Помните, что "ЛТ" устанавливает точку останова после текущей
инструкции и затем использует команду "ЛК" (см. команду ,/4Z"
с расширенным примером пошагового прохода).

20. <Т>

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

Если начальный адрес больше конечного, то команда
аннулируется. После ввода адресов выдается подсказка
<PRINTER?>. Для направления результатов дизассемблирования

на принтер отвечайте "Y". При наборе любого другого символа
результат будет выведен на терминал.

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

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

Например:

TEXT: 2: DSODE <ENTER>

Результат дизассемблирования будет сохранен на 2-м
дисководе под именем DCODE. Если Вы дизассемблируете на
дисковод, то листинг на экран выдаваться не будет. Файл,
полученный на дисководе, является самозагружающимся с
помощью команды <G>. Если на некоторой стадии генерации
текстового файла текст будет перекрывать MQNS4, то
дизассемблирование будет прекращено - нажмите любую клавишу
для возврата к Ф.П. Если Вы определили адрес текстоаого
файла, то Вас попросят определить "WORKSPACE:" - начальный
адрес свободной области памяти, которая используется как
примитивная таблица символов для любых меток, которые
производит дизассемблер. Требуется по два байта на каждую
метку. По умолчанию (когда Вы просто нажимаете <ENTER>)
резервируется 4К пространства ниже MDNS4.

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

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

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

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

производится. Вы можете остановить листинг в конце строки
нажатием <ENTER> или <SPACE>, последующее нажатие <ЕШТ>
возвращает к отображению Ф.П., Любой другой ключ продолжает
дизассемблирование.

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

END OF THE TEXT ХХХХХ

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

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

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

Например'

Т

FIRST: 8В <ENTER>

LAST: 9Е <ENTER>
PRINTER: Y <ENTER>

TEXT: <ENTER>

FIRST: 95 <EHTEP>

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 C9 RET

0095 BF524E DEFB #BF,"R","N"
0098 C4494E DEFB #С4,"Г','ЧГ
009В 4B4559 DEFB "K'V'E'V'Y"
009E A4 DEFB #A4

21. _<U>_

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

Например:

7200 U7 71F3 77

7201 20 71F4 С9
>7202 F2< >71F5 F5<

7203 06 71F6 C5

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

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

Итак, Вы нажимаете <о>, и появляется картинка 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>

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

Таким образом, если Вы хотите остановить выполнение
программы в #9876, допустим, «то используйте команду <М> для
установки MP на #9876 и затем используйте <У>для установки
точки останова по этому адресу, 3 байта кода, которые были
первоначально по адресу #У87ь, заменяются инструкцией CALL,
которая останавливает выполнение, когда на нее выходят.
Когда достигается эта инструкция CALL, то она

восстанавливает 3 первоначальные байта по адресу #9876 и
высвечивает Ф.П. Со всеми регистрами и флагами в
состояниии.в которой они находились перед выполнением точки
останова. Теперь Вы можете использовать любые возможности
MDNS4 обычным способом.

Замечания по использованию
точек останова:

Когда встречается точка останова, M0NS4 будет выдавать
звуковой сигнал и ожидать Вашего нажатия клавиши перед
возвратом к Ф.П. MDNS4 использует область в конце самого
себя, которая первоначально содержит перемещаемые адреса для
сохранения информации о точках останова. Это означает, что
Вы можете установить столько точек останова, сколько
позволит память. Каждая точка останова требует 5 байтов
памяти. Когда останов произошел, M0NS4 автоматически
восстанавливает значения памяти, которые существовали до
этой точки останова.

Отметим, что команда <Т> использует эту область, поэтому
при работе команды <Т> все точки останова потеряются. Точки
останова могут быть установлены только в ОЗУ. Т.к. точка
останова состоит из трехбайтовой инструкции, то в
определенных случаях необходимо проявить

предусмотрительность,

например: предполагаемый код:

8000 ЗЕ 8008 00

8001 01 8009 00

8002 18 800А 06

8003 06 800В 02
>8004 AF< >800С 18

8005 0Е 800D F7

8006 FF 800Е 06

8007 01 800F 44

Если Вы установили точку останова по #8004 и затем
начали выполнение с ячейки #8000, то регистр а будет
загружен значением 1, выполнение переместится на #800А,
регистр В загрузится значением 2 и выполнение переместится
на #8005. Но в #8005 помещается младший байт вызова точки
останова и, таким образом, мы испортим код и появятся
непредсказуемые результаты. Эта ситуация нетипична, но Вы
должны оградить себя от нее - в этом случае единственный
выход - использовать пошаговый проход (см. команду ниже

с подробным описанием пошагового прохода).

24. <Х>

Используется для обновления MP по назначению абсолютного
вызова подпрограммы или по инструкции JP. <Х> берет
16-разрядный адрес, определяемый байтом, на который
указывает MP, и байтом HR+1, и затем обновляет отображение
памяти на экране таким образом, что отображаются
адреса,близлежащие к данному адресу. Помните, что младшая
половина адреса определяется первым байтом, а старшая
вторым (формат INTEL).

Например, Вы хотите посмотреть подпрограмму, которая

вызывается кодом CD0563. Установите MP (используя <М>) так,
что он адресует к коду 05 внутри инструкции вызова и нажмите
<Х>. Отображение памяти будет обновлено и отобразятся ячейки
с адресами, близкими к #6305 (см. также команду <V>).

25. <Y>

Ввод ASCII. <Y> дает Вам новую строку, которую Вы
можете ввести символами ASCII прямо с клавиатуры. Эти
символы попадают на эхо-печать и их 16-тиричные эквиваленты
вводятся в память, начиная с текущего значения MP. Строка
символов должна заканчиваться <EfilT>. <DELETE> (<CAPS SHIFT>
0) может быть использована для удаления символов из строки.

Когда Вы закончите ввод символов ASCII (и введете
<EDIT>), то экран обновится и MP спозиционируетея на конец
строки, введенной в память.

26. _<SIMBOL_SHIFT> _Z__

Перед использованием (или рс должен быть

установлен на адрес инструкции, которую Вы хотите выполнить.

просто выполняет текущую инструкцию и обновляет
Ф.П., чтобы отобразить изменения, вызванные выполнением
инструкции.

Отметим, что пошаговый режим возможен в любом месте
карты памяти (и в ОЗУ, и в ПЗУ) но не возможен во внешнем
ПЗУ.

Далее следует расширенный пример, который пояснит
действие многих команд отладчика MDNS4. Вы должны их
внимательно изучить и постараться выполнить самостоятельно.

Рабочий пример*.

Давайт предположим, что у нас в машине есть 3 секции
кода, приведенного ниже, первая секция - главная программа,
которая загружает HL и DE числами и затем вызывает
подпрограмму для их перемножения (вторая секция) с
результатом в HL и затем дважды вызывает подпрограмму для
вывода результата умножения на экран (3-я секция). Текст
секций

7080 2А0072 LD HL,(#7200)

7083 ED5B0272 LD DE.(#7202)

7087 CD0071 CALL MULT

708A 7C LD A,H

708B CD1D71 CALL AOUT

708E 7D LD A,L

708F CD1D71 CALL AOUT

7092 210000 LD HL,0

7100 AF MULT XDR A

7101 ED52 SUC HL.DE

7103 19 ADD HL.DE

7104 3001 JR NC.MU1
7106 EB EX DE,HL

7107 В2 MU1 OR D

7108 37 SCF

7109 C0 RET NZ

710A B3 OR E

710B 5A LD E,D

710C 2007 JR NZ,MU4

710E EB EX DE,HL

710F C9 RET

7110 EB MU2 EX DE.HL

7111 19 ADD HL.DE

7112 EB EX DE,HL

7113 29 HU3 ADD HL ,HL

7114 D8 RET С

7115 IF MU4 RRA

7116 30FB JR NC.MU3

7118 B7 OR A

7119 20F5 JR NZ.MU2
71IB 19 ADD HL.DE
7 НС C9 RET

71 ID F5 AOUT PUSH AF

71 IF 0F RRCA

71 IF 0F RRCA

7120 0F RRCA

7121 0F RRCA

7122 CD671 CALL NIBBLE

7125 F1 POP AF

7126 E60F NIBBLE AND XI111
7128 C690 ADD A. #90
712 A 27 DAA

712В CE40 ADC A.#40

712D 27 DAA

712E FD213A5C LD IY,#5C3A

7132 D7 RST #10

7133 C9 RET

7200 1B2A DEFW 10779

7202 033A DEFW 3

Теперь мы хотим исследовать вышеприведенный код. Сделаем
это со следующим набором команд. Отметим, что пошаговый

режим - это просто один из способов, он не достаточно
эффективен, но весьма иллюстративен:

М: 7080 <ENTER> установить MP на #7080 I

7080 установить PC на #7080 I

простой шаг
простой шаг

"Z простой шаг

следует вызов CALL
M:7ii5 <ENTER> проЬуск предподготовки чисел

W установка точки останова

ЛК продолжить с #7100 до останова

простой шаг

~Z простой шаг

^Z простой шаг

^Z простой шаг

простой шаг

^Z простой шаг

^Z возврат из подпрограммы умножения

простой шаг
следует вызов CALL

М:7128 <ENTER> установка MP на нужный байт

W установка точки останова

продолжить с #711D до останова
простой шаг
простой шаг

^Z простой шаг

^Z простой шаг

f просмотр адреса возврата

W установка там точки останова

^К продолжение

W

Пожайлуйста, проработайте этот пример, сначала введите
код подпрограммы (см. модификация памяти) - можно
использовать GENS4, и затем выполните команды, приведенные
выше. Вы высоко оцените пример в качестве иллюстрации того,
как пройти по программе.

27. <SIMBOL SHIFT> Р

Эта команда аналогична LIST, но вывод вместо экрана
идет на принтер. Помните, что в конце страницы Вы нажимаете
<EDIT> для возврата к Ф.П. Или любую другую клавишу для
получения другой страницы.

28. Модификация памяти

Значение ячеек по адресам, которые дает MP, могут быть
модифицированы вводом 16-ичного числа, за которым следует
ограничитель (см. раздел 1). Две последние 16-ичные цифры
(если одна, то она дополняется нулем) вводятся в ячейку, на
которую указывает MP, и затем команда (если она есть),
определенная ограничителем, выполняется. Если ограничивается
незначащая команда, то она игнорируется.
Например:

F2 <ENTER> #F2 вводится и МР:=МР+1

123 <CAPS SHIFT> 8 #23 вводится и МР:=МР+8
ЕМ:Е00_ #Е0 вводится в текущую ячейку

и затем МР:=#Е0. Пробел огра-
ничивает команду "И"

8С0 #8С вводится и MP обновляется

(т.к. использована команда
"О" для назначения относи-
тельного смещения #8С)
2A5D— #5D вводится и MP не меняется,

т.к. ограничитель - пробел, а
не команда.

Если 16-ичное число вводится в ответ на подсказку и ог-
раничивается точкой, то введенное число будет занесено в те-
кущий регистр Z80, адресуемый стрелкой.

На входе MDNS4 стрелка ">" указывает на PC, и исполь-
зование Как ограничителя 16-ичного числа, будет модифи-
цировать PC. Если Вы хотите изменить другие регистры, то ис-
пользуйте точку саму, а не как ограничитель числа, указатель
">" будет циклически указывать регистры от PC до AF. Отме-
тим, что невозможно адресовать и изменять SP или IY регист-
ры.

Например, предположим, что ">" первоначально указывает
на PC:

Указывает на IY
Указывает на IX
0. Устанавливает IX В 0

Указывает на HL
123. HL:=#123

Указывает на DE
Указывает на ВС
Е2А7 ВС:=#Е2А7

Указывает на AF
FF00 AF:=#FF и сбрасывает все флаги

Указывает на PC
8000. PC:=#8000

Отметим, что точка также может исползоваться для моди-
фикации адреса альтернативного набора регистров, если он
отображается. Используйте команду "Q ' для переключения набо-
ра регистров.

Пример отображения

Фронтальной панели

710С 2007 JR NZ,#7115

>РС 710С 20 07 ЕВ С9 ЕВ 19 ЕВ
SP D0AF 8А 70 06 03 0А 03 0D
IY CF6A 0D 11 0С 0F 09 18 18
IX D09F 04 03 04 00 00 00 1В
HL 2А1В DF FE 29 28 02 CF 02
DE 0000 F3 AF 11 FF FF СЗ СВ
ВС 0004 FF СЗ СВ 11 2А 5D 5С
AF 0304 >
IR 3F7C ON

7100 AF 7108 37 7110 ЕВ

7101 ED 7109 С0 7111 19

7102 52 710А ВЗ 7112 ЕВ

7103 19 710В 5 А 7113 29

7104 30 >710С 20< 7114 D8

7105 01 710D 07 7115 1F

7106 ЕВ 710F С9 7117 FB

7107 В2 710F С9 7117 FB

>

Выше показано типичное изображение Ф.П. (одно из изобра-
жений, полученных при пошаговом проходе по п/п MULT в приме-
ре использования команды Z.

Первые 9 строк изображения содержат 9 регистров, сначала
- имя регистра <от PC до IR>, затем <для PC...ВС> - значения
содержимого регистров, и затем - содержимое 7 ячеек памя-
ти, начиная с адреса, находящегося в регистре.

Регистр флагов декодируется, чтобы показать текущие зна-
чения битов флагов, установленных так, как они используются
внутри регистра. Если регистр флагов установлен в #FF, то за
отображением имени AF будет следовать:

00FF С2 Н UNS ,

т.е. знак, ноль полуноситель, паритет/переполнение, сло-
жить/вычесть и будут установлены все флаги носителей. Справа
от регистров IR находятся слова ON или OFF, которые показы-
вают текущее состояние внешних прерываний. Указатель регист-
ров ">" указывает на регистр, который адресуется в данный
момент (см. раздел 2).

24 Байта памяти отображаются ниже отображения регистров.
Отображение состоит из адреса (2 байта,4 символа),за которым
следует значение (1 байт, 2 символа) памяти по этому адресу.
Отображение размещено вокруг текущего значения MP, указывае-
мого ">".

Команды вводятся вверху экрана в ответ на подсказку ">".
Отображение обновляется после каждой отработанной команды.

ВНИМАНИЮ ТОРГУЮЩИХ ОРГАНИЗАЦИИ И ГРАЖДАН!

МАЛОЕ ГОСУДАРСТВЕННОЕ ПРЕДПРИЯТИЕ
«АВТОМАТ» ПРЕДЛАГАЕТ:

Бытовые компьютеры (аналог «Спектрума») различной кон-
фигурации (цветной монитор, магнитофон, джойстик, дисковод
и т. д.) по ценам от 1000 до 4000 рублей.

Большой выбор игровых и обучающих программ, техниче-
ская литература — 10 книг.

Поставки осуществляются по прямым договорам.

РАДИОЛЮБИТЕЛЯМ:

Высылаем различные наборы для самостоятельной сборки
компьютеров.

ЗАКАЗЫ ВЫСЫЛАЮТСЯ НАЛОЖЕННЫМ ПЛАТЕЖОМ.

НАШИ ЦЕНЫ НЕ КУСАЮТСЯ!

Адрес: 302000, г. Орел, ул. Октябрьская, 29, комн. 24.

Телефон: 6-24-53.

ПРЕДЛАГАЕТ МИИП «ПОИСК»

МИИП «Поиск» по Вашим заказам издаст газеги, буклеты,
афиши, брошюры, книги, другую полиграфическую продукцию-
улучшенного качества, создаст согласно вашим пожеланием
рекламу и разместит ее в любых советских газетах и журналах,
а также в различных зарубежных изданиях.

МИИП «Поиск» распространяет книжную продукцию по-
вышенного спроса во многих областях европейской части СССР.

Принимаем заказы на поставку партий книг трудовым кол-
лективам, организациям книголюбов.

Быть партнером МИИП «Поиск» выгодно для любого изда-
тельского предприятия.

Наш адрес: 302035, г. Орел, ул. Октябрьская, 35, ком. 2—15.

Телефон: 6-77-97.




СОДЕРЖАНИЕ:


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

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



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

Похожие статьи:
С битой по миру - прикладная статья в помощь начинающим авторам, служителям пера и чернил (о том какие бывают виды статей и как их правильно писать).
Итоги - неофициальные предварительные итоги ENLIGHT'97.
События - Кубок Марьяжа - 97.
Di:Нalt:Suxx - Нy чтo, пиплы, интeрecнo пoчитaть кaк прoшeл DН99. А вoт и в пaдлy mнe пиcaть кaк вce ЭТO meдлeннo пoгрyжaлocь в фeкaлии...
Сплетни SCEN'ы - Новости.

В этот день...   21 ноября