II. TR-DOS для программистов
Эта часть, с точки зрения программистов, наверное, самая инте-
ресная в данной главе. Здесь рассматриваются «внутренности» TR-DOS,
без знания которых невозможно использовать ОС из программ, напи-
санных на языках как высокого, так и низкого уровня.
TR-DOS ИЗНУТРИ
Идеология и структура
Как уже было сказано, вся TR-DOS расположена в ПЗУ объемом 16К.
Однако если проанализировать память ZX Spectrum, окажется, что все оста-
лось на своих местах — бейсик-система по-прежнему занимает нижние 16К
адресного пространства процессора, а верхние 48К занимает ОЗУ. Где же
находится программное обеспечение TR-DOS? Не будем вдаваться в детали
(тем более, что этому посвящена следующая глава), скажем лишь, что ядро
ОС размещено в так называемом теневом ПЗУ.
Попасть в теневое ПЗУ и, следовательно, в TR-DOS можно нескольки-
ми путями, как чисто программными, так и используя аппаратную поддер-
жку, Назовем эти пути точками входа в систему. Основных точек входа всего
шесть, и как минимум двумя из них Вы уже пользовались при входе в TR-DOS
из Бейсика — это вызов подпрограмм по адресам 15616 и 15619,
Позвольте, скажет любознательный читатель, ведь в этих адресах
расположены коды знакогенератора. Да, действительно, но аппаратная часть
сконструирована так, что при передаче управления на любую из 256 ячеек,
начиная с адреса 15616, вместо стандартного ПЗУ бейсик-системы будет
подключено ПЗУ, содержащее коды TR-DOS. Взяв на себя управление,
дисковая система выполнит требуемые от нее действия и так или иначе
вернет управление вызывающей программе. При этом восстанавливается
стандартная конфигурация памяти. Таким образом, коды TR-DOS «прозрач-
ны» как для бейсик-сисгемы, так и для пользователя. Однако есть способ,
позволяющий все же посмотреть, что представляет из себя TR-DOS. Попро-
буйте выполнить ко—-манду
SAVE "TR-DOS"CODE 0,16384
а затем загрузите файл "'TR-DOS" в ОЗУ и посмотрите его каким-либо
монитором, например MONS4. Не правда ли, что на бейсик-систему это мало
похоже, хотя опытный программист может и заметит некоторое сходство в
начальных адресах. Итак, Вы получили коды TR-DOS, но как это произошло
и куда на сей раз подевался Бейсик? Все очень просто. Когда TR-DOS
выполняет команды, в нижних 16К процессора присутствуют ее коды, вот
их-то Вы и записали.
На рис. 25 представлена блок-схема TR-DOS, для большей наглядно-
сти приведены также схемы бейсик-системы и аппаратной поддержки.
Блок-схема дана в несколько упрощенной форме. Сделано это преднамерен-
но, дабы не усложнять восприятие материала. Некоторые блоки и функции
вызываются во время исполнения команд ОС по несколько раз.
Блок установки бейсик-системы вызывается только единожды — при
включении питания или при нажатии на кнопку «Сброс» компьютера. Его
прямое назначение — выполнить те же действия, что выполняет бейсик-си-
стема при старте: тест памяти, инициализация системных переменных и др.
Этот блок позволяет напрямую попасть в TR-DOS, минуя Бейсик. Выполнить
установочные программы из бейсик-системы не удается, так как они не
возвращают управления в TR-DOS.
Блок установки TR-DOS вызывается всякий раз при вызове системы
из Бейсика. Основное его назначение — установка и инициализация обла-
сти системных переменных TR-DOS.
Инициализация системы заключается в следующем. Как бы ни про-
исходил старт системы, в первую очередь устанавливаются системные пере-
менные бейсик-системы (из Бейсика или из TR-DOS, в зависимости от того,
откуда производится запуск). Затем проверяется наличие Interface 1, и если
он присутствует, устанавливается область системных переменных для него.
Эта область расположена в постоянном месте памяти — между областью
системных переменных Бейсика и описателями каналов (на которую указы-
вает CHANS). Далее происходит открытие области переменных TR-DOS. Если
Interface 1 нет, то переменные занимают ту же область, если есть, то область
между переменными Interface 1 и описателями каналов. На этом блок уста-
новки TR-DOS заканчивает свою работу, и при последующих вызовах просто
пропускается.
Работа Диспетчера памяти заключается в манипулировании областью
системных переменных TR-DOS. Если в системе нет Interface 1, то Диспетчер
просто пропускается, не выполняя никаких действий. Если же Interface 1
присутствует, то переменные TR-DOS оказываются сдвинутыми на величину
области его системных переменных. Для большинства подпрограмм TR-DOS
это не приемлемо, так как они написаны для работы с абсолютными
адресами ячеек памяти. Для устранения этого конфликта и служит Диспет-
чер памяти. Для TR-DOS он меняет местами 45 байт между адресами 23747
и 23859, тем самым устанавливая «реальную» схему памяти, а затем, при
возврате, производит обратный обмен. Таким образом, для пользователя
нижняя часть системных переменных находится сверху. Это обстоятельство
необходимо учитывать в программах, работающих непосредственно с пере-
менными TR-DOS*.
При входе в TR-DOS из Бейсика или по старту управление получает
Интерфейс пользователя. Используя Строчный редактор бейсик-системы, эта
программа отвечает за ввод команд TR-DOS в непосредственном режиме. На
экран программа выдает подсказку вида
А>
где А — это имя дисковода по умолчанию.
Конвертор 128 —> 48 подготавливает введенную команду для Интер-
претатора команд. Дело в том» что в 48- и в 12 8-Бейсике по разному хранится
*) Так как Interface 1 у нас не получил большого распространения, то
материал, приведенный здесь, представляет скорее академический инте-
рес»
текст, набранный за оператором REM (а ведь именно так TR-DOS получает
команды из программы). В Бейсике-48 команды TR-DOS набираются токе-
нами, а в 128 — посимвольно. Для приведения команд к одному виду й
служит Конвертор 128 --> 48.
Синтаксический анализатор проверяет правильность написания ко-
манды TR-DOS.
Селектор и интерпретатор команд находят, а затем выполняют задан-
ную команду. При своей работе интерпретатор команд постоянно обращает-
ся к Интерпретатору системных функций, который наряду с Диспетчером
файловой системы и Дисковыми драйверами образуют Ядро ОС.
Интерпретатор системных функций представляет собой набор под-
программ, выполняющих некоторые элементарные действия, такие как
сброс микроконтроллера, выбор дисковода, чтение/запись с дискеты в фи-
зическом формате, создание, открытие, чтение/запись и удаление файлов,
а также некоторые другие. Интерпретатором полезно пользоваться из при-
кладных программ, минуя Командный процессор.
Диспетчер файловой системы отвечает за логический формат дискет,
поддержку каталога и все файловые запросы к Интерпретатору системных
функций.
Дисковые драйверы предназначены для программирования микро-
схемы контроллера КР1818ВГ93. Они также отвечают за некоторые запросы
к Интерпретатору.
Особняком стоят Программы подготовки н восстановления памяти.
Эти программы используются при сохранения копии памяти кнопкой
MAGIC, Так как необходимо обеспечить полное сохранение памяти, Программа
подготовки памяти перед выполнением операции сохраняет в специальной
области дискеты (сектора 10 и 11 на нулевой дорожке) чать оперативной
памяти, используемой для работы TR-DOS. По завершению операции память
с диска полностью восстанавливается Программой восстановления памяти*.
Точки входа в систему
Как будет показано ниже, TR-DOS не ограничивается только двумя,
описанными ранее, точками входа в систему, а предоставляет программисту
несколько других возможностей своего использования.
Итак, вспомним точки (т. е. адреса программ входа), которые нам уже
известны: 15616 — вход в TR-DOS и 15619 — вызов команд TR-DOS из
Бейсика. Любителям этого языка придется ограничиться только ими, так как
другие точки предназначены для использования преимущественно из ассем-
блера**.
Точка по адресу 15649 является достаточно важной, но, к сожалению,
часто забываемой программистами. Ее назначение — установка системы
TR-DOS. При этом в памяти открывается область системных переменных и
происходит ее инициализация. Без этих действий невозможно пользоваться
следующей точкой***.
А) Необходимо отметить, что два байта, расположенные по адресам 23304 и
23552 все же теряются. Используются также как минимум 40 байт из
стека процессора.
Возможно использовать их и из других языков, например, Паскаля, Си,
но и там все опять-таки сводится к ассемблеру.
***) Пользователям компьютера «Хоббит» (новая модель) следует учесть, что
в начале программы по адресу 15649 не стоит незначащий оператор
NOP, и поэтому подпрограмма для них недоступна.
Следующая точка входа в TR-DOS (15635) наиболее интересна с точки
зрения системных программистов. Это вызов Интерпретатора системных
функций, используя который, можно получить не только доступ к файловой
системе, но и «спуститься» на уровень ниже — к физическому формату
дискеты. Еще раз отметим, что использование Интерпретатора без установки
области системных переменных недопустимо.
В большинстве случаев к моменту вызова Интерпретатора эта область
уже открыта вызовами 15616 или 15619, но если где-то по ходу выполнения
пользовательской программы происходит инициализация памяти, то область
системных переменных TR-DOS необходимо вновь создать.
В разделе «Ввод команд» было сказано о том, что в компьютерах
ZX Spectum с объемом оперативной памяти 48К вход в TR-DOS происходит
при нажатии на кнопку «сброс». Это еще одна точка входа в систему.
Вход в систему при нажатии кнопки MAGIC происходит через специ-
альную точку входа с адресом 102. В интерфейсе Beta Disk это сделано
аппаратно, хота, используя прием, описанный на стр. 210, это можно сделать
и программно.
И, наконец, последняя точка используется при наступлении маскиру-
емого прерывания. TR-DOS не имеет программ, обслуживающих это преры-
вание, и поэтому просто передает управление стандартной процедуре бей-
сик-системы. Для программиста здесь практического интереса не видно, за
исключением случая, когда используется второй режим прерываний процес-
сора.