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


   Если программа выполняет не только некую математическую задачу на ассемблере, то в ней придется столкнуться с такими вещами, как получение ввода пользователя, выполнение вывода результатов и завершение своей работы. Для этого, необходимо обратиться к сервисам 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.
Далее идет список категорий функций DSS для системы Estex
 HYPERLINK "" \l "version" Функции идентификации системы
 HYPERLINK "" \l "disk_io" Функции для работы с диском
 HYPERLINK "" \l "file_io" Функции для работы с файлами
 HYPERLINK "" \l "date_time" Функции для работы с датой и временем
 HYPERLINK "" \l "memory" Функции управления памятью
 HYPERLINK "" \l "keyboard" Функции ввода с клавиатуры
 HYPERLINK "" \l "execute" Функции для исполнения программ
 HYPERLINK "" \l "cmdline" Функции для работы со строками и командной строкой
 HYPERLINK "" \l "var" Функции для работы с переменными
 HYPERLINK "" \l "screen" Функции работы с экраном
 HYPERLINK "" \l "printer" Функции для печати на принтере
 HYPERLINK "" \l "tocversion" Функции идентификации системы 

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

Входные значения: C - 00h
Выходные значения: D - номер версии E - модификация

 HYPERLINK "" \l "tocdisk_io" Функции для работы с диском 

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

 HYPERLINK "" \l "tocfile_io" Функции для работы с файлами 

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

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

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

 HYPERLINK "" \l "tocmemory" Функции управления памятью 

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

 HYPERLINK "" \l "tockeyboard" Функции ввода с клавиатуры 

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

 HYPERLINK "" \l "tocexecute" Функции для исполнения программ 

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 - код завершения

 HYPERLINK "" \l "toccmdline" Функции для работы со строками и командной строкой 

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





 HYPERLINK "" \l "tocvar" Функции для работы с переменными 

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

 HYPERLINK "" \l "tocscreen" Функции работы с экраном 

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
Выходные значения: нет

 HYPERLINK "" \l "tocprinter" Функции для печати на принтере 

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

Входные значения: A - символ C - 5Fh
Выходные значения: B - символ CF = 1 - принтер не готов






