[an error occurred while processing this directive]

.сс

.гр

.ов
\---------------------------------------\
|                                       |
|      Программа    MAKE DIR            |
|                                       |
|  Предназначена для:                   |
|                    создания           |
|                    переименования     |
|                    удаления           |
|                         подкаталогов  |
|                                       |
|---------------------------------------

После того как вами в диалоге ОТЛАДЧИКА будет подана команда 'K' на экране появится заставка и меню из трех пунктов:

F1 - Создать подкаталог
F2 - Переименовать подкаталог
F3 - Удалить подкаталог

Если Вы хотите создать подкаталог, то нажмите клавишу F1. Далее Вы должны ввести имя того подкаталога, который вы хотите создать и его длину. Длина подкаталога может быть в промежутке от 1 до 20 секторов.От длины подкаталога зависит количество файлов, которое Вы сможете туда записать ( по 7 файлов в сектор ).Максимальная цифра в 20 секторов взята как длина обычного каталога в DOS 3.3 для дискобода FD-55. Выбор длины осуществляется стрелками вправо/влево, подтверждением выбора является нажатие клавиши 'Ввод'. После чего подкаталог будет создан и программа вернется в заставку.

Если Вы хотите переименовать подкаталог, то нажмите клавишу F2. После чего вам нужно задать два имени через ','( точно как в команде '[REN' ОТЛАДЧИКА ) и нажать ввод. После переименования подкаталога программа вернется в заставку.

Если Вы хотите удалить подкаталог, то нажмите клавишу F3.Программа запросит у Вас имя подкаталога, который вы хотите удалить.Нужно учитывать, что подкаталог, содержащий нестертые файлы не может быть удален по идеологическим соображениям. То есть перед удалением подкаталога нужно стереть из него все файлы.

Вместо имени подкаталога можно использовать символ '/' точно также как и в файловой системе ОТЛАДЧИКа. При возникновении любой ошибки программа 'вывалится' в ОТЛАДЧИК.

Для выхода из программы нажмите клавишу 'РЕД'.

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

.сс

.цв

.шп16

УСТРОЙСТВО СИСТЕМЫ

.ов

8.1. Адресное пространство.

.шп1

Все адресное пространство системы можно разделить на пользовательскую и системную память. Для пользователя выделен участок памяти с адреса ¤1000 (или точнее говоря ¤1800, т.к. с адреса ¤1000 находится текстовый экран системы) и до ¤BFFF. Сама система располагается в псевдо-ПЗУ, но несмотря на это автор специально предусмотрел возможность изменения системы командой ':'. Говоря другими словами при вводе данных командой ':' в адреса ¤D000-¤FFFF, производится запись информации в видимую страницу псевдо-ПЗУ.

Область памяти с адресами меньше ¤1000 отведена для работы самой системы. Там располагаются всевозможные буферы, изменяемые таблицы, пользовательские данные, а также векторы обмена внешних программ с системой и переключатель памяти.

В нулевой странице памяти значительная часть ячеек (почти половина) является свободной и соответственно доступна для работы внешних программ. В принципе занимаемое системой пространство нулевой страницы кончается ячейкой ¤7B, но при печати на бумагу колоночным драйвером, могут быть задействованы еще несколько ячеек, из расчета по две на одну колонку. Фактически можно считать, что начиная с адреса ¤90 пространство полностью свободно, маловероятно, что кто-либо воспользуется печатью более чем в 8-10 колонок.

===============================================================
  00 - 7B   - Рабочие ячейки нулевой страницы системы.
  7C - FF   - Свободные ячейки нулевой страницы.
0100 - 01FF - Рабочий стек системы.
0200 - 0235 - Векторы ввода/вывода для внешних программ.
0236 - 036E - Переключатели памяти
036F - 0392 - Подпрограммы обработки прерываний процессора.
0393 - 041F - Рабочие подпрограммы системы.
0420 - 04FF - Буферы для долговременных данных системы.
0500 - 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 - Все страницы псевдо-ПЗУ заняты системой.
===============================================================

Система запрещает подключение к 4,5 сегментам других банков, кроме 4,5 соответственно. Система занимает банки 6,7,E,F,а банки C,D использует как буфер для колоночной печати,причем из диалога эти банки недоступны.

.сс

.шп16

8.2. Подробно о нулевой странице.

.шп1

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

.кс0

================================================================

1000:  71 *=======================*
1000:  72 * Ячeйки нулевой страницы
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нку
================================================================

.кс

.шп16

8.3. Векторы подпрограмм системы.

