ZX-Spectrum & TR-DOS для пользователей и программистов 1994 г.

TR-DOS для программистов - интерпретатор системных функций. Начало работы с дискетой. Логический уровень. Файловый уровень.


Интерпретатор системных функций

Интерпретатор системных функций является ядром OCt и в первую
очередь он предназначен для обслуживания запросов интерпретатора ко-
манд TR-DOS. Однако некоторые функции могут представлять большой
интерес для программистов, пишущих на ассемблере. Используя их, можно
значительно расширить и дополнить средства, предоставляемые ОС.

Для вызова интерпретатора существует специальная точка входа,
расположенная по адресу 15635. Номер функции задается в регистре С, а
необходимые параметры — в других регистрах или в области системных
переменных TR-DOS. Область системных переменных обычно открывается
командами ОС, выполняющимися из Бейсика при загрузке программ, во
может по каким-либо причинам оказаться закрытой. Скажем, при выполне-
нии команды Бейсика NEW, и последующим запуском программы функцией
USR. В таком случае перед вызовом область необходимо предварительно
открыть, Сделать это можно вручную, войдя и тут же выйдя из ОС. Для
открытия области из программы необходимо воспользоваться точкой входа
по адресу 15649. Здесь расположена подпрограмма, которая проверяет
наличие области системных переменных TR-DOS и в случае отсутствия
устанавливает ее.

Качало работе»! с дискетой

Начальных функций в интерпретаторе три. Рассмотрим их в том
порядке, в котором они должны вызываться из пользовательских программ.

Программный сброс микроконтроллера. #00

Эта функция не имеет ни входных, ни выходных параметров и
предназначена скорее для «внутрисистемного» использования. Результатом
выполнения функции является программный сброс «сердца» интерфейса
Beta Disk — микроконтроллера КР1818ВГ93. Действия, производимые им в
этом случае (а точнее, при выполнении команды «Восстановление») будут
приведены ниже, в разделе, посвященном описанию этой микросхемы (см.
стр. 203).

Функцию #00 следует применять в самом начале работы с интерфей-
сом, а также после ошибок позиционирования для установки его в исходное
состояние.

LD С,0
CALL 15635

Настройка на дисковод. #01

Входным параметром этой функции служит номер дисковода, на
который необходимо настроиться. Номер помещается в аккумулятор, и для
дисковода А это 0, для В — 1, для С и D — соответственно 2 и 3. Настроила
на дисковод выполняется только один раз — при первом вызове этой
функции, дальнейшие обращения будут проигнорированы.

Для дисковода выполняются два теста: первым определяется количе-
ство дорожек, а вторым — скорость перемещения магнитной головки. Ре-
зультаты тестов помещаются в две системные переменные TR-DOS (см.
табл. 12). Если характеристики используемых дисководов заранее известны,
то настройку на дисковод можно не проводить, а просто записать соответст-
вующие значения в системные переменные. Настройка на указанный дис-

LD А,1 ;настройка на дисковод В

LD С,1
CALL 15635

ковод будет произведена
функций #01 только в
том случае, если значе-
ние системной перемен-
ной, хранящей время
перемещения головки,
равно #FF. Это значе-
ние записывается при
инициализации обла-
сти системных пере-
менных.

LD А,1 ;настройка на дисковод В

LD С,1
CALL 15635

Настройка на дискету. #18

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

LD С, #18
CALL 15635

Логический уровень

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

Чтение группы секторов. #05

Функция считывает с дискеты в память группу секторов, последова-
тельно расположенных на дискете. Количество целых секторов задается в
регистре В, при нулевом значении чтения не происходит. Адрес размещения
первого сектора из группы задается в регистрах D и Е. Регистр D должен
содержать номер логической дорожки, а регистр Е — номер логического
сектора на ней. После считывания последнего (15-го) сектора на текущей
дорожке процесс продолжается с первого (0-го) сектора на следующей. Адрес
буфера в памяти, куда будет происходить считывание, задается в регистро-
вой паре HL.

LD В,8 ;считывани® 8 секторов области каталога дискеты

;в память с адреса 50000

LD DE,0
LD HL,50000
LD С,5
CALL 15635

Запись группы секторов. #06

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

торов задается в регистре В, при нулевом значении записи не происходит.
Адрес размещения первого сектора из группы задается в регистрах D и Б.
Регистр D должен содержать номер логической дорожки, а регистр Е —• номер
логического сектора на ней. После записи последнего (15-го) сектора на
текущей дорожке процесс продолжается с первого (0-го) сектора на следую-
щей. Адрес буфера в памяти, откуда будет происходить считывание инфор-
мации, задается в регистровой паре HL.

LD В,1 ;запись в служебный сектор информации, рас-

положенной в памяти начиная с адреса 50000

LD DE.8
LD HL,50000
LD С.6
CALL 15635

Файловый уровень

Функции этой группы предназначены для поддержки файловой сис-
темы TR-DOS. Все они используют рабочий буфер длиной в 257 байт,
располагающийся сразу за системными переменными TR-DOS.

Вывод каталога дискеты. #07

