[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]