mirror of
https://github.com/Tolik-Trek/Estex-DSS.git
synced 2026-06-15 09:21:47 +03:00
804 lines
96 KiB
Plaintext
804 lines
96 KiB
Plaintext
## Системные вызовы дисковой подсистемы (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 - принтер не готов |
|
||
+------------------------------------------------------------------------------------------------------------+
|