1.1.	Системные вызовы дисковой подсистемы (DSS) v1.6

1.1.1.	Системные вызовы

   Если программа выполняет не только некую математическую задачу на ассемблере, то в ней придется столкнуться с такими вещами, как получение ввода пользователя, выполнение вывода результатов и завершение своей работы. Для этого, необходимо обратиться к сервисам DSS. Фактически, программирование на языке ассемблера одинаково для любых систем, если не пользоваться их сервисами.

   Вызов функций DSS в системе Estex выполняется из ассемблера. Необходимые параметры указываются в различных регистрах, регистр C используется для указания номера функции.



Так, наша программа для Estex будет выглядеть наподобие: 



        ORG     #8100   ;адрес точки входа



        LD      HL,MSG  ;сообщение для вывода

        LD      C,5Ch   ;номер системного вызова (PCHARS)

        RST     10h     ;вызов подсистемы



        LD      C,41h   ;номер системного вызова (EXIT)

        RST     10h     ;вызов подсистемы



MSG     db      "Hello, world!",0Dh,0Ah     ;наша строка

        db      0                           ;конец строки



Следом за таблицей есть пояснение по двум новым функциям 0Ch и 0Dh.

1.1.2.	Далее идет список категорий функций DSS для системы Estex

•	Функции идентификации системы

•	Функции для работы с диском

•	Функции для работы с файлами

•	Функции для работы с датой и временем

•	Функции управления памятью

•	Функции ввода с клавиатуры

•	Функции для исполнения программ

•	Функции для работы со строками и командной строкой

•	Функции для работы с переменными

•	Функции работы с экраном

•	Функции для печати на принтере





Функции идентификации системы




00h (00) VERSION (Версия DSS)

Входные значения:

C - 00h	Выходные значения:

D - номер версии

E - модификация

Функции для работы с диском




01h (01) CHDISK (Смена текущего диска)

Входные значения:

A - номер диска (0-A,1-B...)

C - 01h	Выходные значения:

A - код ошибки, если CF=1

A - максимальный номер диска, если CF=0

02h (02) CURDISK (Номер текущего диска)

Входные значения:

C - 02h	Выходные значения:

A - код ошибки, если CF=1

A - текущий номер диска (0-A,1-B...), если CF=0

03h (03) DSKINFO (Информация о диске)

Входные значения:

A - номер диска (0-A,1-B...0FFh-текущий)

C - 03h	Выходные значения:

A - код ошибки, если CF=1

A - размер кластера в секторах, если CF=0

HL - общее кол-во кластеров

DE - свободных кластеров

BC - размер сектора в байтах

09h (09) BOOTDSK (Номер системного диска)

Входные значения:

C - 09h

B = 0	Выходные значения:

A - код ошибки, если CF=1

A - номер системного диска (0-A,1-B...), если CF=0

Функции для работы с файлами




0Ah (10) CREATE (Создание файла)

Входные значения:

HL - указатель на файловую спецификацию

A - атрибут файла

C - 0Ah	Выходные значения:

A - код ошибки, если CF=1

A - файловый манипулятор, если CF=0

0Bh (11) CREATE NEW FILE (Создание нового файла)

Входные значения:

HL - указатель на файловую спецификацию

A - атрибут файла

C - 0Bh	Выходные значения:

A – код ошибки, если CF=1

A - файловый манипулятор, если CF=0

0Eh (14) DELETE (Удаление файла)

Входные значения:

HL - указатель на файловую спецификацию

C - 0Eh	Выходные значения:

A - код ошибки, если CF=1

10h (16) RENAME (Переименование файла)

Входные значения:

HL - указатель на старое имя файла

DE - указатель на новое имя файла

C - 10h	Выходные значения:

A - код ошибки, если CF=1

11h (17) OPEN (Открытие файла)

Входные значения:

HL - указатель на файловую спецификацию

A - режим доступа

A=0 чтение/запись

A=1 чтение

A=2 запись

C - 11h	Выходные значения:

A - код ошибки, если CF=1

A - файловый манипулятор, если CF=0

12h (18) CLOSE (Закрытие файла)

Входные значения:

A - файловый манипулятор

C - 12h	Выходные значения:

A - код ошибки, если CF=1



