Программирование 
дисковой подсистемы Estex v1.54

( c таблицей функций Estex DSS v1.55 )

 2002 Петерс Плюс

Программирование приложений Estex DSS (DOS) v1.54

 Взаимодействие с ДОС осуществляется при помощи инструкции RST 10h. В зависимости от конкретной функции, в качестве входных и выходных параметров используются различные регистры, при этом номер функции задается в регистре C.  Функции организуют управление файлами, выделение памяти, выполнение программ и взаимодействие с различными устройствами.
Файловая спецификация:
 Файловая спецификация - это строка символов, содержащая имя дискового устройства, имена каталогов разделённые символом “\” и имя файла. Имена дискового устройства и каталогов могут быть пропущены. Например:
C:\TEXT\DOC\text.doc
A:file.txt
\TEXT\info.txt
 ДОС использует для дисковых устройств имена A:, B:, C: и т.д. Имя устройства может быть записано перед именем файла, чтобы указать его местонахождение. Например, команда DIR C:DATFILE ищет DATFILE на устройстве C: в текущем каталоге. Когда имя устройства явно не указано, ДОС использует текущее устройство. После запуска системы текущим становится устройство, с которого загружена ДОС.
 Имена файлов состоят из двух частей. Первая содержит 1 до 8 символов. В зависимости от контекста под именем файла иногда подразумевается именно эта первая часть. Вторая часть, которая не обязательна и служит для пояснения типа информации находящейся в файле, содержит до 3 символов и называется расширением.  При написании имени файла обе части разделяются символом точка. Так, например, имена NAME и NAME. одинаковы. В имени файла не допускаются символы с кодом меньше 32, а также символы: . “ / \ [ ] : | < > + = ; , Поскольку подкаталоги тоже файлы, их имена образуются тем же способом.  Имя основного (или корневого) каталога всегда “\”. Кроме этого, при создании каталога в нём записываются два специальных элемента, с именами “.” и “..”. Имя “.” обозначает текущий каталог. Имя “..” обозначает каталог верхнего уровня.  Некоторые команды и функции ДОС в именах файлов позволяют использовать глобальные символы это символы ? и *, которые можно вставлять в имя и в расширение файла. Символ ? означает, что вместо него может быть любой другой символ. Символ * означает, что вместо него может быть любое количество символов.
 Например:
*.txt 	- означает все файлы с расширением txt
a??.* 	- означает файлы с именем в три символа и первым символом “a”
dc*.exe 	- означает программные файлы с именем любой длины и начинающимся с “dc”

 Атрибуты файла:
 Каждый бит байта атрибутов задаёт определённый атрибут файла. Атрибуты файлов можно изменять специальной функцией ДОС.
бит 0 - Только для чтения
бит 1 - Скрытый
бит 2 - Системный
бит 3 - Метка тома
бит 4 - Каталог
бит 5 - Архивный
бит 6 - Не используется
бит 7 - Не используется

Атрибут “только для чтения”. При значении 1 из файла можно читать, но в него нельзя писать и его нельзя стереть.
Атрибут “скрытый”. При значении 1 файл невиден для обычных операций ДОС.
Атрибут “системный”. Указывает, что файл является системным.  Атрибут “метка тома”. В старых версиях MSDOS использовался для задания метки диска.
Атрибут “каталог”. При значении 1 идентифицирует файл как каталог, подчинённый данному каталогу или элементы “.” и “..”.
Атрибут “архивный”. Этот бит устанавливается при операциях записи в файл.  Его могут использовать утилиты создающие архивные копии для сохранения изменённых файлов.

Файловый манипулятор:
 При открытии файла, ДОС автоматически создаёт блок управления файлом. Блок создаётся в рабочих областях ДОС и его адрес неизвестен пользовательской программе. Блок (и соответствующий файл) идентифицируется номером, который ДОС возвращает приложению после открытия файла - этот номер называется файловым манипулятором. Во всех дальнейших обращениях к функциям ДОС используется файловый манипулятор. Другими словами, при открытии файла пользовательская программа сообщает ДОС его имя и получает обратно номер, который служит логическим именем файла при всех дальнейших операциях с файлом.  Необходимая для работы с файлом информация сохраняется в рабочих областях ДОС.

Функции для идентификации системы:
00h (00) VERSION     (Версия DOS)
входные данные:
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 - текущий номер диска (0-A,1-B...)
Функция возвращает номер текущего дискового устройства.

03h (03) DSKINFO     (Информация о диске)
входные данные:
A - номер диска (0-A,1-B...0FFh-текущий)
C - 03h

выходные данные:
A - код ошибки, если CF=1
A - размер кластера в секторах, если CF=0
HL - общее кол-во кластеров
DE - свободных кластеров
BC - размер сектора в байтах

Функция возвращает информацию об общем и свободном пространстве дискового устройства.
Пример:
	LD	C,03h		;Функция получения информации о диске
	LD	A,0FFh		;Текущий диск
	RST	10h		;Выполнение функции
	LD	A,D		;Есть свободное
	OR	E		;пространство?
	JR	Z,NO_SPACE	;Диск полностью заполнен

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

входные данные:
C - 09h
B = 0

выходные данные:
A - номер системного диска (0-A,1-B...)
Функция возвращает номер дискового устройства c которого загружена система.

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

Создание файла:
 Файл можно открыть системной функцией 11h (OPEN), только если он существует. Есть специальные функции для создания файлов. Если файл был создан и сразу же закрыт, он будет пустым, но его можно открыть функцией OPEN для записи информации. Для удобства функции, которые создают файл, затем открывают его.
0Ah (10) CREATE      (Создание файла)
входные данные:
HL - указатель на файловую спецификацию
A - атрибут файла
C - 0Ah

выходные данные:
A - файловый манипулятор, если CF=0
код ошибки, если CF=1
Функция ищет в каталоге файл с именем, совпадающим с именем в файловой спецификации. Если такой файл существует, делает его длину равной 0 и открывает файл для чтения/записи. Если файл не обнаружен, создается новый файл с таким именем и длиной 0 и открывает файл для чтения/записи.
Пример:
	LD	HL,NAME	;HL указывает на ASCIIZ строку с именем файла
	LD	C,0Ah		;Функция создание файла
	LD	A,00h		;Атрибут обычного файла
	RST	10h		;Выполнение функции
	RET	C		;Возврат по ошибке
	LD	(FILE1),A	;Сохранение файлового манипулятора
	
NAME	DB	“newfile.ext”,0
FILE1	DB	00h		;Переменная для сохранения файлового манипулятора

0Bh (11) CREATE NEW FILE  (Создание нового файла)
входные данные:
HL - указатель на файловую спецификацию
A - атрибут файла
C - 0Bh

выходные данные:
A - файловый манипулятор, если CF=0
код ошибки, если CF=1
Функция аналогична функции 0Ah и необходима, когда нужно создать файл с определённым именем и проверить, что файла с таким именем не существует.

0Eh (14) DELETE      (Удаление файла)
входные данные:
HL - указатель на имя файла
A - атрибут файла
C - 0Eh

выходные данные:
A - код ошибки, если CF=1
Функция ищет файл в текущем каталоге и удаляет его. Глобальные символы * и ? в имени файла не допускаются. Файлы с атрибутом только для чтения нельзя стереть данной функцией - сначала нужно изменить этот атрибут.
Пример:
	LD	HL,NAME	;HL указывает на ASCIIZ строку с именем файла
	LD	C,0Eh		;Функция удаления файла
	RST	10h		;Выполнение функции
	
NAME	DB	“newfile.ext”,0

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

входные данные:
HL - указатель на старое имя файла
DE - указатель на новое имя файла
C - 10h

выходные данные:
A - код ошибки, если CF=1
Функция ищет файл в текущем каталоге и заменяет его имя на новое. Глобальные символы * и ? в именах файлов не допускаются.
Пример:
	LD	HL,OLDNAME	;HL указывает на ASCIIZ строку со старым именем файла
	LD	DE,NEWNAME	;DE указывает на ASCIIZ строку с новым именем файла
	LD	C,10h		;Функция переименования файла
	RST	10h		;Выполнение функции
	
OLDNAME	DB	“oldfile.doc”,0
NEWNAME	DB	“newfile.txt”,0

