## Системные вызовы дисковой подсистемы (DSS) v1.71 Вызов функций 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. +------------------------------------------------------------------------------------------------------------+ +------------------------------------------------------------------------------------------------------------+ | **Функции идентификации системы** | +------------------------------------------------------------------------------------------------------------+ | **00h (00) VERSION (Версия DSS)** | +----------------------------------------------------------------------+-------------------------------------+ | Входные значения: | Выходные значения: | | C - 00h | D - номер версии | | | E - модификация | | | BC - номер сборки | +----------------------------------------------------------------------+-------------------------------------+ | **Функции для работы с диском** | +------------------------------------------------------------------------------------------------------------+ | **01h (01) CHDISK (Смена текущего диска)** | +----------------------------------------------------------------------+-------------------------------------+ | Входные значения: | Выходные значения: | | A - номер диска (0-A,1-B...) | A - код ошибки, если CF=1 | | C - 01h | A - максимальный номер диска, если | | | CF=0 | +----------------------------------------------------------------------+-------------------------------------+ | **02h (02) CURDISK (Номер текущего диска)** | +----------------------------------------------------------------------+-------------------------------------+ | Входные значения: | Выходные значения: | | C - 02h | A - код ошибки, если CF=1 | | | A - текущий номер диска | | | (0-A,1-B...), если CF=0 | | | C - максимальный номер диска, | | | если CF=0 | +----------------------------------------------------------------------+-------------------------------------+ | **03h (03) DSKINFO (Информация о диске) добавить описание** | +----------------------------------------------------------------------+-------------------------------------+ | Входные значения: | Выходные значения: | | A - номер диска (0-A,1-B...#FF-текущий) | A - код ошибки, если CF=1 | | C - 03h | A - размер кластера в секторах, | | | если CF=0 | | Если A bit7 = 1 и A != #FF: | HL':HL - общее кол-во кластеров | | | DE':DE - свободных кластеров | | HL - буфер (256 байтов) для расширенных данных: | BC - размер сектора в байтах | | | | | Формат полей - длина поля (1 байт), данные поля. | | | | | | Файловая система; **string** | | | | | | Серийный номер диска; **dword** | | | | | | Метка диска; **string** | | | | | | Физический номер диска, номер раздела; **word** | | | | | | **Остальные поля зарезервированы** | | | | | | B -- если равен нулю, то подсчёт свободных кластеров на разделе | | | осуществляться не будет | | +----------------------------------------------------------------------+-------------------------------------+ | **09h (09) BOOTDSK (Номер системного диска)** | +----------------------------------------------------------------------+-------------------------------------+ | Входные значения: | Выходные значения: | | C - 09h | A - код ошибки, если CF=1 | | B = 0 | A - номер системного диска | | | (0-A,1-B...), если CF=0 | +----------------------------------------------------------------------+-------------------------------------+ | **Функции для работы с файлами** | +------------------------------------------------------------------------------------------------------------+ | **0Ah (10) CREATE (Создание файла)** | +----------------------------------------------------------------------+-------------------------------------+ | Входные значения: | Выходные значения: | | HL - указатель на файловую спецификацию | A - код ошибки, если CF=1 | | A - атрибут файла | A - файловый манипулятор, если CF=0 | | C - 0Ah | | +----------------------------------------------------------------------+-------------------------------------+ | **0Bh (11) CREATE NEW FILE (Создание нового файла)** | +----------------------------------------------------------------------+-------------------------------------+ | Входные значения: | Выходные значения: | | HL - указатель на файловую спецификацию | A - код ошибки, если CF=1 | | A - атрибут файла | A - файловый манипулятор, если CF=0 | | C - 0Bh | | +----------------------------------------------------------------------+-------------------------------------+ | **0Eh (14) DELETE (Удаление файла)** | +----------------------------------------------------------------------+-------------------------------------+ | Входные значения: | Выходные значения: | | HL - указатель на файловую спецификацию | A - код ошибки, если CF=1 | | C - 0Eh | | +----------------------------------------------------------------------+-------------------------------------+ | **10h (16) RENAME (Переименование файла)** | +----------------------------------------------------------------------+-------------------------------------+ | Входные значения: | Выходные значения: | | HL - указатель на старое имя файла | A - код ошибки, если CF=1 | | DE - указатель на новое имя файла | | | C - 10h | | +----------------------------------------------------------------------+-------------------------------------+ | **11h (17) OPEN (Открытие файла)** | +----------------------------------------------------------------------+-------------------------------------+ | Входные значения: | Выходные значения: | | HL - указатель на файловую спецификацию | A - код ошибки, если CF=1 | | A - режим доступа | A - файловый манипулятор, если CF=0 | | A=0 чтение/запись | | | A=1 чтение | | | A=2 запись | | | C - 11h | | +----------------------------------------------------------------------+-------------------------------------+ | **12h (18) CLOSE (Закрытие файла)** | +----------------------------------------------------------------------+-------------------------------------+ | Входные значения: | Выходные значения: | | A - файловый манипулятор | A - код ошибки, если CF=1 | | C - 12h | | +----------------------------------------------------------------------+-------------------------------------+ | **13h (19) READ (Чтение из файла)** | +----------------------------------------------------------------------+-------------------------------------+ | Входные значения: | Выходные значения: | | A - файловый манипулятор | A - код ошибки, если CF=1 | | HL - адрес в памяти | если CF=0: | | DE - количество читаемых байт | DE - реальное количество | | C - 13h | прочитанных байт | | | A = 0 прочитаны все байты | | | A = #FF прочитано меньшее число | | | байт или конец файла | +----------------------------------------------------------------------+-------------------------------------+ | **14h (20) WRITE (Запись в файл)** | +----------------------------------------------------------------------+-------------------------------------+ | Входные значения: | Выходные значения: | | A - файловый манипулятор | A - код ошибки, если CF=1 | | HL - адрес в памяти | DE - реальное количество записанных | | DE - количество записываемых байт | байт | | C - 14h | | +----------------------------------------------------------------------+-------------------------------------+ | **15h (21) MOVE_FP (Перемещение указателя в файле)** | +----------------------------------------------------------------------+-------------------------------------+ | Входные значения: | Выходные значения: | | A - файловый манипулятор | A - код ошибки, если CF=1 | | HL:IX - смещение указателя в файле | HL:IX - новое значение указателя | | B - способ перемещения: | | | B=0 от начала файла | | | B=1 от текущего значения указателя | | | B=2 от конца файла | | | C - 15h | | +----------------------------------------------------------------------+-------------------------------------+ | **16h (22) ATTRIB (Получение/изменение атрибута файла)** | +----------------------------------------------------------------------+-------------------------------------+ | Входные значения: | Выходные значения: | | HL - указатель на файловую спецификацию | A - код ошибки, если CF=1 | | B - режим доступа | A - атрибут файла, если CF=0 | | B = 0 получить атрибут | | | B = 1 установить атрибут | | | A - атрибут файла | | | C - 16h | | +----------------------------------------------------------------------+-------------------------------------+ | **17h (23) GET_D_T (Информация о дате и времени файла)** | +----------------------------------------------------------------------+-------------------------------------+ | Входные значения: | Выходные значения: | | A - файловый манипулятор | A - код ошибки, если CF=1 | | C - 17h | D - день | | | E - месяц | | | IX - год | | | H - час | | | L - минуты | | | B - секунды | +----------------------------------------------------------------------+-------------------------------------+ | **18h (24) PUT_D_T (Изменение даты и времени файла)** | +----------------------------------------------------------------------+-------------------------------------+ | Входные значения: | Выходные значения: | | A - файловый манипулятор | A - код ошибки, если CF=1 | | D - день | | | E - месяц | | | IX - год | | | H - час | | | L - минуты | | | B - секунды | | | C - 18h | | +----------------------------------------------------------------------+-------------------------------------+ | **19h (25) F_FIRST (Поиск первого совпадающего файла)** | +----------------------------------------------------------------------+-------------------------------------+ | Входные значения: | Выходные значения: | | A - атрибуты, используемые при поиске | A - код ошибки, если CF=1 | | HL - указатель на файловую спецификацию | | | DE - рабочий буфер 44 байта, если B=0, если B=1, то максимум 46 байт | | | B = 0 - имя найденного файла в формате 11 байт "FilenameExt" | | | B = 1 - имя найденного файла в формате DOS "filename.ext",0 | | | C - 19h | | +----------------------------------------------------------------------+-------------------------------------+ | **1Ah (26) F_NEXT (Поиск следующего совпадающего файла)** | +----------------------------------------------------------------------+-------------------------------------+ | Входные значения: | Выходные значения: | | DE - указатель на рабочий буфер | A - код ошибки, если CF=1 | | C - 1Ah | | +----------------------------------------------------------------------+-------------------------------------+ | **1Bh (27) MKDIR (Создание каталога)** | +----------------------------------------------------------------------+-------------------------------------+ | Входные значения: | Выходные значения: | | HL - указатель на файловую спецификацию | A - код ошибки, если CF=1 | | C - 1Bh | | +----------------------------------------------------------------------+-------------------------------------+ | **1Ch (28) RMDIR (Устранение каталога)** | +----------------------------------------------------------------------+-------------------------------------+ | Входные значения: | Выходные значения: | | HL - указатель на файловую спецификацию | A - код ошибки, если CF=1 | | C - 1Ch | | +----------------------------------------------------------------------+-------------------------------------+ | **1Dh (29) CHDIR (Смена текущего каталога)** | +----------------------------------------------------------------------+-------------------------------------+ | Входные значения: | Выходные значения: | | HL - указатель на файловую спецификацию | A - код ошибки, если CF=1 | | C - 1Dh | | +----------------------------------------------------------------------+-------------------------------------+ | **1Eh (30) CURDIR (Информация о текущем каталоге)** | +----------------------------------------------------------------------+-------------------------------------+ | Входные значения: | Выходные значения: | | HL - буфер в памяти 256 байт | A - код ошибки, если CF=1 | | C - 1Eh | | +----------------------------------------------------------------------+-------------------------------------+ | **Функции для работы с датой и временем** | +------------------------------------------------------------------------------------------------------------+ | **21h (33) SYSTIME (Текущая дата и время)** | +----------------------------------------------------------------------+-------------------------------------+ | Входные значения: | Выходные значения: | | C - 21h | D - день | | | E - месяц | | | IX - год | | | H - час | | | L - минуты | | | B - секунды | | | C - день недели | +----------------------------------------------------------------------+-------------------------------------+ | **22h (34) SETTIME (Установить текущую дату и время)** | +----------------------------------------------------------------------+-------------------------------------+ | Входные значения: | Выходные значения: | | D - день | A - код ошибки, если CF=1 | | E - месяц | | | IX - год | | | H - час | | | L - минуты | | | B - секунды | | | C - 22h | | +----------------------------------------------------------------------+-------------------------------------+ | **Функции управления памятью** | +------------------------------------------------------------------------------------------------------------+ | **38h (56) SETWIN (Подключение страницы памяти)** | +----------------------------------------------------------------------+-------------------------------------+ | Входные значения: | Выходные значения: | | A - идентификатор блока памяти | A - код ошибки, если CF=1 | | B - номер страницы в блоке (0,1,2...) | A - номер замещенной страницы, если | | H - биты 6 и 7 задают номер окна, в которое будет подключена | CF=0 | | страница | | | C - 38h | | +----------------------------------------------------------------------+-------------------------------------+ | **39h (57) SETWIN1 (Подключение страницы памяти в первое окно)** | +----------------------------------------------------------------------+-------------------------------------+ | Входные значения: | Выходные значения: | | A - идентификатор блока памяти | A - код ошибки, если CF=1 | | B - номер страницы в блоке (0,1,2...) | A - номер замещенной страницы, если | | C - 39h | CF=0 | +----------------------------------------------------------------------+-------------------------------------+ | **3Ah (58) SETWIN2 (Подключение страницы памяти во второе окно)** | +----------------------------------------------------------------------+-------------------------------------+ | Входные значения: | Выходные значения: | | A - идентификатор блока памяти | A - код ошибки, если CF=1 | | B - номер страницы в блоке (0,1,2...) | A - номер замещенной страницы, если | | C - 3Ah | CF=0 | +----------------------------------------------------------------------+-------------------------------------+ | **3Bh (59) SETWIN3 (Подключение страницы памяти в третье окно)** | +----------------------------------------------------------------------+-------------------------------------+ | Входные значения: | Выходные значения: | | A - идентификатор блока памяти | A - код ошибки, если CF=1 | | B - номер страницы в блоке (0,1,2...) | A - номер замещенной страницы, если | | C - 3Bh | CF=0 | +----------------------------------------------------------------------+-------------------------------------+ | **3Ch (60) INFOMEM (Информация о памяти)** | +----------------------------------------------------------------------+-------------------------------------+ | Входные значения: | Выходные значения: | | C - 3Ch | HL - общее количество страниц | | | BC - количество свободных страниц | +----------------------------------------------------------------------+-------------------------------------+ | **3Dh (61) GETMEM (Выделение блока памяти)** | +----------------------------------------------------------------------+-------------------------------------+ | Входные значения: | Выходные значения: | | B - размер блока в страницах по 16 килобайт | A - код ошибки, если CF=1 | | C - 3Dh | A - идентификатор блока памяти, | | | если CF=0 | +----------------------------------------------------------------------+-------------------------------------+ | **3Eh (62) FREEMEM (Освобождение блока памяти)** | +----------------------------------------------------------------------+-------------------------------------+ | Входные значения: | Выходные значения: | | A - идентификатор блока памяти | A - код ошибки, если CF=1 | | C - 3Eh | | +----------------------------------------------------------------------+-------------------------------------+ | **3Fh (63) SETMEM (Изменение блока памяти)** | +----------------------------------------------------------------------+-------------------------------------+ | Входные значения: | Выходные значения: | | A - идентификатор блока памяти | A - код ошибки, если CF=1 | | B - новый размер блока | | | C - 3Fh | | +----------------------------------------------------------------------+-------------------------------------+ | **Функции ввода с клавиатуры** | +------------------------------------------------------------------------------------------------------------+ | **30h (48) WAITKEY (Ожидание символа с клавиатуры)** | +----------------------------------------------------------------------+-------------------------------------+ | Входные значения: | Выходные значения: | | C - 30h | A - код символа | | | D - позиционный код | | | E - 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 - позиционный код | | | E - 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 - позиционный код | | | E - 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. | | | | | 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 = 3, включить отображение курсора | | | | | | B = 4, выключить отображение курсора | | +----------------------------------------------------------------------+-------------------------------------+ | **37h (55) TESTKEY (Опрос буфера клавиатуры)** | +----------------------------------------------------------------------+-------------------------------------+ | Входные значения: | Выходные значения: | | C - 37h | ZF = 1 - нет символов в буфере | | | A - код символа | | | D - позиционный код | | | E - 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 - указатель на файловую спецификацию | A - код ошибки, если CF=1 | | B = 0 - загрузить и выполнить программу с поиском в PATH | A - код завершения, если CF=0 | | B = 1 - загрузить и выполнить программу без поиска в PATH | | | C - 40h | | +----------------------------------------------------------------------+-------------------------------------+ | **41h (65) EXIT (Завершение программы)** | +----------------------------------------------------------------------+-------------------------------------+ | Входные значения: | Выходные значения: | | B - код завершения | A - код ошибки, если CF=1 | | C - 41h | A - код завершения, если CF=0 | +----------------------------------------------------------------------+-------------------------------------+ | **42h (66) GET_ERR (Получить код завершения программы)** | +----------------------------------------------------------------------+-------------------------------------+ | Входные значения: | Выходные значения: | | C - 42h | A - код завершения | +----------------------------------------------------------------------+-------------------------------------+ | **Функции для работы со строками и командной строкой** | +------------------------------------------------------------------------------------------------------------+ | **43h (67) GSWITCH (Выделить параметр командной строки)** | +----------------------------------------------------------------------+-------------------------------------+ | Входные значения: | Выходные значения: | | HL - указатель командной строки | HL - указатель на следующий | | DE - буфер для выделяемого параметра | параметр командной строки | | C - 43h | CF = 0 - конец строки не достигнут | | | (есть другие параметры) | | | CF = 1 - конец строки (в буфер | | | перенесён последний параметр или | | | ноль) | +----------------------------------------------------------------------+-------------------------------------+ | **44h (68) DOSNAME (Преобразовать имя файла)** | +----------------------------------------------------------------------+-------------------------------------+ | Входные значения: | Выходные значения: | | C - 44h | A - код ошибки, если CF=1 | | B = 0, преобразовать из 11 символьного формата в формат ДОС | | | HL - 11 символов имени файла | | | DE - буфер для имени в формате ДОС | | | B = 1, преобразовать из формата ДОС в 11 символьный формат | | | HL - имя файла в формате ДОС | | | DE - 11 символов имени файла | | +----------------------------------------------------------------------+-------------------------------------+ | **45h (69) EXCMDLN (Разбор командной строки)** | +------------------------------------------------------------------------------------------------------------+ | Входные значения: | | HL - указатель командной строки | | DE - указатель на буфер пользователя | | C - 45h | | B - номер подфункции: | | | | 0 - Разобрать строку; | | 1 - Выделить имя диска; | | 2 - Выделить директорию; | | 3 - Выделить имя файла; | | 4 - Выделить расширение файла; | | 5 - Выделить имя диска, путь к файлу, имя файла и расширение файла; | | 6 - Зарезервирована; | | 7 - Выделить параметр командной строки; | | 8 - Преобразовать из 11 символьного формата в формат ДОС; | | 9 - Преобразовать из формата ДОС в 11 символьный формат; | +------------------------------------------------------------------------------------------------------------+ | | | +---------------------------------------------------------------------------------------+ | | | **Подфункция 0 - Разобрать строку:** | | | +--------------------------------------+------------------------------------------------+ | | | Входные значения: | Выходные значения: | | | | HL - указатель командной строки | A - код ошибки, если CF=1 | | | | C - 45h | A - результат разбора, если CF=0 | | | | B = 0 - Разобрать строку | bit7 - В строке обнаружены символы ? или * | | | | | bit3 - В строке указано имя диска; | | | | | bit2 - В строке указан путь к файлу; | | | | | bit1 - В строке указано расширение файла; | | | | | bit0 - В строке указано имя файла; | | | +--------------------------------------+------------------------------------------------+ | | | **Подфункция 1 - Выделить имя диска:** | | | +--------------------------------------+------------------------------------------------+ | | | Входные значения: | Выходные значения: | | | | HL - указатель командной строки | A - код ошибки, если CF=1 | | | | DE - буфер (макс. 13 байт) | A - номер диска (0 - A, 1 - B, 2 - C и т.д.), | | | | C - 45h | если CF=0 | | | | B = 1 - Выделить имя диска | буфер - имя диска "A:",0 | | | +--------------------------------------+------------------------------------------------+ | | | **Подфункция 2 - Выделить директорию:** | | | +--------------------------------------+------------------------------------------------+ | | | Входные значения: | Выходные значения: | | | | HL - указатель командной строки | A - код ошибки, если CF=1 | | | | DE - буфер (макс. 256 байт) | A - результат разбора, если CF=0 | | | | C - 45h | bit7 - В строке обнарxужены символы ? или * | | | | B = 2 - Выделить директорию | bit3 - В строке указано имя диска; | | | | | bit2 - В строке указан путь к файлу; | | | | | bit1 - В строке указано расширение файла; | | | | | bit0 - В строке указано имя файла; | | | | | буфер - директория "DIR1\DIR2\DIR3\",0 | | | +--------------------------------------+------------------------------------------------+ | | | **Подфункция 3 - Выделить имя файла:** | | | +--------------------------------------+------------------------------------------------+ | | | Входные значения: | Выходные значения: | | | | HL - указатель командной строки | A - код ошибки, если CF=1 | | | | DE - буфер (макс. 13 байт) | A - результат разбора, если CF=0 | | | | C - 45h | bit7 - В строке обнаружены символы ? или * | | | | B = 3 - Выделить имя файла | bit3 - В строке указано имя диска; | | | | | bit2 - В строке указан путь к файлу; | | | | | bit1 - В строке указано расширение файла; | | | | | bit0 - В строке указано имя файла; | | | | | буфер - имя файла "FILE.EXT",0 | | | +--------------------------------------+------------------------------------------------+ | | | **Подфункция 4 - Выделить расширение файла:** | | | +--------------------------------------+------------------------------------------------+ | | | Входные значения: | Выходные значения: | | | | HL - указатель командной строки | A - код ошибки, если CF=1 | | | | DE - буфер (макс. 4 байт) | A - результат разбора, если CF=0 | | | | C - 45h | bit7 - В строке обнаружены символы ? или * | | | | B = 4 - Выделить расширение файла | bit3 - В строке указано имя диска; | | | | | bit2 - В строке указан путь к файлу; | | | | | bit1 - В строке указано расширение файла; | | | | | bit0 - В строке указано имя файла; | | | | | буфер - расширение "TXT",0 или "C ",0 | | | +--------------------------------------+------------------------------------------------+ | | | **Подфункция 5 - Выделить имя диска, путь к файлу, имя файла и расширение файла:** | | | +--------------------------------------+------------------------------------------------+ | | | Входные значения: | Выходные значения: | | | | HL - указатель командной строки | A - код ошибки, если CF=1 | | | | DE - буфер (макс. 8 байт) | A - результат разбора, если CF=0 | | | | DE+0 адрес буфера для имени диска | bit7 - В строке обнаружены символы ? или * | | | | (макс. 13 байт) | bit3 - В строке указано имя диска; | | | | DE+2 адрес буфера для директории | bit2 - В строке указан путь к файлу; | | | | (макс. 256 байт) | bit1 - В строке указано расширение файла; | | | | DE+3 адрес буфера для имени файла | bit0 - В строке указано имя файла; | | | | (макс. 13 байт) | | | | | DE+4 адрес буфера для расширения | | | | | файла (макс. 4 байта) | | | | | C - 45h | | | | | B = 5 - Выделить имя диска, путь к | | | | | файлу, имя файла и расширение файла | | | | +--------------------------------------+------------------------------------------------+ | | | **Подфункция 7 - Выделить параметр командной строки** | | | +--------------------------------------+------------------------------------------------+ | | | Входные значения: | Выходные значения: | | | | HL - указатель командной строки | HL - указатель на следующий параметр командной | | | | DE - буфер для выделяемого | строки | | | | параметра | CF = 0 - конец строки не достигнут (есть | | | | C - 45h | другие параметры) | | | | B = 7 - Выделить параметр командной | CF = 1 - конец строки (в буфер перенесён | | | | строки | последний параметр или ноль) | | | +--------------------------------------+------------------------------------------------+ | | | **Подфункция 8 - Преобразовать из 11 символьного формата в формат ДОС** | | | +--------------------------------------+------------------------------------------------+ | | | Входные значения: | Выходные значения: | | | | C - 45h | A - код ошибки, если CF=1 | | | | B = 8 - преобразовать из 11 | | | | | символьного формата в формат ДОС | | | | | HL - 11 символов имени файла | | | | | DE - буфер для имени в формате ДОС | | | | +--------------------------------------+------------------------------------------------+ | | | **Подфункция 9 - Преобразовать из формата ДОС в 11 символьный формат** | | | +--------------------------------------+------------------------------------------------+ | | | Входные значения: | Выходные значения: | | | | C - 45h | A - код ошибки, если CF=1 | | | | B = 9 - преобразовать из формата | | | | | ДОС в 11 символьный формат | | | | | HL - имя файла в формате ДОС | | | | | DE - буфер для 11 символов имени | | | | | файла | | | | +--------------------------------------+------------------------------------------------+ | | | +------------------------------------------------------------------------------------------------------------+ | **Функции для работы с переменными** | +------------------------------------------------------------------------------------------------------------+ | **46h (70) ENVIRON (Системное окружение)** | +----------------------------------------------------------------------+-------------------------------------+ | Входные значения: | Выходные значения: | | B - номер подфункции | A - состояние, если CF=0 | | C - 46h | A=0 - переменная обнаружена | | B=0 **Получение системного | A=#FF - переменная не обнаружена | | окружения** | DE - указывает на конец буфера | | HL - буфер | A - код ошибки, если CF=1 | | B=1 **Получить переменную | | | окружения** | | | HL - имя переменной | | | DE - буфер для значения переменной | | | B=2 **Установить/удалить переменную | | | окружения** | | | HL - имя переменной и значение, | | | разделенные символом '=', | | | (ПЕРЕМЕННАЯ=ЗНАЧЕНИЕ) | | +----------------------------------------------------------------------+-------------------------------------+ | **47h (71) APPINFO (Получение информации приложения) -- функция глючная, | | информацию берёт из CLP_Buffer страницы загрузки кода приложения** | +----------------------------------------------------------------------+-------------------------------------+ | Входные значения: | Выходные значения: | | B - номер подфункции | A - код ошибки, если CF=1 | | C - 47h | | | HL - буфер данных | | | B=0 - получение параметров | | | командной строки | | | B=1 - получение полного пути к | | | каталогу программы | | | B=2 - получение полного пути и | | | имени файла программы | | +----------------------------------------------------------------------+-------------------------------------+ | **Функции работы с экраном** | +----------------------------------------------------------------------+-------------------------------------+ | **50h (80) SETVMOD (Выбор режима экрана) -- изменяет на обоих экранах** | +----------------------------------------------------------------------+-------------------------------------+ | Входные значения: | Выходные значения: | | A - режим экрана | A - код ошибки, если CF=1 | | 02h - текстовый 40x32x16 цветов | | | 03h - текстовый 80x32x16 цветов | | | 81h - графический 320x256x256 | | | цветов | | | 82h - графический 640x256x16 | | | цветов | | | B - страница активного экрана на | | | выходе 0/1 | | | C - 50h | | +----------------------------------------------------------------------+-------------------------------------+ | **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 | A - код ошибки, если CF=1 | | C - 54h | | +----------------------------------------------------------------------+-------------------------------------+ | **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 (Считать символ с экрана) почти [Сразу прыгает в биос] | | лучше использовать WIN_GET_SYM** | +----------------------------------------------------------------------+-------------------------------------+ | Входные значения: | Выходные значения: | | D - строка | A - символ | | E - столбец | B - атрибут | | C - 57h | | +----------------------------------------------------------------------+-------------------------------------+ | **58h (88) WRCHAR (Напечатать символ на экране)** | +----------------------------------------------------------------------+-------------------------------------+ | Входные значения: | Выходные значения: | | D - строка | нет | | E - столбец | | | A - символ | | | B - атрибут | | | C - 58h | | +----------------------------------------------------------------------+-------------------------------------+ | **59h (89) WINCOPY (Запомнить окно экрана)** | +----------------------------------------------------------------------+-------------------------------------+ | Входные значения: | Выходные значения: | | D - строка | нет | | E - столбец левого верхнего угла | | | окна | | | H - высота окна | | | L - ширина окна | | | B - страница буфера для IX > | | | #C000 | | | IX - адрес буфера | | | C - 59h | | +----------------------------------------------------------------------+-------------------------------------+ | **5Ah (90) WINREST (Восстановить окно экрана)** | +----------------------------------------------------------------------+-------------------------------------+ | Входные значения: | Выходные значения: | | D - строка | нет | | E - столбец левого верхнего угла | | | окна | | | H - высота окна | | | L - ширина окна | | | B - страница буфера для IX > | | | #C000 | | | IX - адрес буфера | | | C - 5Ah | | +----------------------------------------------------------------------+-------------------------------------+ | **5Bh (91) PUTCHAR (Напечатать символ в текущей позиции курсора)** | +----------------------------------------------------------------------+-------------------------------------+ | Входные значения: | Выходные значения: | | A - символ | нет | | C - 5Bh | | +----------------------------------------------------------------------+-------------------------------------+ | **5Ch (92) PCHARS (Напечатать строку символов в текущей позиции курсора)** | +----------------------------------------------------------------------+-------------------------------------+ | Входные значения: | Выходные значения: | | HL - указатель на начало строки | HL - указатель на следующую строку | | символов | символов | | C - 5Ch | | +----------------------------------------------------------------------+-------------------------------------+ | **Функции для печати на принтере** | +----------------------------------------------------------------------+-------------------------------------+ | **5Fh (95) PRINT (Вывод символа на принтер без ожидания)** | +----------------------------------------------------------------------+-------------------------------------+ | Входные значения: | Выходные значения: | | A - символ | B - символ | | C - 5Fh | CF = 1 - принтер не готов | +------------------------------------------------------------------------------------------------------------+