ПОЛНОЕ ОПИСАНИЕ TR-DOS 5.04T
================================================================
Введение.
В нашей стране из всех существующих дисковых интерфейсов рас-
пространение получил интерфейс BETA-DISC с дисковой операционной
системой TR-DOS фирмы Technology Research Ltd. Эта система имеет
много преимуществ перед системой, использующей в качестве ус-
тройства внешней памяти магнитофон. Операционная система нахо-
дится в теневом ПЗУ и использует 112 байтов оперативной памяти
для размещения системных переменных, а непосредственно во вpемя
работы с каталогом диска еще и буфер размером в 257 байтов. При
этом система совместима с мифическим устройством, известным под
названием ИHТЕPФЕЙС-1. Данная версия TR-DOS была изготовлена в
1991 году фирмой CRAFT.
Диски и дисководы.
Интерфейс поддерживает дисководы одинарной и двойной плотности,
одно- и двухсторонние. Но различные версии TR-DOS накладывают
ограничения на параметры дисководов. С TR-DOS 5.04T будут рабо-
тать только дисководы с временем перемещения головки 6 мс. Учти-
те также, что дисководы разных типов не всегда совместимы между
собой. Степень их совместимости показана в таблице:
г============T=======================¬
¦ ¦ Дисководы ¦
¦Формат диска+-----T-----T-----T-----¦
¦ ¦SD,SS¦SD,DS¦DD,SS¦DD,DS¦
¦------------+-----+-----+-----+-----+
¦ SD,SS ¦ C ¦ ? ¦ N ¦ N ¦
¦ SD,DS ¦ C ¦ C ¦ N ¦ N ¦
¦ DD,SS ¦ R ¦ ? ¦ C ¦ ? ¦
¦ DD,DS ¦ R ¦ R ¦ C ¦ C ¦
L============¦=====¦=====¦=====¦=====-
Здесь:
SD - 40-дорожечный
DD - 80-дорожечный
SS - односторонний
DS - двухсторонний
C - совместим полностью
R - совместим только при чтении
N - несовместим вообще
? - несовместим, но на некоторых дисководах может быть совместим
Автозагрузка.
Если TRDOS запускается с адреса 0 (после нажатия RESET в 48К
компьютере или программно), то после инициализации компьютера
система выбирает дисковод A и пытается загрузить с него и запус-
тить бейсик-программу "boot". Если в дисководе нет диска или на
диске нет этой программы, то на экран выводится подсказка и
TR-DOS переходит в режим ввода команд.
Внимание!!! Не оставляйте диск в дисководе при включении или
отключении питания, так как он может быть испорчен!
Автопроверка дисководов.
При первом обращении к дисководу TR-DOS автоматически проверяет
его параметры и заносит в соответствующие системные переменные.
Определяется скорость перемещения головки дисковода и количество
дорожек. Внимание!!! В подпрограмме есть ошибки (полный перечень
ошибок ПЗУ TR-DOS смотрите в конце описания).
Краткий перечень команд TR-DOS 5.04T.
г=======T=================================================¬
¦Команда¦ Функции ¦
¦-------+-------------------------------------------------¦
¦ * ¦Установка дисковода по умолчанию ¦
¦ 40 ¦Информирует TR-DOS, что дисковод 40-дорожечный ¦
¦ 80 ¦Информирует TR-DOS, что дисковод 80-дорожечный ¦
¦ CAT ¦Вывод каталога диска ¦
¦ CLOSE#¦Закрытие файла данных ¦
¦ COPY ¦Копирование файлов при двух дисководах ¦
¦ COPY S¦Копирование файла при одном дисководе ¦
¦ COPY B¦Копирование всего диска при одном дисководе ¦
¦ ERASE ¦Стирание файлов ¦
¦ GO TO ¦Запуск файла, полученного при помощи кнопки MAGIC¦
¦ LIST ¦Вывод расширенного каталога диска ¦
¦ LOAD ¦Загрузка файла ¦
¦ MERGE ¦Слияние программ на бейсике ¦
¦ MOVE ¦Упаковка дискового пространства ¦
¦ NEW ¦Переименование файла ¦
¦ OPEN# ¦Открытие файла данных ¦
¦ PEEK ¦Чтение сектора файла ¦
¦ POKE ¦Запись сектора файла ¦
¦ RETURN¦Возврат из TR-DOS ¦
¦ RUN ¦Запуск программ ¦
¦ SAVE ¦Запись файла ¦
¦ VERIFY¦Сравнение файлов на диске и в памяти ¦
L=======¦=================================================-
Синтаксис команд.
TR-DOS - гибкая система и вы можете получить доступ к ней из
бейсика и машинных кодов. Когда командный процессор TR-DOS ждет
от вас команды, вы видите подсказку в виде имени дисковода и
стрелки. Если выполнение команды завершилось ошибкой, то вслед
за подсказкой будет выведена старая команда, которую вы можете
отредактировать и снова ввести. Большинство команд после работы
возвращают управление TR-DOS, но есть исключения, о которых рас-
сказано в описаниях команд.
Все параметры команд записываются так же, как и в бейсике. То
есть строковые константы должны быть в кавычках, параметры могут
быть переменными, функциями, выражениями и так далее.
Возврат из TR-DOS в бейсик.
Для возврата из TR-DOS используется команда RETURN. Формат
ввода команды:
RETURN
Переход в TR-DOS из бейсика.
Для входа в командный процессор TR-DOS нужно вызвать подпрог-
рамму в машинных кодах с адреса 15616. Hапример:
RANDOMIZE USR 15616
Выполнение команд TR-DOS из бейсика.
Для того, чтобы выполнить команду TR-DOS, находясь в бейсике,
перед командой надо записать префикс:
RANDOMIZE USR 15619:REM:
В этом случае после работы команда возвращает управление в бей-
сик, хотя и тут есть свои исключения. При этом команда TR-DOS
должна быть последней в строке программы на бейсике, но после
нее может следовать комментарий. Правила записи комментариев в
командах TR-DOS вы найдете в описаниях команд.
Функция USR 15619 возвращает код ошибки TR-DOS (содержимое пе-
ременной 23823). Полный перечень кодов ошибок вы найдете в конце
описания.
Выбор дисковода по умолчанию.
Дисковод по умолчанию - это дисковод, к которому будут обра-
щаться команды, в которых не указано имя дисковода. После иници-
ализации по умолчанию выбирается дисковод A.
TR-DOS поддерживает 4 дисковода (A, B, C, D). Формат команды
для изменения дисковода по умолчанию следующий:
*<дисковод>
Имя дисковода - это строка, от которой берется первый символ
(A, B, C или D).
Временный выбор дисковода.
Постоянно изменять дисковод по умолчанию - это долго и неудоб-
но. Поэтому в большинстве команд можно указать дисковод, к кото-
рому команда будет иметь доступ. Для этого перед именем файла
нужно записать имя дисковода с двоеточием, например:
LOAD"B:PROGRAM"
Если для команды не требуется имя файла, то имя дисковода с
двоеточием указывается после нее:
CAT"B:"
Форматирование диска.
Для использования диск должен быть отформатирован. Форматирова-
ние - это разметка дорожек, секторов и создание каталога на дис-
ке. Формат команды:
FORMAT<имя диска>
После нажатия ENTER вы увидите внизу экрана сообщение:
PRESS T FOR TURBO FORMAT
ANY OTHER KEY FOR FORMAT
Если вы нажмете T, то сектора на дорожках будут размечены по
порядку, иначе они будут чередоваться (1, 9, 2, 10, 3, 11...).
Если диск форматируется в режиме TURBO, то TR-DOS будет быстрее
работать с ним, но иногда это существенно замедляет работу с
диском. Во время процесса номер текущей форматируемой стороны
(HEAD) и дорожки (CYLINDER) вы будете видеть внизу экрана. По
окончании там вы увидите сообщение, например:
DISCNAME
2544/2544
PRESS R FOR REPEAT FORMAT
ANY OTHER KEY FOR TR-DOS
DISCNAME - это имя диска, за которым следует количество отфор-
матировавшихся секторов и максимально возможное количество сек-
торов для данного формата диска. Если эти два числа не равны, то
это значит, что на диске есть плохие сектора и его не рекоменду-
ется использовать в системе TR-DOS. Если теперь вы нажмете R, то
форматирование будет повторено, иначе вы вернетесь в TR-DOS или
бейсик (смотря откуда выполняли команду).
Вы можете форматировать диск не только с дисководе по умолча-
нию. Для назначения дисковода перед именем диска поставьте имя
дисковода с двоеточием после него.
Формат диска зависит от типа дисковода, в котором он форматиру-
ется, однако если первый символ имени диска $, то диск всегда
будет односторонний. После имени диска может следовать коммента-
рий. На доpожке TR-DOS создает 16 секторов по 256 байтов. Дорож-
ка 0 отводится под каталог. Исходя из этого можем определить
максимальное количество секторов для каждого типа диска:
SD,SS - 624
SD,DS - 1264
DD,SS - 1624
DD,DS - 2544
TR-DOS осуществляет несколько упрощенное форматирование. На до-
рожках полностью отсутствует индексное поле, номер стороны в ад-
ресном маркере сектора всегда равен 0. По этим причинам диск,
форматированный в системе TR-DOS нельзя прочитать на других ЭВМ,
например IBM PC. Ниже приведен формат одного сектора диска,
обеспечиваемый TR-DOS 5.04T:
10 байтов 78 - пробел
12 байтов 0 - синхропромежуток
3 байта 245 - записывается синхроимпульс
1 байт 254 - адресная метка идентификатора
1 байт NN - номер дорожки
1 байт 0 - номер стороны диска
1 байт NN - номер сектора
1 байт 1 - длина сектора (256 байтов)
1 байт 247 - записывается контрольная сумма
22 байта 78 - пробел
12 байтов 0 - синхропромежуток
3 байта 245 - записывается синхроимпульс
1 байт 251 - адресная метка данных
256 байтов 0 - данные сектора (нулевые байты)
1 байт 247 - записывается контрольная сумма
60 байтов 78 - пробел
Каталог диска.
Имеются 2 команды вывода каталога: CAT и LIST. Команда CAT вы-
водит имена и расширения файлов, их длину в секторах, имя диска,
количество стертых и нестертых файлов на нем и количество сво-
бодного места. Команда LIST выводит еще и тип диска, адрес заг-
рузки файлов, их длину в байтах и строки автостарта программ на
бейсике.
Синтаксис команд одинаков за исключением ключевых слов, поэтому
я буду говорить только о команде CAT, подразумевая, что все это
относится и к команде LIST.
Основной синтаксис:
CAT
После команды вы можете назначить дисковод, например:
CAT"B:"
Вы можете направить вывод в другой поток, поставив после слова
CAT значок "#" и номер потока. Имя дисковода должно идти после
номера потока и отделяться от него запятой. Например, команда
CAT#3,"C:"
отошлет каталог дисковода C на принтер.
Если вы указали в команде и поток, и дисковод, то после имени
дисковода можно поместить комментарий.
Копирование файлов.
Для копирования файлов имеются 3 команды:
COPY - копирование файлов при двух дисководах
COPY S - копирование одного файла при одном дисководе
COPY B - копирование всего диска при одном дисководе
1. Команда COPY.
Синтаксис команды:
COPY<новое имя>,<старое имя><расширение>[<комментарий>]
Здесь <новое имя> и <старое имя> - старое и новое имена копиру-
емого файла. Они представляют собой обычные строковые выражения.
Расширение файла обозначается ключевыми словами:
CODE - расширение C
DATA - расширение D
# - расширение #
иначе - расширение B
Расширение B может обозначаться пустой строкой. Бывают также ис-
ключения, о которых будут отдельные замечания. Комментарий, ес-
тественно может отсутствовать.
Если вместо обоих имен файлов поставить звездочки, то будут ко-
пироваться все файлы. Внимание!!! В подпрограмме есть ошибка.
Если во время копирования на диске-приемнике встретится файл с
таким же именем и расширением, как и тот, который копируется, то
система выдаст сообщение, например:
FILENAME FILE EXISTS
OVER WRITE?(Y/N)
Если вы ответите Y, то файл будет переписан, иначе копирование
продолжится со следующего файла.
2. Команда COPY S.
Синтаксис:
COPY S<имя файла><расширение>[<комментарий>]
Поскольку будет использоваться один дисковод, то команда будет
просить вас менять диски. SOURCE DISC - это диск-источник,
DESTINATION DISC - диск-пpиемник.
3. Команда COPY B.
Синтаксис команды:
COPY B[<комментарий>]
Команда точно так же, как и COPY S будет просить вас менять дис-
ки. Внимание!!! Вся старая информация на диске-приемнике будет
стерта, так как команда производит абсолютное копирование всей
используемой части диска дорожку в дорожку. Команда работает
только на дисководе по умолчанию.
Внимание!!! Во всех трех подпрограммах есть ошибки.
Переименование файлов.
Одно из достоинств дисковой системы - возможность изменять имя
файлов. Для этого используется команда:
NEW<новое имя>,<старое имя><расширение>[<комментарий>]
Удаление файлов.
Если файл на диске устарел и больше вам не потребуется, то его
можно удалить. Для этого используется команда:
ERASE<имя файла><расширение>[<комментарий>]
Команда удаляет все файлы с такими данными. Процедура удаления
файла заключается в замене первого символа его имени на CHR$ 1.
После этого файл не отображается в каталоге, но его можно восс-
тановить при помощи какого-либо COMANDERа. Для физического уда-
ления файлов служит команда MOVE.
Упаковка пространства диска.
Когда файл удален, он все еще занимает место на диске. Чтобы
освободить это место для других файлов, требуется команда MOVE.
Синтаксис команды:
MOVE[<комментарий>]
После использования этой команды вы уже не сможете восстановить
стертые файлы, поэтому будьте осторожны. Команда работает только
на дисководе по умолчанию.
Запись файлов.
Для записи файлов служит команда SAVE. Ее синтаксис такой же,
как и в бейсике. Для обозначения расширения файла B можно ис-
пользовать только пустую строку или слово LINE. Примеры команд
записи:
SAVE"HONDACC"LINE 100 комментарий
SAVE"A:DESIGN"
SAVE"MONEY"DATA M$() комментарий
SAVE"SALECALC"CODE 40000,120 комментарий
Загрузка файлов.
Команда LOAD абсолютно такая же, как и в бейсике. Для обозначе-
ния расширения B можно использовать любой символ, кроме CODE и
DATA. При успешной загрузке программы на бейсике она либо запус-
тится, либо вы попадете в бейсик с сообщением OK. Можно также
ввести просто LOAD. Тогда будет произведена попытка авто-
загрузки и при неудаче вы выйдете в командный процессор TR-DOS,
а в бейсик сможете вернуться по команде RETURN. Примеры команд
загрузки:
LOAD"INTEREST" комментарий
LOAD"MARGIN"CODE 51000,14536 комментарий
LOAD"MONEY"DATA M$() комментарий
LOAD"SALECALC"CODE
Запуск файлов.
TR-DOS позволяет запускать программы на бейсике и в кодах одной
командой. Для этого используется команда RUN. Ее синтаксис такой
же, как и LOAD. Также есть команда RUN - эквивалент
LOAD. Внимание!!! В подпрограмме есть ошибки.
Проверка файлов и слияние программ.
Для этого служат команды MERGE и VERIFY. Синтаксис такой же,
как и у LOAD. Естественно, MERGE работает только с программами
на бейсике. Есть также команда MERGE.
"Волшебная" кнопка (или просто MAGIC).
Пpи помощи этой кнопки почти любая прогpамма в любой момент
времени может быть записана на диск, а затем запущена с того же
места. Работа этой кнопки основана на немаскируемом прерывании.
Нажатие кнопки переключает ПЗУ на TR-DOS и вырабатывает сигнал
NMI. Подпрограмма обработки немаскируемого прерывания сохраняет
регистры процессора на стеке и записывает всю память компьютера
на диск в файле "@"CODE. Если у вас 48К, то этим все заканчива-
ется, иначе на диск записываются все страницы памяти, в которых
есть хотя бы один ненулевой байт в файлах "@N"CODE, где N - но-
мер страницы, которая хранится в файле, затем файл "@8"CODE, в
котором находится код банка памяти, активного в момент нажатия
MAGIC. Казалось бы, классная вещь, но во первых, в подпрограмме
есть грубейшие ошибки, во вторых, в новых программах просто нет
места в стеке для сохранения всех регистров и при записи стек
затирает саму программу. Учитывая это, а также некоммерческий
вид программ, полученных таким способом, я не рекомендую распро-
странять программы, сброшенные таким способом.
Подпрограмма MAGIC использует собственные системные переменные,
для организации которых 512 байтов с адреса 16384 записываются в
сектора 10 и 11 дорожки 0.
г=====T=====T==================================================¬
¦Адpес¦Длина¦ Содержимое ¦
¦-----+-----+--------------------------------------------------¦
¦16384¦ 256 ¦Буфер для операций с каталогом. ¦
¦16512¦ 32 ¦Подпрограмма определения текущего ПЗУ. ¦
¦16640¦ 1 ¦Контрольная сумма текущей страницы ОЗУ. ¦
¦16641¦ 1 ¦Код текущего банка памяти. ¦
¦16642¦ 1 ¦Номер файла страницы в каталоге. ¦
¦16643¦ 1 ¦Номер записываемой страницы ОЗУ. ¦
¦16644¦ 12 ¦не используется. ¦
¦16656¦ 8 ¦Имя файла страницы. ¦
¦16664¦ 1 ¦Расширение файла страницы. ¦
¦16665¦ 2 ¦Адрес загрузки файла страницы. ¦
¦16667¦ 2 ¦Длина файла страницы в байтах. ¦
¦16669¦ 1 ¦Длина файла страницы в секторах. ¦
¦16670¦ 1 ¦Номер первого сектора файла страницы. ¦
¦16671¦ 1 ¦Номер первой дорожки файла страницы. ¦
¦16672¦ 16 ¦Не используется. ¦
¦16688¦ 1 ¦Контрольный байт. Всегда равен 170. ¦
¦16689¦ 202 ¦Временный стек. ¦
¦23552¦ 1 ¦Тип дисковода: бит 3=0 - двухсторонний; 1 - одно- ¦
¦ ¦ ¦сторонний. При возврате содержит команду RET для ¦
¦ ¦ ¦переключения ПЗУ. ¦
¦23553¦ 1 ¦При входе в подпрограмму MAGIC сохраняет регистp ¦
¦ ¦ ¦состояния ВГ-93. Содержит флаг текущего ПЗУ (0 - ¦
¦ ¦ ¦бейсик-128; 16 - бейсик-48). ¦
L=====¦=====¦==================================================-
Для запуска MAGIC-файла используется команда GO TO. Ее синтак-
сис:
GO TO<имя файла><расширение>[<комментарий>]
Имя файла может быть изменено как угодно, при этом если первый
символ имени "$", то при запуске устанавливается режим прерыва-
ний IM 2, иначе IM 1. Также, надо оставлять номера в конце имен
файлов страниц. Наряду с обычными системными переменными подпро-
грамма GO TO использует свои:
г=====T=====T==================================================¬
¦Адрес¦Длина¦ Содержимое. ¦
¦-----+-----+--------------------------------------------------¦
¦16384¦ 16 ¦Не используется. ¦
¦16400¦ 1 ¦Тип дисковода: бит 1=1 - дисковод двухсторонний, ¦
¦ ¦ ¦0 - односторонний. ¦
¦16401¦ 1 ¦Копия системного регистра. ¦
¦16402¦ 14 ¦Не используется. ¦
¦16416¦ 2 ¦Длина имени файла. ¦
¦16418¦ 221 ¦Временный стек. ¦
¦16639¦ 1 ¦Не используется. ¦
¦16640¦ 256 ¦Место для загрузки файла "@8"CODE. ¦
L=====¦=====¦==================================================-
Внимание!!! В подпрограмме GO TO также есть ошибки.
Файлы данных.
Дисковая операционная система поддерживает работу с еще одним
типом файлов - с файлами данных. Файлы данных могут быть после-
довательного и произвольного доступа. Эти файлы разбиты на бло-
ки по 16 секторов с одинаковым именем. Для работы с этими файла-
ми служат следующие команды:
1. Открытие файла последовательного доступа для записи.
OPEN#<номер потока>,<имя файла>W[<комментарий>]
Если открываемый файл уже существует, то данные будут дописы-
ваться в конец файла. После этого вы можете заносить в ваш файл
данные путем вывода их в поток. например:
PRINT#4;"THIS IS A TEST LINE"
Попытка использовать поток для ввода приведет к ошибке
INVALID I/O DEVICE.
2. Открытие файла последовательного доступа для чтения.
OPEN#<номер потока>,<имя файла>R[<комментарий>]
Теперь вы можете вводить данные из файла через поток, например:
INPUT#4;A$
Hо вывести что-либо в файл вы не сможете.
3. Открытие файла произвольного доступа.
OPEN#<номер потока>,<имя файла>RND,<длина записи>[<комментарий>]
Теперь вы можете обращаться к файлу как для ввода, так и для вы-
вода. При обращении к файлу, первым делом выведите номер записи в
виде строки, заканчивая его символом CHR$ 6. Далее вы можете
вводить или выводить данные. После окончания ввода или вывода
CHR$ 13 надо снова выводить номер записи. Hапример:
PRINT#4;0,"OUTPUT DATA"
INPUT#4;(0),A$
PRINT#4;1,"RECORD 1"
4. Закрытие файла.
После работы с файлом его необходимо закрыть. Это делается ко-
мандой:
CLOSE#<номер потока>[<комментарий>]
При pаботе с файлом данных создается дополнительный канал. Его
структуру вы видите в таблице:
г===========T=====T============================================¬
¦Hомер байта¦Длина¦ Содержимое. ¦
¦-----------+-----+--------------------------------------------¦
¦ 0 ¦ 2 ¦Адрес подпрограммы вывода в файл (15630) ¦
¦ 2 ¦ 2 ¦Адрес подпрограммы вывода из файла (15622) ¦
¦ 5 ¦ 4 ¦Не используются ¦
¦ 9 ¦ 1 ¦Всегда равен 36 ¦
¦ 10 ¦ 1 ¦Всегда равен 1 ¦
¦ 11 ¦ 1 ¦Номер дисковода, которому принадлежит файл ¦
¦ 12 ¦ 1 ¦Номер текущего блока файла в каталоге ¦
¦ 13 ¦ 2 ¦Длина пройденной части файла последователь- ¦
¦ ¦ ¦ного доступа а также относительный адрес те-¦
¦ ¦ ¦кущего символа для подпрограммы ввода из ¦
¦ ¦ ¦файла ¦
¦ 15 ¦ 1 ¦Тип файла: ¦
¦ ¦ ¦ 0 - последовательный для чтения ¦
¦ ¦ ¦ 127 - произвольного доступа ¦
¦ ¦ ¦ иначе - последовательный для записи ¦
¦ 16 ¦ 8 ¦Имя текущего блока файла ¦
¦ 24 ¦ 1 ¦Расширение текущего блока файла ¦
¦ 25 ¦ 1 ¦Номер текущего блока в файле ¦
¦ 26 ¦ 1 ¦Всегда равен 32 ¦
¦ 27 ¦ 2 ¦Длина записанной части текущего блока в бай-¦
¦ ¦ ¦тах ¦
¦ 29 ¦ 1 ¦Длина текущего блока в секторах (всегда pав-¦
¦ ¦ ¦на 16) ¦
¦ 30 ¦ 1 ¦Номер первого сектора текущего блока файла ¦
¦ 31 ¦ 1 ¦Номер первой дорожки текущего блока файла ¦
¦ 32 ¦ 1 ¦Длина записи для файла произвольного доступа¦
¦ 33 ¦ 1 ¦Относительный адрес для символа для подпрог-¦
¦ ¦ ¦раммы вывода при работе с файлом произволь- ¦
¦ ¦ ¦ного доступа ¦
¦ 34 ¦ 1 ¦Если 0, то подпрограмма вывода будет прини- ¦
¦ ¦ ¦мать номер записи, иначе данные. Только для ¦
¦ ¦ ¦файла произвольного доступа. ¦
¦ 35 ¦ 1 ¦Если не pавен 0, то при загрузке следующего ¦
¦ ¦ ¦сектора файла текущий будет переписан. ¦
¦ 36 ¦ 256 ¦Текущий сектор файла ¦
L===========¦=====¦============================================-
Внимание!!! Во всех подпрограммах для работы с файлами данных
имеются ошибки.
Работа с секторами файлов.
В TR-DOS есть также возможность работать напрямую с секторами
файлов. Для этого существуют две команды.
1. Чтение сектора файла.
PEEK<имя файла>,<адрес в памяти>,<номер сектора файла>[<комментарий>]
2. Запись сектора файла.
POKE<имя файла>,<адрес в памяти>,<номер сектора файла>[<комментарий>]
Также существуют команды PEEK и POKE, которые
действуют также, как и LOAD.