Открытие/закрытие файла:
 Открыть файл - это означает выделить для него область памяти (блок управления), обнаружить файл и перенести определённую информацию из каталога в блок управления файлом. Приложение указывает в качестве параметра функции 11h (OPEN) имя и атрибуты файла. ДОС создаёт и заполняет блок управления файлом в своих рабочих областях. После выполнения функции пользователь получает номер (файловый манипулятор), которым файл идентифицируется во всех последующих операциях, вплоть до его закрытия.
 При работе с файлом, ДОС изменяет некоторые из полей блока управления файлом: размер файла, текущая позиция файла и др. Пользовательская программа также способна изменять поля блока управления с помощью функций ДОС.  Закрытие файла означает прекращение обмена информации с файлом. При этом файловый манипулятор и блок управления закрываемого файла освобождаются, а информация в каталоге заменяется информацией из блока управления, по этому всегда следует закрывать файлы.

11h (17) OPEN        (Открытие файла)
входные данные:
HL - указатель на файловую спецификацию
A - режим доступа
A=0 чтение/запись
A=1 чтение
A=2 запись
C - 11h

выходные данные:
A - файловый манипулятор, если CF=0
код ошибки, если CF=1
Функция ищет файл с именем, совпадающим с именем в файловой спецификации.  Если такой файл существует, открывает его. Указатель текущей позиции в файле устанавливается на начало файла. При открытии файла в режиме доступа 1 - только чтение ДОС будет блокировать попытки записи в файл, при открытии в режиме доступа 2 - только запись ДОС будет блокировать попытки чтения из файла.

12h (18) CLOSE       (Закрытие файла)
входные данные:
A - файловый манипулятор
C - 12h

выходные данные:
A - код ошибки, если CF=1
Функция закрывает файл, освобождает файловый манипулятор и блок управления файлом. Переносит информацию из блока управления файлом в каталог.
Чтение и запись в файл:
 Все операции чтения и записи в файл осуществляются в зависимости от значения в поле блока управления файлом, которое называется указателем текущие позиции в файле. Значение указателя рассматривается как смещение в байтах от начала файла. Указатель можно изменять с помощью функции ДОС 15h (MOVE_FP), чтобы он указывал произвольную позицию в файле. Кроме этой функции, значение указателя изменяют функции чтения и записи в файл. При выполнении функции чтения или записи в файл задается количество байт, которое нужно прочесть или записать и адрес в памяти, где располагаются эти байты. Байты считываются или записываются в файл в зависимости от значения указателя текущей позиции в файле. После каждого чтения или записи указатель увеличивается на количество перенесённых байт. При открытии файла, указатель текущей позиции устанавливается на начало файла (обнуляется).
13h (19) READ        (Чтение из файла)
входные данные:
A - файловый манипулятор
HL - адрес в памяти
DE - количество читаемых байт
C - 13h

выходные данные:
DE - реальное количество прочитанных байт
если CF=0:
A = 0    прочитаны все байты
A = 0FFh прочитано меньшее число байт
A - код ошибки, если CF=1
Функция читает указанное количество байт с текущей позиции в файле. После чтения значение указателя текущей позиции увеличивается на количество прочитанных байт.
Количество прочитанных байт не всегда равно заявленному. Например, при достижении конца файла.
Пример:
; Открытие файла newfile.doc для чтения
	LD	HL,NAME	;HL указывает на ASCIIZ строку с именем файла
	LD	C,11h		;Функция открытия файла
	LD	A,1		;Режим доступа: чтение
	RST	10h		;Выполнение функции
	JR	C,OPEN_ERROR;Ошибка открытия файла
	LD	(HANDLE),A	;Сохранение файлового манипулятора

; Перемещение Указателя текущий позиции в конец файла
	LD	C,15h		;Функция перемещение указателя
	LD	B,2		;Перемещение от конца файла
	LD	HL,0		;32 битное смещение HL:IX
	LD	IX,0		;Перемещение на 0 байт
	LD	A,(HANDLE)	;Файловый манипулятор
	RST	10h		;Выполнение функции
	JR	C,FP_ERROR	;Ошибка перемещения указателя
				;В HL:IX размер файла
	LD	(L_FILELEN),IX	;Запоминаем младшие 16 бит длины
	LD	(H_FILELEN),HL;Запоминаем старшие 16 бит длины

; Перемещение Указателя текущей позиции в начало файла
	LD	C,15h		;Функция перемещение указателя
	LD	B,0		;Перемещение от начала файла
	LD	HL,0		;32 битное смещение HL:IX
	LD	IX,0		;Перемещение на 0 байт
	LD	A,(HANDLE)	;Файловый манипулятор
	RST	10h		;Выполнение функции
	JR	C,FP_ERROR	;Ошибка перемещения указателя

	LD	DE,(H_FILELEN);Берём старшие 16 бит длины файла
	LD	A,D		;Проверяем что длина файла
	CP	E		;меньше 64 килобайт
	JP	NZ,BIG_FILE	;ошибка файл очень большой

; Чтение из файла
	LD	C,13h		;Функция чтение из файла
	LD	A,(HANDLE)	;Файловый манипулятор
	LD	DE,(L_FILELEN);Берем младшие 16 бит длины файла
	LD	HL,BUFFER	;Буфер для чтения
	RST	10h		;Выполнение функции
	JR	C,READ_ERROR;Ошибка чтения

; Закрытие файла
	LD	C,12h		;Функция закрытия файла
	LD	A,(HANDLE)	;Файловый манипулятор
	RST	10h		;Выполнение функции
	JR	C,CLOSE_ERROR;Ошибка закрытия файла

NAME		DB	“newfile.doc”,0 	;Файловая спецификация
HANDLE	DB	0		;Переменная для сохранения файлового манипулятора
L_FILELEN	DW	0		;Переменная для сохранения младших 16 бит длины
H_FILELEN	DW	0		;Переменная для сохранения младших 16 бит длины
BUFFER	DS	256,0		;Буфер для чтения

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

входные данные:
A - файловый манипулятор
HL - адрес в памяти
DE - количество записываемых байт
C - 14h

выходные данные:
DE - реальное количество записанных байт
A - код ошибки, если CF=1

Функция записывает указанное количество байт с текущей позиции в файле.  После записи значение указателя текущей позиции увеличивается на количество записанных байт.
Количество записанных байт не всегда равно заявленному. Это может получиться, например, если на диске нет свободного места.  При закрытии файла его длина определяется не текущем значением указателя в файле, а его максимальным значением или старой длиной файла, если она больше.  Если, например, открыть файл длиной 1000 байт при помощи функции 11h (OPEN), записать в него 500 байт и затем закрыть. Первые 500 байт будут записаны новой информацией, а оставшиеся будут без изменения. Если же требуется перекрыть существующий файл, его следует открыть функцией 0Ah (CREATE), которая уменьшит длину существующего файла до 0.

Пример:
; Открытие файла newfile.doc для записи
	LD	HL,NAME	;HL указывает на ASCIIZ строку с именем файла
	LD	C,11h		;Функция открытия файла
	LD	A,2		;Режим доступа: запись
	RST	10h		;Выполнение функции
	JR	C,OPEN_ERROR;Ошибка открытия файла
	LD	(HANDLE),A	;Сохранение файлового манипулятора

; Перемещение Указателя текущий позиции в конец файла
	LD	C,15h		;Функция перемещение указателя
	LD	B,2		;Перемещение от конца файла
	LD	HL,0		;32 битное смещение HL:IX
	LD	IX,0		;Перемещение на 0 байт
	LD	A,(HANDLE)	;Файловый манипулятор
	RST	10h		;Выполнение функции
	JR	C,FP_ERROR	;Ошибка перемещения указателя

; Запись в файл (добавление строки в конец файла)
	LD	C,14h		;Функция записи в файл
	LD	A,(HANDLE)	;Файловый манипулятор
	LD	DE,12  		;Берем длину записи 12 байт
	LD	HL,BUFFER	;Буфер со строкой “end of file!”
	RST	10h		;Выполнение функции
	JR	C,READ_ERROR;Ошибка чтения

; Закрытие файла
	LD	C,12h		;Функция закрытия файла
	LD	A,(HANDLE)	;Файловый манипулятор
	RST	10h		;Выполнение функции
	JR	C,CLOSE_ERROR;Ошибка закрытия файла

; После записи длина файла увеличится на 12 байт
NAME		DB	“newfile.doc”,0 	;Файловая спецификация
HANDLE	DB	0		;Переменная для сохранения файлового манипулятора
BUFFER	DB	“end of file!”	;Буфер для записи

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

