Теневой сервис - монитор для компьютера Scorpion ZS 256 1993 г.

Расширение ОС Бейсик - вывод на принтер. Вызов дисковой BIOS.


Часть 3. Расширение ОС Бейсик

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

ЗЛ. Вывод на принтер

Код символа, выводимого на принтер, помещается в регистор аккумуля-
тора. Если в процессе выполнения операции произошла ошибка (нажата
клавиша BREAK), то при возврате управления вызывающей программе будет
установлен флаг CY, в противном случае флаг сбрасывается.

LD а, 13

RST 8

DEFB #80

JR С, ERROR

_3.2. Вызов дисковой BIOS (81h)

Применяя средства интерпритатора системных функций операционной
системы TR-DOS, не всегда удается добиться желаемых результатов. Жестко
заданный формат физического диска не дает возможности переносить дан-
ные между ZX Spectrum и другими компьютерами, такими как Robotron или
IBM.

Встроенный в компьютер Scorpion ZS 256 драйвер дисковых операций
(дисковый BIOS) позволяет в какой-то мере преодолеть недостатки ОС TR-
DOS. Пользуясь драйвером, необходимо отдавать себе отчет в том, что прог-
раммы не будут работать на других компьютерах.

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

Неприятной особенностью является го обстоятельство, что все пересылки
между диском и памятью ограничены 2 и 3 банками памяти процессора (ад-
реса 16384...49151 включительно). Несоблюдение этого условия приведет к
разрушению информации в памяти сервис-монитора.

Как и интерпритатор системных функций, драйвер разбит на несколько
функционально законченных подпрограмм, доступ к которым осуществлчет-
ся через единую точку входа. Номер подпрограммы (код функции) переда-
ется в регистре С, параметры передаются через другие регистры, либо чере?
память. Подпрограмма 0...6 написаны Н. Ю. Родионовым. Ниже приведено
полное описание функций драйвера дисковых операций. В заголовке каждой
подпрограммы указаны входные и выходные параметры.

О(RESETC)

Сброс контроллера (и установка магнитных головок выбранного диско-
вода в начальное положение). Работу с дисководом рекомендуется начинать
с этой функции.

1 (CHDRV)

вх: А[0...3] - номер дисковода.

Выбор текущего дисковода, все последующие операции иудут
происходить с выбранным дисководом. Физически дисковод выбирается при
выполнении функций 2, 5...8, 10..Л 4. При первом включении компьютера
оба дисковода получают фиксированную спецификацию (которую можно
посмотреть/изменить в меню сервис-монитора SetUp/Disk utility, см.
стр.13). Если коду спецификации диска присвоить значение Offh (см. раздел
3.3.1. «.Системные переменные монитора», стр.33), то функции 2, 5...8, кро-
ме того, могут определять спецификацию дисковода при первом к нему обра-
щении. Скорость перемещения головки дисковода не определяется и уста-
навливается максимальной (03h).

2 (MPOSIT)

вх: D[0...x] - номер логического трека.

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

3 (IGNORE)

Игнорирование ошибки и продолжение выполнения функции 5 (или 6).

4(RETRY)

Повторить в случае ошибки функцию 5 (или 6).

5 (READGR)

вх: D [О-.-х] - номер логического трека (первого обрабатываемого
сектора);

Е[0...х] - номер первого обрабатыьаемого сектора;

HL-адрес буфера;

В - количество секторов в операции.

Чтение группы секторов, расположенных подряд, начиная с указанного
регистрами D и Е, в буфер, заданный регистром HL. Количество секторов
задается в регистре В. Эта функция аналогична такой же в интерпритаторе
системных функций. В случае возникновения ошибки чтения, можно вос-
пользоваться функциями 3 или 4. Функция 4 повторит считывание сбойного
сектора, а выполнение jj функции игнорирует ошибку, при этом в буфере
будет пропущено столько байт, сколько занимает сбойный сектор.

6 (WRITGR)

вх: как у функции 5.

Запись группы секторов, расположенных подряд, начиная с указанного
регистрами D и Е, из буфера, заданного регистром HL. Количество секторов
задается в регистре В.

7 (IDENT)

Идентификация диска. По этой команде производится комплексный тест
дискеты, в процессе которого проверяется тип записи (частотная моду-
ляция/модифицированная частотная модуляция), количество используемых
сторон дискеты (только при неформатированной верхней стороне односто-
роннего диска), количество рабочих дорожек (40/80) (только, если нет ста-
рой разметки на 80), размер сектора (128/256/512/1024 байт). Эти пара-
метры используются в дальнейшем всеми функциями, оперирующими с
логическими величинами (2,3...6). Посмотреть и/или изменить код
спецификации диска можно также с помощью функции 15.

8 (TR_DOS)

Идентификация диска для ОС TR-DOS, аналогична функции 18h
интерпритатора системных функций. Перед вызовом необходимо установить
рабочий буфер, размером не менее 256 байт, используя функцию 9.

9 (SETWRK)

вх: HL-адрес рабочего буфера.
Установка рабочего буфера для функции 8.

10. (SCANSEC)

вх: HL-адрес таблицы;

______ . _ вых: таблица заголовков секторов, находящихся на дорожке

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

На каждый сектор в таблице отводится 5 байт (см. табл.9).

Байты +1.. .+4 извлекаются непосредственно из адресных маркеров секторов.

и (FORMAT)

вх: HL-адрес таблицы секторов;

DE- адрес указателя;

В-должен содержать 20h.

