[an error occurred while processing this directive]

.цв

.шп16

1. ВВЕДЕНИЕ В СИСТЕМУ

.ов

1.1. Запуск системы.

.шп1

Система располагается на отдельном диске, и занимает на нем 36 Кбайт (9 треков). Вы можете смело вставить системный диск и перезапустить машину с него. Процесс запуска вряд ли вызовет у Вас затруднения, так как он не отличается от запуска других системных программ. Сразу же с началом загрузки на экране появляется заставка системы, занимающая верхнюю половину экрана. В правом нижнем углу заставки, можно увидеть сменяющиеся цифры от 1 до 8. Это номер считываемого в данный момент трека. Загрузчик системы не различает ошибки обмена с диском, и в случае сбоев он будет вновь и вновь пробовать читать трек, пока это ему не удастся, или пока Вы не нажмете клавишу 'СБРОС'. Логично, что по остановившейся цифре можно судить о том, на каком треке произошел сбой. Полная загрузка системы длится недолго, секунды 3-4, благодаря примененному в ней высокоскоростному загрузчику.

.шп16

1.2. Диалог с системой.

.шп1

Если система удачно загрузилась, номер трека пропадет с экрана, а в левом нижнем углу должен появиться желтый квадратик - курсор. Наличие курсора одновременно с указанием места на экране является приглашением ко вводу. Никакого другого приглашения система не выдает, дабы не засорять излишне экран.

Когда система полностью загружена, Вы оказываетесь в диалоге с отладчиком - одной из составляющих систему программ, которая позволяет Вам непосредственно работать с памятью, запускать программы, обращаться к ДОС. Отладчик напоминает системный монитор ПЭВМ "АГАТ", но обладает значительно более широкими возможностями. Он является головной программой системы. Из отладчика запускаются другие составляющие систему модули, и по окончании работы с ними управление вновь передается отладчику.

Ведение диалога с отладчиком заключается в подаче пользователем команд и получение соответствующих результатов. Обычно, если ошибки не возникло, система не делает никаких сообщений (кроме предусмотренных командой). При возникновении ошибочной ситуации, раздастся звуковой сигнал и может появится уведомительное сообщение. Сообщения появляются при ошибках, возникших во время отработки команды ДОС, а один звуковой сигнал при синтаксических ошибках.В случае если в результате выполнения каких либо команд, на экран будет выдаваться слишком большое кол-во информации, не помещающееся на экране или выдаваемое слишком быстро, то приостановить вывод можно нажатием клавиши 'ПРОБЕЛ'. Нажатие в режиме приостановки клавиши 'F1', производит прерывание выполнения команды, и переход к диалогу с отладчиком. Это правило справедливо практически для всех команд.

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

.сс

.шп16

1.3 Переопределяемые клавиши.

шп1

Для организации удобства ведения диалога с отладчиком в подпрограммы ввода/вывода введен драйвер обслуживания переопределяемых клавиш. Переопределяемыми называются клавиши, значение которых назначает сам пользователь. Значением клавиши может быть не только буква или управляющий код, но и любое слово и даже сложные многострочные команды.

Под переопределяемые клавиши выделены 15 клавиш расположенных на клавиатуре справа, и одна клавиша вызываемая нажатием 'УПР  ' (ее значение специализировано и будет расмотрено позже). В драйвере обслуживания клавиш имеется встроенный редактор значения присвоенного клавише. Для вызова редактора достаточно нажать 'УПР K'. Появится приглашение ко вводу клавиши которую требуется редактировать. После нажатия соответствующей клавиши на экран будет выдано ее содержимое. Для редактирования можно использовать ряд управляющих команд. Стрелки перемещают по тексту клавиши, 'F2' удаляет символ под курсором, 'F3' вставляет один пробел, '9' удаляет все содержимое клавиши от курсора до конца. В текст переопределяемой клавиши можно вводить управляющие коды, для чего сначала надо нажать 'УПР V', а затем соответствующую управляющую клавишу (это универсальное средство, которое в том числе работает и в диалоге). Вводить можно любые управляющие коды, в том числе и '