входные данные:
A - файловый манипулятор
HL:IX - смещение указателя в файле
B - способ перемещения
B=0 от начала файла
B=1 от текущего значения указателя
B=2 от конца файла
C - 15h
выходные данные:
A - код ошибки, если CF=1
HL:IX - новое значение указателя
HL:IX интерпретируется как 32-битное число. Если число меньше 65536, регистр HL содержит 0. Возможны следующие способы перемещения указателя:
   B=0	Смещение считается от начала файла, если HL:IX=0, указатель устанавливается на     начало файла.
   B=1  	Смещение считается от текущего значения указателя.

   B=2  	Смещение считается от конца файла, если HL:IX=0, после перемещения
   HL:IX	получится длина файла в байтах.

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

входные данные:
HL - указатель на файловую спецификацию
B - режим доступа
B=0 получить атрибут
B=1 установить атрибут
A - атрибут файла
C - 16h

выходные данные:
A - атрибут файла, если CF=0
код ошибки, если CF=1
Функция возвращает/изменяет атрибут файла.

17h (23) GET_D_T     (Информация о дате и времени файла)
входные данные:
A - файловый манипулятор
C - 17h

выходные данные:
D - день
E - месяц
IX - год
H - час
L - минуты
B - секунды
A - код ошибки, если CF=1

Функция возвращает информацию о дате и времени создания или последней модификации файла.

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
Функция осуществляет поиск конкретного файла или первого (по его положению в каталоге) из группы файлов. Можно указать произвольное устройство и каталог для поиска. В имени файла допускаются глобальные символы ? и *.  Если значение атрибутов для поиска равно 00h, осуществляется поиск только обычных файлов. Если в байте атрибутов биты для скрытого, системного, только для чтения или каталога (или их произвольная комбинация) равны 1, осуществляется поиск всех файлов, чьи атрибуты соответствуют указанным, а также всех обычных файлов.
Если файл обнаружен, по адресу, на который указывает регистр DE будет заполнен буфер с информацией о файле. Иначе функция завершится с ошибкой “файл не обнаружен”.
формат буфера:
       +00  8	db	“FILE????”		; шаблон имени
       +08  3	db	“???”			; шаблон расширения
       +11  1	db	#20			; атрибуты для поиска
       +12  10	ds	10			; зарезервировано
       +22  2	dw	#0000			; время создания файла
       +24  2	dw	#0000			; дата создания файла
       +26  2	dw	#0000			; номер первого кластера
       +28  4	dw	#0000,#0000		; размер файла в байтах
       +32  1	db	#20			; атрибут обнаруженного файла
       +33  11	db	“FILENAMEEXT”	; имя обнаруженного файла копия из каталога

или
       +33  n	db	“filename.ext”,0		; имя обнаруженного файла в формате ДОС

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

входные данные:
DE - указатель на рабочий буфер
C - 1Ah

выходные данные:
A - код ошибки, если CF=1
Параметры берутся из функции F_FIRST, если она не выполнялась, то F_NEXT вернется с ошибкой “невозможная операция”, не следует выполнять операции, которые могут разрушить рабочий буфер.

Пример:
; Поиск первого совпадающего файла
	LD	HL,NAME	;HL указывает на ASCIIZ строку с именем файла
	LD	DE,BUFFER	;DE указывает на рабочий буфер
	LD	C,19h		;Функция поиска первого совпадающего файла
	LD	A,30h		;Поиск обычных файлов и каталогов
	RST	10h		;Выполнение функции
	JP	C,FIND_ERROR	;Ошибка поиска (файл не найден)

; Вывод имени найденного файла
NEXTN	LD	HL,BUFFER	;Рабочий буфер
	LD	DE,33		;Имя файла находится со смещением 33
	ADD	HL,DE

; Вывод имени файла
	LD	C,5Bh		;Функция печати символа
	LD	B,8		;Размер имени файла 8 символов
NEXTS	LD	A,(HL)		;Берем очередной символ имени
	PUSH	BC
	RST	10h		;Выполнение функции
	POP	BC
	INC	HL
	DJNZ	NEXTS
	LD	A,” ”		;Вывод пробела
	RST	10h

; Вывод расширения файла
	LD	C,5Bh		;Функция печати символа
	LD	B,3		;Размер расширения файла 3 символа
NEXTE	LD	A,(HL)		;Берем очередной символ имени
	PUSH	BC
	RST	10h		;Выполнение функции
	POP	BC
	INC	HL
	DJNZ	NEXTE

; Перевод строки после каждого имени файла
	LD	C,5Bh		;Функция печати символа
	LD	A,13		;CR - переход в начало строки
	RST	10h
	LD	C,5Bh		;Функция печати символа
	LD	A,10		;LF - перевод строки
	RST	10h

; Поиск следующего совпадающего файла
	LD	DE,BUFFER	;DE указывает на рабочий буфер
	LD	C,1Ah		;Функция поиска следующего совпадающего файла
	RST	10h		;Выполнение функции
	JP	NC,NEXTN	;Переход на печать имени файла
FIND_ERROR
NAME	DB	“A:\TEXT\*.*”,0
BUFFER	DS	44

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

входные данные:
HL - указатель на файловую спецификацию
C - 1Bh

выходные данные:
A - код ошибки, если CF=1
Функция создаёт на диске подкаталог, указанный в файловой спецификации.
Пример:
	LD	HL,DIRNAME	;HL указывает на ASCIIZ строку с именем подкаталога
	LD	C,1Bh		;Функция создание подкаталога
	RST	10h		;Выполнение функции
	
DIRNAME	DB	“TEXT”,0	;Создать подкаталог TEXT в текущем каталоге

DIRNAME	DB	“\TEXT”,0	;Создать подкаталог TEXT в корневом каталоге

DIRNAME	DB	“C:\DOC\TEXT”,0;Создать подкаталог TEXT в каталоге DOC на
;диске C: каталог DOC должен существовать

1Ch (28) RMDIR       (Устранение каталога)
входные данные:
HL - указатель на файловую спецификацию
C - 1Ch

выходные данные:
A - код ошибки, если CF=1

Функция устраняет пустой подкаталог, указанный в файловой спецификации.  Нельзя устранить текущий каталог и каталог, который содержит файлы или другие каталоги.
Пример:
	LD	HL,DIRNAME	;HL указывает на ASCIIZ строку с именем подкаталога
	LD	C,1Ch		;Функция устранения подкаталога
	RST	10h		;Выполнение функции
	
DIRNAME	DB	“TEXT”,0

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

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

Функция меняет текущий каталог и текущий диск, если он указан в файловой спецификации. Если путь начинается с “\” - это означает путь от корневого каталога, иначе от текущего.
Пример:
	LD	HL,DIRNAME	;HL указывает на ASCIIZ строку пути к новому
				;текущему каталогу
	LD	C,1Dh		;Функция смены текущего каталога
	RST	10h		;Выполнение функции
	
DIRNAME	DB	“\DOC\TEXT”,0

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

входные данные:
HL - буфер в памяти 256 байт
C - 1Eh

выходные данные:
A - код ошибки, если CF=1

Функция переносит строку пути текущего каталога из областей ДОС в пользовательскую программу по адресу заданном в регистре HL. На конце пути код ноль. Имя дискового устройства в путь не включается.
Пример:
	LD	HL,BUFFER	;HL указывает на буфер
	LD	C,1Eh		;Функция получения пути к текущему каталогу
	RST	10h		;Выполнение функции

BUFFER	DS	256

 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=0
A - код ошибки, если CF=1

Функция вычисляет физический номер страницы в блоке памяти и подключает её в окно адресного пространства в зависимости от значения регистра HL. То есть, если HL указывает на адрес в пределах от 04000h до 07FFFh, то страница подключается в первое окно, от 08000h до 0BFFFh - второе окно, от 0C000h до 0FFFFh - третье.
На выходе в регистре A содержится физический номер страницы, которая была подключена до выполнения функции.

39h (57) SETWIN1     (Подключение страницы памяти в первое окно)
входные данные:
A - идентификатор блока памяти
B - номер страницы в блоке (0,1,2...)
C - 39h

выходные данные:
A - номер страницы, если CF=0
A - код ошибки, если CF=1

Функция аналогична функции 038h (SETWIN), но страница подключается в первое окно независимо от регистра HL.

3Ah (58) SETWIN2     (Подключение страницы памяти во второе окно)
входные данные:
A - идентификатор блока памяти
B - номер страницы в блоке (0,1,2...)
C - 3Ah

выходные данные:
A - номер страницы, если CF=0
A - код ошибки, если CF=1

Функция аналогична функции 038h (SETWIN), но страница подключается во второе окно независимо от регистра HL.

3Bh (59) SETWIN3     (Подключение страницы памяти в третье окно)
входные данные:
A - идентификатор блока памяти
B - номер страницы в блоке (0,1,2...)
C - 3Bh

