4. Новые подпрограммы Теневого Сервис-Монитора
(RST 8) для работы с контроллером периферии
SMUC
(С) 1996-97 МОА
Рад новых вызовов для п/п 81 h R8DOS (вызов встроенного в монитор дискового интерпретатора, код подфункции задается в
регистре С):
Изменена подфункция 9 (SETWRK) дисковой системы (R8DOS) Начиная с версии 3.0а (код 66 от 29.04.95) в регистрах
DE и ВС возвращаются код версии и дата компиляции монитора {в предыдущих версиях эти регистры не изменялись). D — код версии;
С, В, Е—соответственно число, месяц и год.
С=34 (Shddld) — идентификация жесткого диска
in: 512 байтный буфер, указатель на который задается в workfl (подфункция 9)
out: CY —error (нет HDD)
В принципе, идентификация происходит автоматически при старта машины, зга подфункция определяет, есть ли диск вообще и
пытается возвратить в буфер сектор-идентификатор, считанный из HDD.
С*ЗБ (thddmount) — подключение раздела к драйверу HD. Подключает указанный подраздел к драйверу жесткого диска, после
этого становятся возможными операции чтения/записи из раздела; если подключается образ диска (т. е. задано имя подраздела
TRDOS и имя диска а нем), то становится возможным обращение из TR-DOS
in: Akk — тип операции, задается битами (в скобках Q указаны приоритеты — 0 наивысший)
7 [2] автоподключение, т. е. подключить то, что задано в секторе автонастроек, при этом биты 0.1 — номер диска (О "А", 1 "В". 2
"С", 3 "D") диск А—только при аппаратной поддержке, в противном случае выдает ошибку;
6 [0] отключить подраздел от драйвера (запрещение операций чтения/записи), в «том случае биты 0, 1 — номер диска ГО "А", 1
"В", 2 "С" или 3 "D")
5 [1] подключить подраздел к драйверу, указав (в DE) адрес дескриптора (длинной 25 байт), возвращаемого при предыдущих
подключениях (см. бит 4)
4 (4] вернуть в память (no HL) дескриптор текущего подключенного к драйверу раздела; только эта команда может указываться
совместно с остальными
3 [3] подключение по имени, адрес имени в памяти a DE: текстовая строка вида [dr:l[}partVJos, где part — имя раздела, dos —
имя диска-в разделе TR-DOS, если не задано dr, то подключение происходит к задаваемому битами 0 и 1 диску
2—должен быть О
0,1 — номер дисковода: О —"А", 1— "В", 2 —"С",3— "D"
out: CY—error (любые ошибки, в том числе раздел не найден)
С=36 ($hddrd) — прямое чтение секторов из подраздела жесткого диска
Чтение осуществляется из 'текущего" подраздела — последнего подраздела, подключенного подфункцией $hddmount.
in: hi—адрес в памяти, куда считывать de — начальный номер сектора (считая с II) Ь — число секторов (размер сектора 512
байт!)
out: CY — ошибки
С=37 ($hddwr) — прямая запись секторов в подраздел жесткого диска
Запись осуществляется в "текущий" подраздел — последний подраздел, подключенный подфункцией $hddmount.
in: hi — адрес в памяти, откуда записывать, de — начальный номер сектора (считая с 1!) Ь — число секторов (размер сектора 512
байт!)
out- CY — ошибки
С«38 (Shddpart) — вернуть таблицу (каталог) подразделе. Каждый вход в таблице описывается 16 битами, где +0 тип
подраздела, только младшие 5 бит (0 нет; 1 TR-DOS, 2 MicroDOS...), +6 объем подраздела в секторах, +10 имя подраздела (6 байт)
Замечание: получить имя подраздела TR-DOS можно, подключив подраздел TR-DOS (см. функцию 35, не задавая имени диска!)
и далее — прямым считыванием секторов 0 и 1 — каталога дисков. Формат каталога аналогичен формату таблицы подразделов
in: Akk—должен быть 0 hi — адрес буфера для таблицы (1024 байта)
out: CY — ошибки
de — число задейсгвованых входов в твблице Функция
89h (Retime), вызова RST 8, позволяет установить или прочитать время из микросхемы энергонезависимой памяти (CMOS), код
операции задется в регистре D (отдельными битами):
7 — (1) записать значение времени и/или даты, (0) считать значения времени и/или даты
6 — (1) считывание в буфер (только, если бит 7 == 0) (см. бит 5)
5 — (1) прямое считывание (6 байт данных из CMOS), (0) считывание в формате ASCII
О — (1) работа с датой, (0) работа со временем
Кроме этого при вызове функции регистр HL может указывать адрес буфера, (расположенный в 5 и 2 банках CPU), если бит 6 ==
1. Регистр Е содержит формат считывания: младшие 5 бит символ разделителя (для выводе а формате ASCII); биты 7, 6 и 5
разрешают вывод соответственно часов, минут и секунд, либо для вывода даты: 7 выводить день недели, 6 ставить "О" перед числом,
5 выводить месяц словом и перед годом добавлять 19. Функция возвращает данные либо в буфер (а виде строки ASCIi или б-ю
байтами: секунды, минуты, часы, число, месяц, год), либо в регистрах С — секунды/число, В — минуты/месяц, Е — часы/год, L — день
недели. В этих же регистрах задаются значения для изменения времени или даты. Бит CY указывает на ошибку (микросхемы CMOS
нет).