13h (19) READ (Чтение из файла)

Входные значения:

A - файловый манипулятор

HL - адрес в памяти

DE - количество читаемых байт

C - 13h	Выходные значения:

A - код ошибки, если CF=1

DE - реальное количество прочитанных байт

если CF=0:

A = 0 прочитаны все байты

A = 0FFh прочитано меньшее число байт

14h (20) WRITE (Запись в файл)

Входные значения:

A - файловый манипулятор

HL - адрес в памяти

DE - количество записываемых байт

C - 14h	Выходные значения:

A - код ошибки, если CF=1

DE - реальное количество записанных байт

15h (21) MOVE_FP (Перемещение указателя в файле)

Входные значения:

A - файловый манипулятор

HL:IX - смещение указателя в файле

B - способ перемещения:

B=0 от начала файла

B=1 от текущего значения указателя

B=2 от конца файла

C - 15h	Выходные значения:

A - код ошибки, если CF=1

HL:IX - новое значение указателя

16h (22) ATTRIB (Получение/изменение атрибута файла)

Входные значения:

HL - указатель на файловую спецификацию

B - режим доступа

B = 0 получить атрибут

B = 1 установить атрибут

A - атрибут файла

C - 16h	Выходные значения:

A - код ошибки, если CF=1

A - атрибут файла, если CF=0

17h (23) GET_D_T (Информация о дате и времени файла)

Входные значения:

A - файловый манипулятор

C - 17h	Выходные значения:

A - код ошибки, если CF=1

D - день

E - месяц

IX - год

H - час

L - минуты

B - секунды

18h (24) PUT_D_T (Изменение даты и времени файла)

Входные значения:

A - файловый манипулятор

D - день

E - месяц

IX - год

H - час

L - минуты

B - секунды

C - 18h	Выходные значения:

A - код ошибки, если CF=1

19h (25) F_FIRST (Поиск первого совпадающего файла)

Входные значения:

HL - указатель на файловую спецификацию

DE - рабочий буфер 44 байта, если B=0, иначе 256 байт

A - атрибуты, используемые при поиске

B = 0 - имя найденного файла в формате 11 байт "FilenameExt"

B = 1 - имя найденного файла в формате DOS "filename.ext",0

C - 19h	Выходные значения:

A - код ошибки, если CF=1

1Ah (26) F_NEXT (Поиск следующего совпадающего файла)

Входные значения:

DE - указатель на рабочий буфер

C - 1Ah	Выходные значения:

A - код ошибки, если CF=1

1Bh (27) MKDIR (Создание каталога)

Входные значения:

HL - указатель на файловую спецификацию

C - 1Bh	Выходные значения:

A - код ошибки, если CF=1

1Ch (28) RMDIR (Устранение каталога)

Входные значения:

HL - указатель на файловую спецификацию

C - 1Ch	Выходные значения:

A - код ошибки, если CF=1

1Dh (29) CHDIR (Смена текущего каталога)

Входные значения:

HL - указатель на файловую спецификацию

C - 1Dh	Выходные значения:

A - код ошибки, если CF=1

1Eh (30) CURDIR (Информация о текущем каталоге)

Входные значения:

HL - буфер в памяти 256 байт

C - 1Eh	Выходные значения:

A - код ошибки, если CF=1

Функции для работы с датой и временем




21h (33) SYSTIME (Текущая дата и время)

Входные значения:

C - 21h	Выходные значения:

D - день

E - месяц

IX - год

H - час

L - минуты

B - секунды

C - день недели

22h (34) SETTIME (Установить текущую дату и время)

Входные значения:

D - день

E - месяц

IX - год

H - час

L - минуты

B - секунды

C - 22h	Выходные значения:

A - код ошибки, если CF=1

Функции управления памятью




38h (56) SETWIN (Подключение страницы памяти)

Входные значения:

A - идентификатор блока памяти

B - номер страницы в блоке (0,1,2...)

H - биты 6 и 7 задают номер окна, в которое будет подключена страница

C - 38h	Выходные значения:

A - код ошибки, если CF=1

A - номер замещенной страницы, если CF=0

39h (57) SETWIN1 (Подключение страницы памяти в первое окно)

Входные значения:

A - идентификатор блока памяти

B - номер страницы в блоке (0,1,2...)

C - 39h	Выходные значения:

A - код ошибки, если CF=1

A - номер замещенной страницы, если CF=0

3Ah (58) SETWIN2 (Подключение страницы памяти во второе окно)

Входные значения:

A - идентификатор блока памяти

B - номер страницы в блоке (0,1,2...)

C - 39h	Выходные значения:

A - код ошибки, если CF=1

A - номер замещенной страницы, если CF=0

3Bh (59) SETWIN3 (Подключение страницы памяти в третье окно)

Входные значения:

A - идентификатор блока памяти

B - номер страницы в блоке (0,1,2...)

C - 3Bh	Выходные значения:

A - код ошибки, если CF=1

A - номер замещенной страницы, если CF=0

3Ch (60) INFOMEM (Информация о памяти)

Входные значения:

C - 3Ch	Выходные значения:

HL - общее количество страниц

BC - количество свободных страниц

3Dh (61) GETMEM (Выделение блока памяти)

Входные значения:

B - размер блока в страницах по 16 килобайт

C - 3Dh	Выходные значения:

A - код ошибки, если CF=1

A - идентификатор блока памяти, если CF=0

3Eh (62) FREEMEM (Освобождение блока памяти)

Входные значения:

A - идентификатор блока памяти

C - 3Eh	Выходные значения:

A - код ошибки, если CF=1

3Fh (63) SETMEM (Изменение блока памяти)

Входные значения:

A - идентификатор блока памяти

B - новый размер блока

C - 3Fh	Выходные значения:

A - код ошибки, если CF=1

0Ch (12) SET_CACHE_FLAG (Установка флага включенной кэш памяти)

Входные значения:

C – 0Ch

	Выходные значения:

A – номер страницы для сохранения переключателя.

CF=1 если ошибка.

0Dh (13) RESET_CACHE_FLAG (Сброс флага включенной кэш памяти)

Входные значения:

C – 0Dh

	Выходные значения:

CF=1 если ошибка.

Функции ввода с клавиатуры




30h (48) WAITKEY (Ожидание символа с клавиатуры)

Входные значения:

C - 30h	Выходные значения:

A - код символа

D - позиционный код

Е - ASCII код

C - режим клавиатуры:

bit7 - RUS/LAT

bit3 - Num Lock

bit2 - Scroll Lock

bit1 - Insert

bit0 - Caps Lock

B - состояние shift'ов:

bit7 - Left Shift

bit6 - Right Shift

bit5 - Ctrl

bit4 - Alt

bit3 - Left Ctrl

bit2 - Left Alt

bit1 - Right Ctrl

bit0 - Right Alt

31h (49) SCANKEY (Опрос клавиатуры без ожидания)

Входные значения:

C - 31h	Выходные значения:

ZF = 1 - нет клавиш

A - код символа

D - позиционный код

Е - ASCII код

C - режим клавиатуры:

bit7 - RUS/LAT

bit3 - Num Lock

bit2 - Scroll Lock

bit1 - Insert

bit0 - Caps Lock

B - состояние shift'ов:

bit7 - Left Shift

bit6 - Right Shift

bit5 - Ctrl

bit4 - Alt

bit3 - Left Ctrl

bit2 - Left Alt

bit1 - Right Ctrl

bit0 - Right Alt

32h (50) ECHOKEY (Ожидание символа с клавиатуры с печатью)

Входные значения:

C - 32h	Выходные значения:

A - код символа

D - позиционный код

Е - ASCII код

C - режим клавиатуры:

bit7 - RUS/LAT

bit3 - Num Lock

bit2 - Scroll Lock

bit1 - Insert

bit0 - Caps Lock

B - состояние shift'ов:

bit7 - Left Shift

bit6 - Right Shift

bit5 - Ctrl

bit4 - Alt

bit3 - Left Ctrl

bit2 - Left Alt

bit1 - Right Ctrl

bit0 - Right Alt

33h (51) CTRLKEY (Получить состояние клавиатуры)

Входные значения:

C - 33h	Выходные значения:

A = 0 - нет символов в буфере

C - режим клавиатуры:

bit7 - RUS/LAT

bit3 - Num Lock