выходные данные:
A - номер страницы, если CF=0
A - код ошибки, если CF=1

Функция аналогична функции 038h (SETWIN), но страница подключается в третье окно независимо от регистра HL.

3Ch (60) FREEMEM     (Информация о памяти)
входные данные:
C - 3Ch
выходные данные:
HL - общее количество страниц
BC - количество свободных страниц

Функция возвращает в регистре HL общее количество памяти в страницах по 16 килобайт и свободное количество страниц в регистре BC.

3Dh (61) GETMEM      (Выделение блока памяти)
входные данные:
B - размер блока в страницах по 16 килобайт
C - 3Dh

выходные данные:
A - идентификатор блока памяти, если CF=0
A - код ошибки, если CF=1

Функция выделяет блок памяти и возвращает его идентификатор приложению.

3Eh (62) RETMEM      (Освобождение блока памяти)
входные данные:
A - идентификатор блока памяти
C - 3Eh

выходные данные:
A - код ошибки, если CF=1

Функция освобождает выделенный ранее блок памяти. Нельзя освободить блок памяти, выделенный другим приложением.

3Fh (63) SETMEM      (Изменение блока памяти)
входные данные:
A - идентификатор блока памяти
B - новый размер блока
C - 3Fh

выходные данные:
A - код ошибки, если CF=1

Функция позволяет уменьшить или расширить выделенный ранее блок памяти.
Нельзя изменить блок памяти, выделенный другим приложением.
Функции для работы с клавиатурой:
 При наборе символов на клавиатуре каждое нажатие клавиш воспринимает специальная программа драйвер клавиатуры. Каждая клавиша имеет номер (от 0 до 90), который определяет её позицию на клавиатуре. Таблица всех кодов клавиш приведена в приложении.
 Каждое нажатие или отпускание клавиши вызывает прерывание. Программа, обслуживающая это прерывание, читает scan-код и преобразует его в два байта.  Первый байт содержит символьный ASCII код, а второй - позиционный код. Первый байт получается преобразованием позиционного кода клавиши по определённой процедуре в зависимости от состояния клавиш Shift, Alt, Ctrl, Caps Lock и Num Lock, от режима латиница или кириллица и от раскладки клавиатуры в символьный (ASCII) код. Для специальных клавиш, например функциональный или клавиш управления курсором, код ASCII равен нулю. Это позволяет программе различать обычные печатные символы и нажатия других клавиш.
 Драйвер записывает эти два байта в буфер клавиатуры, который может хранить информацию о 15 нажатий на клавиши. Кроме этого, драйвер отслеживает информацию о состоянии некоторых клавиш, таких как Shift, Alt, Ctrl, Caps Lock, Num Lock, Scroll Lock и др.
 Чтобы считать очередную клавишу из буфера клавиатуры, нужно воспользоваться одной из функций работы с клавиатуры. Функции возвращают в регистре E ASCII код клавиши, в регистре D её позиционный код. Если установлен седьмой бит регистра D, это означает что нажата не одна клавиша, а одновременно с ней нажаты <Shift>, <Ctrl> или <Alt>.
В регистре B указываются какие именно клавиши удерживаются:
D7 = 1 - удерживается левый <Shift>
D6 = 1 - удерживается правый <Shift>
D5 = 1 - удерживается <Ctrl>
D4 = 1 - удерживается <Alt>
D3 = 1 - удерживается левый <Ctrl>
D2 = 1 - удерживается левый <Alt>
D1 = 1 - удерживается правый <Ctrl>
D0 = 1 - удерживается правый <Alt>

Биты 5 и 4 указывают, что удерживаются любой <Ctrl>, <Alt> правый или левый.
В регистре C указываются режимы ввода:
D7 = 1 - RUS, 0 - LAT
D6     - зарезервирован
D5     - зарезервирован
D4     - зарезервирован
D3 = 1 - режим Num Lock
D2 = 1 - режим Scroll Lock
D1 = 1 - режим Insert
D0 = 1 - режим Caps Lock

30h (48) WAITKEY     (Ожидание символа с клавиатуры)
входные данные:
C - 30h
выходные данные:
A - код символа
D - позиционный код
Е - ASCII код
C - D7 - RUS/LAT
D3 - Num Lock
D2 - Scroll Lock
D1 - Insert
D0 - Caps Lock
B - D7 - Left Shift
D6 - Right Shift
D5 - Ctrl
D4 - Alt
D3 - Left Ctrl
D2 - Left Alt
D1 - Right Ctrl
D0 - Right Alt

Функция читает информацию об очередном нажатии из буфера клавиатуры.  Если буфер пуст, ожидает появления информации. В регистре E выдается ASCII код символа, а в регистре D - позиционный код клавиши (0..127). Если бит 7 регистра D установлен - это означает, что вместе с клавишей удерживается Ctrl/Alt/Shift.  Регистр A дублирует содержимое регистра E для удобства в написании программ.
Пример:
LOOP	LD	C,30h		;Функция ожидания нажатия клавиши
	RST	10h		;Выполнение функции
	CP	0Dh		;Нажата <Enter>?
	JP	Z,ENTER	;если да, то ввод
	LD	HL,011Bh	;Позиционный и ASCII код клавиши <Еsc>
	AND	A		;
	SBC	HL,DE		;Нажата <Esc>?
	JP	Z,EXIT		;если да, то выход
	JP	LOOP		;иначе, повторить ожидание клавиши

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

входные данные:
C - 31h
выходные данные:
ZF - нет клавиш
A - код символа
D - позиционный код
Е - ASCII код
C - D7 - RUS/LAT
D3 - Num Lock
D2 - Scroll Lock
D1 - Insert
D0 - Caps Lock
B - D7 - Left Shift
D6 - Right Shift
D5 - Ctrl
D4 - Alt
D3 - Left Ctrl
D2 - Left Alt
D1 - Right Ctrl
D0 - Right Alt

Функция возвращает флаг Z, если буфер клавиатуры пуст. Иначе читает информацию об очередном нажатии из буфера клавиатуры. Возвращаемые регистры, как и в функции 30h (WAITKEY).
Пример:
NO_KEYS
	LD	C,31h		;Функция опроса клавиатуры без ожидания
	RST	10h		;Выполнение функции
	JR	Z,NO_KEYS	;Если клавиша не нажата повторить опрос
	BIT	7,D		;Нажата одна клавиша?
	JP	Z,ONEKEY	;Если да, переход
	LD	A,B
	AND	0C0h		;Биты 7 и 6 равны 0
	JP	NZ,SHIFT	;Если нет, то нажаты <Shift>+<клавиша>
	BIT	5,B		;Бит Ctrl в нуле?
	JP	NZ,CTRL	;Если нет, то нажаты <Ctrl>+<клавиша>
	BIT	4,B		;Бит Alt в нуле?
	JP	NZ,CTRL	;Если нет, то нажаты <Alt>+<клавиша>
ONEKEY
	CP	0Dh		;Нажата <Enter>?
	JP	Z,ENTER	;если да, то ввод
	LD	HL,011Bh	;Позиционный и ASCII код клавиши <Еsc>
	AND	A		;
	SBC	HL,DE		;Нажата <Esc>?
	JP	Z,EXIT		;если да, то выход

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

входные данные:
C - 32h
выходные данные:
A - код символа
D - позиционный код
Е - ASCII код
C - D7 - RUS/LAT
D3 - Num Lock
D2 - Scroll Lock
D1 - Insert
D0 - Caps Lock
B - D7 - Left Shift
D6 - Right Shift
D5 - Ctrl
D4 - Alt
D3 - Left Ctrl
D2 - Left Alt
D1 - Right Ctrl
D0 - Right Alt

Функция аналогична функции 30h, но после получения кода символа он печатается на экране. Возвращаемые регистры, как и в функции 30h (WAITKEY).

33h (51) CTRLKEY     (Получить состояние клавиатуры)
входные данные:
C - 33h
выходные данные:
A =  0 - нет символов в буфере
C - D7 - RUS/LAT
D3 - Num Lock
D2 - Scroll Lock
D1 - Insert
D0 - Caps Lock
B - D7 - Left Shift
D6 - Right Shift
D5 - Ctrl
D4 - Alt
D3 - Left Ctrl
D2 - Left Alt
D1 - Right Ctrl
D0 - Right Alt

Функция возвращает состояние клавиатуры на данный момент. То есть, данные берутся не из буфера клавиатуры (как в остальных функциях), а непосредственно из результатов последнего сканирования клавиатуры. Регистр A равен нулю, если буфер клавиатуры пуст.