'. Заканчивается процесс редактирования нажатием '

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

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

.шп16

1.4 Вывод на бумагу.

.шп1

Как говорилось в предисловии, система располагает довольно мощным средством вывода на бумагу. Прежде всего можно вывести на бумагу все, что в данный момент находится на экране, для чего достаточно нажать клавишу 'УПР O'. Можно подключить к потоку экранного вывода одновременно и вывод на бумагу, нажав клавишу 'УПР I'. При этом вся выводимая на экран информация будет передаваться и на печатающее устройство. Для того чтобы переключить вывод только на экран нужно нажать клавишу 'УПР W'.

У команд вывода на бумагу есть модификации. Например, при подаче одной из комад включения вывода на бумагу, происходит инициализация принтера, завершающаяся передачей на него кодов, заданных пользователем. Для ввода этих кодов существует команда отладчика, которая будет рассмотрена при изучении работы с отладчиком.

Команда 'УПР I' может выводить как на рулонную бумагу (обычный вывод), так и по страницам (с остановкой в конце каждой страницы), причем в этом режиме дополнительно задается число строк на странице, число колонок, ширина колонки и т.д. Для этого тоже существует команда отладчика, которую мы расмотрим ниже.

.сс

.цв

.шп16

РАБОТА С ОТЛАДЧИКОМ

.ов

2.1 Формат команд.

.шп1

Подробно рассказывать о синтаксисе команд отладчика наверное не имеет смысла, это будет повторением известного. В общем случае синтаксис не отличается от команд системного монитора (имеется ввиду формат операндов команд). Имя команды также записывается после операндов, число которых также может быть от одного до трех, а для разделения операндов используются символы '<' и '.'. Но есть и отличия или, лучше сказать, расширения. При вводе данные можно представлять не только в шестнадцатиричном, но и в двоичном и символьном виде. Перед двоичным числом следует ввести символ '*', а перед символом - "'". Для ввода в одной строке команды типа ':' и любой другой, для указания окончания выполнения команды типа ':' используется знак ';'. Все остальные отличия касаются более широкого набора команд, который мы рассмотрим ниже.

.шп16

2.2. Полный набор команд.

.шп1

Полностью список команд и краткую расшифровку их действий можно увидеть в таблице на следуюшей странице. Ниже мы более детально рассмотрим каждую команду.

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

', вторая набором адреса начала и конца области через точку и также заканчивается нажатием '

'.

Команда '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 - начальный адрес первой из сравниваемых областей, ADDR2 - начальный адрес второй сравниваемой области, ADDR3 - конечный адрес второй сравниваемой области.

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

Команда 'S' производит поиск группы байт, предварительно определенных командами 'H' и 'J', начиная с адреса, указанного перед командой. Если адрес не указан, то поиск продолжается с текущего адреса. Каждый байт памяти перед сравнением с байтом определенным командой 'H', предварительно обрабатывается логической операцией 'И' с соответствующей маской, определенной командой 'J'. В случае совпадения всей определенной последовательности будет выдано 16 строк дизассемблированного кода. Первый байт найденной последовательности будет выделен красным цветом, после чего поиск автоматически продолжается. Чтобы прервать поиск надо нажать клавишу 'F1'.

Существуют пять команд отладчика, производящие арифметические и логические операции с шестнадцатиричными числами. Две первые: '+' и '-' - производят, соответственно, сложение и вычитание шестнадцатиразрядных операндов. Три остальные: '!', '&', '%' - логические операции 'ИЛИ', 'И', 'ИСКЛЮЧАЮЩЕЕ ИЛИ' с восьмиразрядыми операндами. Команды записываются в формате: первый операнд, знак операции, второй операнд. После нажатия клавиши '

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

