Владельцам "Орели БК-08" и сочувствующим - новогодний подарок!
Monitor Z80 64K Version 2.0 (c) 1993 Michael Borisov & Arcadi Pushnikov
Теневой монитор-отладчик!
Загружается в теневые 16Кб ОЗУ "Орели БК-08" аналогично монитору MZ80, входящему в комплект поставки. Вызывается нажатием кнопки NMI, прерывая любую программу! По сравнению с прототипом имеет ряд решающих преимуществ:
- дизассемблер, в том числе в исходный текст формата ZEUS.
- не портит верхних 48К ОЗУ при возврате из прерванной программы (только 4 байта на вершине стека)
- корректная работа с регистром R
- значительное повышение удобства работы, поддержка ввода-вывода на кассету, в том числе в турбо-форматах двойной и тройной плотности (совместимо с копировщиком SORMOS3 и турбо-бейсиком "Рапид").
Это коммерческая версия, которая была закончена летом 1993 года, и мы с соавтором (Аркадий Пушников) пытались ее продавать на радиорынке.
С тех пор, разумеется, появлялись более новые версии. Последняя рассчитана на работу с "Орелью", имеющей 160Кб ОЗУ, открытые порты TR-DOS, IN 7FFD и рядом других нестандартных изменений, поэтому на заводской "Орели" ее запустить нельзя. А версию 2.0 - можно, и этим она ценна.
Надеюсь, кому-нибудь пригодится!
Описания не сохранилось, могу только по памяти пару намеков дать. Синтаксис команд единообразный: "K Adr1,Adr2,Adr3", где K - буква или символ, Adr1,Adr2 - шестнадцатеричные числа. Монитор воспринимает также и десятичные числа, если указывать им префикс - апостроф. Если использовать в качестве префикса кавычку, то в качестве адреса или константы пойдет код символа, стоящего после кавычки. Удобно при модификации памяти.
D <Adr> - вывод содержимого памяти с адреса Adr, а если адрес не указан - то продолжение вывода, начатого предыдущей командой D.
U <Adr> - просмотр дизассемблированного содержимого памяти с адреса Adr или, если адрес не указан - продолжение вывода.
M Adr - модификация памяти с адреса Adr. Выход из режима модификации - клавиша "." (точка).
Q - выход в Бейсик (0 OK, 0:1). Если системные переменные бейсика испорчены - то сбой.
R - возврат из NMI
T Adr1,Adr2,Adr3 - перемещение памяти с Adr1 по Adr2 на Adr3.
I <Adr> - ввод с магнитофона (по адресу Adr)
O Adr1,Adr2 - вывод на магнитофон
S Adr1,Adr2,Byte1,<Byte2>,<Byte3>,<Byte4> - поиск последовательности в памяти начиная с Adr1 по Adr2, макс. длина последовательности - 4 байта
F Adr1,Adr2,Byte - заполнение памяти с Adr1 по Adr2 константой Byte
G Adr1,<Adr2> - возврат из NMI на адрес Adr1 или (если указан Adr2) выполнение кода с Adr1 по Adr2 (на Adr2 ставится точка останова вида CALL #66).
H Turbo - Установка скорости обмена с кассетой (допустимые значения: 1,2,3).
J Adr1 - выполнение подпрограммы в кодах по Adr1 (когда подпрограмма возвращается по RET, то управление передается на адрес #66)
X <Rb> - просмотр и изменение содержимого регистров в блоке Rb. Блок регистров 0 используется при входе и возврате из NMI; блок регистров 1 - при использовании команд G Adr1,Adr2 и J. Блок регистров 2 свободен.
B <Rb0>,<Rb1> - пересылка содержимого блока регистров Rb0 в блок Rb1.
N <Ramtop> - выход в бейсик вида "CLEAR Ramtop: NEW". Работает независимо от того, испорчены системные переменные или нет. Позволяет задействовать бейсик, сохранив некоторую часть содержимого верхней памяти.
+ Num1,Num2 - сложение чисел
- Num1,Num2 - вычитание чисел
= Num - вывод числа в шестнадцатеричной и десятичной системах счисления
Реализованы и другие команды. Фактически, из команд-букв задействованы почти все, но я к сожалению уже все это забыл.
Приятной работы с монитором!