35h (53) K_CLEAR     (Очистить буфер клавиатуры и выполнить функцию)
входные данные:
B - номер функции 30h, 31h, 32h, 33h или 34h
C - 35h

выходные данные:
В зависимости от указанной функции в регистре B.
Функция очищает буфер клавиатуры, после чего выполняет функцию указанную в регистре B. Она позволяет предотвратить использование программой символов, введенных с опережением. Например, команда FORMAT очищает буфер клавиатуры перед запросом о необходимости форматировать диск. Поэтому случайное наличие в буфере символа, разрешающего форматирование, не вызовет действительного форматирования.

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 - значение переменной
D0 - сигнал переполнения буфера клавиатуры
D1 - сигнал переключения на альтернативную раскладку клавиатуры

37h (55) TESTKEY     (Опрос буфера клавиатуры)
входные данные:
C - 37h
выходные данные:
ZF - нет символов в буфере
A - код символа
D - позиционный код
Е - ASCII код
C - D7 - RUS/LAT
D3 - Num Lock
D2 - Scroll Lock
D1 - Insert
D0 - Caps Lock
B - D7 - Left Shift
D6 - Right Shift
D5 - Ctrl
D4 - Alt
D3 - Left Ctrl
D2 - Left Alt
D1 - Right Ctrl
D0 - Right Alt

Функция возвращает флаг Z, если буфер клавиатуры пуст. Иначе читает информацию об очередном нажатии из буфера клавиатуры. Возвращаемые регистры, как и в функции 30h (WAITKEY). Информация о нажатии остается в буфере.

Запуск приложений:
 Программы хранятся на диске, как программные (выполняемые) файлы. Одна из основных задач операционной системы - организовать их выполнение.
Командная строка для выполнения программ имеет формат:
[устройство:][\путь\]имя [параметры]
 Устройство и путь указывают место нахождения приложения на диске. Если они пропущены, поиск осуществляется в текущем каталоге текущего диска. Если указано расширение файла, оно игнорируется, так как, у программных файлов расширение может быть только EXE.
 EXE файлы состоят из двух частей, префикса и выполнимого модуля. Префикс содержит в себе различную вспомогательную информацию:
Префикс EXE файла:
   +00   2 dw 	5845h		; Идентификатор EXE файла
   +02   1 db 	45h		; Зарезервирован
   +03   1 db 	00h		; Версия EXE файла
   +04   4 dd 	00000200h	; Начало исполняемого кода (смещение в байтах)
   +08   2 dw 	0000h		; Размер первичного загрузчика или 0
   +10   4 dd 	00000000h	; Зарезервированы
   +14   2 dw 	0000h		; Зарезервированы
   +16   2 dw 	????		; Адрес расположения кода в памяти
   +18   2 dw 	????		; Адрес запуска (регистр PC)
   +20   2 dw 	????		; Адрес расположения стека (регистр SP)
   +22 490 ds 	0		; Зарезервированы

   +512				; Код программы

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

входные данные:
HL - указатель на файловую спецификацию
B = 0 - загрузить и выполнить программу
C - 40h

выходные данные:
A - код завершения, если CF=0
код ошибки, если CF=1
Выполнение EXE-файла осуществляется по следующим пунктам:
1)	Открывает exe-файл на чтение;
2)	Считывает в рабочую область префикс exe-файла;
3)  Выделяет блок памяти, требуемый для загрузки всего файла или первичного загрузчика, если его размер не равен нулю;
4)	Сохраняет стек;
5)	Подключает страницы из выделенного блока;
6)	Строит префикс запуска программы и устанавливает на него регистр IX;
7)  Считывает файл по адресу указанному в смещении 16 (Адрес расположения кода в памяти);
8)	Закрывает exe-файл, если это не первичный загрузчик;
9)	Устанавливает стек равным значению из смещения 20 (Адрес расположения стека);
10)	 Передает управление по адресу указанному в смещении 18 (Адрес запуска);

Префикс запуска файла:
-03   1	db ? 	; Файловый манипулятор, если exe-файл с первичным загрузчиком
-02   1	db ? 	; Идентификатор блока памяти
-01   1	db ? 	; Уровень текущей программы
+00   1	db ? 	; Длинна командной строки
+01 127	ds ? 	; Параметры командной строки, заканчивается нулем

Пример:
	LD	HL,NAME	;HL указывает на ASCIIZ строку с именем еxe-файла
	LD	C,40h		;Функция выполнения файла
	LD	B,00h		;Подфункция загрузить и выполнить
	RST	10h		;Выполнение функции
	RET	C		;Возврат по ошибке
	LD	(ENDCODE),A	;Сохранение кода завершения
	
NAME		DB	“\PROG\UTILITY\prog.exe”,0
ENDCODE 	DB	00h

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

входные данные:
B - код завершения
C - 41h

выходные данные:
A - код ошибки, если CF=1

Функция завершает выполнение текущей программы, освобождает занимаемую память и передаёт код завершения в родительную программу. Код завершения также сохраняется в системной переменной ДОС и его можно позднее получить при помощи функции 42h (WAIT).

42h (66) WAIT        (Получить код завершения программы)
входные данные:
C - 42h
выходные данные:
A - код завершения
Функция возвращает код завершения, последней завершенной программы.

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

43h (67) GSWITCH     (Выделить параметр командной строки)
входные данные:
HL - указатель командной строки
DE - буфер для выделяемого параметра
C - 43h

выходные данные:
HL - указатель на следующий параметр командной строки
CF=0 - конец строки не достигнут (есть другие параметры)
CF=1 - конец строки (в буфер перенесён последний параметр или ноль)
Функция выделяет параметр командной строки. Параметрами считаются любые последовательности символов разделённые пробелами. Ведущие пробелы игнорируются. Параметр в буфере завершается кодом ноль, если параметры отсутствуют, в буфер записывается ноль.
Пример:
	LD	HL,COMLINE	;HL указывает на командную строку
NEXTP	LD	DE,BUFFER	;DE указывает на буфер для параметров
	LD	C,43h		;Функция выделения параметра
	RST	10h		;Выполнение функции
	PUSH	AF
	PUSH	HL
	.
. Обработка параметра командной строки
	.
	POP	HL
	POP	AF
	JP	NC,NEXTP

COMLINE	DB	“file1.txt   file2.txt -x”,0
BUFFER	DS	127,0

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

входные данные:
 C - 44h
 B = 0, преобразовать из 11 символьного формата в  формат ДОС
HL - 11 символов имени файла
DE - буфер для имени в формате ДОС
 B = 1, преобразовать из формата ДОС в 11 символьный формат
HL - имя файла в формате ДОС
DE - 11 символов имени файла

	db	“name.ext”,0 	; формат ДОС
	db	“name    ext”	; 11 символьный формат

выходные данные:
A - код ошибки, если CF=1
Функция преобразовывает имя файла из 11 символьного формата в формат ДОС и обратно.

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

входные данные:

    HL - указатель командной строки
    DE - указатель на буфер пользователя
     C - 45h
     B - номер подфункции:
         0 - Разобрать строку;
         1 - Выделить имя диска;
         2 - Выделить директорию;
         3 - Выделить имя файла;
         4 - Выделить расширение файла;
         5 - Выделить имя диска, путь к файлу, имя файла и расширение
             файла;
         6 - Зарезервирована;
         7 - Выделить параметр командной строки;
         8 - преобразовать из 11 символьного формата в  формат ДОС;
         9 - преобразовать из формата ДОС в 11 символьный формат;

Функция осуществляет разбор командной строки в зависимости от номера подфункции в регистре B.

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

входные данные:

    HL - указатель командной строки
     C - 45h
     B = 0 - Разобрать строку

выходные данные:

     A - D7 - В строке обнаружены символы ? или *
         D3 - В строке указано имя диска;
         D2 - В строке указан путь к файлу;
         D1 - В строке указано расширение файла;
         D0 - В строке указано имя файла;

  Функция осуществляет разбор командной строки и возвращает результат в регистре A.

Пример:
	LD	HL,STRING	; HL указывает на строку для разбора
	LD	C,45h		; Функция разбор командной строки
	LD	B,0		; Подфункция разобрать строку
	RST	10h		; Выполнение функции
	; В регистре A будут установлены разряды D0, D2, D3.

STRING	db	"c:\dir1\name",0

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

входные данные:

    HL - указатель командной строки
    DE - буфер (макс. 13 байт)
     C - 45h
     B = 1 - Выделить имя диска

выходные данные:

     A - номер диска (0 - A, 1 - B, 2 - C и т.д.)
 буфер - имя диска "A:",0