Команда 'M' предназначена для пересылки области памяти. Чтобы выполнить пересылку требуется указать начальный адрес области назначения (ADDR1), начальный адрес пересылаемой области (ADDR2), конечный адрес пересылаемой области (ADDR3): ADDR1<ADDR2.ADDR3M.

С помощью этой же команды можно заполнить какую-либо область одним байтом. Например если требуется заполнить область ¤4000-¤5FFF байтом ¤00, то нужно сначала записать байт ¤00 по адресу ¤4000, и произвести следующую операцию: ¤4001<¤4000.¤5FFEM. Обратите внимание не то, что конечный адрес указан на единицу меньше чем требуется. Это не ошибка. Для точного заполнения области нужно всегда указывать конечный адрес на единицу меньше требуемого.

Команда 'L' позволяет дизассемблировать объектный код, находящийся в памяти. Для ее вызова требуется ввести адрес, с которого начнется дизассмблирование и 'L', если адрес не указать, то дизассемблирование продолжится с текущего адреса. Выдаваемый на экран листинг состоит из трех полей, каждое из которых для удобства имеет свой цвет. Первое (желтое) поле содержит текущий адрес и объектный код дизассемблируемой команды, второе (голубое) - этот же объектный код, представленный в символьном виде, третье (зеленое) - мнемоническое представление команды процессора. В случае если дизассемблируемый код не соответствует ни одной команде, вместо мнемоники будут выведены три знака вопроса '???'. После команд 'JMP', 'JMP ()', 'RTS' и 'RTI' выдается пустая срока, что несколько структурирует выводимый листинг. Информация выдается бесконечным списком и прервать выдачу можно нажатием клавиши 'F1'.

Команда 'G' производит запуск программы, находящейся в памяти, с адреса указанного перед командой. Если не указать адрес, то произойдет запуск с адреса по которому была выполнена последняя команда BRK. При запуске программы регистры процессора заполняются данными, которые можно просмотреть и изменить, используя команду 'P'.

С помощью команды ':' можно ввести в память любую последовательность байт. Для этого задается начальный адрес последовательности, ':' и далее вводятся байты, разделяемые 'ПРОБЕЛом'. Если адрес не вводить, то последовательность продолжится с текущего адреса, получившегося после использования последней команды ':'.

Команда 'X' распечатывает содержимое памяти в символьном виде, начиная с адреса, указанного перед командой. По умолчанию вывод продолжается с текущего адреса. Есть различия между выводимой информацией в цветном и черно-белом режимах экрана. В цветном в строку выводится 16 символов, причем управляющие коды выводятся в инверсном виде. В черно-белом режиме в строке помещается 32 символа, а вместо управляющих кодов выводится точка. Кстати, это относится и к выводу байт в символьном виде при дизассемблировании.

Команда 'Z' не имеет операндов и служит для переключения режима экрана с цветного на черно-белый и наоборот.

С помощью команд 'H' и 'J' можно задать поисковый критерий для использования команды поиска 'S'. 'H' задает константы сравнения, 'J' - маски для обработки сравниваемых байтов. Если не задано ни одного байта команды 'J', то обработка по маске производиться не будет. Формат команд аналогичен формату ':', тольке без задания адреса. Если используются маски, то их количество должно быть равно количеству констант сравнения, в противном случае возможны реакции на ошибочные вхождения. При использовании команды 'H' без операнда на экран будет выдан текущий поисковый критерий.

Команда '\' делает так называемое "отражение" байт, т.е. перевертывает байт делая его 0-й бит 7-м, 1-й бит 6-м, 2-й бит 5-м и т.д. (получая как бы его зеркальное отражение). Эта операция оказывается полезной при переработке программ для ПЭВМ Apple II, использующих графику. В команде надо задать границы области памяти байты которой требуется перевернуть. Адрес начала (ADDR1) и адрес конца (ADDR2) задаются через точку перед командой. ADDR1.ADDR2\.

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

