SPECTRUM - MONITOR
SPECTRUM-MONITOR
— это мониторная программа для ввода в машинных кодах и отладки с расширенными
возможностями, включающая в себя дизассемблер и предназначенная для
программирования компьютера ZX-SPECTRUM в машинных
кодах, без необходимости использовать какие-либо команды Бейсика.
Монитор позволяет свободно
обмениваться с Бейсиком и построен так, чтобы подпрограммы в машинных кодах
могли запускаться как из Бейсика, так и из монитора и чтобы монитор был
доступен в любой момент без изменения стека. Допустим любой ввод с клавиатуры и
при этом невозможно повредить компьютер. Программа кассета, прилагаемая к этой
книге, содержит две версии монитора: одна для SPECTRUM 16K,
другая — для SPECTRUM 48K, вы можете использовать
любую.
Монитор занимает чуть больше 4К
памяти у ее вершины и не может перемещаться. При загрузке в ваш SPECTRUM RAMTOP автоматически устанавливается под монитором
и должна быть только смещена книзу. Другими словами, если вы используете
правильную версию для размера памяти вашего компьютера, вы сможете сместить RAMTOP еще ниже, чтобы образовалось пространство для ваших
собственных программ в машинных кодах. Но монитор занимает 4К памяти непосредственно
перед UDG — области ОЗУ. Если вы загружаете версию 16K
в SPECTRUM 48K, можно использовать память под монитором,
но если вы смещаете RAMTOP выше монитора, то вы
подвергаетесь риску повреждения мониторных подпрограмм командами Бейсика.
Загрузка монитора
Подключите ваш компьютер к
магнитофону и телевизору, введите LOAD "MONITOR 16",
или LOAD "MONITOR 48", или LOAD
" ". Включите воспроизведение магнитофона и нажмите клавишу "ENTER".
Доступ
к монитору.
Если монитор успешно загружен, он
автоматически размещается в правильном участке памяти, устанавливает RAMTOP под собой и высвечивает сообщение об этом на дисплее.
Для доступа к монитору адресуйтесь
к нему в зависимости от его версии, в
RANDOMIZE USR
30479 (для 16K) RANDOMIZE USR 63247 (для 48K). Таким образом вы можете в любой момент обратиться к монитору
из Бейсика,при этом в нижней части экрана, в дополнение к прежде написанному,
появится сообщение: PRESS BREAK FOR MONITOR.
После нажатия клавиши BREAK экран очищается и курсор помещается в нижней части
экрана. Монитор использует свой собственный внутренний стек, делая его
недоступным для ваших программ.
Это положение будет подробно
рассмотрено ниже.
Приглашение и курсор
Приглашение (>) указывает, что монитор готов к приему
команды. Оно не появляется на экране в начале каждой строки, но появляется
тогда, когда команда выполнена и монитор ожидает ввода новой команды. Мигающий
курсор виден почти всегда и указывает место ввода новой команды или место
последующего вывода.
Команды монитора
М —
MEMORY —выводит адрес ячейки памяти, ее
содержимое и может изменить его.
Х —
ESCAPE — выводит из командного режима к
началу монитора, действует на все командные режимы, кроме R
и К.
А —
AREA — перемещает область ОЗУ в новое место.
F — FILL —заполняет обозначенную
область ОЗУ обозначенным значением байта.
1 —
INSERT —вставляет до 255 байт в программу,
написанную в машинных кодах.
D — DELETE — стирает до 255 байт из
программы, написанной в машинных кодах.
J — JUMP —переходит на указанный
адрес и там начинает выполнение программы.
В —
BREAKPOINT — устанавливает адрес останова в
программе, написанной в машинном коде, с возвращением управления монитору.
К —
CODES — восстанавливает коды после
прохождения останова.
R — REGISTERS — высвечивает содержимое
регистров процессора.
С —
CONTINUE — продолжает выполнение программы
после останова.
Y — RETURN —возвращение к Бейсику.
Р —
PRINTER —печать на принтере в НЕХ-виде.
$ — DOLLAR — ввод текста.
Z — Z80 —дизассемблирует любую
область памяти в мнемонике Z80 на экране и принтере.
N —
NUMBER — превращение чисел
HEX-DEC или DEC-HEX.
. ,
Все команды выполняются после
однократного нажатия на клавишу. Все команды проверяются на правильность, и в
любой момент только разрешенные команды принимаются монитором, нажатие любой
другой клавиши отвергается и клавиатура опрашивается снова.
Все численные вводы и выводы делаются в НЕХ-виде для
облегчения ввода кодов Z80. Подпрограмма превращения чисел упрощает доступ к
НЕХ-адресам.
Внимание! Все обращения к
адресам и их содержимому в этой инструкции будут в НЕХ-виде и приводятся
в виде дву- или четырехзначных чисел, без суффикса "Н".
Далее, каждая команда будет
разобрана подробно, с примерами для разъяснения ее действия.
М — после ввода команды
нужно ввести адрес необходимой ячейки памяти (ОЗУ или ПЗУ). После ввода
четвертой цифры адреса "НА" справа от него появится значение ячейки:
>М6000 00
после этого можно изменить содержимое ячейки, например, на FF
>М6000 00 FF
как только введена вторая НЕХ-цифра, содержимое
ячейки изменилось. Теперь нажмите "ENTER":
М6000 00 FF
6001 00
Монитор выводит адрес следующей ячейки и ее содержимое,
выйти из режима "М" можно только нажав клавишу "X".
Х — команда позволяет выйти из командного режима и возвращает
вас к подпрограмме монитора, опрашивающей клавиатуру. Этой командой вы можете
прервать выполнение любой команды, кроме "R" и "К".
I —
команда позволяет вставить до 255 байт в любое место вашей программы, сдвигая
конечную часть программы на соответствующее число байт. Формат команды:
I АААА ВВВВ NN. где I — команда
INSERT, АААА — начальный адрес вставки, ВВВВ — исходный адрес конца
смещаемого блока, NN — количество вставляемых байт.
Пример:
6000 01
6001 02
6002 03
6003 04 / место, в которое надо вставить 5 байт
6004 05
6005 06
6006 07
6007 08
6008 09
6009 0А 600А 0В 600В 0С
конец программы
Вводим команду:
>I 6004 600В
05
D —
команда имеет действие, противоположное INSERT. Формат:
D АААА ВВВВ NN параметры команды аналогичны команде INSERT.
А — команда перемещает указанную область ОЗУ и имеет
форму:
А АААА ВВВВ СССС
АААА — начальный, ВВВВ — конечный исходные адреса смещаемой
области, СССС — новый начальный адрес. Эта команда смещает заданную область
памяти в любом направлении, даже если новая область накладывается на исходную.
Исходная область памяти сохраняется, если она не переписана в результате
перемещения.
F — эта команда позволяет заполнить
произвольную область памяти произвольным значением. Формат команды:
F АААА ВВВВ XX
АААА, ВВВВ — начальный и конечный адреса указанной области,
XX — вводимое значение.
Y —
над клавишей "Y" напечатана команда "RETURN", и после нажатия этой клавиши и клавиши "ENTER", когда на нижней строке экрана появится
приглашение и курсор, происходит возвращение в Бейсик. Теперь вы можете
использовать любую клавишу BASIC. Поскольку этот
монитор не имеет собственных команд "SAVE" и "LOAD", вы можете воспользоваться командой
"Y" для использования "SAVE" и "LOAD" из Бейсика. Если, вернувшись в Бейсик, вы
снова захотите обратиться к монитору, используются следующие адреса с функцией URS, в зависимости от версии монитора:
версия 16К:
RANDOMIZE USR 30479
версия 48К:
RANDOMIZE USR 63247
В — позволяет вам временно прервать выполнение программы в
машинных кодах в любой точке и вернуть управление монитору, так что вы можете
проверить содержимое регистров процессора, ОЗУ и сделать исправление при
необходимости. Формат команды:
В АААА
АААА — адрес останова (АААА должен быть первым байтом
многобайтной команды). Коды трех адресов АААА, АААА+1, АААА+2 автоматически
сохраняются в байтах данных внутри монитора, а эти ячейки загружаются
командами:
CD 0F F1 (для версии 48К)
CD 0F 77 (для версии 16К) что является обращением к
монитору.
J — команда позволяет запустить любую вашу программу.
J АААА
АААА — начальный адрес вашей
программы. Команда начинает свое действие с очистки экрана.
К — эта команда восстанавливает правильное значение в
трех байтах, переписанных командой BREAKPOINT. Только один BREAKPOINT можно вводить одновременно. Поскольку имеется
место только для одного адреса и трех байтов данных, восстанавливающая команда
"К" должна быть выполнена до сле-дующего BREAKPOINT.
Рекомендуется вводить восстанавливающую команду непосредственно после BREAKPOINT.
Но если вы ввели командой "В" неправильный BREAKPOINT, немедленно наберите "К" для
восстановления адресов, затем введите BREAKPOINT.
Команда "К" может восстановить только последний
BREAKPOINT.
R —
выводит содержимое всех регистров Z80 на экран.
С — позволяет продолжить работу после BREAKPOINT и выполняется нажатием "С" и "ENTER". Вы можете войти в монитор, набрав
"X" и "ENTER". Запущенная команда
будет продолжаться, как будто BREAKPOINT не было.
Экран очищается, восстанавливаются программный стек и регистры процессора из
своих блоков данных до введения адреса возврата в программный счетчик и
исполнение возобновляется.
Р — команда вывода содержимого памяти на
SINCLIAR PRINTER. Формат команды:
Р АААА ВВВВ
АААА, ВВВВ — начальный и конечный адреса для вывода.
$ — действует таким же образом, как и "М", и
позволяет вводить текст прямо с клавиатуры. Формат команды:
$ АААА
АААА — начальный адрес текстового блока. До момента введения
последней цифры адреса команда "X" может вернуть вас в монитор. Но
после ввода адреса эта команда будет отличаться. Поскольку вам может
понадобиться ввести "X" как символ, она не может использоваться для
команды прерывания.
Поэтому, только в этом случае, функция прерывания выполняется
вводом "STOP" ("SIMBOL SHIFT" и
"А"). Слово "STOP" будет
напоминать, на какую клавишу нажать. С помощью "CAPS
SHIFT" и "SIMBOL SHIFT" можно
вводить любые символы, исключая $. Графика, UDG и
команды, вводимые в режиме "EXTEND MODE", не
могут вводиться непосредственно. Инвертированные символы образуют доступ к
областям памяти, содержащим атрибуты. Другими словами, любой символ, написанный
на самой клавише и доступным одному нажатию клавиши
или одному уровню сдвига, может быть введен. Любой символ,
вводимый в режимах клавиатуры "G" или
"Е", может быть введен с использованием команды "М",
вводящей НЕХ-код символа.
Z — эта команда дизассемблирует
любую часть ОЗУ или ПЗУ, с выводом только на экран, или на экран и принтер. Распечатка
включает НЕХ-адрес первого байта команды, НЕХ-зна-чения байтов, относящихся к
этой команде, и мнемонику Z80 для этой команды. Формат
команды:
Z AAAA ВВВВ
АААА, ВВВВ — начальный и конечный адреса части памяти,
которую вы хотите дизассемблировать.
N — эта команда превращает HEX-DEC
или DEC-HEX. После ввода команды на экране появится:
NUMBER H/D ?
Необходимо ответить, какое число превращаем. НЕХ-числа
должны быть четырехзначными.
Приложение
Регистры Z80
16К
|
48К
|
REG
|
7F3D
|
FF3D
|
R
|
7F3E
|
FF3E
|
I
|
7F3F
|
FF3F
|
F'
|
7F40
|
FF40
|
А'
|
7F41
|
FF41
|
С'
|
7F42
|
FF42
|
В'
|
7F43
|
FF43
|
Е'
|
7F44
|
FF44
|
D-
|
7F45
|
FF45
|
L'
|
7F46
|
FF46
|
Н'
|
7F47
|
FF47
|
F
|
7F48
|
FF48
|
А
|
7F49
|
FF49
|
С
|
7F4A
|
FF4A
|
В
|
7F4B
|
FF4B
|
Е
|
7F4C
|
FF4C
|
D
|
7F4D
|
FF4D
|
L
|
7F4E
|
FF4E
|
Н
|
7F4F
|
FF4F
|
IX(LOW)
|
7F50
|
FF50
|
IX(HIGH)
|
7F51
|
FF51
|
IY(LOW)
|
7F52
|
FF52
|
IY(HIGH)
|
7F53
|
FF53
|
SP(LOW)
|
7F54
|
FF54
|
SP(HIGH)
|
7F55
|
FF55
|
PC(LOW)
|
7F56
|
FF56
|
PC(HIGH)
|