bit2 - Scroll Lock

bit1 - Insert

bit0 - Caps Lock

B - состояние shift'ов:

bit7 - Left Shift

bit6 - Right Shift

bit5 - Ctrl

bit4 - Alt

bit3 - Left Ctrl

bit2 - Left Alt

bit1 - Right Ctrl

bit0 - Right Alt

35h (53) K_CLEAR (Очистить буфер клавиатуры и выполнить функцию)

Входные значения:

B - номер фун

ции 30h, 31h, 32h, 33h или 34h

C - 35h	Выходные значения:

В зависимости от указанной функции в регистре B.

36h (54) K_SETUP (Управление настройками клавиатуры)

Входные значения:

B - номер подфункции

C - 36h



B = 0, установить раскладку клавиатуры

A - номер раскладки 

0 - normal

1 - shift

2 - caps lock

3 - caps lock + shift

4 - normal (альтернативная кл.)

5 - shift (альтернативная кл.)

6 - caps lock (альтернативная кл.)

7 - caps lock + shift (альтернативная кл.)

B = 1, получить состояние звуковых переменных

B = 2, установить звуковые переменные

A - значение переменной

bit0 - сигнал переполнения буфера клавиатуры

bit1 - сигнал переключения на альтернативную раскладку клавиатуры	Выходные значения:

В зависимости от указанной функции в регистре B.

37h (55) TESTKEY (Опрос буфера клавиатуры)

Входные значения:

C - 37h	Выходные значения:

ZF = 1 - нет символов в буфере

A - код символа

D - позиционный код

Е - ASCII код

C - режим клавиатуры:

bit7 - RUS/LAT

bit3 - Num Lock

bit2 - Scroll Lock

bit1 - Insert

bit0 - Caps Lock

B - состояние shift'ов:

bit7 - Left Shift

bit6 - Right Shift

bit5 - Ctrl

bit4 - Alt

bit3 - Left Ctrl

bit2 - Left Alt

bit1 - Right Ctrl

bit0 - Right Alt

Функции для исполнения программ




40h (64) EXEC (Выполнить файл)

Входные значения:

HL - указатель на файловую спецификацию

B = 0 - загрузить и выполнить программу

C - 40h	Выходные значения:

A - код ошибки, если CF=1

A - код завершения, если CF=0

41h (65) EXIT (Завершение программы)

Входные значения:

B - код завершения

C - 41h	Выходные значения:

A - код ошибки, если CF=1

A - код завершения, если CF=0

42h (66) WAIT (Получить код завершения программы)

Входные значения:

C - 42h	Выходные значения:

A - код завершения

Функции для работы со строками и командной строкой




43h (67) GSWITCH (Выделить параметр командной строки)

Входные значения:

HL - указатель командной строки

DE - буфер для выделяемого параметра

C - 43h 	Выходные значения:

HL - указатель на следующий параметр командной строки

CF = 0 - конец строки не достигнут (есть другие параметры)

CF = 1 - конец строки (в буфер перенесён последний параметр или ноль)

44h (68) DOSNAME (Преобразовать имя файла)

Входные значения:

C - 44h

B = 0, преобразовать из 11 символьного формата в формат ДОС

HL - 11 символов имени файла

DE - буфер для имени в формате ДОС

B = 1, преобразовать из формата ДОС в 11 символьный формат

HL - имя файла в формате ДОС

DE - 11 символов имени файла	Выходные значения:

A - код ошибки, если CF=1

45h (69) EXCMDLN (Разбор командной строки)

Входные значения:

HL - указатель командной строки

DE - указатель на буфер пользователя

C - 45h

B - номер подфункции:

0 - Разобрать строку;

1 - Выделить имя диска;

2 - Выделить директорию;

3 - Выделить имя файла;

4 - Выделить расширение файла;

5 - Выделить имя диска, путь к файлу, имя файла и расширение файла;

6 - Зарезервирована;

7 - Выделить параметр командной строки;

8 - Преобразовать из 11 символьного формата в формат ДОС;

9 - Преобразовать из формата ДОС в 11 символьный формат;

Подфункция 0 - Разобрать строку:

Входные значения:

HL - указатель командной строки

C - 45h