Функция осуществляет разбор командной строки и копирует в буфер имя диска, если имя диска не указывалось в буфер помещается 0.

Пример:
	LD	HL,STRING	; HL указывает на строку для разбора
	LD	DE,BUFFER	; DE указывает на буфер
	LD	C,45h		; Функция разбор командной строки
	LD	B,1		; Подфункция выделить имя диска
	RST	10h		; Выполнение функции
	; В регистре A будет 2 (drive C:)
	; В буфере "C:",0

STRING	db	"c:\dir1\name",0

BUFFER	ds	13

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

входные данные:

    HL - указатель командной строки
    DE - буфер (макс. 256 байт)
     C - 45h
     B = 2 - Выделить директорию

выходные данные:

 буфер - директория "DIR1\DIR2\DIR3\",0
     A - D7 - В строке обнаружены символы ? или *
         D3 - В строке указано имя диска;
         D2 - В строке указан путь к файлу;
         D1 - В строке указано расширение файла;
         D0 - В строке указано имя файла;

Функция осуществляет разбор командной строки и копирует в буфер путь к файлу, если директория не указывалась в буфер помещается 0.

Пример:
	LD	HL,STRING	; HL указывает на строку для разбора
	LD	DE,BUFFER	; DE указывает на буфер
	LD	C,45h		; Функция разбор командной строки
	LD	B,2		; Подфункция выделить директорию
	RST	10h		; Выполнение функции
	; В регистре A будут установлены разряды D0, D1, D2, D3.
	; В буфере "\DIR1\DIR2\",0

STRING	db	"c:\dir1\dir2\name.ext",0

BUFFER	ds	256

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

входные данные:

    HL - указатель командной строки
    DE - буфер (макс. 13 байт)
     C - 45h
     B = 3 - Выделить имя файла

выходные данные:

 буфер - имя файла "FILE.EXT",0
     A - D7 - В строке обнаружены символы ? или *
         D3 - В строке указано имя диска;
         D2 - В строке указан путь к файлу;
         D1 - В строке указано расширение файла;
         D0 - В строке указано имя файла;

Функция осуществляет разбор командной строки и копирует в буфер имя файла и расширение файла, если имя файла не указывалась в буфер помещается 0.

Пример:
	LD	HL,STRING	; HL указывает на строку для разбора
	LD	DE,BUFFER	; DE указывает на буфер
	LD	C,45h		; Функция разбор командной строки
	LD	B,3		; Подфункция выделить имя файла
	RST	10h		; Выполнение функции
	; В регистре A будут установлены разряды D0, D1, D2, D3.
	; В буфере "name.ext",0

STRING	db	"c:\dir1\dir2\name.ext",0

BUFFER	ds	13

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

входные данные:

    HL - указатель командной строки
    DE - буфер (макс. 4 байт)
     C - 45h
     B = 4 - Выделить расширение файла

выходные данные:

 буфер - расширение "TXT",0 или "C  ",0
     A - D7 - В строке обнаружены символы ? или *
         D3 - В строке указано имя диска;
         D2 - В строке указан путь к файлу;
         D1 - В строке указано расширение файла;
         D0 - В строке указано имя файла;

Функция осуществляет разбор командной строки и копирует в буфер расширение файла, если расширение файла не указывалось в буфер помещается 0.

Пример:
	LD	HL,STRING	; HL указывает на строку для разбора
	LD	DE,BUFFER	; DE указывает на буфер
	LD	C,45h		; Функция разбор командной строки
	LD	B,4		; Подфункция выделить расширение файла
	RST	10h		; Выполнение функции
	; В регистре A будут установлены разряды D0, D1, D2, D3.
	; В буфере "ext",0

STRING	db	"c:\dir1\dir2\name.ext",0

BUFFER	ds	4

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

входные данные:

    HL - указатель командной строки
    DE - буфер (макс. 8 байт)
	+0 адрес буфера для имени диска (макс. 13 байт)
        +2 адрес буфера для директории (макс. 256 байт)
        +3 адрес буфера для имени файла (макс. 13 байт)
        +4 адрес буфера для расширения файла (макс. 4 байта)
     C - 45h
     B = 5 - Выделить имя диска, путь к файлу, имя файла и расширение файла

выходные данные:

     A - D7 - В строке обнаружены символы ? или *
         D3 - В строке указано имя диска;
         D2 - В строке указан путь к файлу;
         D1 - В строке указано расширение файла;
         D0 - В строке указано имя файла;

Функция осуществляет разбор командной строки и копирует в буферы обнаруженные элементы командной строки, если какой-либо элемент не указывался в буфер помещается 0.

Пример:
	LD	HL,STRING	; HL указывает на строку для разбора
	LD	DE,PBUFFER	; DE указывает на буфер
	LD	C,45h		; Функция разбор командной строки
	LD	B,5		; Подфункция выделить расширение файла
	RST	10h		; Выполнение функции
	; В регистре A будут установлены разряды D0, D1, D2, D3.
	; В буфере DRIVE_A "C:",0
	; В буфере DIR_A "\DIR1\DIR2\",0
	; В буфере NAME_A "NAME.EXT",0
	; В буфере TYPE_A "EXT",0

STRING	db	"c:\dir1\dir2\name.ext",0

PBUFFER	dw	DRIVE_A
	dw	DIR_A
	dw	NAME_A
	dw	TYPE_A

DRIVE_A	ds	13
DIR_A	ds	256
NAME_A	ds	13
TYPE_A	ds	4

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

входные данные:

    HL - указатель командной строки
    DE - буфер для выделяемого параметра (макс. 256 байт)
     C - 45h
     B = 7 - Выделить параметр командной строки
 
выходные данные:

 HL - указатель на следующий параметр командной строки
      CF=0 - конец строки не достигнут (есть другие параметры)
      CF=1 - конец строки (в буфер перенесён последний параметр или 
             ноль)

Функция выделяет параметр командной строки. Параметрами считаются любые последовательности символов разделённые пробелами. Ведущие пробелы игнорируются. Параметр в буфере завершается кодом ноль, если параметры отсутствуют, в буфер записывается ноль.

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

входные данные:

    HL - 11 символов имени файла
    DE - буфер для имени в формате ДОС
     C - 45h
     B = 8 - преобразовать из 11 символьного формата в  формат ДОС

	db	"name.ext",0 	; формат ДОС
	db	"name    ext"	; 11 символьный формат

выходные данные:

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

  Функция преобразовывает имя файла из 11 символьного формата в формат ДОС.

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

входные данные:

    HL - имя файла в формате ДОС
    DE - буфер для 11 символов имени файла
     C - 45h
     B = 9 - преобразовать из формата ДОС в 11 символьный формат

	db	"name.ext",0 	; формат ДОС
	db	"name    ext"	; 11 символьный формат

выходные данные:

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

Функция преобразовывает имя файла из формата ДОС в 11 символьный формат. В имени файла допускаются глобальные символы ? и *. В этом случае символ * будет заменен на несколько символов ? . Например "name*.c*", будет преобразован в "name????c??".

Работа с экраном:

   Сейчас DOS поддерживает четыре режима экрана.
 Два текстовых:
  40x32 символов c 16 цветами (режим 02h);
  80x32 символов c 16 цветами (режим 03h);
 и два графических:
  320x256 точек с 256 цветами (режим 81h);
  640x256 точек с 16 цветами (режим 82h);
 Основным режимом является текстовый режим 80x32 (03h), если ваша программа работает в другом режиме, то вам следует перед переключением режима получить номер текущего режима функцией 51h GETVMOD и сохранить его, а перед завершением программы восстановить его.

 Например:

	LD	C,51h	;получить режим экрана
	RST	10h
	LD	C,A	;поместить номер режима экрана в регистр C
	PUSH	BC	;и сохранить на стеке (B - страница, C - режим)
	.
	. 		;ваша программа
	.

	POP	BC	;взять со стека режим экрана
	LD	A,C	;поместить номер режима экрана в регистр A
	LD	C,50h	;установить режим экрана
	RST	10h
	LD	C,41h	;завершить программу.
	RST	10h

  DOS имеет функции вывода на текстовый экран символов и символьных строк. Для графических режимов требуются собственные процедуры вывода на экран. Например, при завершении программы вы можете выдать строку на текстовый экран:

	LD	HL,STRING	;указатель на строку символов
	LD	C,5Ch		;вывод строки символов
	RST	10h