Форматирование дорожки, на которой находится магнитная головка
дисковода. Форматирование производится согласно таблице секторов (см.
табл.9). Данные из таблицы напрямую переносятся на дискету, никаких про-
верок на их корректность не производится, заканчивает таблицу иденти-
фикационный байт, больший 128. Размер сектора выбирается согласно байту
+ 4, заполняется сектор константой 0.

После записи очередного сектора и бай] по адресу, содержащемуся и ре-
гистре DE, записывается число 2ch, а значение DE увеличивается па единицу.

12 (F_READ)

вх: HL-адрес таблицы секюров;

DE-адрес буфера дорожки.

Чтение дорожки. Порядок
считывания определяется со-
держимым таблицы располо-
жения секторов' (см. табл.9).
Считанные сектора помеща-
ются в буфер дорожки,
никаких разделителей между
ними не ставится. Сектора со
значением

идентификационного байга
OFFh или OFCh не счигьша-
ются, но в буфере для них про-
пускается соот нет с гву ющее
длине (байт + 4) место. Если
сектор не может быть считан,
то соответствующий

идентификатор в таблице за-
меняется на FDh.
Идентификатор успешно
считанного сектора заменяется
на FCh, а по окончании опе-
рации все идентификаторы
FCh автоматически переводят-
ся в 00h.

13 (F WRITE)

вх: HL-адрес таблицы секторов;

DE- адрес буфера дорожки.

Последовательная запись. Порядок считывания определяется содержимым
таблицы расположения секторов (см. табл.9). Сектора, для которьк значение иденти-
фикационного байта OFFh или OFCh не записываются, а в буфере пропускается
соответствующее длине такого сектора (байт + 4) место. Если сектор не может
быть записан, то соответствующий идентификатор в таблице заменяется на OFDh.
По окончании записи все идентификаторы OFCh автоматически переводятся в 00h.

14 (M_POSF)

вх: D-номер физической дорожки [0...х]

А-номер стороны: [0-нижняя, 1-верхняя].

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

15 (ERRES)

вх: HL-адрес таблицы секторов;

Е - заменяемый идентификатор;

D - устанавливаемый идентификатор.

Замена идентификатора в таблице расположения секторов (см. табл.9).
Все идентификационные байты, совпадающие с заданным в регистре Е за-
меняются на указанный в регистре D.

16 (DISEXT)

вх: А - спецификация диска (см. табл.10);

В - режим: OFFh - установка, другое - чтение.

Чтение/установка спецификации дискеты (для каждого дисковода пре-
дусмотрена своя спецификация). Спецификация устанавливается также
функцией 7 (и 8).

17 (DRVEXT)

вых: А-код спецификации дисковода (см. табл.11).

Чтение кода спецификации дисковода. Спецификация дисковода опре-
деляется и заносится в специальную ячейку внутри драйвера при выпол-
нении теста, который проводится при первом обращении к дисководу
функциями 2, 5...8 (либо при первом включении компьютера). Функции
10... 14 тест не выполняют.

19 (TIMSUB)

вх: В-байт установки time-out;
вых: HL-адрес процедуры time-out.

Установка режима time-out (тайм аут) для счетчика включения двигате-
ля дисковода.

Формат байта time-out представлен в табл. 12.

Функции 2...8, 10... 14 в начале работы включают двигатель дисковода,
при этом отрабатывается задержка на время раскрутки двигателя. Если для
какого-либо дисковода включен режим time-out, то драйвер для последу-

ющих операций в состоянии определить время, в течение которого задержку
можно не делать, это существенно сокращает время работы. Для обеспечения
режима time-out необходимо каждые 1/50 сек, то есть раз в прерывание вы-
зывать функцию 19 с обнуленным регистром В,

При работе драйвера могут возникать ошибки, связанные с нечитаемостью
дискет, несоответствием типов, а также некоторые другие. В этом случае после
возврата в программу пользователя будет установлен флаг переноса CY. Иден-
тифицировать ошибку можно, получив ее код из специальной переменной
сервис-монитора (см. раздел 3.3.1. «Системные переменные монитора» на стр.33).
Ниже даны коды ошибок драйвера дисковых операций, для специфических
ошибок в скобках приведены номера функций, в которых они могут случиться.

1 нет готовности (диск не крутится или его нет);

2 попытка записи на защищенную дискету (функции 6, 11 и 13);

3 во время выполнения функции была нажата клавиша BREAK;

4 ошибка при чтении или записи сектора функциями 5 или 6, можно
воспользоваться функциями 3 или 4;

5 ошибка позиционирования (не соответствует номер дорожки);

6 ошибка позиционирования (не считался адресный маркер дорожки);

8 ошибка позиционирования, несоответствие типов (попытка использо-
вать 80 дорожечный диск на 40 дорожечном дисководе);

9 неформатированная дискета (функции 7, 8);

16 дискета не соответствует формату TR-DOS по физическим параметрам:

размер сектора, плотность записи, либо нет кода идентификатора - 10h
(функция 8);

17 несовпадение кода типа дискеты TR-DOS реальному формату;

18 не открыт рабочий буфер (функция 8);

20 были ошибки при чтении/записи дорожки (функции 12,13).




СОДЕРЖАНИЕ:


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

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



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

Похожие статьи:
Как это было в Ленинграде - 1992-1993 год. Знакомство с Амига
Softmaking - территория закона. О проблемах пиратства на Speccy.
Доска почета - устав национального Фонда Спектрума (HФСП).
Набат - Ричи Блекмор (ч1).
Железо - Дополнительный графический режим 512x192.

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