; Project name	:	AssemblyLibrary
; Description	:	Defines for MS-DOS functions.
%ifndef DOS_FUNCTIONS_INC
%define DOS_FUNCTIONS_INC

; DOS interrupts
DOS_INTERRUPT_21h									EQU		21h
DOS_CTRL_C_CTRL_BREAK_HANDLER_23h					EQU		23h
DOS_CRITICAL_ERROR_HANDLER_24h						EQU		24h
DOS_TSR_MULTIPLEX_INTERRUPT_2Fh						EQU		2Fh

; DOS functions
WRITE_CHARACTER_TO_STANDARD_OUTPUT					EQU		02h		; DOS 1+
WRITE_STRING_TO_STANDARD_OUTPUT						EQU		09h		; DOS 1+
SELECT_DEFAULT_DRIVE								EQU		0Eh		; DOS 1+
GET_CURRENT_DEFAULT_DRIVE							EQU		19h		; DOS 1+
SET_INTERRUPT_VECTOR								EQU		25h		; DOS 1+
GET_DISK_TRANSFER_AREA_ADDRESS						EQU		2Fh		; DOS 2+
GET_DOS_VERSION										EQU		30h		; DOS 2+
GET_DOS_DRIVE_PARAMETER_BLOCK_FOR_SPECIFIC_DRIVE	EQU		32h		; DOS 2+
GET_INTERRUPT_VECTOR								EQU		35h		; DOS 2+
SET_CURRENT_DIRECTORY								EQU		3Bh		; DOS 2+
CREATE_OR_TRUNCATE_FILE								EQU		3Ch		; DOS 2+
OPEN_EXISTING_FILE									EQU		3Dh		; DOS 2+
CLOSE_FILE											EQU		3Eh		; DOS 2+
READ_FROM_FILE_OR_DEVICE							EQU		3Fh		; DOS 2+
WRITE_TO_FILE_OR_DEVICE								EQU		40h		; DOS 2+
SET_CURRENT_FILE_POSITION							EQU		42h		; DOS 2+
CHECK_IF_BLOCK_DEVICE_REMOTE						EQU		4409h	; DOS 3.1+
GET_CURRENT_DIRECTORY								EQU		47h		; DOS 2+
TERMINATE_WITH_RETURN_CODE							EQU		4Ch		; DOS 2+
FIND_FIRST_MATCHING_FILE							EQU		4Eh		; DOS 2+
FIND_NEXT_MATCHING_FILE								EQU		4Fh		; DOS 2+
GET_EXTENDED_ERROR_INFORMATION						EQU		59h		; DOS 3.0+

; DOS errors
ERR_DOS_FUNCTION_NUMBER_INVALID						EQU		01h
ERR_DOS_PATH_NOT_FOUND								EQU		03h
ERR_DOS_INVALID_DRIVE								EQU		0Fh
ERR_DOS_NO_MORE_FILES								EQU		12h
ERR_DOS_DRIVE_NOT_READY								EQU		15h


; DOS Program Segment Prefix (PSP, first 256 (100h) bytes on top of program)
struc PSP
	.int20hInstruction				resb	2
	.wSizeOfMemoryInParagraphs		resb	2
	.reservedAt4h					resb	1
	.callToDosFunctionDispatcher	resb	5
	.fpInt22hTerminate				resb	4
	.fpInt23hCtrlC					resb	4
	.fpInt24hCriticalError			resb	4
	.reservedAt16h					resb	22
	.wEnvironmentSegment			resb	2
	.reservedAt2Eh					resb	34
	.int21hAndRetfInstructions		resb	3
	.reservedAt53h					resb	9
	.FCB1							resb	16
	.FCB2							resb	20
	.DiskTransferArea:
	.bCommandLineLength				resb	1
	.szCommandLine					resb	127
endstruc


; DOS DTA (Disk Transfer Area)
struc DTA
	; Undocumented fields
	.reservedAt0h		resb	21
	; Documented fields
	.bFileAttributes	resb	1	; 15h, Attribute of matching file
	.wFileTime			resb	2	; 16h, File time
	.wFileDate			resb	2	; 18h, File date
	.dwFileSize			resb	4	; 1Ah, File size in bytes
	.szFile				resb	13	; 1Eh, ASCIZ filename + extension
endstruc


%endif ; DOS_FUNCTIONS_INC
