[an error occurred while processing this directive]
.цв
.шп14
КОПИРОВАНИЕ ДИСКОВ
.ов
.шп3
6.1. Вызов программы копирования.
.шп0
Чтобы обратиться к программе копирования дисков, нужно в диалоге с отладчиком подать команду 'K'. Программа способна копировать только диски НГМД ЕС 5088, поэтому если текущим выбран MFM накопитель копирование будет невозможно, о чем свидетельствует звуковой сигнал в ответ на команду 'K'. Если все нормально на экране отобразится заставка и рабочее поле программы.
.шп3
6.2. Копирование.
.шп0
Перед началом копирования можно выбрать режим работы программы и используемые НГМД. Для этого в верхней части экрана расположено меню из двух позиций: 'Оригинал' и 'Дубликат'. Пользуясь стрелками влево/вправо можно выбрать нужную альтернативу, стрелками вверх/вниз изменить ее значение. Альтернатива 'Оригинал' может принимать значение '1' или '2' и указывает на номер накопителя оригинала, альтернатива 'Дубликат' может также принимать значения '1' или '2', и еще 'Нет'. Первые два значения указывают на номер накопителя дубликата, а последняя на его отсутствие. Это означает, что нужно производить не копирование диска, а только его проверку.
Когда все нужные значения выбраны можно начать копирование. Для этого нажмите клавишу 'ВВОД'. Если альтернативы 'Оригинал' и 'Дубликат' содержат одинаковые значения, то система предложит Вам вставить диск оригинал и нажать любую клавишу, и будет делать тоже самое по ходу копирования диска. В другом случае, если альтернативы несут разные значения копирование начнется сразу после нажатия 'ВВОДа' и программа обращаясь поочередно то к одному то к другому НГМД скопирует диск.
Ход копирования можно наблюдать непосредственно на экране. Цикл коирования разбит на три прохода, за которые и производится полное копирование диска. Для каждого прохода на экране выделена соответствующая область, в которой отмечается информация о ходе копирования. Если при чтении оригинала возникают ошибки, то в соответствующей клетке появляется знак '-', нормальное завершение чтения сопровождается выдачей знака '.'. После записи трека производится незамедлительная его проверка, поэтому точно также как и при чтении в случае удачного завершения операции программа выведет на экран '.', если произошел сбой она повторит запись. Если повторная запись не приведет к результату программа сделает еще две попытки записи и в случае возникновения ошибок после этого, выдаст на экран '-'. Вывод такого знака указывает скорее всего на физические дефекты диска или на неисправность НГМД если диск хороший, о чем свидетельствует проверка в другом накопителе.
Пользователю работающему с программой надо знать, что при копировании дисков в качестве дубликатов можно использовать совершенно чистые неразмеченные диски или диски других систем. Находящаяся на них информация никоим образом не влияет на ход копирования. Это сделано для уменьшения времени копирования, путем записи на диск не только части данных сектора но и адресной части. При копировании сохраняется том копируемого диска, соответсвующий номеру тома последнено прочитанного сектора диска.
.сс
.цв
.шп14
ТРАССИРОВЩИК
.ов
.шп3
7.1. Вызов трассировщика
.шп0
Трассировщик представляет собой программу, которая позволяет программисту выполнять отлаживаемую программу в пошаговом режиме. При трассировке программы, пользователю доступны все регистры процессора и ячейки памяти, для их контроля и оперативного изменения. Специальные условия позволяют автоматизировать контроль за именением содержимого регистров и ячеек.
Трассировщик в отличие от описанных выше программ не является встроенной функцией системы. Он поставляется на диске в файле типа 'S' с именем 'TRASSER'. Для его загрузки и включения в систему подайте команду: '[BOOT TRASSER', после чего трассировщик загрузится и будет уже постоянно находиться в памяти машины. Чтобы обратиться к трассировщику нужно подать команду 'T' отладчика. Выполнение этой команды сопровождается выдачей на экран рабочего поля трассировщика, который при этом находится в режиме ожидания ввода пользователем команды.
A=C6 11000110 X=60 01100000 Y=00 00000000 P=B0 NV-BDIZC S=00 00000000 <0000 >FFFF ________________________________ СОДЕРЖИМОЕ М Э О ________________________________ ________________________________
В нижней строке экрана находится курсор, указывающий на экране место ввода символа. Ввод возможен в пределах одной экранной строки, при этом для исправления можно воспользоваться клавишей '<-'.
.сс
.шп3
7.2. Команды трассировщика.
.шп0
В диалоге с трассировщиком действуют такие обычные для отладчика команды, как дизассемблирование, просмотр содержмого ячеек, и занесение в них информации. Эти команды имеют такой же формат, как и в отладчике.
Девять других команд осуществляют самые разнообразные операции связанные в основном с условиями трассировки программы.
=========================================== G - Запуск трассируемого участка. H - Установка верхней границы трассировки. O - Установка нижней границы трассировки. T - Определение трассируемых ячеек памяти. S - Определение точки останова. - Определение трассируемых регистров. R - Изменение содержимого регистров. N - Удаление позиции из списка трассировок. J - Инициализация трассировщика. ===========================================
Для запуска программы на выполнение, подается команда 'G'. Если перед ней указан адрес, то программа будет запущена с него, если адрес не указан, то выполнение продолжится с текущего адреса. Ход выполнения программы, можно видеть в нижней части экрана, где отображаются 8 строк дизассемблированного кода программы. Нижняя строка относится к команде которую сейчас предстоит выполнить трассировщику, остальные уже выполненные команды. В верхней части видны регистры процессора, которые представлены в шестнадцатиричном и двоичном видах, содержимое регистров изменяется сразу по выпонению программы. При подаче команды 'G' на экран в нижней строке появляется команда которую предстоит выполнить и трассировщик переходит в пошаговый режим. Следует учитывать, что команду 'BRK' и команды не определенные системой команд процессора (неиспользуемые коды) трассировщик не выполняет. Если по ходу попадается одна из таких команд трассировщик останавливается.
В пошаговом режиме трассировщик способен выполнять одну команду процессора при каждом нажатии клавиши пробела. Переход из пошагового режима в непрерывный производится клавишей стрелка вверх, а обратный переход в пошаговый клавишей 'РЕД'.
При выполнении программы производится автоматическая трассировка определенных регистров или ячеек. Совпадение условия трассировки приводит к останову выполнения программы и перехода в диалоговый режим.
В выполняемой программе встречаются команды вызова подпрограмм, некоторые из которых могут быть или системными, относящимися к монитору например, или уже отлаженными. Одним словом есть возможность отключить трассировку подпрограмм адреса обращения к которым выходят за заранее определенные границы. Эти адреса отображаются в врехней части экрана с сопроводительными знаками '>' и '<'. Слева указана младшая граница трассируемого пространства, справа старшая. Изменение этих границ производится соответственно командами 'O' и 'H'.
Во время выполнения программы трассировщик может следить за изменением данных и при определенных комбинациях останавливать трассировку. Для трассировки содержимого регистра процессора или ячейки памяти, помимо самого регистра или ячейки нужно указать маску содержимого, эталон для сравнения и производимую операцию. Маска определяет константу, с которой будет производиться операция 'И' с содержимым ячейки. Полученный результат сравнивается с эталоном и при совпадении условия с операцией происходит остановка. Возможны четыре операции:
============================== < - Эталон меньше результата. > - Эталон больше результата. = - Эталон равен результату. # - Эталон неравен результату. ==============================
Для ввода условия трассировки ячейки используется команда 'T'. Перед командой указывается адрес трассируемой ячейки. Для трассировки регистра вводится команда ' ' и сразу после нее имя требуемого регистра. Следующим шагом команда запрашивает последовательно требуемую маску, эталон, и операцию. Во время выполнения программы на экран выводится содержимое ячейки в шестнадцатиричном и двоичном видах, что позволяет визуально следить за изменением данных.
Используя команду 'S' можно определить точку останова программы. Вводится команда указанием адреса и 'S'. Если счетчик команд станет равен числу в 'S' то произойдет выход в диалоговый режим. Следует сказать, что в списке могут содержаться одновременно несколько трассируемых условий или точек останова, важно, что их общее число не может превышать 10.
Для исключения некоторых условий из списка существует команда 'N'. После подачи команды в поле трассируемых условий появляется курсор. Установив курсор против удаляемого условия нажмите 'ВВОД'. Таким образом удалите все ненужные условия. Для выхода требуется нажать 'РЕД'.
Чтобы изменить содержимое регитров процессора введите команду 'R'. При этом в поле регистров появляется красный курсор подсвечивающий соответсвующий вид представления регистра. Выбрав нужное положение нажмите 'ВВОД'. Если вы находились в шестнадцатиричном поле, то от Вас потребуется ввод байта, который заканчивается нажатием 'ВВОДа', в двоичном представлении метод несколько другой. Под двоичным числом повляется курсор. Стрелками влево/вправо можно выбрать нужный бит, а вверх/вниз изменить его значение. Заканчивается изменение двичного числа также нажатием 'ВВОДа'. Таким образом можно изменить содержимое всех регистров. Для выхода в диалоговый режим нажимается клавиша 'РЕД'.
Подав команду 'J', можно произвести полную инициализацию трассировщика. Все списки очищаются, а содержимое всех регитров становится равным нулю.
.сс
.цв
.шп14
УСТРОЙСТВО СИСТЕМЫ
.ов
.шп3
8.1. Адресное пространство 'Best tool kit'.
.шп0
Все адресное пространство системы 'Best tool kit' можно разделить на пользовательскую и системную память. Для пользователя выделен участок памяти с адреса ¤1000 (или точнее говоря ¤1800, т.к. с адреса ¤1000 находится текстовый экран системы) и до ¤BFFF. Сама система распологается в псевдо-ПЗУ, но несмотря на это автор специально предусмотрел возможность изменения системы командой ':'. Говоря другими словами при вводе данных командой ':' в адреса ¤D000-¤FFFF, производится запись информации в видимую страницу псевдо-ПЗУ.
Область памяти с адресами меньше ¤1000 отведена для работы самой системы. Там распологаются всевозможные буферы, изменяемые таблицы, пользовательские данные, а также векторы обмена внешних программ с системой и переключатель памяти.
В нулевой странице памяти значительная часть ячеек (почти половина) является свободной и соответственно доступна для работы внешних программ. В принципе занимаемое системой пространство нулевой страницы кончается ячейкой ¤7B, но при печати на бумагу колоночным драйвером, могут быть задействованы еще несколько ячеек, из расчета по две на одну колонку. Фактически можно считать, что начиная с адреса ¤90 пространство полностью свободно, маловероятно, что кто-либо воспользуется печатью более чем в 8-10 колонок.
=============================================================== 00 - 7B - Рабочие ячейки нулевой страницы системы. 7C - FF - Свободные ячейки нулевой страницы. 0100 - 01FF - Рабочий стэк системы. 0200 - 0235 - Векторы ввода/вывода для внешних программ. 0236 - 0366 - Переключатель псевдо-ПЗУ. 0367 - 036E - Переключатель доп-ОЗУ. 036F - 0392 - Подпрограммы обработки прерываний процессора. 0393 - 041F - Рабочие подпрограммы системы. 0420 - 057F - Буферы для долговременных данных системы. 0580 - 05FF - Буфер для данных внешней программы. 0600 - 06FF - Буфер секторного редактора. 0700 - 0753 - Для работы драйвера MFM накопителя. В другое время свободная память. 0754 - 07FF - Свободные ячейки. 0800 - 08FF - Буфер информации EXEC файла. 0900 - 09FF - T/S List EXEC файла. 0A00 - 0AFF - Сектор каталога. 0B00 - 0BFF - T/S List обрабатываемого файла, он же буфер под вводимую с клавиатуры информацию. 0C00 - 0CFF - Буфер под VTOC. 0D00 - 0DFF - Первый буфер (RWTS НГМД ЕС 5088). 0E00 - 0E55 - Второй буфер (RWTS НГМД ЕС 5088). 0E56 - 0E95 - Таблица кодировки (RWTS НГМД ЕС 5088). 0E96 - 0EFF - Таблица декодировки (RWTS НГМД ЕС 5088). 0F00 - 0FFF - Буфер под переопределяемые клавиши. 1000 - 17FF - Текстовый экран. 1800 - BFFF - Пользовательское пространство. C000 - CFFF - Порты ввода/вывода. D000 - FFFF - Все страницы псевдо-ПЗУ заняты системой. ===============================================================
.сс
Вторая страница доп-ОЗУ недоступна из диалога отладчика. При входе в отладчик сразу включается страница ¤CX08 и ее изменение невозможно, т.к. страница ¤CX09 используется для буферизации, колоночным драйвером печати. Поэтому чтобы иметь доступ ко второй странице нужно изменить подпрограмму переключения доп-ОЗУ, о чем я раскажу в одном из следующих разделов.
.шп3
8.2. Подробно о нулевой странице.
.шп0
Для нормального использования подпрограмм ввода/вывода необходимо знать расположение ячеек в нулевой странице. Эта информация я думаю будет полезна и тем, кто захочет разобрать систему, узнать как она работает. Ниже приведена часть исходного текста системы в котором производится описание всех меток нулевой страницы с краткими коментариями. При дальнейшем описании системы мы будем пользоваться именами ячеек нулевой страницы из исходного текста.
.кс0
===================================================================== 1000: 71 *=====================* 1000: 72 * Ячeйки 'Zero page' * 1000: 73 *=====================* 0000: 74 ORG 0 0000: 75 *=====================* 0000: 76 ADL DS 1 Буфepныe ячeйки для coxpaнeния 0001: 77 ADH DS 1 peгиcтpoв, и для paбoты 0002: 78 ASAVE DS 1 нeкoтopыx дpугиx пpoгpaмм 0003: 79 XSAVE DS 1 0004: 80 YSAVE DS 1 0005: 81 0005: 82 COLOR DS 1 Hу c цвeтoм вce яcнo 0006: 83 WNDLFT DS 1 Пapaмeтpы тeкcтoвoгo oкнa 0007: 84 WNDWDTH DS 1 0008: 85 WNDTOP DS 1 0009: 86 WNDBTM DS 1 000A: 87 CH DS 1 Koopдинaтa куpcopa пo X 000B: 88 CV DS 1 Koopдинaтa куpcopa пo Y 000C: 89 BASL DS 1 Aдpec нaчaлa в пaмяти cтpoки в 000D: 90 BASH DS 1 кoтopoй cтoит куpcop 000E: 91 BAS2L DS 1 Иcпoльзуютcя для paбoты poликa 000F: 92 BAS2H DS 1 0010: 93 CSWL DS 1 Beктop экpaнa 0011: 94 CSWH DS 1 0012: 95 KSWL DS 1 Beктop клaвиaтуpы 0013: 96 KSWH DS 1 0014: 97 RNDL DS 1 Для тoгo чтoбы куpcop мигaл 0015: 98 RNDH DS 1 0016: 99 YSAV1 DS 1 Koд cимвoлa нa кoтopoм cтoит куpcop 0017: 100 BUFFER0 DS 1 Иcпoльзуютcя пpи пepeoпpeдeлeнии 0018: 101 OXREG DS 1 и пpи paбoтe c пepeoпpeдeляeмыми 0019: 102 FLAJOK DS 1 клaвишaми 001A: 103 SIGHL DS 2 Aдpec пoзиции в cooбщeнии 001C: 104 SIGVEC DS 2 Вектор таблицы сообщений 001E: 105 POLSTR DS 1 Положение в строке ввода 001F: 106 001F: 107 SLOT DS 1 Paзъeм 0020: 108 DRIV DS 1 Дpaйвep 0021: 109 TRAK DS 1 Tpeк 0022: 110 SECT DS 1 Ceктop 0023: 111 BUFR DS 2 Буфep 0025: 112 RBOT DS 1 Дeйcтвия 0026: 113 SRAZU DS 1 MFM - cpaзу oбpaбaтывaть ? 0027: 114 SHGFD DS 1 FM/MFM 0028: 115 OTZV DS 1 Boзвpaтный кoд 0029: 116 POLO DS 2 Пoлoжeниe гoлoвки Shugarta 002B: 117 POOL DS 2 Пoлoжeниe гoлoвки TEACa 002D: 118 Z0A DS 1 Paбoчиe ячeйки: 002E: 119 Z0B DS 1 Ceктop 002F: 120 Z0C DS 1 Tpeк 0030: 121 Z0D DS 1 Toм 0031: 122 Z0E DS 1 0032: 123 Z0F DS 1 0033: 124 Z10 DS 1 Koнcтaнтa кoдиpoвки 0034: 125 GAP DS 1 Пpoмeжутoк мeжду ceктopaми 0035: 126 DTRK DS 1 Teкущий тpeк 0036: 127 SBF DS 2 Aдpec oбpaбaтывaeмoгo ceктopa 0038: 128 CNTF DS 2 Cчeтчик paзмepa GAPa 003A: 129 003A: 130 PSLOT DS 1 Разъем интерфейса 003B: 131 003B: 132 LMNEM DS 1 Bce ячeйки oтлaдчикa cильнo 003C: 133 RMNEM DS 1 pacxoжи. He вoзмoжнo тoчнo 003D: 134 FORMAT DS 1 укaзaть нa xoзяинa дaннoй ячeйки. 003E: 135 LENG DS 1 B кaждoм кoнкpeтнoм cлучae нaдo 003F: 136 MODE DS 1 cмoтpeть oтдeльнo 0040: 137 PC DS 2 0042: 138 A1 DS 2 0044: 139 A2 DS 2 0046: 140 A3 DS 2 0048: 141 A4 DS 2 0048: 142 COMM EQU A4 004A: 143 CODE DS 2 004C: 144 COUNT DS 1 004D: 145 ADGO DS 2 004F: 146 004F: 147 TEKAДM DS 1 Teкущий aдpec в пaмяти 0050: 148 TEKAДC DS 1 0051: 149 OKHO DS 1 Peгиcтp cocтoяния 0052: 150 CЧETЧИK DS 1 Peгиcтp oбщeгo нaзнaчeния 0053: 151 AДPTEKM DS 1 0054: 152 AДPTEKC DS 1 0055: 153 TEKAБM DS 1 Teкущий aдpec в пaмяти пpи 0056: 154 TEKAБC DS 1 вывoдe нa экpaн 0057: 155 AДPЭKP DS 1 Teкущий aдpec нa экpaнe 0058: 156 AДPЭKPC DS 1 0059: 157 0059: 158 NVTOC DS 1 Hoмep тeкущeгo VTOCa 005A: 159 SHIFT DS 1 Cмeщeниe в ceктope кaтaлoгa 005B: 160 FILETYP DS 1 Зaкaзaнный тип фaйлa 005C: 161 FINDFLAG DS 1 Флaг для oткpытия фaйлa 005D: 162 SLIST DS 1 Ceктop T/S List 005E: 163 TLIST DS 1 Tpeк T/S List 005F: 164 SCAT DS 1 Ceктop тeкущeгo ceктopa кaтaлoгa 0060: 165 TCAT DS 1 Tpeк тeкущeгo ceктopa кaтaлoгa 0061: 166 BLSTAT DS 1 Kaк читaть фaйл: oтнocитeльнo,... 0062: 167 BLSTPAL DS 1 Физичecкoe нaчaлo фaйлa 0063: 168 BLSTPAH DS 1 0064: 169 BLSTARL DS 1 Лoгичecкoe нaчaлo фaйлa 0065: 170 BLSTARH DS 1 0066: 171 BLLENL DS 1 Физичecкaя длиннa фaйлa 0067: 172 BLLENH DS 1 0068: 173 RDBL DS 1 Aдpec нaчaлa фaйлa 0069: 174 RDBH DS 1 006A: 175 RDLN DS 1 Длиннa в ceктopax 006B: 176 RTYP DS 1 Eгo тип 006C: 177 SHLIST DS 1 Cмeщeниe в T/S List 006D: 178 DCRES DS 2 Иcпoльзуютcя пpи вывoдe кaтaлoгa 006F: 179 DCWORK DS 2 0071: 180 DCRES1 DS 1 0072: 181 CTDCT DS 1 Cтepтыe/нopмaльныe (кaтaлoг) 0073: 182 NFILE DS 1 Чиcлo фaйлoв (кaтaлoг) 0074: 183 SMEZ DS 1 Tип фaйлa 0075: 184 DR1 DS 1 First HГMД 0076: 185 DR2 DS 1 Second HГMД 0077: 186 OTIDO DS 1 Haчинaя/кoнчaя c фaйлa(oм) 0078: 187 LAST DS 1 0079: 188 NTRC DS 1 Hoмep тpeкa пpи пoиcкe cвoбoднoгo 007A: 189 NVVT DS 1 Cчeтчик тpeкoв вo VTOCe 007B: 190 NDVG DS 1 Paбoчaя пpи уcт./ocвoбoждeнии 007C: 191 ADBF EQU * Пo двe ячeйки нa кoлoнку ===================================================================== .кс
.шп3
8.3. Векторы подпрограмм системы.
.шп0
Для обращения к подпрограммам системы, в ОЗУ расположены точки входа, при входе в которые произойдет переадресация на реальные подпрограммы системы. Передача управления на все подпрограммы осуществляется через переключатель памяти, что позволяет обращаться к ним из произвольной страницы псевдо-ПЗУ, хотя реально страница отведенная для программы пользователч фиксирована. В таблице ниже приведены все точки входа с краткими коментариями:
=============================================== 0200 - Вывод символа на принтер. 0203 - Вывод байта на принтер. 0206 - Инициализация принтера. 0209 - Вывод символа на устройство. 020C - Вывод символа на экран. 020F - Вывод сообщения. 0212 - Чтение символа с устройства. 0215 - Чтение символа с клавиатуры. 0218 - Обращение к драйверу НГМД. 021B - Установка стандартного формата экрана. 021E - Дизассемблирование команды. 0221 - Диззасемблировать с адреса. 0224 - Выделить число из строки. 0227 - Вывод байта (шестнадцатиричное). 022A - Вывод шестнадцатиричной цифры. 022D - Чтение символа с клавиатуры без курсора. 0230 - Вертикальная табуляция. 0233 - Вход в отладчик. ===============================================
.шп3
8.4. Описание подпрограмм.
.шп2
Первые три подпрограммы
.шп0; предназначены для вывода информации на пчатающее устройство. Интересной особенностью является то, что эти векторы (т.е. адреса перехода на подпрограммыв командах JMP), можно заменить на любые другие. Автор специально построил все внутренние подпрограммы так, что при выводе информации на бумагу, вызов подпрограмм самим отладчиком производится через эти три вектора.
Подпрограмма '0200' выводит на печать символ. В стандартном варианте (предусмотренном самой системой) вывод может производиться на принтеры CPA-80 и EPSON FX-85. Для правильной работы подпрограммы, требуется стандартная распайка кабеля принтера, в соответствии с описание СПТ 'Агат-Автор'. Эта подпрограмма осуществляет перекодировку кодов соответствующих знакам Агата в коды требуемые принтерами.
Вторая подпрограмма '0203' тоже выводит информацию на принтер, но в отличие от первой не производит какой-либо перекодировки байта. Эта подпрограмма используется как самой системой для начальной закачки принтера кодами, так может быть использована и пользователем, например для вывода на бумагу графических изображений.
Перед тем, чтобы начать вывод на бумагу, нужно инициализировать плату интерфейса ПЭВМ Агат, для чего нужно вызвать подпрограмму '0206'. Если плата не была инициализирована, вывод будет невозможен. При вызове этой подпрограмма, одновременно производится и инициализация принтера.
.шп2
'0209' -
.шп0; выводит символ на устройство. Это значит, что если в текущий момент включен вывод на бумагу, то вывод информации по этому вектору приведет к появлению символов, как на экране, так и на бумаге. В сущности это подпрограмма состоит из одной команды 'JMP (CSWL)', но ее наличие все равно важно, т.к. подпрограммы к которым может происходить переход через адреса в 'CSWL', находятся в другой странице псевдо-ПЗУ.
.шп2
'020C' -
.шп0; выводит символ на экран. Никаких специфичных вещей эта подпрограмма не имеет. По структуре она сопадает с подпрограммой 'COUT' монитора 'Школьницы'. В общем случае можно скзать, что подпрограмма выводит символ содержащийся в аккумуляторе и содержимого регистров не меняет. Цвет находится в ячейке 'COLOR' причем старший бит определяет режим вывода на экран: 0 - на экран 32*32, 1 - на экран 64*32. Все остальные имена ячеек соответствуют исходному тексту упоминавшегося выше монитора.
.шп2
'020F' -
.шп0; вывод на экран сообщения. Это специальная подпрограмма используемая в том числе и самой системой. Для ее функционирования требуется задать вектор списка адресов сообщений. Вектор распологается в двух ячейках: 'SIGVEC' - младший байт, 'SIGVEC'+1 - старший байт. Сам список адресов, должен содержать адреса начала сообщений в порядке старший байт, младший байт (команда 'DDB'). При вызове подпрограммы в регистр 'Y' заносится номер сообщения, по порядку содержимого списка адресов, начиная с нуля. После возврата содержимое регистров остается неизменным.
При выводе сообщения можно использовать разнообразные коды переключения цвета, инверсии, управляющих символов и т.д. Заканчивается сообщение байтом 00. Есть пять специальных команд вводимые непосредственно в текст сообщения, и интерпретируемых подпрограммой вывода сообщений:
============================= 1 - Установка в позицию. 2 - Установка по горизонтали. 3 - Повторить по горизонтали. 4 - Повторить по вертикали. 5 - Перейти на адрес. =============================
'1' - за этой командой следуют два байта содержащие координаты по горизонтали и вертикали.
'2' - за этой командой следует координата по горизонтали. Текущая вертикальная координата не изменяется.
'3' - эта команда требует двух дополнительных байта. Она позволяет вывести строку из одинаковых символов. В первом байте указывается количество выводимых символов, во втором сам символ. После вывода каждого символа курсор перемещается вправо.
'4' - требует наличия двух дополнительных байт. Она также выводит несколько одинаковых символов, с тем исключеним, что после вывода каждого символа курсор смещается не вправо, а вниз. Это позволяет выводит вертикальные столбцы символов. Эта команда совместно с предыдущей становится незаменимой при оформлении рабочих экранов программ.
'5' - после команды должны находиться два байта, содержащие адрес перехода вывода сообщения. Адрес указывается в том же формате как и в списке адресов сообщений.
При работе с подпрограммой вывода сообщений, обязательно нужно учитывать, что она способна охватить за раз сообщение не более чем из 256 байт. Если требуется выводить сообщение большей длины (хотя это и редкий случай), используйте команду '5' с адресом например непосредственно следующим за командой. При вызове команды '5' отсчет начинает производиться вновь с нуля, что позволяет выводить бесконечно длинные сообщения.
Еще одним немаловажным условием для работы с подпрограммой вывода сообщений является обязательное расположение списка адресов сообщений и самих сообщений по адресу не менее ¤E000. Это связано с тем, что подпрограмма выводящая сообщения распологается в другой странице псевдо-ПЗУ (¤CX61) и не может иметь одновременный доступ к своим данным и данным в другой странице.
.шп2
'0212' -
.шп0; вводит символ с устройства. В наиболее частом виде это происходит с клавиатуры, но может также быть например из файла (команда ДОС [EXEC), или при нажатии функциональной клавиши, также символы будут введены из буфера клавиш.
.шп2
'0215' -
.шп0; вводит символ с клавиатуры выводя на экран курсор. Никакой обрабоки или проверки при вызове подпрограммы не происходит. Подпрограмма использует для работы регистр 'Y'. При нажатии клавиши в аккумуляторе возвращается соответствующий символ. В ячейке 'YSAV1' находится символ на котором стоял курсор.
.шп2
'0218' -
.шп0; позволяет производить обмен с диском на уровне секторов. Для работы с подпрограммой нужно заполнить таблицу которая распологается в нулевой странице начиная с адреса ¤1F. При работе драйвера НГМД параметры не изменяются, поэтому можно использовать например текущий НГМД не изменяя SLOT, DRIV, SHGFD, или изменять номер сектора на очередной непосредственно в таблице командой 'DEC' или 'INC'.
SLOT - в ней содержится номер разъема накопителя умноженный на ¤10.
DRIV - номер привода накопителя. Первому приводу соответствует цисло 0, второму 1.
TRAK - номер трека на котором распологается обрабатываемый сектор.
SECT - номер обрабатываемого сектора.
BUFR - адрес буфера в который читается или из которого пишется сектор. Адрес указыватся двумя байтами в порядке младший, старший.
RBOT - команда драйверу НГМД.
1 - Чтение сектора с диска. 2 - Запись сектора на диск.
¤80 - Форматирование диска.
SRAZU - команда используемая при работе с MFM НГМД. Если старший бит в ячейке 'SRAZU' установле в 1, то драйвер будет работать также, как и драйвер FM НГМД, т.е. выполнять чтение или запись сразу после получения команды. Если же старший бит в 'SRAZU' равен 0, то информация о секторе будет буферизирована. Также будет буферизироваься информция о всех последующих секторах, до тех пор, пока не будет заказана работа с другим треком, или старший бит в 'SRAZU' установлен в 1. В этом случае все буферизированные сектора будут обработаны сразу. Это позволяет довести скорость обмена с НГМД, до максимально возможного - производить обработку трека за один оборот диска.
SHGFD - определяет тип НГМД. Если старший бит 0 - FM накопитель, 1 - MFM.
OTZV - код завершения обмена. Если после выхода из подпрограммы признак 'C' процессора сброшен в 0, то обмен завершился успешно, если 'C'=1, то произошла ошибка. В ячейке 'OTZV':
0 - Успешное завершение. 1 - Ошибка обмена с НГМД. 2 - Диск закрыт на запись.
Остальные ячейки относящиеся к драйверу диска являются рабочими и для пользователя важной информации не несут.
.шп2
.стBest tool kit 3
[an error occurred while processing this directive]