c71e249a4e
First substantive commit: the entire Sprinter C compiler tree on top of
the bare README+gitignore initial commit.
What's in here:
bin/sprinter-cc — driver script invoking SDCC + linker + mkexe
libc/ — Sprinter-specific libc layer over ESTEX/BIOS
(conio, gfx, io, mem, stdio + headers)
runtime/ — crt0 variants (default/small/banked/minimal)
+ heap + bank trampolines
toolchain/ — mkexe (SprintEXE packer, C + tests)
examples/ — 30 demo programs (gfx, file I/O, env, time, …)
lib/Makefile — builds the libc archive (sprinter.lib)
docs/ — converted Sprinter manuals + asm reference samples
third_party/ — solid-c reference compiler dump + sdcc setup script
release_docs/ — packaging / release notes
gitignore overhaul:
• Drop dangerous blanket patterns: *.asm (would hide docs/samples/*.asm)
and *.exe (case-insensitive match was hiding third_party/solid-c/*.EXE
on macOS APFS). Replaced with examples/*/*.{asm,exe,…} and lib/*.lib.
• Restore tracking of toolchain/mkexe/tests/{one,big}.bin — those are
INPUT fixtures, not build outputs.
• Collapse the duplicated SDCC/C/Sdcc sections into one section per
concern (build outputs / vendored / OS-junk).
• Add .sprinter-cc-*/, build/ (catches lib/build/ too), .claude/.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
1460 lines
33 KiB
Plaintext
1460 lines
33 KiB
Plaintext
1.1. Системные вызовы дисковой подсистемы (DSS) v1.6
|
||
|
||
1.1.1. Системные вызовы
|
||
|
||
Если программа выполняет не только некую математическую задачу на ассемблере, то в ней придется столкнуться с такими вещами, как получение ввода пользователя, выполнение вывода результатов и завершение своей работы. Для этого, необходимо обратиться к сервисам DSS. Фактически, программирование на языке ассемблера одинаково для любых систем, если не пользоваться их сервисами.
|
||
|
||
Вызов функций DSS в системе Estex выполняется из ассемблера. Необходимые параметры указываются в различных регистрах, регистр C используется для указания номера функции.
|
||
|
||
|
||
|
||
Так, наша программа для Estex будет выглядеть наподобие:
|
||
|
||
|
||
|
||
ORG #8100 ;адрес точки входа
|
||
|
||
|
||
|
||
LD HL,MSG ;сообщение для вывода
|
||
|
||
LD C,5Ch ;номер системного вызова (PCHARS)
|
||
|
||
RST 10h ;вызов подсистемы
|
||
|
||
|
||
|
||
LD C,41h ;номер системного вызова (EXIT)
|
||
|
||
RST 10h ;вызов подсистемы
|
||
|
||
|
||
|
||
MSG db "Hello, world!",0Dh,0Ah ;наша строка
|
||
|
||
db 0 ;конец строки
|
||
|
||
|
||
|
||
Следом за таблицей есть пояснение по двум новым функциям 0Ch и 0Dh.
|
||
|
||
1.1.2. Далее идет список категорий функций DSS для системы Estex
|
||
|
||
• Функции идентификации системы
|
||
|
||
• Функции для работы с диском
|
||
|
||
• Функции для работы с файлами
|
||
|
||
• Функции для работы с датой и временем
|
||
|
||
• Функции управления памятью
|
||
|
||
• Функции ввода с клавиатуры
|
||
|
||
• Функции для исполнения программ
|
||
|
||
• Функции для работы со строками и командной строкой
|
||
|
||
• Функции для работы с переменными
|
||
|
||
• Функции работы с экраном
|
||
|
||
• Функции для печати на принтере
|
||
|
||
|
||
|
||
|
||
|
||
Функции идентификации системы
|
||
|
||
|
||
|
||
|
||
00h (00) VERSION (Версия DSS)
|
||
|
||
Входные значения:
|
||
|
||
C - 00h Выходные значения:
|
||
|
||
D - номер версии
|
||
|
||
E - модификация
|
||
|
||
Функции для работы с диском
|
||
|
||
|
||
|
||
|
||
01h (01) CHDISK (Смена текущего диска)
|
||
|
||
Входные значения:
|
||
|
||
A - номер диска (0-A,1-B...)
|
||
|
||
C - 01h Выходные значения:
|
||
|
||
A - код ошибки, если CF=1
|
||
|
||
A - максимальный номер диска, если CF=0
|
||
|
||
02h (02) CURDISK (Номер текущего диска)
|
||
|
||
Входные значения:
|
||
|
||
C - 02h Выходные значения:
|
||
|
||
A - код ошибки, если CF=1
|
||
|
||
A - текущий номер диска (0-A,1-B...), если CF=0
|
||
|
||
03h (03) DSKINFO (Информация о диске)
|
||
|
||
Входные значения:
|
||
|
||
A - номер диска (0-A,1-B...0FFh-текущий)
|
||
|
||
C - 03h Выходные значения:
|
||
|
||
A - код ошибки, если CF=1
|
||
|
||
A - размер кластера в секторах, если CF=0
|
||
|
||
HL - общее кол-во кластеров
|
||
|
||
DE - свободных кластеров
|
||
|
||
BC - размер сектора в байтах
|
||
|
||
09h (09) BOOTDSK (Номер системного диска)
|
||
|
||
Входные значения:
|
||
|
||
C - 09h
|
||
|
||
B = 0 Выходные значения:
|
||
|
||
A - код ошибки, если CF=1
|
||
|
||
A - номер системного диска (0-A,1-B...), если CF=0
|
||
|
||
Функции для работы с файлами
|
||
|
||
|
||
|
||
|
||
0Ah (10) CREATE (Создание файла)
|
||
|
||
Входные значения:
|
||
|
||
HL - указатель на файловую спецификацию
|
||
|
||
A - атрибут файла
|
||
|
||
C - 0Ah Выходные значения:
|
||
|
||
A - код ошибки, если CF=1
|
||
|
||
A - файловый манипулятор, если CF=0
|
||
|
||
0Bh (11) CREATE NEW FILE (Создание нового файла)
|
||
|
||
Входные значения:
|
||
|
||
HL - указатель на файловую спецификацию
|
||
|
||
A - атрибут файла
|
||
|
||
C - 0Bh Выходные значения:
|
||
|
||
A – код ошибки, если CF=1
|
||
|
||
A - файловый манипулятор, если CF=0
|
||
|
||
0Eh (14) DELETE (Удаление файла)
|
||
|
||
Входные значения:
|
||
|
||
HL - указатель на файловую спецификацию
|
||
|
||
C - 0Eh Выходные значения:
|
||
|
||
A - код ошибки, если CF=1
|
||
|
||
10h (16) RENAME (Переименование файла)
|
||
|
||
Входные значения:
|
||
|
||
HL - указатель на старое имя файла
|
||
|
||
DE - указатель на новое имя файла
|
||
|
||
C - 10h Выходные значения:
|
||
|
||
A - код ошибки, если CF=1
|
||
|
||
11h (17) OPEN (Открытие файла)
|
||
|
||
Входные значения:
|
||
|
||
HL - указатель на файловую спецификацию
|
||
|
||
A - режим доступа
|
||
|
||
A=0 чтение/запись
|
||
|
||
A=1 чтение
|
||
|
||
A=2 запись
|
||
|
||
C - 11h Выходные значения:
|
||
|
||
A - код ошибки, если CF=1
|
||
|
||
A - файловый манипулятор, если CF=0
|
||
|
||
12h (18) CLOSE (Закрытие файла)
|
||
|
||
Входные значения:
|
||
|
||
A - файловый манипулятор
|
||
|
||
C - 12h Выходные значения:
|
||
|
||
A - код ошибки, если CF=1
|
||
|
||
|
||
|
||
13h (19) READ (Чтение из файла)
|
||
|
||
Входные значения:
|
||
|
||
A - файловый манипулятор
|
||
|
||
HL - адрес в памяти
|
||
|
||
DE - количество читаемых байт
|
||
|
||
C - 13h Выходные значения:
|
||
|
||
A - код ошибки, если CF=1
|
||
|
||
DE - реальное количество прочитанных байт
|
||
|
||
если CF=0:
|
||
|
||
A = 0 прочитаны все байты
|
||
|
||
A = 0FFh прочитано меньшее число байт
|
||
|
||
14h (20) WRITE (Запись в файл)
|
||
|
||
Входные значения:
|
||
|
||
A - файловый манипулятор
|
||
|
||
HL - адрес в памяти
|
||
|
||
DE - количество записываемых байт
|
||
|
||
C - 14h Выходные значения:
|
||
|
||
A - код ошибки, если CF=1
|
||
|
||
DE - реальное количество записанных байт
|
||
|
||
15h (21) MOVE_FP (Перемещение указателя в файле)
|
||
|
||
Входные значения:
|
||
|
||
A - файловый манипулятор
|
||
|
||
HL:IX - смещение указателя в файле
|
||
|
||
B - способ перемещения:
|
||
|
||
B=0 от начала файла
|
||
|
||
B=1 от текущего значения указателя
|
||
|
||
B=2 от конца файла
|
||
|
||
C - 15h Выходные значения:
|
||
|
||
A - код ошибки, если CF=1
|
||
|
||
HL:IX - новое значение указателя
|
||
|
||
16h (22) ATTRIB (Получение/изменение атрибута файла)
|
||
|
||
Входные значения:
|
||
|
||
HL - указатель на файловую спецификацию
|
||
|
||
B - режим доступа
|
||
|
||
B = 0 получить атрибут
|
||
|
||
B = 1 установить атрибут
|
||
|
||
A - атрибут файла
|
||
|
||
C - 16h Выходные значения:
|
||
|
||
A - код ошибки, если CF=1
|
||
|
||
A - атрибут файла, если CF=0
|
||
|
||
17h (23) GET_D_T (Информация о дате и времени файла)
|
||
|
||
Входные значения:
|
||
|
||
A - файловый манипулятор
|
||
|
||
C - 17h Выходные значения:
|
||
|
||
A - код ошибки, если CF=1
|
||
|
||
D - день
|
||
|
||
E - месяц
|
||
|
||
IX - год
|
||
|
||
H - час
|
||
|
||
L - минуты
|
||
|
||
B - секунды
|
||
|
||
18h (24) PUT_D_T (Изменение даты и времени файла)
|
||
|
||
Входные значения:
|
||
|
||
A - файловый манипулятор
|
||
|
||
D - день
|
||
|
||
E - месяц
|
||
|
||
IX - год
|
||
|
||
H - час
|
||
|
||
L - минуты
|
||
|
||
B - секунды
|
||
|
||
C - 18h Выходные значения:
|
||
|
||
A - код ошибки, если CF=1
|
||
|
||
19h (25) F_FIRST (Поиск первого совпадающего файла)
|
||
|
||
Входные значения:
|
||
|
||
HL - указатель на файловую спецификацию
|
||
|
||
DE - рабочий буфер 44 байта, если B=0, иначе 256 байт
|
||
|
||
A - атрибуты, используемые при поиске
|
||
|
||
B = 0 - имя найденного файла в формате 11 байт "FilenameExt"
|
||
|
||
B = 1 - имя найденного файла в формате DOS "filename.ext",0
|
||
|
||
C - 19h Выходные значения:
|
||
|
||
A - код ошибки, если CF=1
|
||
|
||
1Ah (26) F_NEXT (Поиск следующего совпадающего файла)
|
||
|
||
Входные значения:
|
||
|
||
DE - указатель на рабочий буфер
|
||
|
||
C - 1Ah Выходные значения:
|
||
|
||
A - код ошибки, если CF=1
|
||
|
||
1Bh (27) MKDIR (Создание каталога)
|
||
|
||
Входные значения:
|
||
|
||
HL - указатель на файловую спецификацию
|
||
|
||
C - 1Bh Выходные значения:
|
||
|
||
A - код ошибки, если CF=1
|
||
|
||
1Ch (28) RMDIR (Устранение каталога)
|
||
|
||
Входные значения:
|
||
|
||
HL - указатель на файловую спецификацию
|
||
|
||
C - 1Ch Выходные значения:
|
||
|
||
A - код ошибки, если CF=1
|
||
|
||
1Dh (29) CHDIR (Смена текущего каталога)
|
||
|
||
Входные значения:
|
||
|
||
HL - указатель на файловую спецификацию
|
||
|
||
C - 1Dh Выходные значения:
|
||
|
||
A - код ошибки, если CF=1
|
||
|
||
1Eh (30) CURDIR (Информация о текущем каталоге)
|
||
|
||
Входные значения:
|
||
|
||
HL - буфер в памяти 256 байт
|
||
|
||
C - 1Eh Выходные значения:
|
||
|
||
A - код ошибки, если CF=1
|
||
|
||
Функции для работы с датой и временем
|
||
|
||
|
||
|
||
|
||
21h (33) SYSTIME (Текущая дата и время)
|
||
|
||
Входные значения:
|
||
|
||
C - 21h Выходные значения:
|
||
|
||
D - день
|
||
|
||
E - месяц
|
||
|
||
IX - год
|
||
|
||
H - час
|
||
|
||
L - минуты
|
||
|
||
B - секунды
|
||
|
||
C - день недели
|
||
|
||
22h (34) SETTIME (Установить текущую дату и время)
|
||
|
||
Входные значения:
|
||
|
||
D - день
|
||
|
||
E - месяц
|
||
|
||
IX - год
|
||
|
||
H - час
|
||
|
||
L - минуты
|
||
|
||
B - секунды
|
||
|
||
C - 22h Выходные значения:
|
||
|
||
A - код ошибки, если CF=1
|
||
|
||
Функции управления памятью
|
||
|
||
|
||
|
||
|
||
38h (56) SETWIN (Подключение страницы памяти)
|
||
|
||
Входные значения:
|
||
|
||
A - идентификатор блока памяти
|
||
|
||
B - номер страницы в блоке (0,1,2...)
|
||
|
||
H - биты 6 и 7 задают номер окна, в которое будет подключена страница
|
||
|
||
C - 38h Выходные значения:
|
||
|
||
A - код ошибки, если CF=1
|
||
|
||
A - номер замещенной страницы, если CF=0
|
||
|
||
39h (57) SETWIN1 (Подключение страницы памяти в первое окно)
|
||
|
||
Входные значения:
|
||
|
||
A - идентификатор блока памяти
|
||
|
||
B - номер страницы в блоке (0,1,2...)
|
||
|
||
C - 39h Выходные значения:
|
||
|
||
A - код ошибки, если CF=1
|
||
|
||
A - номер замещенной страницы, если CF=0
|
||
|
||
3Ah (58) SETWIN2 (Подключение страницы памяти во второе окно)
|
||
|
||
Входные значения:
|
||
|
||
A - идентификатор блока памяти
|
||
|
||
B - номер страницы в блоке (0,1,2...)
|
||
|
||
C - 39h Выходные значения:
|
||
|
||
A - код ошибки, если CF=1
|
||
|
||
A - номер замещенной страницы, если CF=0
|
||
|
||
3Bh (59) SETWIN3 (Подключение страницы памяти в третье окно)
|
||
|
||
Входные значения:
|
||
|
||
A - идентификатор блока памяти
|
||
|
||
B - номер страницы в блоке (0,1,2...)
|
||
|
||
C - 3Bh Выходные значения:
|
||
|
||
A - код ошибки, если CF=1
|
||
|
||
A - номер замещенной страницы, если CF=0
|
||
|
||
3Ch (60) INFOMEM (Информация о памяти)
|
||
|
||
Входные значения:
|
||
|
||
C - 3Ch Выходные значения:
|
||
|
||
HL - общее количество страниц
|
||
|
||
BC - количество свободных страниц
|
||
|
||
3Dh (61) GETMEM (Выделение блока памяти)
|
||
|
||
Входные значения:
|
||
|
||
B - размер блока в страницах по 16 килобайт
|
||
|
||
C - 3Dh Выходные значения:
|
||
|
||
A - код ошибки, если CF=1
|
||
|
||
A - идентификатор блока памяти, если CF=0
|
||
|
||
3Eh (62) FREEMEM (Освобождение блока памяти)
|
||
|
||
Входные значения:
|
||
|
||
A - идентификатор блока памяти
|
||
|
||
C - 3Eh Выходные значения:
|
||
|
||
A - код ошибки, если CF=1
|
||
|
||
3Fh (63) SETMEM (Изменение блока памяти)
|
||
|
||
Входные значения:
|
||
|
||
A - идентификатор блока памяти
|
||
|
||
B - новый размер блока
|
||
|
||
C - 3Fh Выходные значения:
|
||
|
||
A - код ошибки, если CF=1
|
||
|
||
0Ch (12) SET_CACHE_FLAG (Установка флага включенной кэш памяти)
|
||
|
||
Входные значения:
|
||
|
||
C – 0Ch
|
||
|
||
Выходные значения:
|
||
|
||
A – номер страницы для сохранения переключателя.
|
||
|
||
CF=1 если ошибка.
|
||
|
||
0Dh (13) RESET_CACHE_FLAG (Сброс флага включенной кэш памяти)
|
||
|
||
Входные значения:
|
||
|
||
C – 0Dh
|
||
|
||
Выходные значения:
|
||
|
||
CF=1 если ошибка.
|
||
|
||
Функции ввода с клавиатуры
|
||
|
||
|
||
|
||
|
||
30h (48) WAITKEY (Ожидание символа с клавиатуры)
|
||
|
||
Входные значения:
|
||
|
||
C - 30h Выходные значения:
|
||
|
||
A - код символа
|
||
|
||
D - позиционный код
|
||
|
||
Е - ASCII код
|
||
|
||
C - режим клавиатуры:
|
||
|
||
bit7 - RUS/LAT
|
||
|
||
bit3 - Num Lock
|
||
|
||
bit2 - Scroll Lock
|
||
|
||
bit1 - Insert
|
||
|
||
bit0 - Caps Lock
|
||
|
||
B - состояние shift'ов:
|
||
|
||
bit7 - Left Shift
|
||
|
||
bit6 - Right Shift
|
||
|
||
bit5 - Ctrl
|
||
|
||
bit4 - Alt
|
||
|
||
bit3 - Left Ctrl
|
||
|
||
bit2 - Left Alt
|
||
|
||
bit1 - Right Ctrl
|
||
|
||
bit0 - Right Alt
|
||
|
||
31h (49) SCANKEY (Опрос клавиатуры без ожидания)
|
||
|
||
Входные значения:
|
||
|
||
C - 31h Выходные значения:
|
||
|
||
ZF = 1 - нет клавиш
|
||
|
||
A - код символа
|
||
|
||
D - позиционный код
|
||
|
||
Е - ASCII код
|
||
|
||
C - режим клавиатуры:
|
||
|
||
bit7 - RUS/LAT
|
||
|
||
bit3 - Num Lock
|
||
|
||
bit2 - Scroll Lock
|
||
|
||
bit1 - Insert
|
||
|
||
bit0 - Caps Lock
|
||
|
||
B - состояние shift'ов:
|
||
|
||
bit7 - Left Shift
|
||
|
||
bit6 - Right Shift
|
||
|
||
bit5 - Ctrl
|
||
|
||
bit4 - Alt
|
||
|
||
bit3 - Left Ctrl
|
||
|
||
bit2 - Left Alt
|
||
|
||
bit1 - Right Ctrl
|
||
|
||
bit0 - Right Alt
|
||
|
||
32h (50) ECHOKEY (Ожидание символа с клавиатуры с печатью)
|
||
|
||
Входные значения:
|
||
|
||
C - 32h Выходные значения:
|
||
|
||
A - код символа
|
||
|
||
D - позиционный код
|
||
|
||
Е - ASCII код
|
||
|
||
C - режим клавиатуры:
|
||
|
||
bit7 - RUS/LAT
|
||
|
||
bit3 - Num Lock
|
||
|
||
bit2 - Scroll Lock
|
||
|
||
bit1 - Insert
|
||
|
||
bit0 - Caps Lock
|
||
|
||
B - состояние shift'ов:
|
||
|
||
bit7 - Left Shift
|
||
|
||
bit6 - Right Shift
|
||
|
||
bit5 - Ctrl
|
||
|
||
bit4 - Alt
|
||
|
||
bit3 - Left Ctrl
|
||
|
||
bit2 - Left Alt
|
||
|
||
bit1 - Right Ctrl
|
||
|
||
bit0 - Right Alt
|
||
|
||
33h (51) CTRLKEY (Получить состояние клавиатуры)
|
||
|
||
Входные значения:
|
||
|
||
C - 33h Выходные значения:
|
||
|
||
A = 0 - нет символов в буфере
|
||
|
||
C - режим клавиатуры:
|
||
|
||
bit7 - RUS/LAT
|
||
|
||
bit3 - Num Lock
|
||
|
||
bit2 - Scroll Lock
|
||
|
||
bit1 - Insert
|
||
|
||
bit0 - Caps Lock
|
||
|
||
B - состояние shift'ов:
|
||
|
||
bit7 - Left Shift
|
||
|
||
bit6 - Right Shift
|
||
|
||
bit5 - Ctrl
|
||
|
||
bit4 - Alt
|
||
|
||
bit3 - Left Ctrl
|
||
|
||
bit2 - Left Alt
|
||
|
||
bit1 - Right Ctrl
|
||
|
||
bit0 - Right Alt
|
||
|
||
35h (53) K_CLEAR (Очистить буфер клавиатуры и выполнить функцию)
|
||
|
||
Входные значения:
|
||
|
||
B - номер фун
|
||
|
||
ции 30h, 31h, 32h, 33h или 34h
|
||
|
||
C - 35h Выходные значения:
|
||
|
||
В зависимости от указанной функции в регистре B.
|
||
|
||
36h (54) K_SETUP (Управление настройками клавиатуры)
|
||
|
||
Входные значения:
|
||
|
||
B - номер подфункции
|
||
|
||
C - 36h
|
||
|
||
|
||
|
||
B = 0, установить раскладку клавиатуры
|
||
|
||
A - номер раскладки
|
||
|
||
0 - normal
|
||
|
||
1 - shift
|
||
|
||
2 - caps lock
|
||
|
||
3 - caps lock + shift
|
||
|
||
4 - normal (альтернативная кл.)
|
||
|
||
5 - shift (альтернативная кл.)
|
||
|
||
6 - caps lock (альтернативная кл.)
|
||
|
||
7 - caps lock + shift (альтернативная кл.)
|
||
|
||
B = 1, получить состояние звуковых переменных
|
||
|
||
B = 2, установить звуковые переменные
|
||
|
||
A - значение переменной
|
||
|
||
bit0 - сигнал переполнения буфера клавиатуры
|
||
|
||
bit1 - сигнал переключения на альтернативную раскладку клавиатуры Выходные значения:
|
||
|
||
В зависимости от указанной функции в регистре B.
|
||
|
||
37h (55) TESTKEY (Опрос буфера клавиатуры)
|
||
|
||
Входные значения:
|
||
|
||
C - 37h Выходные значения:
|
||
|
||
ZF = 1 - нет символов в буфере
|
||
|
||
A - код символа
|
||
|
||
D - позиционный код
|
||
|
||
Е - ASCII код
|
||
|
||
C - режим клавиатуры:
|
||
|
||
bit7 - RUS/LAT
|
||
|
||
bit3 - Num Lock
|
||
|
||
bit2 - Scroll Lock
|
||
|
||
bit1 - Insert
|
||
|
||
bit0 - Caps Lock
|
||
|
||
B - состояние shift'ов:
|
||
|
||
bit7 - Left Shift
|
||
|
||
bit6 - Right Shift
|
||
|
||
bit5 - Ctrl
|
||
|
||
bit4 - Alt
|
||
|
||
bit3 - Left Ctrl
|
||
|
||
bit2 - Left Alt
|
||
|
||
bit1 - Right Ctrl
|
||
|
||
bit0 - Right Alt
|
||
|
||
Функции для исполнения программ
|
||
|
||
|
||
|
||
|
||
40h (64) EXEC (Выполнить файл)
|
||
|
||
Входные значения:
|
||
|
||
HL - указатель на файловую спецификацию
|
||
|
||
B = 0 - загрузить и выполнить программу
|
||
|
||
C - 40h Выходные значения:
|
||
|
||
A - код ошибки, если CF=1
|
||
|
||
A - код завершения, если CF=0
|
||
|
||
41h (65) EXIT (Завершение программы)
|
||
|
||
Входные значения:
|
||
|
||
B - код завершения
|
||
|
||
C - 41h Выходные значения:
|
||
|
||
A - код ошибки, если CF=1
|
||
|
||
A - код завершения, если CF=0
|
||
|
||
42h (66) WAIT (Получить код завершения программы)
|
||
|
||
Входные значения:
|
||
|
||
C - 42h Выходные значения:
|
||
|
||
A - код завершения
|
||
|
||
Функции для работы со строками и командной строкой
|
||
|
||
|
||
|
||
|
||
43h (67) GSWITCH (Выделить параметр командной строки)
|
||
|
||
Входные значения:
|
||
|
||
HL - указатель командной строки
|
||
|
||
DE - буфер для выделяемого параметра
|
||
|
||
C - 43h Выходные значения:
|
||
|
||
HL - указатель на следующий параметр командной строки
|
||
|
||
CF = 0 - конец строки не достигнут (есть другие параметры)
|
||
|
||
CF = 1 - конец строки (в буфер перенесён последний параметр или ноль)
|
||
|
||
44h (68) DOSNAME (Преобразовать имя файла)
|
||
|
||
Входные значения:
|
||
|
||
C - 44h
|
||
|
||
B = 0, преобразовать из 11 символьного формата в формат ДОС
|
||
|
||
HL - 11 символов имени файла
|
||
|
||
DE - буфер для имени в формате ДОС
|
||
|
||
B = 1, преобразовать из формата ДОС в 11 символьный формат
|
||
|
||
HL - имя файла в формате ДОС
|
||
|
||
DE - 11 символов имени файла Выходные значения:
|
||
|
||
A - код ошибки, если CF=1
|
||
|
||
45h (69) EXCMDLN (Разбор командной строки)
|
||
|
||
Входные значения:
|
||
|
||
HL - указатель командной строки
|
||
|
||
DE - указатель на буфер пользователя
|
||
|
||
C - 45h
|
||
|
||
B - номер подфункции:
|
||
|
||
0 - Разобрать строку;
|
||
|
||
1 - Выделить имя диска;
|
||
|
||
2 - Выделить директорию;
|
||
|
||
3 - Выделить имя файла;
|
||
|
||
4 - Выделить расширение файла;
|
||
|
||
5 - Выделить имя диска, путь к файлу, имя файла и расширение файла;
|
||
|
||
6 - Зарезервирована;
|
||
|
||
7 - Выделить параметр командной строки;
|
||
|
||
8 - Преобразовать из 11 символьного формата в формат ДОС;
|
||
|
||
9 - Преобразовать из формата ДОС в 11 символьный формат;
|
||
|
||
Подфункция 0 - Разобрать строку:
|
||
|
||
Входные значения:
|
||
|
||
HL - указатель командной строки
|
||
|
||
C - 45h
|
||
|
||
B = 0 - Разобрать строку Выходные значения:
|
||
|
||
A - код ошибки, если CF=1
|
||
|
||
A - результат разбора, если CF=0
|
||
|
||
bit7 - В строке обнаружены символы ? или *
|
||
|
||
bit3 - В строке указано имя диска;
|
||
|
||
bit2 - В строке указан путь к файлу;
|
||
|
||
bit1 - В строке указано расширение файла;
|
||
|
||
bit0 - В строке указано имя файла;
|
||
|
||
Подфункция 1 - Выделить имя диска:
|
||
|
||
Входные значения:
|
||
|
||
HL - указатель командной строки
|
||
|
||
DE - буфер (макс. 13 байт)
|
||
|
||
C - 45h
|
||
|
||
B = 1 - Выделить имя диска Выходные значения:
|
||
|
||
A - код ошибки, если CF=1
|
||
|
||
A - номер диска (0 - A, 1 - B, 2 - C и т.д.), если CF=0
|
||
|
||
буфер - имя диска "A:",0
|
||
|
||
Подфункция 2 - Выделить директорию:
|
||
|
||
Входные значения:
|
||
|
||
HL - указатель командной строки
|
||
|
||
DE - буфер (макс. 256 байт)
|
||
|
||
C - 45h
|
||
|
||
B = 2 - Выделить директорию Выходные значения:
|
||
|
||
A - код ошибки, если CF=1
|
||
|
||
A - результат разбора, если CF=0
|
||
|
||
bit7 - В строке обнаружены символы ? или *
|
||
|
||
bit3 - В строке указано имя диска;
|
||
|
||
bit2 - В строке указан путь к файлу;
|
||
|
||
bit1 - В строке указано расширение файла;
|
||
|
||
bit0 - В строке указано имя файла;
|
||
|
||
буфер - директория "DIR1\DIR2\DIR3\",0
|
||
|
||
Подфункция 3 - Выделить имя файла:
|
||
|
||
Входные значения:
|
||
|
||
HL - указатель командной строки
|
||
|
||
DE - буфер (макс. 13 байт)
|
||
|
||
C - 45h
|
||
|
||
B = 3 - Выделить имя файла Выходные значения:
|
||
|
||
A - код ошибки, если CF=1
|
||
|
||
A - результат разбора, если CF=0
|
||
|
||
bit7 - В строке обнаружены символы ? или *
|
||
|
||
bit3 - В строке указано имя диска;
|
||
|
||
bit2 - В строке указан путь к файлу;
|
||
|
||
bit1 - В строке указано расширение файла;
|
||
|
||
bit0 - В строке указано имя файла;
|
||
|
||
буфер - имя файла "FILE.EXT",0
|
||
|
||
Подфункция 4 - Выделить расширение файла:
|
||
|
||
Входные значения:
|
||
|
||
HL - указатель командной строки
|
||
|
||
DE - буфер (макс. 4 байт)
|
||
|
||
C - 45h
|
||
|
||
B = 4 - Выделить расширение файла Выходные значения:
|
||
|
||
A - код ошибки, если CF=1
|
||
|
||
A - результат разбора, если CF=0
|
||
|
||
bit7 - В строке обнаружены символы ? или *
|
||
|
||
bit3 - В строке указано имя диска;
|
||
|
||
bit2 - В строке указан путь к файлу;
|
||
|
||
bit1 - В строке указано расширение файла;
|
||
|
||
bit0 - В строке указано имя файла;
|
||
|
||
буфер - расширение "TXT",0 или "C ",0
|
||
|
||
Подфункция 5 - Выделить имя диска, путь к файлу, имя файла и расширение файла:
|
||
|
||
Входные значения:
|
||
|
||
HL - указатель командной строки
|
||
|
||
DE - буфер (макс. 8 байт)
|
||
|
||
DE+0 адрес буфера для имени диска (макс. 13 байт)
|
||
|
||
DE+2 адрес буфера для директории (макс. 256 байт)
|
||
|
||
DE+3 адрес буфера для имени файла (макс. 13 байт)
|
||
|
||
DE+4 адрес буфера для расширения файла (макс. 4 байта)
|
||
|
||
C - 45h
|
||
|
||
B = 5 - Выделить имя диска, путь к файлу, имя файла и расширение файла Выходные значения:
|
||
|
||
A - код ошибки, если CF=1
|
||
|
||
A - результат разбора, если CF=0
|
||
|
||
bit7 - В строке обнаружены символы ? или *
|
||
|
||
bit3 - В строке указано имя диска;
|
||
|
||
bit2 - В строке указан путь к файлу;
|
||
|
||
bit1 - В строке указано расширение файла;
|
||
|
||
bit0 - В строке указано имя файла;
|
||
|
||
Подфункция 7 - Выделить параметр командной строки
|
||
|
||
Входные значения:
|
||
|
||
HL - указатель командной строки
|
||
|
||
DE - буфер для выделяемого параметра
|
||
|
||
C - 45h
|
||
|
||
B = 7 - Выделить параметр командной строки Выходные значения:
|
||
|
||
HL - указатель на следующий параметр командной строки
|
||
|
||
CF = 0 - конец строки не достигнут (есть другие параметры)
|
||
|
||
CF = 1 - конец строки (в буфер перенесён последний параметр или ноль)
|
||
|
||
Подфункция 8 - Преобразовать из 11 символьного формата в формат ДОС
|
||
|
||
Входные значения:
|
||
|
||
C - 45h
|
||
|
||
B = 8 - преобразовать из 11 символьного формата в формат ДОС
|
||
|
||
HL - 11 символов имени файла
|
||
|
||
DE - буфер для имени в формате ДОС Выходные значения:
|
||
|
||
A - код ошибки, если CF=1
|
||
|
||
Подфункция 9 - Преобразовать из формата ДОС в 11 символьный формат
|
||
|
||
Входные значения:
|
||
|
||
C - 45h
|
||
|
||
B = 9 - преобразовать из формата ДОС в 11 символьный формат
|
||
|
||
HL - имя файла в формате ДОС
|
||
|
||
DE - буфер для 11 символов имени файла Выходные значения:
|
||
|
||
A - код ошибки, если CF=1
|
||
|
||
|
||
|
||
Функции для работы с переменными
|
||
|
||
|
||
|
||
|
||
46h (70) ENVIRON (Системное окружение)
|
||
|
||
Входные значения:
|
||
|
||
B - номер подфункции
|
||
|
||
C - 46h
|
||
|
||
B=0 Получение системного окружения
|
||
|
||
HL - буфер
|
||
|
||
B=1 Получить переменную окружения
|
||
|
||
HL - имя переменной
|
||
|
||
DE - буфер для значения переменной
|
||
|
||
B=2 Установить/удалить переменную окружения
|
||
|
||
HL - имя переменной и значение, разделенные символом '=', (ПЕРЕМЕННАЯ=ЗНАЧЕНИЕ) Выходные значения:
|
||
|
||
A - состояние, если CF=0
|
||
|
||
A=0 - переменная обнаружена
|
||
|
||
A=0FFh - переменная не обнаружена
|
||
|
||
DE - указывает на конец буфера
|
||
|
||
A - код ошибки, если CF=1
|
||
|
||
47h (71) APPINFO (Получение информации приложения)
|
||
|
||
Входные значения:
|
||
|
||
B - номер подфункции
|
||
|
||
C - 47h
|
||
|
||
HL - буфер данных
|
||
|
||
B=0 - получение параметров командной строки
|
||
|
||
B=1 - получение полного пути к каталогу программы
|
||
|
||
B=2 - получение полного пути и имени файла программы Выходные значения::
|
||
|
||
A - код ошибки, если CF=1
|
||
|
||
Функции работы с экраном
|
||
|
||
|
||
|
||
|
||
50h (80) SETVMOD (Выбор режима экрана)
|
||
|
||
Входные значения:
|
||
|
||
A - режим экрана
|
||
|
||
02h - текстовый 40x32x16 цветов
|
||
|
||
03h - текстовый 80x32x16 цветов
|
||
|
||
81h - графический 320x256x256 цветов
|
||
|
||
82h - графический 640x256x16 цветов
|
||
|
||
B - страница экрана 0/1
|
||
|
||
C - 50h Выходные значения:
|
||
|
||
A - код ошибки, если CF=1
|
||
|
||
51h (81) GETVMOD (Получить текущий режим экрана)
|
||
|
||
Входные значения:
|
||
|
||
C - 51h Выходные значения:
|
||
|
||
A - код ошибки, если CF=1
|
||
|
||
A - текущий режим экрана, если CF=0
|
||
|
||
B - страница экрана 0/1
|
||
|
||
52h (82) LOCATE (Установить позицию курсора)
|
||
|
||
Входные значения:
|
||
|
||
D - строка курсора
|
||
|
||
E - столбец курсора
|
||
|
||
C - 52h Выходные значения:
|
||
|
||
нет
|
||
|
||
53h (83) CURSOR (Получить текущую позицию курсора)
|
||
|
||
Входные значения:
|
||
|
||
C - 53h Выходные значения:
|
||
|
||
D - строка курсора
|
||
|
||
E - столбец курсора
|
||
|
||
54h (84) SELPAGE (Выбрать активную страницу экрана)
|
||
|
||
Входные значения:
|
||
|
||
B - страница экрана 0/1
|
||
|
||
C - 54h Выходные значения:
|
||
|
||
A - код ошибки, если CF=1
|
||
|
||
55h (85) SCROLL (Прокрутка окна)
|
||
|
||
Входные значения:
|
||
|
||
D - строка левого верхнего угла окна
|
||
|
||
E - столбец левого верхнего угла окна
|
||
|
||
H - высота окна
|
||
|
||
L - ширина окна
|
||
|
||
B = 1 - прокрутка вверх
|
||
|
||
B = 2 - прокрутка вниз
|
||
|
||
A = 0 - очищать строку
|
||
|
||
C - 55h Выходные значения:
|
||
|
||
нет
|
||
|
||
56h (86) CLEAR (Очистка окна)
|
||
|
||
Входные значения:
|
||
|
||
D - строка левого верхнего угла окна
|
||
|
||
E - столбец левого верхнего угла окна
|
||
|
||
H - высота окна
|
||
|
||
L - ширина окна
|
||
|
||
B - атрибут заполнитель
|
||
|
||
A - символ заполнитель
|
||
|
||
C - 56h Выходные значения:
|
||
|
||
нет
|
||
|
||
57h (87) RDCHAR (Считать символ с экрана)
|
||
|
||
Входные значения:
|
||
|
||
D - строка
|
||
|
||
E - столбец
|
||
|
||
C - 57h Выходные значения:
|
||
|
||
A - символ
|
||
|
||
B - атрибут
|
||
|
||
58h (88) WRCHAR (Напечатать символ на экране)
|
||
|
||
Входные значения:
|
||
|
||
D - строка
|
||
|
||
E - столбец
|
||
|
||
A - символ
|
||
|
||
B - атрибут
|
||
|
||
C - 58h Выходные значения:
|
||
|
||
нет
|
||
|
||
59h (89) WINCOPY (Запомнить окно экрана)
|
||
|
||
Входные значения:
|
||
|
||
D - строка
|
||
|
||
E - столбец левого верхнего угла окна
|
||
|
||
H - высота окна
|
||
|
||
L - ширина окна
|
||
|
||
B - страница буфера
|
||
|
||
IX - адрес буфера
|
||
|
||
C - 59h Выходные значения:
|
||
|
||
нет
|
||
|
||
5Ah (90) WINREST (Восстановить окно экрана)
|
||
|
||
Входные значения:
|
||
|
||
D - строка
|
||
|
||
E - столбец левого верхнего угла окна
|
||
|
||
H - высота окна
|
||
|
||
L - ширина окна
|
||
|
||
B - страница буфера
|
||
|
||
IX - адрес буфера
|
||
|
||
C - 5Ah Выходные значения:
|
||
|
||
нет
|
||
|
||
5Bh (91) PUTCHAR (Напечатать символ в текущей позиции курсора)
|
||
|
||
Входные значения:
|
||
|
||
A - символ
|
||
|
||
C - 5Bh Выходные значения:
|
||
|
||
нет
|
||
|
||
5Ch (92) PCHARS (Напечатать строку символов в текущей позиции курсора)
|
||
|
||
Входные значения:
|
||
|
||
HL - указатель на начало строки символов
|
||
|
||
C - 5Ch Выходные значения:
|
||
|
||
нет
|
||
|
||
Функции для печати на принтере
|
||
|
||
|
||
|
||
|
||
5Fh (95) PRINT (Вывод символа на принтер без ожидания)
|
||
|
||
Входные значения:
|
||
|
||
A - символ
|
||
|
||
C - 5Fh Выходные значения:
|
||
|
||
B - символ
|
||
|
||
CF = 1 - принтер не готов
|
||
|
||
|
||
|
||
|
||
|