Часть 2. Монитор-Отладчик
_2.1. Строение экрана
Экран теневого монитора разбит ш нэп* функционально законченных
подэкранов, каждый из которых предназначен для индикации своих, строго
определенных функций. Слева вверху отображается содержимое регистров
микропроцессора, «застигнутое» в момент входа в теневой монитор. Следом
за ними располагаются 4 байта «дамга по регистрам» - содержимое ячеек
памяти, адресуемой соответствующим регистром. Для регистра F приводится
«раскладка» по флагам. Ниже располагается служебная информация: состо-
яние прерываний (INT- включены ОРЧ или выключены OFF), конфигу-
рация памяти компьютера - номера банков ПЗУ (ROM) и ОЗУ (RAM>. но-
мер текущего экрана (SCR).
В верхнем окне справа реассемблер текущей (указываемой регистром PC
и выделенной желтой полоской) и четырех следующих команд.
Непосредственно под реассемблером команд расположено окно, предназ-
наченное для отображения служебной информации. Сразу после включения
в нем отображается состояние монитора (см. команду SHOW на стр. 24).
В нижней части экрана монитора приведены 64 ячейки дампа памяти.
Каждая строка дампа начинается с адреса первой в строке ячейки памяти,
далее следуют восемь значений в шестнадцатиричном виде, а затем те же
восемь значений в виде ASCII символов. В поле шестнадцатиричных симво-
лов выводится курсор, состоящий из угловых скобок (> < ), показывающий
так называемую текущую ячейку памяти. Эта ячейка (mem) служит исход-
ной точкой для большинства команд монитора. Над дампом памяти справа
выдается реассемблер команды из текущей ячейки.
Нижние две строки предназначены для сообщений монитора (см. прило-
жение А «Сообщения монитора» на стр. 37) и ввода команд. Сообщения вы
водя I см на иерхней голубой строке, а команды монитора набираются в строч-
ном редакюре в самой нижней строке экрана.
_2.2. «Горячие» клавиши
Для увеличения производительности некоторые часто выполняемые ко-
манды не вводятся в редакторе, а выполняются простым нажатием на какую-
нибудь клавишу. Такие клавиши называются «горячими». Ниже приводится
их полный список.
Следутие шесть команд дают возможность перемещаться по дампу
памяти:
SS/Q на один байт влево;
SS/E на один байт вправо;
SS/W на одну строку вверх;
SS/S на одну строку вниз;
SS/A на следующую команду (если команда не выполняется);
SS/G переход на адрес, содержащийся в команде, расположенный в те-
кущей ячейке памяти. Переход происходит для команд адресующих
непосредственные ячейки памяти, например, JP addr, JR addr, CALL
addr, LD A (addr).
SS/D Быстрый вход в команду DASM (см. стр. 20).
SS/F Продолжение поиска в памяти, см. команды FIND и SEARCH (иа
стр. 19).
CS/1 (EDIT) Прерывание выполнения команд монитора. Этой клавишей
можно прервать действие таких команд, как HELP, DISS, DUMP.
Следующие программы служат для выполнения команд отлаживаемой
программы (подробнее см. раздел 2.4.8. «Трассировка программы» на стр. 23):
SS/3 выполнение программы, указанной регистром PC;
SS/4 выполнение команды с быстрым выполнением подпрограмм;
SS/9 пропуск программы, содержание регистра PC увеличивается на
длину текущей команды (сама команда не выполняется).
_2.3. Редактор команд
Команды монитора вводятся и редактируются в строчном редакторе
внизу экрана. Редактор поддерживает два режима работы - вставки и заме-
ны. В режиме вставки набираемые символы вставляются в текст перед кур
сором - мигающим прямоугольником. В режиме замены символы вводятся на
место курсора, который принимает вид мигающего квадратика. Переключа-
ется режим вставки/замены клавишей SS/1.
Строчные символы вводятся простым нажатием на клавиши,
прописные - совместно с клавишей CS, либо после фиксации клавишей
CS/2.
Для перемещения по строке используются клавиши », SS/5 (на
символ влево) и SS/8 (на символ вправо). Редактировать строку можно
с помощью клавиши CS/0 (DELETE), которая удаляет символ перед курсо-
ром.
Ввод команды заканчивается клавишей ENTER, при этом копия строки
запоминается в специальном буфере-списке команд. Если ошибок нет, то
команда выполняется, в противном случае в строке сообщений указывается
возможная причина ошибки.
В любой момент можно вызвать на редактирование выполненные ранее
команды из списка команд. Перемещение по списку производится
клавишами * I», CS/6 и « !», CS/7. Содержимое редактируемой строки
(если не была нажата клавиша ENTER) при этом теряется.
_2.4. Команды монитора
Команды монитора состоят из ключевого слова, за которым могут следо-
вать параметры. Параметры разделяются знаками пробела или символами
запятой (,) или точкой с запятой (;). От ключевых слов параметры могут не
отделяться. Сами ключевые слова могут вводиться не полностью-при
описании команд обязательная часть написана строчными буквами, а
факультативная - прописными. В качестве параметров могут выступать
числа, выражения, мнемоники регистров, значения ячеек памяти, стринги.
Первым символом числа должна быть цифра или префикс, задающий
систему счисления. Если префикс отсутствует, число считается в установ-
ленной-еистеме счисления (см. команду Табл.1. Префиксы для ввода чисел
BASE на стр. 24). В^абл. 1 перечислены
возможные префиксы.'
Все числа считаются целыми без зна-
ка, диапазон представления 0...65535.
Числа в параметрах команд можно
складывать и вычитать. Так, например,
параметр со значением 8 можно пред-
ставить простым числом 8, так и выра-
жением 2+6. В мониторе не предусмотре-
ны операции унарного минуса, однако
возможна запись числа со знаком минус. Такая запись интерпретируется как
0 - число.
Наряду с числами можно использовать мнемонические обозначения
регистров. Например, параметров HL будет интерпретирован, как текущее
значение регистра HL. В качестве мнемоник могут выступать:
байтовые регистры А, В, С, D, Е, Н, L, I, R. Альтернативные регистры А', В', С',
D Е% Н', Ь'.Флаговые регистры F и F Половинки индексных регистров IXh,
IYh - старшие байты регистров IX и IY, IXI и IYI - младшие байты;двухбайто-
вые регистры AF, ВС, DE, HL, IX, IY, SP, PC. Альтернативные регистры AF',
ВС', DE HL
Мнемоники можно вводить как прописными, так и строчными буквами.
Числа и выражения, заключенные в скобки, интерпретируются как зна-
чения ячеек памяти, адрес которых задает соответствующее выражение. При
этом, если используются круглые скобки, то из памяти выбирается один
байт, а если квадратные - то два смежных байта. Например, если значение
регистра IX равно 30000, в ячейке памяти по адресу 30010 хранится 2, и по
адресу 30011 - 256, то (IX + 10) будет интерпретировало как 2, a [ix + 10] -
как 258.
Символы, заключенные в кавычки, интерпретируются как отдельные
параметры со значением соответствующего символа ASCII. Так, например,
«а» интерпретируется как 97. Некоторые команды, например, поиска, могут
использовать стринги - несколько символов, заключенных в кавычки.
Кроме вышеприведенных параметров допускается использовать еще три.
Мнемоника MEM интерпретируется, как адрес текущей ячейки, ON-как 1
и OFF - как 0.
_2.4.1. Изменение памяти регистров
В качестве ключевого слова в командах изменения регистров и памяти
используется знак равенства (-), слева от которого ставится мнемоника со-
ответствующего регистра, а справа - параметр. Например, для того, чтобы
изменить значение регистра PC на 1234 необходимо выполнить команду PC
- 1234. Также изменяется значение в памяти-слева от знака равенства дол-
жен стоять заключенный в скобки адрес. Например, (#cl 20) = 79. Как и для
параметров, различаются круглые и квадратные скобки.
Через знак равенства можно также изменить адрес текущей ячейки
памяти, например, mem= 65000 (см. также команду MEMORY на стр. 19).
Кроме вышеприведенного способа изменения ячеек памяти в мониторе
предусмотрены следующие команды.
. data
запись в память списка data (чисел или стрингов), начиная с текущей
ячейки памяти. После выполнения команды указатель mem устанавливается
за последней измененной ячейкой.
.PC data
запись в память списка data (чисел или стрингов), начиная с адреса со-
держащегося в регистре PC. Содержимое самого регистра PC не изменяется.
DATA addr, data
запись списка data, начиная с адреса addr.
ГШ addr_st, addr_end, byte [,bank]
заполнение области памяти с адресами addr st по адрес addr_end
включительно байтом byte. Не обязательный параметр bank может указы-
вать, какой банк ОЗУ включить на время выполнения команды.
PUSH data
занесение в стек программы значения data.
POP
извлечение из стека значения, практически эта команда аналогична ко-
манде SP - SP + 2, с той лишь разницей, что извлекаемое из стека значение
индицируется в служебном окне.
_2.4.2. Управление памятью
Следущие две команды предназначены для изменения конфигурации
компьютера.
RAM bank
изменение текущего банка ОЗУ. Параметр bank может принимать зна-
чения от 0 до 15, а конфигурации 48 Бейсик только 0 или 8. Монитором не
поддерживается установка 2-го банка памяти (см. приложение Б).
ROM bank
изменение текущего банка ПЗУ. Параметр bank может принимать значения
О (128 Spectrum) или 1 (48 Spectrum). В конфигурации Бейсик команда запрещена.
MOVe addr_stl, addrjinl, addr_st2 [,bank]
копирование первой области памяти, расположенной с адреса addr-«tl
по адрес addr-finl (включительно) во вторую область памяти, расположен-
ную с адреса addr-st2. Первая область располагается в текущей конфигу-
рации памяти. Параметр bank задает номер страницы ОЗУ для второй
области, если он опущен — предполагается текущая страница.
_2.4.3.Поиск в памяти
FINd addrst, addrend, data
поиск списка байтовых значений data в памяти. Поиск ведется с адреса
addr si по адрес addr end включительно. Количество элементов в списке
data не должно превышать 20. Если поиск закончился успешно, в служебной
строке указывается адрес первого найденного байта (Found at addr), а ука-
затель текущей ячейки перемещается на этот адрес. При неуспешном поиске
выдается соотеютвующее сообщение.
SEarch addr st, addr end, bank, data
поиск списка байтовых значений data в памяти. На время выполнения команды
устанавливается банк ОЗУ bank. Поиск ведется с адреса addr_st по адрес
addrend включительно. Количество элементов в списке data не должно превышать
20. Если поиск закончился успешно, в служебной строке указывается адрес первого
найденного байт a (Found at addr). При неуспешном поиске выдается соответствую-
щее сообщение.
Для продолжения поиска в указанных командами FIND и SEARCH
границах можно воспользоваться клавишей SS/F.
С Heck addr_stl, addrJFinl, addr_st2 I,bank]
сравнение двух областей памяти. Область, заданная параметрами
addr stl - адрес начала и addr finl - адрес конца (включительно) сравнива-
ется с областью памяти, начинающейся с адреса addr_st2, Параметр bank
задает номер страницы ОЗУ, из которой выбираются байты второй области,
если этот параметр не указан, сравнение происходит в текущей конфигу-
рации памяти. Если области памяти одинаковы (сравнение происходит «байт
и байт»), го появляется сообщение Blocks identical. В противном случае на
экран выдакмся адреса и содержимое различных ячеек памяти.
_2.4.4. Реассемблирование и индикация памяти
MEMory addr
установка адреса текущей ячейки памяти mem.
DUmp [addr_st[,addr_end]]
выдача дампа памяти с адреса addr-st по addr-end включительно. Если
параметры не указаны, то предполагается, что начальный адрес равен ука-
зателю текущей ячейки памяти (mem), а конечный- 65535.
LDUmp [addr_st[,addr_end]]
выдача дампа памяти на принтер. Параметры команды такие же, как у DUMP.
DISs[addr_st[,addr_end]]
реассемблирование блока памяти с адреса addr-st по addr-end
включительно. Если параметры не указаны, то предполагаете-!, что начальный
адрес равен указателю текущей ячейки памяти (MEM), а кож шй - 65535.
LDISs [addr_st[,addr_end] ]
реассемблирование блока памяти на принтер. Параметры команды такие
же, как у DISS.
Выводимую командами DUMP и DISS информацию можно остановить,
нажав на клавишу пробела, продолжить вывод-нажав на любую клавишу.
DASm [addr]
реассемблирование памяти в режиме диалога. Параметр addr задает на-
чальный адрес реассемблера, если он опущен, предполагается адрес текущей
ячейки памяти. В команду DASM можно быстро войти по клавише SS/D.
На экран выдается реассемблированный текст команд, при этом можно
пользоваться следующими клавишами (подкомандами) г
SS/D и EDIT выход из команды DASM.
SS/5 и SS/8 изменение адреса первой реассемблируемой ячейки на
единицу. Подкоманда SS/5 переводит указатель на предыдущую, а
SS/8-на последующую ячейку памяти.
SS/б и SS/7 переход к следующей (SS/7) или предыдущей (SS/б) реас-
семблируемой инструкции.
ENTER ввод нового адреса реассемблера. Адрес задается в текущей
системе счисления (см. команду BASE на стр.24). На режим ввода
адреса влияет 4 бит команды OPTION (см. стр.24).
SS/G переход на адрес, содержащийся в первой (верхней) реас-
семблированной команде. Переход происходит для команд, адресу-
ющих непосредственные ячейки памяти, например, JP addr, CALL
addr, LD A,(addr).
0...9 запись (0...4) /восстановление (5...9) начального адреса реас-
семблера.
b установка ловушки № 8 на первую (верхнюю) команду.
П снятие ловушки № 8.
Несколько замечаний. Устанавливаемый в команде DASM адрес
действителен только в течении очередного сеанса работы и не влияет ни на
какие адреса монитора. Подкоманда SS/б (переход к предыдущей
инструкции) не всегда правильно синхронизируется, из-за этого может
возникнуть ситуация циклического изменения этой подкомандой одного и
того же адреса. Для синхронизации в этом случае удобно использовать под-
команды SS/5 и SS/8, которые изменяют адрес реассемблера на один байт.
Команда DASM имеет 5 ячеек памяти для реассемблера. При нажатии
клавиш 0...4 в этих ячейках запоминается адрес первой (верхней) реас-
семблированной инструкции. В последствии можно восстановить запомнен-
ный адрес, нажав на одну из клавиш 5...9. Соответствия клавиш приведены
в табл. 2.
Кроме этого, подкоманда SS/G (переход на адрес) запоминает текущий
адрес реассемблера в 0 ячейки памяти (для восстановления используется
клавиша S).
Табл.2. Соответствие клавиш команды DASM в реассемблере команды
DASM указываются установ-
ленные ловушки марки-
руются красным цветом.
Одна из ловушек (с номером 8) специально предназначена для использования из
команды DASM. В зависимости от текущего адреса клавишей b устанавлива-
ется программная, либо аппаратная повушка однократного действия.