B = 0 - Разобрать строку	Выходные значения:

A - код ошибки, если CF=1

A - результат разбора, если CF=0

bit7 - В строке обнаружены символы ? или *

bit3 - В строке указано имя диска;

bit2 - В строке указан путь к файлу;

bit1 - В строке указано расширение файла;

bit0 - В строке указано имя файла;

Подфункция 1 - Выделить имя диска:

Входные значения:

HL - указатель командной строки

DE - буфер (макс. 13 байт)

C - 45h

B = 1 - Выделить имя диска	Выходные значения:

A - код ошибки, если CF=1

A - номер диска (0 - A, 1 - B, 2 - C и т.д.), если CF=0

буфер - имя диска "A:",0

Подфункция 2 - Выделить директорию:

Входные значения:

HL - указатель командной строки

DE - буфер (макс. 256 байт)

C - 45h

B = 2 - Выделить директорию	Выходные значения:

A - код ошибки, если CF=1

A - результат разбора, если CF=0

bit7 - В строке обнаружены символы ? или *

bit3 - В строке указано имя диска;

bit2 - В строке указан путь к файлу;

bit1 - В строке указано расширение файла;

bit0 - В строке указано имя файла;

буфер - директория "DIR1\DIR2\DIR3\",0

Подфункция 3 - Выделить имя файла:

Входные значения:

HL - указатель командной строки

DE - буфер (макс. 13 байт)

C - 45h

B = 3 - Выделить имя файла	Выходные значения:

A - код ошибки, если CF=1

A - результат разбора, если CF=0

bit7 - В строке обнаружены символы ? или *

bit3 - В строке указано имя диска;

bit2 - В строке указан путь к файлу;

bit1 - В строке указано расширение файла;

bit0 - В строке указано имя файла;

буфер - имя файла "FILE.EXT",0

Подфункция 4 - Выделить расширение файла:

Входные значения:

HL - указатель командной строки

DE - буфер (макс. 4 байт)

C - 45h

B = 4 - Выделить расширение файла	Выходные значения:

A - код ошибки, если CF=1

A - результат разбора, если CF=0

bit7 - В строке обнаружены символы ? или *

bit3 - В строке указано имя диска;

bit2 - В строке указан путь к файлу;

bit1 - В строке указано расширение файла;

bit0 - В строке указано имя файла;

буфер - расширение "TXT",0 или "C ",0

Подфункция 5 - Выделить имя диска, путь к файлу, имя файла и расширение файла:

Входные значения:

HL - указатель командной строки

DE - буфер (макс. 8 байт)

DE+0 адрес буфера для имени диска (макс. 13 байт)

DE+2 адрес буфера для директории (макс. 256 байт)

DE+3 адрес буфера для имени файла (макс. 13 байт)

DE+4 адрес буфера для расширения файла (макс. 4 байта)

C - 45h

B = 5 - Выделить имя диска, путь к файлу, имя файла и расширение файла	Выходные значения:

A - код ошибки, если CF=1

A - результат разбора, если CF=0

bit7 - В строке обнаружены символы ? или *

bit3 - В строке указано имя диска;

bit2 - В строке указан путь к файлу;

bit1 - В строке указано расширение файла;

bit0 - В строке указано имя файла;

Подфункция 7 - Выделить параметр командной строки

Входные значения:

HL - указатель командной строки

DE - буфер для выделяемого параметра

C - 45h

B = 7 - Выделить параметр командной строки	Выходные значения:

HL - указатель на следующий параметр командной строки

CF = 0 - конец строки не достигнут (есть другие параметры)

CF = 1 - конец строки (в буфер перенесён последний параметр или ноль)

Подфункция 8 - Преобразовать из 11 символьного формата в формат ДОС

Входные значения:

C - 45h

B = 8 - преобразовать из 11 символьного формата в формат ДОС

HL - 11 символов имени файла

DE - буфер для имени в формате ДОС	Выходные значения:

A - код ошибки, если CF=1

Подфункция 9 - Преобразовать из формата ДОС в 11 символьный формат

Входные значения:

C - 45h

B = 9 - преобразовать из формата ДОС в 11 символьный формат

HL - имя файла в формате ДОС

DE - буфер для 11 символов имени файла	Выходные значения:

A - код ошибки, если CF=1



Функции для работы с переменными




46h (70) ENVIRON (Системное окружение)

Входные значения:

B - номер подфункции

C - 46h

B=0 Получение системного окружения

HL - буфер

B=1 Получить переменную окружения

HL - имя переменной

DE - буфер для значения переменной

B=2 Установить/удалить переменную окружения

HL - имя переменной и значение, разделенные символом '=', (ПЕРЕМЕННАЯ=ЗНАЧЕНИЕ)	Выходные значения:

A - состояние, если CF=0

A=0 - переменная обнаружена

A=0FFh - переменная не обнаружена

DE - указывает на конец буфера

A - код ошибки, если CF=1

47h (71) APPINFO (Получение информации приложения)

Входные значения:

B - номер подфункции

C - 47h

HL - буфер данных

B=0 - получение параметров командной строки

B=1 - получение полного пути к каталогу программы

B=2 - получение полного пути и имени файла программы	Выходные значения::

A - код ошибки, если CF=1

Функции работы с экраном




50h (80) SETVMOD (Выбор режима экрана)

Входные значения:

A - режим экрана

   02h - текстовый 40x32x16 цветов

   03h - текстовый 80x32x16 цветов

   81h - графический 320x256x256 цветов

   82h - графический 640x256x16 цветов

B - страница экрана 0/1

C - 50h	Выходные значения:

A - код ошибки, если CF=1

51h (81) GETVMOD (Получить текущий режим экрана)

Входные значения:

C - 51h	Выходные значения:

A - код ошибки, если CF=1

A - текущий режим экрана, если CF=0

B - страница экрана 0/1

52h (82) LOCATE (Установить позицию курсора)

Входные значения:

D - строка курсора

E - столбец курсора

C - 52h	Выходные значения:

нет

53h (83) CURSOR (Получить текущую позицию курсора)

Входные значения:

C - 53h	Выходные значения:

D - строка курсора

E - столбец курсора

54h (84) SELPAGE (Выбрать активную страницу экрана)

Входные значения:

B - страница экрана 0/1

C - 54h	Выходные значения:

A - код ошибки, если CF=1

55h (85) SCROLL (Прокрутка окна)

Входные значения:

D - строка левого верхнего угла окна

E - столбец левого верхнего угла окна

H - высота окна

L - ширина окна

B = 1 - прокрутка вверх

B = 2 - прокрутка вниз

A = 0 - очищать строку

C - 55h	Выходные значения:

нет

56h (86) CLEAR (Очистка окна)

Входные значения:

D - строка левого верхнего угла окна

E - столбец левого верхнего угла окна

H - высота окна

L - ширина окна

B - атрибут заполнитель

A - символ заполнитель

C - 56h	Выходные значения:

нет

57h (87) RDCHAR (Считать символ с экрана)

Входные значения:

D - строка

E - столбец

C - 57h	Выходные значения:

A - символ

B - атрибут

58h (88) WRCHAR (Напечатать символ на экране)

Входные значения:

D - строка

E - столбец

A - символ

B - атрибут

C - 58h	Выходные значения:

нет

59h (89) WINCOPY (Запомнить окно экрана)

Входные значения:

D - строка

E - столбец левого верхнего угла окна

H - высота окна

L - ширина окна

B - страница буфера

IX - адрес буфера

C - 59h	Выходные значения:

нет

5Ah (90) WINREST (Восстановить окно экрана)

Входные значения:

D - строка

E - столбец левого верхнего угла окна

H - высота окна

L - ширина окна

B - страница буфера

IX - адрес буфера

C - 5Ah	Выходные значения:

нет

5Bh (91) PUTCHAR (Напечатать символ в текущей позиции курсора)

Входные значения:

A - символ

C - 5Bh	Выходные значения:

нет

5Ch (92) PCHARS (Напечатать строку символов в текущей позиции курсора)

Входные значения:

HL - указатель на начало строки символов

C - 5Ch	Выходные значения:

нет

Функции для печати на принтере




5Fh (95) PRINT (Вывод символа на принтер без ожидания)

Входные значения:

A - символ

C - 5Fh	Выходные значения:

B - символ

CF = 1 - принтер не готов