Команда 'T' производит запуск внешней системной программы, загруженной в качестве резидентной. Если такая программа отсутствует, то будет выдано сообщение "Резидент не загружен".

Командой 'O' производится перезагрузка машины с требуемого разъема. Номер разъема указывается перед командой, при этом производится проверка возможности загрузки с указанного разъема и в случае неудачи выдается звуковой сигнал.

Команды 'U', 'I', 'K', '[' позволяют обратиться к входящим в систему программам. Командой 'U' вызывается редактор памяти, 'I' - секторный редактор, 'K' - встроенная программа для работы с подкаталогами. С помощью команды '[' происходит обращение к командам файловой системы, которые следуют сразу за знаком '['. Подробно эти подсистемы будут описаны ниже.

Команда 'Q' выводит на экран информацию, хранимую файловой системой. Информация выдается в следующем виде:

M 2000 M 3000
A 1000 L 10
L 1000 T 'S'

В первом столбике содержится информация о загруженном файле типа 'B'. Переменная 'M' хранит адрес начала файла в памяти, 'A' - логический адрес начала файла, т.е. адрес используемый файловыми системами для загрузки по умочанию, 'L' - его физическую длину в байтах. Во втором столбике содержится информация о загруженном файле произвольного типа. Переменная 'M' также хранит адрес начала файла в памяти, 'L' - его длину в дисковых секторах, 'T' - тип загруженного файла.

Эта информация является одновременно и справочной, для определения параметров файла, и системной, служащей для записи файла с параметрами по умолчанию.

Используя команду ',', можно проассемблировать (по правилам микроассемблера) одну команду, не входя в диалог с микроассемблером. Мнемоническое представление команды процессора записывается сразу после ','. В одной строке можно разместить несколько таких команд, разделяемых ','. Если в команде обнаружится ошибка, управление будет передано диалоговому микроассемблеру.

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

Команда 'Y' выводит на экран содержимое памяти в специальном формате - одновременно шестнадцатиричные байты и соответствующие им символы. В таком виде выдает распечатку редактор памяти, и во многих случаях он представляется очень удобным. Листинг выводится, начиная с адреса, указанного перед командой или с текущего, на котором предыдущий вывод был закончен. Прекращается выдача нажатием любой клавиши. Команда 'Y' работает только в черно-белом режиме экрана.

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

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

Команда '"' предназначена для задания формата выводимой страницы и имеет несколько более сложную структуру чем '#'. Прежде всего в ней предусмотрено два режима работы: рулонный и страничный. Рулонный режим задается буквой 'R' и более не требует параметров, страничный обозначается буквой 'S' и содержит шесть байт параметров:

=====================================================
1 - Число колонок в странице.
2 - Ширина колонки.
3 - Число строк на странице.
4 - Число пробелов между колонками, до разделителя.
5 - Символ используемый в качестве разделителя.
6 - Число пробелов между колонками, после разделителя.
=====================================================

Все параметры следуют непосредственно за командой, цифровые отделяются друг от друга пробелом. При печати в постраничном режиме начинает работать специальный драйвер колоночной печати. Его главное отличие от обычного в том, что приходится буферизировать всю информацию (кроме последней колонки) и только в конце выдавать сразу всю страницу. Буфер, отведенный для этой цели, имеет размер 16 Кбайт. Поэтому при входе в режим печати проверяется, возможна ли буферизация заданной Вами страницы. Если нет, то режим печати включен не будет. Вообще то, при печати реальных листингов на принтере МС6313, даже самым мелким шрифтом (160 знаков на строке) при минимальном размере символов по высоте (Subskript) и расстоянием между строками шесть точек (стандартное 12), 16 Кбайт памяти хватает. Если конечно использовать какой-то невероятный суперпринтер с 300-500-ми знаками на строке, печать может не получиться, ну что ж все программы не лишены недостатков.

.стОписание.Часть 2

[an error occurred while processing this directive]