Функция используется командным процессором при выполнении
команды CAT. В аккумулятор помещается номер потока, куда необходимо
направить вывод каталога. При выводе во 2-й поток автоматически проис-
ходит Очистка экрана. Номер дисковода, для которого выводится каталог,
задается в системной переменной по адресу 23798, а для корректной работы
его необходимо продублировать в переменных по адресам 23800 и 23801.
Перед началом работы функция #07 автоматически выполняет настройку
на дискету (функция #18).

LD А,0 ; вывод каталога с дискеты, находящейся в

; дисководе А на дисплей

LD (23798),А
LD (23800),А
LD (23801), А
LD А,2
LD С,7
CALL 15635

Считывание элемента каталога. #08

Функция считывает с системной дорожки элемент каталога, номер
которого помещен в аккумулятор (начинается нумерация с нуля). Элемент
каталога помещается в дескриптор файла (см. «Системные переменные TR-
DOS»).

LD А,2 считывание в область дескриптора информации

;о третьем файле

LD С,8
CALL 15635

Запись дескрипт9ра файла. #09

Дескриптор файла записывается в элемент каталога, номер которого
задан в аккумуляторе (нумерация начинается с нуля). Этой функцией нужно
пользоваться с осторожностью, так как TR-DOS просто переписывает инфор-

мацию в область каталога, не делая никаких проверок корректности переда-
ваемых параметров.

LD А,1 ;запись дескриптора файла во второй элемент

; катало га

LD С,9

CALL 15635

Поиск элемента каталога, #0А

Эта функция используется командным процессором для нахождения
информации о файле в области каталога. Исходная информация задается в
дескрипторе, причем при поиске используются не все байты. Количество
байтов, на которые ведется поиск, задается в системной переменной TR -DOS
по адресу 23814. Обычно там записано число 9, и в каталоге производится
поиск только спецификации файла. Но для файлов прямого или последова-
тельно доступа задействуется еще один байт, и число увеличивается до 10.
Варьируя число байтов в переменной 23814, можно производить избира-
тельный поиск, например, для группы файлов.

Результаты поиска возвращаются в регистре С. Если информация
найдена, то регистр С содержит номер дервого совпадающего элемента
каталога, в противном случае — #FF.

Создание файла. #0В

Функция создания файла используется при записи на дискету обла-
сти оперативной памяти. Имя и тип создаваемого файла должны быть
помещены в дескриптор, адрес начала области передается через регистровую
пару HL, а длина —- через DE. Тип файла может быть <С>, <D> или <#>*.

Запись бейсик-лрограммы. #0С

Функция #0В «создание файла» не позволяет записать бейсик-про-
грамму**, для этого служит функция #0С. Входным параметром для нее
является только дескриптор файла, тип файла должен быть обязательно <В>.
Остальную информацию функция берет из системных переменных бейсик-
интерпретатора.

Чтение/проверка записи файла. #0Е

Поскольку алгоритмы работы команд чтения и проверки во многом
схожи, в интерпретаторе для них сделана одна функция. Имя и тип файла
должны быть помещены в дескриптор. Значение в системной переменной
TR-DOS по адресу 23801 задает вид операции: #00 —^ чтение, #FF —
проверка. Кроме этого, для «небейсик-файлов» необходимо указать их мес-
тоположение в оперативной памяти. Как и для функции создания файла,
адрес начала области передается через регистровую пару HL, а длина —
через DE, аккумулятор должен содержать число, отличное от 0 или 3.

Используя разные значения аккумулятора можно заставить интерп-
ретатор использовать параметры Start и Lenght, заданные при записи файла.
При Akk=0 и адрес загрузки, и длина области памяти будут соответствовать

*) Таким образом, можно сформировать в намята массив, а затем записать
его.

**) Строго говоря, это не совсем так, просто функцией #0С для этого гораздо
удобнее пользоваться, т. к, все необходимые расчеты и приготовления
производятся автоматически.

таким же, как и при записи, а при Akk=3 файл будет полностью считан в
область памяти, адресуемую регистровой парой HL.

Удаление файла. #12

Эта функция соответствует команде TR-DOS ERASE, она ищет на диске
элементы каталога, совпадающие с дескриптором, и удаляет их (физического
удаления, впрочем, не происходит).

Для демонстрации функций файловой системы приведем скелет
небольшой программы, сохраняющей область системных переменных TR-
DOS в файле, а затем восстанавливающую эту область с адреса 50000.

LD С,#13 ;создание дескриптора файла (см. ниже)

CALL 15635

LD А,9 ;число байтов поиска

LD (23814), А

LD С,#0А ;код функции #0А — поиск элемента каталога

CALL 15635

SLA С

CALL NC, DELETE ;если такой файл уже существует, удалим его

LD С,#0В ;запись файла

LD HL,23733 ;адрес начала области

LD DE.112 ;ее длина

CALL 15635

LD Cf#0E считывание в другое место

XOR А

LD (23801),А ;операция «чтения»

DEC А

LD HL,50000 ;адрес размещения информации

CALL 15635

RET

DELETE LD C,#12 .'удаление файла

JP 15635

FILENM DEFM "TestFileC"




СОДЕРЖАНИЕ:


  Оставте Ваш отзыв:

  НИК/ИМЯ
  ПОЧТА (шифруется)
  КОД



Темы: Игры, Программное обеспечение, Пресса, Аппаратное обеспечение, Сеть, Демосцена, Люди, Программирование

Похожие статьи:
Глюкодром - глюки определения наличия мышки - актуальная процедура от Stranger'a.
График BBS - График работы BBS на неделю.
Допрос - Himik's ZxZ берет интвервью по телефону у ASC - Andrew Strikes Code.
Анкета - Опрос среди спектрумовского населения стран СНГ.
Террористы - История на реалных событиях и реальных фактах.

В этот день...   21 ноября