STRING	DB	"Thank you for using my program..."	;текстовая строка
	DB	13,10		;символы возврата каретки и перевода строки
	DB	0		;символ конца строки

  Для вывода на графический экран, вам необходимо подключить видео память в одно из трех окон памяти 04000h-07FFFh, 08000h-0BFFFh, 0C000h-0FFFFh. Это осуществляется выводом значения 50h в соответствующий порт 0A2h, 0C2h или 0E2h в зависимости от окна памяти. При подключении обратите внимание на то, чтобы стек вашей программы не попадал в это адресное пространство.

Например, если вам нужно поставить точку на экране, то подпрограмма для режима 81h будет выглядеть так:

; HL - горизонтальная координата
; DE - вертикальная координата

	IN	A,(0E2h)	;считать из порта номер страницы подключенной в
				;третье окно памяти
	LD	C,A		;запомнить в регистре C
	LD	A,50h		;страница видео памяти
	OUT	(0E2h),A	;подключение видео памяти
	LD	A,E		;поместить вертикальную координату в регистр A.
	OUT	(89h),A		;выдать в порт
	LD	DE,0C000h	;адрес начала третьего окна памяти
	ADD	HL,DE		;получить адрес точки (адрес начала окна +
				;горизонтальная координата)
	LD	A,255		;цвет выводимой точки (от 0 до 255)
	LD	(HL),A		;вывод точки на экран
	LD	A,C		;вспомнить номер страницы памяти
	OUT	(0E2h)		;подключить страницу памяти вместо страницы видео
				;памяти

  Перед выводом точек следует установить необходимые цвета в палитре. Различные режимы вывода на экран задаются номером видео страницы от 50h до 5Fh. Подробнее о режимах вывода вы можете прочитать в описании архитектуры компьютера.

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 - текущий режим экрана
Функция возвращает текущий режим экрана.

52h (82) LOCATE      (Установить позицию курсора)
входные данные:
D - строка курсора
E - столбец курсора
C - 52h

Функция устанавливает новую позицию курсора. Вывод символов будет производиться в эту позицию. Верхний левый угол имеет координаты (0,0).

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

Функция определяет окно активной видеостраницы и его содержимое перемещается вверх или в низ на одну строку. Если регистр A равен нулю, освобождённая строка очищается (заполняется пробелами).

56h (86) CLEAR       (Очистка окна)
входные данные:
D - строка левого верхнего угла окна
E - столбец левого верхнего угла окна
H - высота окна
L - ширина окна
B - атрибут заполнитель
A - символ заполнитель
C - 56h

Функция очищает окно экрана, записывая во все позиции окна символ с кодом из регистра A и атрибутом из регистра B.

57h (87) RDCHAR      (Считать символ с экрана)
входные данные:
D - строка
E - столбец
C - 57h

выходные данные:
A - символ
B - атрибут

Функция считывает символ и его атрибут из позиции заданной регистрами D и E.

58h (88) WRCHAR      (Напечатать символ на экране)
входные данные:
D - строка
E - столбец
A - символ
B - атрибут
C - 58h

Функция печатает символ и атрибут на экране в позиции заданной регистрами D и E. Управляющие символы выводятся как обычные символы.

59h (89) WINCOPY     (Запомнить окно экрана)
входные данные:
D - строка
E - столбец левого верхнего угла окна
H - высота окна
L - ширина окна
B - страница буфера
IX - адрес буфера
C - 59h

Функция копирует окно в память на страницу заданную в регистре B и по адресу заданному в регистре IX. Если значение IX меньше 0C000h, копирование производится в страницу памяти подключенную по этому адресу. В буфере получается массив из идущих подряд символов и атрибутов.

5Ah (90) WINREST     (Восстановить окно экрана)
входные данные:
D - строка
E - столбец левого верхнего угла окна
H - высота окна
L - ширина окна
B - страница буфера
IX - адрес буфера
C - 5Ah

Функция выполняет обратное копирование окна из памяти на странице заданной в регистре B и с адреса заданного в регистре IX. Если значение IX меньше 0C000h, копирование производится из страницы памяти подключенной по этому адресу.
5Bh (91) PUTCHAR     (Напечатать символ в текущей позиции курсора)
входные данные:
A - символ
C - 5Bh

Функция печатает символ на экране в текущей позиции курсора. После печати символа текущая позиция увеличивается. Печать осуществляется с управляющими кодами.

5Ch (92) PCHARS      (Напечатать строку символов в текущей позиции курсора)
входные данные:
HL - указатель на начало строки символов
C - 5Ch

Функция печатает строку символов на экране в текущей позиции курсора.  При печати текущая позиция увеличивается. Печать осуществляется с управляющими кодами. Строка должна заканчиваться кодом ноль.

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

выходные данные:
B - символ
CF = 1 - принтер не готов

Функция посылает символ на принтер. Если принтер не готов принимать символ, то выставляется флаг переноса (CF).
Пример:
LD	HL,TEXT		;HL указывает на текстовый массив, который
NPRINT
PUSH	BC		;необходимо распечатать на принтере
APRINT
	PUSH	HL		;Сохраняем указатель текущего символа
	LD	A,(HL)		;Берём очередной символ и печатаем
	LD	C,5Fh		;Функция печати символа
	RST	10h		;Выполнение функции
	JR	NC,PRNOK	;Переход на печать следующего символа
;Принтер не готов, ожидаем пока не нажата [Esc]
	LD	C,31h		;Функция опроса клавиатуры без ожидания
	RST	10h		;Выполнение функции
	POP	HL		;Восстанавливаем указатель на текущий символ
	JR	Z,APRINT	;Клавиши не нажимались
	CP	1Bh		;Нажата клавиша [Esc]?
	JR	NZ,APRINT	;если нет, повторяем печать
	POP	BC		;Восстанавливаем счетчик символов
;Печать прервана (пользователь нажал [Esc])
SCF
RET
PRNOK	POP	HL		;Восстанавливаем указатель на текущий символ
	POP	BC		;Восстанавливаем счетчик символов
	INC	HL		;Переходим к следующему символу
	DEC	BC		;Уменьшаем счетчик символов
	LD	A,B		;Счетчик равен нулю?
	OR	C
	JP	NZ,NPRINT	;если нет, продолжаем печать
;Успешно напечатаны все символы
XOR	A
RET

Интерфейс для работы с мышью:
 Взаимодействие с драйвером мыши осуществляется при помощи инструкции RST 30h.  В зависимости от конкретной функции, в качестве входных и выходных параметров используются различные регистры, при этом номер функции задается в регистре C.  Любые перемещения мыши и нажатие на клавиши воспринимает специальная программа драйвер мыши. Каждое нажатие и отпускание клавиш или перемещение мыши вызывает прерывание. Программа, обслуживающая это прерывание, читает пакет данных от мыши и перемещает курсор мыши в зависимости от полученных данных.

00h (00) INITIALIZATION      (Инициализация драйвера мыши)
входные данные:
C - 00h
выходные данные:
A - драйвер не установлен, если CF=1
A - успешная инициализация, драйвер установлен, если CF=0
Функция производит начальную инициализацию драйвера мыши. При возвращении флага переноса драйвер не установлен.

01h (01) SHOW MOUSE CURSOR     (Вывести курсор мыши на экран)
входные данные:
C - 01h
выходные данные:
A - код ошибки, если CF=1
Функция выводит на экран курсор мыши и отслеживает все перемещения курсора и перерисовывает его.

02h (02) HIDE MOUSE CURSOR     (Убрать курсор мыши с экрана)
входные данные:
C - 02h
выходные данные:
A - код ошибки, если CF=1
Функция стирает курсор мыши с экрана, но драйвер продолжает отслеживание перемещения мыши и нажатие на кнопки.

03h (03) READ MOUSE STATE     (Чтение состояния мыши)
входные данные:
C - 03h
выходные данные:
A - код ошибки, если CF=1
A - состояние кнопок
D0 - левая
D1 - правая
HL - x-координата
DE - y-координата

Функция возвращает текущие координаты курсора мыши и состояние ее кнопок.  Координаты возвращаются в точках и для текстовых режимов необходимо их делить на восемь для получения координат в знакоместах.

04h (04) GOTO MOUSE CURSOR     (Установка координат курсора мыши)
входные данные:
C - 04h
HL - x-координата
DE - y-координата

выходные данные:
A - код ошибки, если CF=1
Установка координат курсора мыши. Функция перемещает курсор мыши в заданные координаты.

07h (07) VERT. BOUNDS     (Задание вертикальных границ перемещения курсора)
входные данные:
C - 07h
HL - y-минимальная
DE - y-максимальная

выходные данные:
A - код ошибки, если CF=1
Функция задает верхнюю минимальную и нижнюю максимальную координаты в которых может перемещаться курсор мыши по вертикали.