.шп1

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

===============================================
0200 - Вывод символа на принтер.
0203 - Вывод байта на принтер.
0206 - Инициализация принтера.
0209 - Вывод символа на устройство.
020C - Вывод символа на экран.
020F - Вывод сообщения.
0212 - Чтение символа с устройства.
0215 - Чтение символа с клавиатуры.
0218 - Обращение к драйверу НГМД.
021B - Установка стандартного формата экрана.
021E - Дизассемблирование команды.
0221 - Диззасемблировать с адреса.
0224 - Выделить число из строки.
0227 - Вывод байта (шестнадцатиричное).
022A - Вывод шестнадцатиричной цифры.
022D - Чтение символа с клавиатуры без курсора.
0230 - Вертикальная табуляция.
0233 - Вход в отладчик.
===============================================

.сс

.шп16

8.4. Описание подпрограмм.

.шп1

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

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

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

Перед тем, чтобы начать вывод на бумагу, нужно инициализировать плату интерфейса ПЭВМ "АГАТ", для чего нужно вызвать подпрограмму '0206'. Если плата не была инициализирована, вывод будет невозможен. При вызове этой подпрограмма, одновременно производится и инициализация принтера.

'0209' - выводит символ на устройство. Это значит, что если в текущий момент включен вывод на бумагу, то вывод информации по этому вектору приведет к появлению символов, как на экране, так и на бумаге. В сущности это подпрограмма состоит из одной команды 'JMP (CSWL)', но ее наличие все равно важно, т.к. подпрограммы к которым может происходить переход через адреса в 'CSWL', находятся в другой странице псевдо-ПЗУ.

'020C' - выводит символ на экран. Никаких специфичных вещей эта подпрограмма не имеет. По структуре она сопадает с подпрограммой 'COUT' монитора 'Школьницы'. В общем случае можно скзать, что подпрограмма выводит символ содержащийся в аккумуляторе и содержимого регистров не меняет. Цвет находится в ячейке 'COLOR' причем старший бит определяет режим вывода на экран: 0 - на экран 32*32, 1 - на экран 64*32. Все остальные имена ячеек соответствуют исходному тексту упоминавшегося выше монитора.

'020F' - вывод на экран сообщения. Это специальная подпрограмма используемая в том числе и самой системой. Для ее функционирования требуется задать вектор списка адресов сообщений. Вектор располагается в двух ячейках: 'SIGVEC' - младший байт, 'SIGVEC'+1 - старший байт. Сам список адресов, должен содержать адреса начала сообщений в порядке старший байт, младший байт (команда 'DDB'). При вызове подпрограммы в регистр 'Y' заносится номер сообщения, по порядку содержимого списка адресов, начиная с нуля. После возврата содержимое регистров остается неизменным.

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

=============================
1 - Установка в позицию.
2 - Установка по горизонтали.
3 - Повторить по горизонтали.
4 - Повторить по вертикали.
5 - Перейти на адрес.
=============================

'1' - за этой командой следуют два байта содержащие координаты по горизонтали и вертикали.

'2' - за этой командой следует координата по горизонтали. Текущая вертикальная координата не изменяется.

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

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

'5' - после команды должны находиться два байта, содержащие адрес перехода вывода сообщения. Адрес указывается в том же формате как и в списке адресов сообщений.

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

Еще одним немаловажным условием для работы с подпрограммой вывода сообщений является обязательное расположение списка адресов сообщений и самих сообщений по адресу не менее ¤E000. Это связано с тем, что подпрограмма выводящая сообщения располагается в другой странице псевдо-ПЗУ и не может иметь одновременный доступ к своим данным и данным в другой странице.

'0212' - вводит символ с устройства. В наиболее частом виде это происходит с клавиатуры, но может также быть например из файла (команда ДОС [EXEC), или при нажатии функциональной клавиши, такие символы будут введены из буфера переопределяемых клавиш.

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

'0218' - позволяет производить обмен с диском на уровне секторов. Для работы с подпрограммой нужно заполнить таблицу которая располагается в нулевой странице начиная с адреса ¤1F. При работе драйвера НГМД параметры не изменяются, поэтому можно использовать например текущий НГМД не изменяя SLOT, DRIV, SHGFD, или изменять номер сектора на очередной непосредственно в таблице командой 'DEC' или 'INC'.

.кс0

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 - Диск закрыт на запись.

Остальные ячейки относящиеся к драйверу диска являются рабочими и для пользователя важной информации не несут.

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

[an error occurred while processing this directive]