[an error occurred while processing this directive]
.цв
1. ВВЕДЕНИЕ В СИСТЕМУ
.ов
1.1. Запуск системы.
Система располагается на отдельном диске, и занимает на нем 36 Кбайт (9 треков). Вы можете смело вставить системный диск и перезапустить машину с него. Процесс запуска вряд ли вызовет у Вас затруднения, так как он не отличается от запуска других системных программ. Сразу же с началом загрузки на экране появляется заставка системы, занимающая верхнюю половину экрана. В правом нижнем углу заставки, можно увидеть сменяющиеся цифры от 1 до 8. Это номер считываемого в данный момент трека. Загрузчик системы не различает ошибки обмена с диском, и в случае сбоев он будет вновь и вновь пробовать читать трек, пока это ему не удастся, или пока Вы не нажмете клавишу 'СБРОС'. Логично, что по остановившейся цифре можно судить о том, на каком треке произошел сбой. Полная загрузка системы длится недолго, секунды 3-4, благодаря примененному в ней высокоскоростному загрузчику.
1.2. Диалог с системой.
Если система удачно загрузилась, номер трека пропадет с экрана, а в левом нижнем углу должен появиться желтый квадратик - курсор. Наличие курсора одновременно с указанием места на экране является приглашением ко вводу. Никакого другого приглашения система не выдает, дабы не засорять излишне экран.
Когда система полностью загружена, Вы оказываетесь в диалоге с отладчиком - одной из составляющих систему программ, которая позволяет Вам непосредственно работать с памятью, запускать программы, обращаться к ДОС. Отладчик напоминает системный монитор ПЭВМ "АГАТ", но обладает значительно более широкими возможностями. Он является головной программой системы. Из отладчика запускаются другие составляющие систему модули, и по окончании работы с ними управление вновь передается отладчику.
Ведение диалога с отладчиком заключается в подаче пользователем команд и получение соответствующих результатов. Обычно, если ошибки не возникло, система не делает никаких сообщений (кроме предусмотренных командой). При возникновении ошибочной ситуации, раздастся звуковой сигнал и может появится уведомительное сообщение. Сообщения появляются при ошибках, возникших во время отработки команды ДОС, а один звуковой сигнал при синтаксических ошибках.В случае если в результате выполнения каких либо команд, на экран будет выдаваться слишком большое кол-во информации, не помещающееся на экране или выдаваемое слишком быстро, то приостановить вывод можно нажатием клавиши 'ПРОБЕЛ'. Нажатие в режиме приостановки клавиши 'F1', производит прерывание выполнения команды, и переход к диалогу с отладчиком. Это правило справедливо практически для всех команд.
.сс
При работе с отладчиком пользователь может добиться выполнения целого ряда действий, не подавая ни одной команды отладчика. Это команды, которые исполняются сразу после нажатия соответствующей клавиши. Сюда входят команды управления переопределяемыми клавишами и команды управления выводом на бумагу.
1.3 Переопределяемые клавиши.
Для организации удобства ведения диалога с отладчиком в подпрограммы ввода/вывода введен драйвер обслуживания переопределяемых клавиш. Переопределяемыми называются клавиши, значение которых назначает сам пользователь. Значением клавиши может быть не только буква или управляющий код, но и любое слово и даже сложные многострочные команды.
Под переопределяемые клавиши выделены 15 клавиш расположенных на клавиатуре справа, и одна клавиша вызываемая нажатием 'УПР ' (ее значение специализировано и будет расмотрено позже). В драйвере обслуживания клавиш имеется встроенный редактор значения присвоенного клавише. Для вызова редактора достаточно нажать 'УПР K'. Появится приглашение ко вводу клавиши которую требуется редактировать. После нажатия соответствующей клавиши на экран будет выдано ее содержимое. Для редактирования можно использовать ряд управляющих команд. Стрелки перемещают по тексту клавиши, 'F2' удаляет символ под курсором, 'F3' вставляет один пробел, '9' удаляет все содержимое клавиши от курсора до конца. В текст переопределяемой клавиши можно вводить управляющие коды, для чего сначала надо нажать 'УПР V', а затем соответствующую управляющую клавишу (это универсальное средство, которое в том числе работает и в диалоге). Вводить можно любые управляющие коды, в том числе и '
'. Заканчивается процесс редактирования нажатием '
', после чего возобновляется диалог с отладчиком. Многие управляющие функции драйвера вывода на экран (например очистка до конца строки, вставка пробела в строку), имеют коды, совпадающие с кодами функциональных клавиш, поэтому можно назначить соответствующей клавише ее же код, или переназначить любой другой более удобной для Вашей работы.
При работе с переопределяемыми клавишами важно знать еще одну вещь - размеры буфера под клавиши четко определены и равны 256 байт, поэтому суммарное число символов во всех клавишах не должно превышать 256, в противном случае ввод еще хотя бы одного символа будет невозможен.
.сс
1.4 Вывод на бумагу.
Как говорилось в предисловии, система располагает довольно мощным средством вывода на бумагу. Прежде всего можно вывести на бумагу все, что в данный момент находится на экране, для чего достаточно нажать клавишу 'УПР O'. Можно подключить к потоку экранного вывода одновременно и вывод на бумагу, нажав клавишу 'УПР I'. При этом вся выводимая на экран информация будет передаваться и на печатающее устройство. Для того чтобы переключить вывод только на экран нужно нажать клавишу 'УПР W'.
У команд вывода на бумагу есть модификации. Например, при подаче одной из комад включения вывода на бумагу, происходит инициализация принтера, завершающаяся передачей на него кодов, заданных пользователем. Для ввода этих кодов существует команда отладчика, которая будет рассмотрена при изучении работы с отладчиком.
Команда 'УПР I' может выводить как на рулонную бумагу (обычный вывод), так и по страницам (с остановкой в конце каждой страницы), причем в этом режиме дополнительно задается число строк на странице, число колонок, ширина колонки и т.д. Для этого тоже существует команда отладчика, которую мы расмотрим ниже.
.цв
РАБОТА С ОТЛАДЧИКОМ
.ов
2.1 Формат команд.
Подробно рассказывать о синтаксисе команд отладчика наверное не имеет смысла, это будет повторением известного. В общем случае синтаксис не отличается от команд системного монитора (имеется ввиду формат операндов команд). Имя команды также записывается после операндов, число которых также может быть от одного до трех, а для разделения операндов используются символы '<' и '.'. Но есть и отличия или, лучше сказать, расширения. При вводе данные можно представлять не только в шестнадцатиричном, но и в двоичном и символьном виде. Перед двоичным числом следует ввести символ '*', а перед символом - "'". Для ввода в одной строке команды типа ':' и любой другой, для указания окончания выполнения команды типа ':' используется знак ';'. Все остальные отличия касаются более широкого набора команд, который мы рассмотрим ниже.
.сс
2.2. Полный набор команд.
Полностью список команд и краткую расшифровку их действий можно увидеть в таблице на следуюшей странице. Ниже мы более детально рассмотрим каждую команду.
Существуют две функции отладчика, для выполнения которых не требуется ввода какой-либо команды. Это просмотр содержимого ячейки и области памяти. Первая функция вызывается набором нужного адреса и нажатием '
', вторая набором адреса начала и конца области через точку и также заканчивается нажатием '
'.
Команда 'P' выдает на экран адрес последнего останова по команде 'BRK', и содержимое всех регистров процессора при останове. Все регистры выводятся в шестнадцатиричном виде, регистр признаков дополнительно выводится еще и по флагам, причем подсветка буквы флага означает его единичное состояние, обычный вид буквы - нулевое.
После выполнения команды адресный счетчик функции ':' устанавливается на ячейки, хранящие выведенную информацию. Поэтому возможен ввод желаемых значений регистров командой ': 1 2 3 ...' в том порядке в котором регистры были выведены на экран.
Команды 'R' и 'W' позволяют производить обмен с диском на уровне секторов. Различаются только выполняемым действием 'R' - читает с диска, 'W' - записывает на диск, группу секторов. Форматы их полностью идентичены. Фактически он выглядит так: ADDR1<ADDR2.ADDR3R(W). При этом ADDR1 означает адрес начала для чтения (записи) группы секторов. ADDR2 указывает на начало группы секторов, ADDR3 на ее конец например: 2000<1100.130FR(W). Операнды ADDR2 и ADDR3 содержат в себе так называемый трек-секторный адрес. Этот адрес указывает в первых двух цифрах номер трека, во вторых двух номер сектора. При задании трек-секторного адреса можно опускать незначащие нули. Возможны и сокращенные записи операндов команд. Например, если требуется обработать только один сектор, достаточно указать один адрес - 2000<1100R(W). Если последний сектор группы находится на том же треке где и первый, то в ADDR3 можно опустить номер трека - 2000<1100.FR(W).
При работе с данными директивами следует учитывать, что количество секторов на дисках к НГМД типа Shugart и MFM разное. Системой этот факт учитывается автоматически, а вот пользователь делает на нем ошибки регулярно.
.сс
=========================================================== Список команд отладчика системы =========================================================== 1. 'P' - Выдать содержимое регистров. 2. 'R' - Считать группу секторов с диска. 3. 'W' - Записать группу секторов на диск. 4. '/' - Команда входа в микроассемблер. 5. 'V' - Сравнить области памяти. 6. 'S' - Найти группу байт. 7. '!' - Логическая операция ИЛИ. 8. '&' - Логическая операция И. 9. '%' - Логическая операция ИСКЛЮЧАЮЩЕЕ ИЛИ. 10. '-' - Операция вычитания. 11. '+' - Операция сложения. 12. 'M' - Пересылка области памяти. 13. 'L' - Дизассемблирование содержимого памяти. 14. 'G' - Запуск программы находящейся в памяти. 15. ':' - Ввод данных в память. 16. 'X' - Вывод содержимого памяти в символьном виде. 17. 'Z' - Переключение режима работы экрана. 18. 'H' - Определение поискового критерия. 19. 'J' - Определение масок поискового критерия. 20. '\' - "Отражение" байтов области памяти. 21. '^' - Флаг оконного вывода. 22. 'T' - Активизация резидентной программы. 23. 'O' - Перезагрузка ПЭВМ. 24. 'U' - Вызов экранного редактора памяти. 25. 'I' - Вызов экранного секторного редактора. 26. '[' - Обращение к командам ДОС. 27. 'Q' - Вывод системной информации ДОС. 28. 'K' - Вызов работы с подкаталогами. 29. ',' - Ассемблирование оператора. 30. 'N' - Определение смещения адреса дизассемблирования. 31. 'Y' - Вывод области в формате редактора памяти. 32. ' ' - Вывод в двоичном виде. 33. '#' - Определение кодов инициализации принтера. 34. '"' - Определение формата вывода информации на принтер. ===========================================================
Команда '/' - вход в микроассемблер. Что такое микроассемблер? Это ассемблер, работающий только с константными адресами и данными, т.е не умеющий обрабатывать метки. Обычно он применяется для ввода не более десятка команд при модификации кода отлаживаемой программы.
Чтобы войти в микроассемблер, надо ввести адрес и символ '/', после чего нажать '
'. Если адрес не вводить, то будет использоваться текущий, или сказать точнее тот адрес, который был текущим перед последним выходом из микроассемблера. Вход в микроассемблер сопровождается выдачей на экран текущего адреса и двоеточия, после которого будет стоять курсор, приглашающий Вас ввести команду процессора. Команды вводятся в стандартном формате процессора 6502, с небольшими исключениями. При вводе операндов не надо вводить знак '¤', они сразу подразумеваются шестнадцатиричными (при вводе констант можно вводить двоичные и символьные операнды, используя апостроф и '*'), а также нельзя в командах сдвига аккумулятора ставить операнд 'A'. Этот операнд воспримется микроассемблером как сдвиг ячейки с адресом 000A. Заканчивается ввод каждой команды нажатием клавиши '
', после чего предлагается ввести еще одну команду. Чтобы выйти из микроассемблера в диалог с отладчиком, надо нажать клавишу '
' сразу после приглашения. Если во введенной строке обнаружатся какие-либо ошибки, то будет выдан звуковой сигнал, и повторится приглашение ко вводу этой же команды.
Команда 'V' позволяет сравнить две области памяти. Ее формат таков: ADDR1<ADDR2.ADDR3V. ADDR1 - начальный а LDA ¤4000,Y
TAX LDA ¤4000+1,Y JSR DZ INC BLOKI+1 QUIT3 JMP TIP1 DZ PHA JMP DA D PHP DA LDA #¤00 STA D9 LDY #¤04 D1 LDA #¤FF STA D7 SEC D2 INC D7 TXA SBC D5-1,Y TAX PLA
SBC Dн не будет выдано ничего. Отличающиеся в областях байты выдаются в два столбика, в каждом из которых указан адрес и содержащийся по этому адресу байт, соответственно для первой и второй областей. Процесс поиска можно прервать нажатием клавиши 'F1'.
Команда 'S' производит поиск группы байт, предварительно определенных командами 'H' и 'J', начиная с адреса, указанного перед командой. Если адрес не указан, то поиск продолжается с текущего адреса. Каждый байт памяти перед сравнением с байтом определенным командой 'H', предварительно обрабатывается логической операцией 'И' с соответствующей маской, определенной командой 'J'. В случае совпадения всей определенной последовательности будет выдано 16 строк дизассемблированного кода. Первый байт найденной последовательности будет выделен красным цветом, после чего поиск автоматически продолжается. Чтобы прервать поиск надо нажать клавишу 'F1'.
Существуют пять команд отладчика, производящие арифметические и логические операции с шестнадцатиричными числами. Две первые: '+' и '-' - производят, соответственно, сложение и вычитание шестнадцатиразрядных операндов. Три остальные: '!', '&', '%' - логические операции 'ИЛИ', 'И', 'ИСКЛЮЧАЮЩЕЕ ИЛИ' с восьмиразрядыми операндами. Команды записываются в формате: первый операнд, знак 6-1,Y
PHA BCS D2 TXA ADC D5-1,Y STA D8 PLA ADC D6-1,Y PHA INC D9 LDA D7 BNE D3 DEC D9 BEQ D4 D3 ADC #'0-1 DM1 STA ¤1204 DEC DM1+1 D4 LDX D8 DEY BNE D1 TXA CLC ADC #'0
DM2 STAM' предназначена для пересылки области памяти. Чтобы выполнить пересылку требуется указать начальный адрес области назначения (ADDR1), начальный адрес пересылаемой области (ADDR2), конечный адрес пересылаемой области (ADDR3): ADDR1<ADDR2.ADDR3M.
С помощью ¤1205 DEC DM2+1 PLA RTS D5 DFB ¤0A =10 DFB ¤64 =100 DFB ¤E8 =1000 MЛAДШИE ПOЛУCЛOBA DFB ¤10 =10000 D6 DFB ¤00 DFB ¤00 DFB ¤03 CTAPШИE ПOЛУCЛOBA DFB ¤27 D7 DFB ¤00 D8 DFB ¤00 D9 DFB ¤00 CROUT EQU ¤F46D BЫBOД BOЗBPATA KAPETKИ BYTES DFB ¤2C,¤4F,¤72,¤95,¤B8,¤DB,¤FE,¤00