08h (08) HORZ. BOUNDS     (Задание горизонтальных границ перемещения курсора)
входные данные:
C - 08h
HL - x-минимальная
DE - x-максимальная

выходные данные:
A - код ошибки, если CF=1
Функция задает левую минимальную и правую максимальную координаты в которых может перемещаться курсор мыши по горизонтали.

09h (09) LOAD CURSOR     (Загрузка изображения курсора мыши)
входные данные:
C - 09h
B = 0
IX - изображение курсора
H - высота курсора
L - ширина курсора
D - Y активная точка
E - X активная точка

выходные данные:
A - код ошибки, если CF=1

Функция загружает новое изображение курсора мыши в драйвер и задать активную точку изображения.

0Ah (10) CURSOR TEXT MODES     (Установка курсора мыши в текстовом режиме)
входные данные:
C - 0Ah
B = 0
H - AND SIMBOL MASK
L - XOR SIMBOL MASK
D - AND ATTRIBUT MASK
E - XOR ATTRIBUT MASK

выходные данные:
A - код ошибки, если CF=1
Функция устанавливает символ и атрибут курсора мыши для текстового режима.

0Bh (11) RETURN CURSOR     (Получение изображения курсора мыши)
входные данные:
C - 0Bh
IX - буфер для изображения курсора

выходные данные:
A - код ошибки, если CF=1
H - высота курсора
L - ширина курсора
D - Y активная точка
E - X активная точка

Функция возвращает изображение курсора мыши из драйвера.

0Eh (14) GET SENSETIVE     (Чтение чувствительности мыши)
входные данные:
C - 0Eh
выходные данные:
A - код ошибки, если CF=1
H - чувствительность по вертикали
L - чувствительность по горизонтали

Функция возвращает значения чувствительности перемещения мыши по вертикали и горизонтали.

0Fh (15) SET SENSETIVE     (Установка чувствительности мыши)
входные данные:
C - 0Fh
H - чувствительность по вертикали
L - чувствительность по горизонтали

выходные данные:
A - код ошибки, если CF=1
Функция устанавливает значения чувствительности перемещения мыши по вертикали и горизонтали.

80h (128) MOUSE HARDWARE INTERRUPT  (Обработчик аппаратного прерывания от мыши)
входные данные:
C - 80h
выходные данные:
A - код ошибки, если CF=1
По приходу прерывания от мыши вызывается данная функция драйвера. В случае когда требуется работа подпрограммы при запрещенных прерываниях, используйте данную функцию, для избежания потерь пакетов данных от мыши.

81h (129) CHANGE VIDEO MODE        (Информирование о смене режима экрана)
входные данные:
C - 81h
A - режим экрана

выходные данные:
A - код ошибки, если CF=1

Функция информирует драйвер мыши об изменении режима экрана. Номера режимов соответствуют функции установка режима экрана.

83h (131) MOUSE REFRESH         (Принудительная перерисовка курсора)
входные данные:
C - 83h
выходные данные:
A - код ошибки, если CF=1
Функция перерисовывает изображение курсора мыши на экране не дожидаясь очередного прерывания.
коды ошибок от драйвера мыши:
0 - нет ошибок
1 -	неизвестная функция
2 -	зарезервирована
3 -	курсор уже на экране
4 -	курсор отсутствует на экране
5 -	изображение курсора слишком велико

Приложение А. Коды ошибок DOS
00h (00) - нет ошибок
01h (01) - неверный номер функции
02h (02) - неправильный номер устройства
03h (03) - файл не обнаружен
04h (04) - неверный путь
05h (05) - несуществующий файловый манипулятор
06h (06) - нет свободного файлового манипулятора
07h (07) - файл существует
08h (08) - файл только для чтения
09h (09) - переполнение ROOT (корневого каталога)
0Ah (10) - нет свободного места на диске
0Bh (11) - каталог не пуст
0Ch (12) - попытка удалить текущий каталог
0Dh (13) - неизвестный формат
0Eh (14) - невозможная операция
0Fh (15) - каталог уже есть
10h (16) - неверное имя
11h (17) - неправильный EXE-файл
12h (18) - не поддерживаемая версия EXE-файла
13h (19) - ресурс не доступен
14h (20) - нет готовности
15h (21) - ошибка позиционирования
16h (22) - сектор не найден
17h (23) - ошибка CRC
18h (24) - защита записи
19h (25) - ошибка чтения
1Ah (26) - ошибка записи
1Bh (27) - общая ошибка
1Ch (28) - зарезервирован
1Dh (29) - зарезервирован
1Eh (30) - недостаточно памяти
1Fh (31) - несуществующий блок памяти
20h (32) – зарезервирован

Приложение Б. Таблица позиционных кодов

Key	ASCII	SCAN	key	ASCII	SCAN	
`	000h	000h	V	056h	02Dh	
Esc	01Bh	001h	B	042h	02Eh	
1	031h	002h	N	04Eh	02Fh	
2	032h	003h	M	04Dh	030h	
3	033h	004h	,	02Ch	031h	
4	034h	005h	.	02Eh	032h	
5	035h	006h	/	02Fh	033h	
6	036h	007h	RShift	---	034h	
7	037h	008h	\	05Ch	035h	
8	038h	009h	LCtrl	---	036h	
9	039h	00Ah	LAlt	---	037h	
0	030h	00Bh	Space	020h	038h	
-	02Dh	00Ch	RAlt	---	039h	
=	03Dh	00Dh	RCtrl	---	03Ah	
BackSpace	008h	00Eh	F1	000h	03Bh	
Tab	009h	00Fh	F2	000h	03Ch	
Q	051h	010h	F3	000h	03Dh	
W	057h	011h	F4	000h	03Eh	
E	045h	012h	F5	000h	03Fh	
R	052h	013h	F6	000h	040h	
T	054h	014h	F7	000h	041h	
Y	059h	015h	F8	000h	042h	
U	055h	016h	F9	000h	043h	
I	049h	017h	F10	000h	044h	
O	04Fh	018h	F11	000h	045h	
P	050h	019h	F12	000h	046h	
[	05Bh	01Ah	PrScrn	---	047h	
]	05Dh	01Bh	ScrlLock	000h	048h	
CapsLock	000h	01Ch	NumLock	000h	049h	
A	041h	01Dh	/	02Fh	04Ah	
S	053h	01Eh	*	02Ah	04Bh	
D	044h	01Fh	-	02Dh	04Ch	
F	046h	020h	+	02Bh	04Dh	
G	047h	021h	Enter	00Dh	04Eh	
H	048h	022h	Del .	000h	04Fh	
J	04Ah	023h	Ins 0	000h	050h	
K	04Bh	024h	End 1	000h	051h	
L	04Ch	025h	Down 2	000h	052h	
;	03Bh	026h	PgDn 3	000h	053h	
'	027h	027h	Left 4	000h	054h	
Enter	00Dh	028h	5	000h	055h	
LShift	---	029h	Right 6	000h	056h	
Z	05Ah	02Ah	Home 7	000h	057h	
X	058h	02Bh	Up 8	000h	058h	
C	043h	02Ch	PgUp 9	000h	059h	

Приложение В. Байт атрибутов текстового экрана

бит 7		- Признак мерцания символа
биты 6,5,4	- Цвет фона символа 8 цветов (0...7) RGB
биты 3,2,1,0	- Цвет символа 16 цветов (0...15) IRGB

Цвета для фона и для символа:
 0   0h   0000b - Чёрный
 1   1h   0001b - Синий
 2   2h   0010b - Зелёный
 3   3h   0011b - Голубой (циан)
 4   4h   0100b - Красный
 5   5h   0101b - Фиолетовый
 6   6h   0110b - Коричневый
 7   7h   0111b - Белый

Только для символа:

 8   8h   1000b - Серый
 9   9h   1001b - Ярко-синий
10   Ah   1010b - Ярко-зелёный
11   Bh   1011b - Ярко-голубой
12   Ch   1100b - Ярко-красный
13   Dh   1101b - Ярко-фиолетовый
14   Eh   1110b - Жёлтый
15   Fh   1111b - Ярко-белый

Системные вызовы дисковой подсистемы (DSS) v1.55
Системные вызовы
   Если программа выполняет не только некую математическую задачу на ассемблере, то в ней придется столкнуться с такими вещами, как получение ввода пользователя, выполнение вывода результатов и завершение своей работы. Для этого, необходимо обратиться к сервисам 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                           ;конец строки
Далее идет список категорий функций 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	
Функции ввода с клавиатуры
	
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

Функции работы с экраном
	
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 - принтер не готов