= DOS/BIOS Interupts =
	BIOS
	int 10h -> BIOS INT
		ax = 007eh -> video mode set specify mode by pixel resolution rather than mode number
			bx = horizontal dimension
			cx = vertical dimension
		ah = 02h -> set cursor position
			bh = page number
				0-3 in modes 2&3
				0-7 in modes 0&1
				0 in graphics modes
			dh = row (00h is top)
			dl = column (00h is left)
		ah = 03h -> get cursor position and size
			bh = page number (same as above)
			RETURNS:
				ax = 0h
				ch = start scan line
				cl = end scan line
				dh = row
				dl = column
		AH = 06h - VIDEO - SCROLL UP WINDOW
			AL = number of lines by which to scroll up (00h = clear entire window)
			BH = attribute used to write blank lines at bottom of window
			CH,CL = row,column of window's upper left corner
			DH,DL = row,column of window's lower right corner
				Return: nothing
				Note:   affects only the currently active page (see AH=05h)
				BUGS:   some implementations (including the original IBM PC) have a bug which
				destroys BP
				the Trident TVGA8900CL (BIOS dated 1992/9/8) clears DS to 0000h when
			scrolling in an SVGA mode (800x600 or higher)
				SeeAlso: AH=07h,AH=12h"Tandy 2000",AH=72h,AH=73h,AX=7F07h,INT 50/AX=0014h
		ah = 08h - read character and attribute at cursor position
			bh = page number
			RETURNS:
				ah = character attribute (text mode only)
				ah = character color (graphics mode only)
				al = character
		ah = 0ah - write character only at cursor position
			al = character to display
			bh = page number (background color in 256-color gfx modes)
			bl = attribute
			cx = number of times to write chracter
		ah = 0ch - write gfx pixel
			bh = page num
			al = pixel color (if bit 7 set = XOR'ed onto screen unless in 256 bit mode)
			cx = column
			dx = row
		ah = 0dh = read gfx pixel
			bh = page num
			cx = column
			dx = row
			RETURNS:
				al = pixel color
		ah = 0fh - get current video mode
			RETURNS:
				ah = number of character columns
				al = display mode (table 00010)
				bh = active page
		ah = 12h - get bios info
		bl = 11h
			RETURNS:
				al = 12h if function supported
				bl = ??? (10h)
				es:bp = bios info structure (table 00025)
					Format of Trident BIOS Info structure:
					Offset  Size     Description    (Table 00025)
					 00h    BYTE     ??? (0000h)
					 01h    BYTE     OEM Code (00h for original Trident)
					 02h    WORD     ID??? (1073h for 8800BR, 1074 for 8800CS)
					 04h  8 BYTEs    BIOS date ('mm/dd/yy')
					 0Ch    WORD     ???
					 0Eh  8 BYTEs    BIOS Version (' C3-128 ', ' C3-129 ')
		ah = 12h - get video ram size
		bl = 12h
			RETURNS:
				al = 12h if supported
				ah = number of 256k banks of RAM installed
		ah = 12h - alternate function select (VGA,MCGA) - video addressing - cpu access to video memory
		bl = 32h
		al = new state
			00h - enable video addressing
			01h - disable video addressing
			RETURNS:
				al = 12h if supported
	
	INT 20 P - Microsoft Windows - VMM - VxD SERVICES
			VxD = 0001h
	Note:   the desired VxD and service number are identified by the data
			  immediately following the INT 20 instruction, as in:
					INT     20h
					DW      service number
					DW      VxD identifier
					
	int 21h -> DOS INT
		ah = 01h - read char from stdin with echo
			RETURNS:
				al = character read
		ax = 010fh - virus installation check
		
		ah = 02h - write character to stdout
			dl = character to write

		ah = 07h - direct char input without echo
			RETURNS:
				al = character read (does not check ^C / ^BREAK)
		ah = 08h - char input without echo with checks of ^C
		
		ah = 09h - write string to stdout terminated by '$'
			RETURNS:
				al = 24h '$' ( should return nothing but doesnt )
				
		ah = 0ah - buffered input
		ds:dx = buffer address
			(if buffer size is 0 it returns immediatelly without read)
			input buffer struct format:
				00h byte - maximum chars the buffer can hold
				01h byte - (call) number of chars to recall from previous read / (ret) number of chars actually read excluding CR
				02h N bytes - actual characters read including the final CR
		
		ah = 0bh - get stdin status
			RETURNS:
				al = status
					00h - no char available
					ffh - char available
			
		ah = 0ch - flush buffer and read stdin
		al = address of input function to call after flushing buffer
			RETURNS: as appropriate for the specified input function
			
		--------D-210D-------------------------------
		INT 21 - DOS 1+ - DISK RESET
				AH = 0Dh
		Return: (DOS 6 only) CF clear (earlier versions preserve CF)
		Notes:  This function writes all modified disk buffers to disk, but does not
				  update the directory information (that is only done when files are
				  closed or a SYNC call is issued)
		SeeAlso: AX=5D01h,AX=710Dh,INT 13/AH=00h,INT 2F/AX=1120h
			
		--------D-210E-------------------------------
		INT 21 - DOS 1+ - SELECT DEFAULT DRIVE
				AH = 0Eh
				DL = new default drive (00h = A:, 01h = B:, etc)
		Return: AL = number of potentially valid drive letters
		Notes:  under Novell NetWare, the return value is always 32, the number of
				  drives that NetWare supports
				under DOS 3.0+, the return value is the greatest of 5, the value of
				  LASTDRIVE= in CONFIG.SYS, and the number of drives actually present
				on a DOS 1.x/2.x single-floppy system, AL returns 2 since the floppy
				  may be accessed as either A: or B:
				otherwise, the return value is the highest drive actually present
				DOS 1.x supports a maximum of 16 drives, 2.x a maximum of 63 drives,
				  and 3+ a maximum of 26 drives
				under Novell DOS 7, this function returns the correct LASTDRIVE value
				  even when the undocumented LASTDRIVE=27..32 directive was used in
				  CONFIG.SYS
				"parse FCB" (see AH=29h) can be used to determine whether a drive
				  letter is valid
		SeeAlso: AH=19h,AH=3Bh,AH=DBh
		
		--------E-2125C3-----------------------------
		INT 21 P - Phar Lap 386/DOS-Extender - EXECUTE PROGRAM
			AX = 25C3h
			ES:EBX -> pointer to parameter block (see #01377)
			DS:EDX -> pointer to ASCIZ program filename
		Return: CF clear if successful
				all registers unchanged
			CF set on error
				EAX = error code (see #01376)

		(Table 01376)
		Values for Phar Lap error code:
		 01h	function code in AL is invalid ???
		 02h	file not found or path invalid
		 05h	access denied
		 08h	insufficient memory to load program
		 0Ah	environment invalid
		 0Bh	invalid file format

		Format of parameter block:
		Offset	Size	Description	(Table 01377)
		 00h	DWORD	32-bit offset of environment string
		 04h	WORD	segment selector of environment string
		 06h	DWORD	32-bit offset of command-tail string
		 0Ah	WORD	segment selector of command-tail string
		 
		--------D-212C-------------------------------
		INT 21 - DOS 1+ - GET SYSTEM TIME
			AH = 2Ch
		Return: CH = hour
			CL = minute
			DH = second
			DL = 1/100 seconds
		Note:	on most systems, the resolution of the system clock is about 5/100sec,
			  so returned times generally do not increment by 1
			on some systems, DL may always return 00h
		SeeAlso: AH=2Ah,AH=2Dh,AH=E7h"Novell",INT 1A/AH=00h,INT 1A/AH=02h,INT 1A/AH=FEh
		SeeAlso: INT 2F/AX=120Dh
		
		--------D-212D-------------------------------
		INT 21 - DOS 1+ - SET SYSTEM TIME
			AH = 2Dh
			CH = hour
			CL = minute
			DH = second
			DL = 1/100 seconds
		Return: AL = result
				00h successful
				FFh invalid time, system time unchanged
		Note:	DOS 3.3+ also sets CMOS clock; due to the limitations of the CLOCK$
			  driver interface, the CMOS date is also updated to the current
			  DOS date
		SeeAlso: AH=2Bh"DOS",AH=2Ch,INT 1A/AH=01h,INT 1A/AH=03h,INT 1A/AH=FFh"AT&T"
		
		
		--------D-2130-------------------------------
		INT 21 - DOS 2+ - GET DOS VERSION
			AH = 30h
		---DOS 5+ ---
			AL = what to return in BH
				00h OEM number (see #01394)
				01h version flag
		Return: AL = major version number (00h if DOS 1.x)
			AH = minor version number
			BL:CX = 24-bit user serial number (most versions do not use this)
		---if DOS <5 or AL=00h---
			BH = MS-DOS OEM number (see #01394)
		---if DOS 5+ and AL=01h---
			BH = version flag
				bit 3: DOS is in ROM
				other: reserved (0)
				
		--------D-2131-------------------------------
		INT 21 - DOS 2+ - TERMINATE AND STAY RESIDENT
			AH = 31h
			AL = return code
			DX = number of paragraphs to keep resident
		Return: never
		Notes:	the value in DX only affects the memory block containing the PSP;
			  additional memory allocated via AH=48h is not affected
			the minimum number of paragraphs which will remain resident is 11h
			  for DOS 2.x and 06h for DOS 3.0+
			most TSRs can save some memory by releasing their environment block
			  before terminating (see #01378 at AH=26h,AH=49h)
			any open files remain open, so one should close any files which will
			  not be used before going resident; to access a file which is left
			  open from the TSR, one must switch PSP segments first (see AH=50h)
		SeeAlso: AH=00h,AH=4Ch,AH=4Dh,INT 20,INT 22,INT 27
		
		--------D-2135-------------------------------
		INT 21 - DOS 2+ - GET INTERRUPT VECTOR
			AH = 35h
			AL = interrupt number
		Return: ES:BX -> current interrupt handler
		Note:	under DR DOS 5.0+, this function does not use any of the DOS-internal
			  stacks and may thus be called at any time
		SeeAlso: AH=25h,AX=2503h
		
		--------E-21350C-----------------------------
		INT 21 P - FlashTek X-32VM - ALLOCATE A BLOCK OF MEMORY
			AX = 350Ch
			ECX = size of block in bytes
			DS = default DS
		Return: CF clear if successful
				EAX = near pointer to new block
				EDX = new lowest legal value for stack
			CF set on error (requested size not multiple of 4K)
		SeeAlso: AX=350Bh,AX=350Dh
		
		INT 21 - DOS 1+ - SET INTERRUPT VECTOR
				AH = 25h
				AL = interrupt number
				DS:DX -> new interrupt handler
		Notes:  this function is preferred over direct modification of the interrupt
				  vector table
				some DOS extenders place an API on this function, as it is not
				  directly meaningful in protected mode
				under DR DOS 5.0-6.0, this function does not use any of the
				  DOS-internal stacks and may thus be called at any time; however,
				  under Novell DOS 7.0 - DR-DOS 7.02, this function was not reentrant.
				  Since 1998/05/29, DR-DOS 7.03 no longer uses any internal stacks and
				  tests for this function much earlier, to allow a minimal stack usage
				  of just two words in addition to the IRET frame, allowing it to be
				  called from INT 21h functions, specificially device drivers.  This
				  fixes the MCS SMB client
				Novell NetWare (except the new DOS Requester) monitors the offset of
				  any INT 24 set, and if equal to the value at startup, substitutes
				  its own handler to allow handling of network errors; this introduces
				  the potential bug that any program whose INT 24 handler offset
				  happens to be the same as COMMAND.COM's will not have its INT 24
				  handler installed
		SeeAlso: AX=2501h,AH=35h
		
		--------E-212502-----------------------------
		INT 21 P - Phar Lap 386/DOS-Extender - GET PROTECTED-MODE INTERRUPT VECTOR
				AX = 2502h
				CL = interrupt number
		Return: CF clear
				ES:EBX = CS:EIP of protected-mode interrupt handler
		Note:   this function is also supported by FlashTek X-32VM
		SeeAlso: AX=2503h,AX=2504h,INT 31/AX=0204h
		--------E-212503-----------------------------
		INT 21 P - Phar Lap 386/DOS-Extender - GET REAL-MODE INTERRUPT VECTOR
				AX = 2503h
				CL = interrupt number
		Return: CF clear
				EBX = CS:IP of real-mode interrupt handler
		Note:   this function is also supported by FlashTek X-32VM
		SeeAlso: AX=2502h,AX=2504h,AH=35h,INT 31/AX=0200h
		
		--------E-212522-----------------------------
		INT 21 P - Phar Lap 386/DOS-Ext VMM v2.2+ - SPECIFY ALTERNATE PAGE-FAULT HANDLR
				AX = 2522h
				ES:EBX -> alternate handler for page faults
		Return: CF clear
				ES:EBX -> previous page-fault handler
		SeeAlso: AX=2523h
		
		INT 21 - DOS 2+ - GET COUNTRY-SPECIFIC INFORMATION
				AH = 38h
		--DOS 2.x--
				AL = 00h get current-country info
				DS:DX -> buffer for returned info (see #01398,#01399)
		Return: CF set on error
					AX = error code (02h)
				CF clear if successful
					AX = country code (MS-DOS 2.11 only)
					buffer at DS:DX filled
		--DOS 3.0+--
				AL = 00h for current country
				AL = 01h thru 0FEh for specific country with code <255 (see #01400)
				AL = 0FFh for specific country with code >= 255
				   BX = 16-bit country code (see #01400)
				DS:DX -> buffer for returned info (see #01399)
		Return: CF set on error
					AX = error code (02h)
				CF clear if successful
					AX = country code (Novell NWDOS v7.0)
					BX = country code
					DS:DX buffer filled
		Note:   this function is not supported by the Borland DPMI host, but no error
				  is returned; as a workaround, one should allocate a buffer in
				  conventional memory with INT 31/AX=0100h and simulate an INT 21 with
				  INT 31/AX=0300h
		SeeAlso: AH=65h,INT 10/AX=5001h,INT 2F/AX=1404h
		
		Format of DOS 2.00-2.10 country info:
		Offset	Size	Description	(Table 01398)
		 00h	WORD	date format  0 = USA	mm dd yy
						 1 = Europe dd mm yy
						 2 = Japan	yy mm dd
		 02h	BYTE	currency symbol
		 03h	BYTE	00h
		 04h	BYTE	thousands separator char
		 05h	BYTE	00h
		 06h	BYTE	decimal separator char
		 07h	BYTE	00h
		 08h 24 BYTEs	reserved

		Format of DOS 2.11+ country info:
		Offset	Size	Description	(Table 01399)
		 00h	WORD	date format (see #01398)
		 02h  5 BYTEs	ASCIZ currency symbol string
		 07h  2 BYTEs	ASCIZ thousands separator
		 09h  2 BYTEs	ASCIZ decimal separator
		 0Bh  2 BYTEs	ASCIZ date separator
		 0Dh  2 BYTEs	ASCIZ time separator
		 0Fh	BYTE	currency format
				bit 2 = set if currency symbol replaces decimal point
				bit 1 = number of spaces between value and currency symbol
				bit 0 = 0 if currency symbol precedes value
					1 if currency symbol follows value
		 10h	BYTE	number of digits after decimal in currency
		 11h	BYTE	time format
				bit 0 = 0 if 12-hour clock
					1 if 24-hour clock
		 12h	DWORD	address of case map routine
				(FAR CALL, AL = character to map to upper case [>= 80h])
		 16h  2 BYTEs	ASCIZ data-list separator
		 18h 10 BYTEs	reserved

		(Table 01400)
		Values for country code:
		 001h (1)	United States
		 002h (2)	Canadian-French
		 003h (3)	Latin America
		 004h (4)	Canada (English)
		 007h (7)	Russia
		 014h (20)	Egypt
		 01Bh (27)	South Africa
		 01Eh (30)	Greece
		 01Fh (31)	Netherlands
		 020h (32)	Belgium
		 021h (33)	France
		 022h (34)	Spain
		 023h (35)	Bulgaria???
		 024h (36)	Hungary (not supported by DR DOS 5.0)
		 026h (38)	Yugoslavia (not supported by DR DOS 5.0) -- obsolete
		 027h (39)	Italy / San Marino / Vatican City
		 028h (40)	Romania
		 029h (41)	Switzerland / Liechtenstein
		 02Ah (42)	Czechoslovakia / Tjekia / Slovakia (not supported by DR DOS 5.0)
		 02Bh (43)	Austria (DR DOS 5.0)
		 02Ch (44)	United Kingdom
		 02Dh (45)	Denmark
		 02Eh (46)	Sweden
		 02Fh (47)	Norway
		 030h (48)	Poland (not supported by DR DOS 5.0)
		 031h (49)	Germany
		 033h (51)	Peru
		 034h (52)	Mexico
		 035h (53)	Cuba
		 036h (54)	Argentina
		 037h (55)	Brazil (not supported by DR DOS 5.0)
		 038h (56)	Chile
		 039h (57)	Columbia
		 03Ah (58)	Venezuela
		 03Ch (60)	Malaysia
		 03Dh (61)	International English / Australia
		 03Eh (62)	Indonesia / East Timor
		 03Fh (63)	Philippines
		 040h (64)	New Zealand
		 041h (65)	Singapore
		 042h (66)	Thailand (or Taiwan???)
		 051h (81)	Japan (DR DOS 5.0, MS-DOS 5.0+)
		 052h (82)	South Korea (DR DOS 5.0)
		 054h (84)	Vietnam
		 056h (86)	China (MS-DOS 5.0+)
		 058h (88)	Taiwan (MS-DOS 5.0+)
		 05Ah (90)	Turkey (MS-DOS 5.0+)
		 05Bh (91)	India
		 05Ch (92)	Pakistan
		 05Dh (93)	Afghanistan
		 05Eh (94)	Sri Lanka
		 062h (98)	Iran
		 063h (99)	Asia (English)
		 066h (102)	??? (Hebrew MS-DOS 5.0)
		 070h (112)	Belarus
		 0C8h (200)	Thailand (PC DOS 6.1+)
				(reported as 01h due to a bug in PC DOS COUNTRY.SYS)
		 0D4h (212)	Morocco
		 0D5h (213)	Algeria
		 0D8h (216)	Tunisia
		 0DAh (218)	Libya
		 0DCh (220)	Gambia
		 0DDh (221)	Senegal
		 0DEh (222)	Maruitania
		 0DFh (223)	Mali
		 0E0h (224)	African Guinea
		 0E1h (225)	Ivory Coast
		 0E2h (226)	Burkina Faso
		 0E3h (227)	Niger
		 0E4h (228)	Togo
		 0E5h (229)	Benin
		 0E6h (230)	Mauritius
		 0E7h (231)	Liberia
		 0E8h (232)	Sierra Leone
		 0E9h (233)	Ghana
		 0EAh (234)	Nigeria
		 0EBh (235)	Chad
		 0ECh (236)	Centra African Republic
		 0EDh (237)	Cameroon
		 0EEh (238)	Cape Verde Islands
		 0EFh (239)	Sao Tome and Principe
		 0F0h (240)	Equatorial Guinea
		 0F1h (241)	Gabon
		 0F2h (242)	Congo
		 0F3h (243)	Zaire
		 0F4h (244)	Angola
		 0F5h (245)	Guinea-Bissau
		 0F6h (246)	Diego Garcia
		 0F7h (247)	Ascension Isle
		 0F8h (248)	Seychelles
		 0F9h (249)	Sudan
		 0FAh (250)	Rwhanda
		 0FBh (251)	Ethiopia
		 0FCh (252)	Somalia
		 0FDh (253)	Djibouti
		 0FEh (254)	Kenya
		 0FFh (255)	Tanzania
		 100h (256)	Uganda
		 101h (257)	Burundi
		 103h (259)	Mozambique
		 104h (260)	Zambia
		 105h (261)	Madagascar
		 106h (262)	Reunion Island
		 107h (263)	Zimbabwe
		 108h (264)	Namibia
		 109h (265)	Malawi
		 10Ah (266)	Lesotho
		 10Bh (267)	Botswana
		 10Ch (268)	Swaziland
		 10Dh (269)	Comoros
		 10Eh (270)	Mayotte
		 122h (290)	St. Helena
		 129h (297)	Aruba
		 12Ah (298)	Faroe Islands
		 12Bh (299)	Greenland
		 15Eh (350)	Gibraltar
		 15Fh (351)	Portugal
		 160h (352)	Luxembourg
		 161h (353)	Ireland
		 162h (354)	Iceland
		 163h (355)	Albania
		 164h (356)	Malta
		 165h (357)	Cyprus
		 166h (358)	Finland
		 167h (359)	Bulgaria
		 172h (370)	Lithuania (reported as 372 due to a bug in MS-DOS COUNTRY.SYS)
		 173h (371)	Latvia (reported as 372 due to a bug in MS-DOS COUNTRY.SYS)
		 174h (372)	Estonia
		 175h (373)	Moldova
		 177h (375)	??? (MS-DOS 7.10 / Windows98)
		 17Ch (380)	Ukraine
		 17Dh (381)	Serbia / Montenegro
		 180h (384)	Croatia
		 181h (385)	Croatia (PC DOS 7+)
		 182h (386)	Slovenia
		 183h (387)	Bosnia-Herzegovina (Latin)
		 184h (388)	Bosnia-Herzegovina (Cyrillic) (PC DOS 7+)
				(reported as 381 due to a bug in PC DOS COUNTRY.SYS)
		 185h (389)	FYR Macedonia
		 1A5h (421)	Czech Republic / Tjekia (PC DOS 7+)
		 1A6h (422)	Slovakia
				(reported as 421 due to a bug in COUNTRY.SYS)
		 1F4h (500)	Falkland Islands
		 1F5h (501)	Belize
		 1F6h (502)	Guatemala
		 1F7h (503)	El Salvador
		 1F8h (504)	Honduras
		 1F9h (505)	Nicraragua
		 1FAh (506)	Costa Rica
		 1FBh (507)	Panama
		 1FCh (508)	St. Pierre and Miquelon
		 1FDh (509)	Haiti
		 24Eh (590)	Guadeloupe
		 24Fh (591)	Bolivia
		 250h (592)	Guyana
		 251h (593)	Ecuador
		 252h (594)	rench Guiana
		 253h (595)	Paraguay
		 254h (596)	Martinique / French Antilles
		 255h (597)	Suriname
		 256h (598)	Uruguay
		 257h (599)	Netherland Antilles
		 29Ah (666)	Russia??? (PTS-DOS 6.51 KEYB)
		 29Bh (667)	Poland??? (PTS-DOS 6.51 KEYB)
		 29Ch (668)	Poland??? (Slavic???) (PTS-DOS 6.51 KEYB)
		 29Eh (670)	Saipan / N. Mariana Island
		 29Fh (671)	Guam
		 2A0h (672)	Norfolk Island (Australia) / Christmas Island/Cocos Islands / Antartica
		 2A1h (673)	Brunei Darussalam
		 2A2h (674)	Nauru
		 2A3h (675)	Papua New Guinea
		 2A4h (676)	Tonga Islands
		 2A5h (677)	Solomon Islands
		 2A6h (678)	Vanuatu
		 2A7h (679)	Fiji
		 2A8h (680)	Palau
		 2A9h (681)	Wallis & Futuna
		 2AAh (682)	Cook Islands
		 2ABh (683)	Niue
		 2ACh (684)	American Samoa
		 2ADh (685)	Western Samoa
		 2AEh (686)	Kiribati
		 2AFh (687)	New Caledonia
		 2B0h (688)	Tuvalu
		 2B1h (689)	French Polynesia
		 2B2h (690)	Tokealu
		 2B3h (691)	Micronesia
		 2B4h (692)	Marshall Islands
		 2C7h (711)	??? (currency = EA$, code pages 437,737,850,852,855,857)
		 311h (785)	Arabic (Middle East/Saudi Arabia/etc.)
		 324h (804)	Ukraine
		 329h (809)	Antigua and Barbuda / Anguilla / Bahamas / Barbados / Bermuda
				British Virgin Islands / Cayman Islands / Dominica
				Dominican Republic / Grenada / Jamaica / Montserra
				St. Kitts and Nevis / St. Lucia / St. Vincent and Grenadines
				Trinidad and Tobago / Turks and Caicos
		 352h (850)	North Korea
		 354h (852)	Hong Kong
		 355h (853)	Macao
		 357h (855)	Cambodia
		 358h (856)	Laos
		 370h (880)	Bangladesh
		 376h (886)	Taiwan (MS-DOS 6.22+)
		 3C0h (960)	Maldives
		 3C1h (961)	Lebanon
		 3C2h (962)	Jordan
		 3C3h (963)	Syria / Syrian Arab Republic
		 3C4h (964)	Iraq
		 3C5h (965)	Kuwait
		 3C6h (966)	Saudi Arabia
		 3C7h (967)	Yemen
		 3C8h (968)	Oman
		 3C9h (969)	Yemen??? (Arabic MS-DOS 5.0)
		 3CBh (971)	United Arab Emirates
		 3CCh (972)	Israel (Hebrew) (DR DOS 5.0,MS-DOS 5.0+)
		 3CDh (973)	Bahrain
		 3CEh (974)	Qatar
		 3CFh (975)	Bhutan
		 3D0h (976)	Mongolia
		 3D1h (977)	Nepal
		 3E3h (995)	Myanmar (Burma)
			  (10xxx)	reserved for ISO 28601/ISO 8601 or derivative national stds
			  (11xxx)	reserved for Euro currency support
			  (12xxx)	reserved for ISO 28601 + Euro currency
			  (1xxxx)	not yet defined
			  (20xxx)	reserved for ISO 28601/ISO 8601 or derivative national stds
			  (21xxx)	reserved for Euro currency support
			  (22xxx)	reserved for ISO 28601 + Euro currency
			  (2xxxx)	not yet defined
			  (30xxx)	reserved for user-definable country codes
			  (31xxx)	reserved for OEM-defined country codes
			  (32000+)	reserved for future expansion
		Note:	not all country codes are supported by all versions of DOS
		
		INT 21 - DR DOS 3.41+ internal - SET ACCESS RIGHTS AND PASSWORD
				AX = 4303h
				CX = access rights
					 bits 11-0: access rights (see #01421)
					 bit 15: new password is to be set
				DS:DX -> ASCIZ pathname
				[DTA] = new password if CX bit 15 is set (blank-padded to 8 characters)
		Return: CF clear if successful
				CF set on error
					AX = error code
		Notes:  if the file is already protected, the old password must be added after
				  the pathname, separated by a ";".  As with all password handling in
				  DR DOS, the old password is processed by the kernel, not any
				  applications or utilities making the call.
				this function is documented in DR DOS 6.0 and corresponds to the
				  "Get/Set File Attributes" function, subfunction 3, documented in
				  Concurrent DOS.
		SeeAlso: AH=0Fh,AH=17h,AX=4302h"DR DOS",AX=4305h,AX=4454h
		
		INT 21 - DOS 2+ - "CHDIR" - SET CURRENT DIRECTORY
				AH = 3Bh
				DS:DX -> ASCIZ pathname to become current directory (max 64 bytes)
		Return: CF clear if successful
					AX destroyed
				CF set on error
					AX = error code (03h) (see #01680 at AH=59h/BX=0000h)
		Notes:  if new directory name includes a drive letter, the default drive is
				  not changed, only the current directory on that drive
				changing the current directory also changes the directory in which
				  FCB file calls operate
				under the FlashTek X-32 DOS extender, the pointer is in DS:EDX
		SeeAlso: AH=47h,AX=713Bh,INT 2F/AX=1105h
				INT 21 U - DR DOS 5.0-6.0 internal - GET ENCRYPTED PASSWORD
						AX = 4304h
						DS:DX -> ASCIZ filename
						???
				Return: CF clear if successful
							CX = AX = 0000h if no password assigned to file
						CF set on error
							AX = error code (see #01680 at AH=59h/BX=0000h)
				Note:   this function is only supported by DR DOS 5.0 and 6.0 and DRMDOS 5.1
				SeeAlso: AX=4303h,AX=4305h
		
		INT 21 - DOS 2+ - "WRITE" - WRITE TO FILE OR DEVICE
				AH = 40h
				BX = file handle
				CX = number of bytes to write
				DS:DX -> data to write
		Return: CF clear if successful
					AX = number of bytes actually written
				CF set on error
					AX = error code (05h,06h) (see #01680 at AH=59h/BX=0000h)
		Notes:  if CX is zero, no data is written, and the file is truncated or
				  extended to the current position
				data is written beginning at the current file position, and the file
				  position is updated after a successful write
				for FAT32 drives, the file must have been opened with AX=6C00h with
				  the "extended size" flag in order to expand the file beyond 2GB;
				  otherwise the write will fail with error code 0005h (access denied)
				the usual cause for AX < CX on return is a full disk
		BUG:    a write of zero bytes will appear to succeed when it actually failed
				  if the write is extending the file and there is not enough disk
				  space for the expanded file (DOS 5.0-6.0); one should therefore check
				  whether the file was in fact extended by seeking to 0 bytes from
				  the end of the file (INT 21/AX=4202h/CX=0000h/DX=0000h)
				under the FlashTek X-32 DOS extender, the pointer is in DS:EDX
		SeeAlso: AH=28h,AH=3Fh"DOS",AH=93h,INT 2F/AX=1109h
		
		--------D-213F-------------------------------
		INT 21 - DOS 2+ - "READ" - READ FROM FILE OR DEVICE
				AH = 3Fh
				BX = file handle
				CX = number of bytes to read
				DS:DX -> buffer for data
		Return: CF clear if successful
					AX = number of bytes actually read (0 if at EOF before call)
				CF set on error
					AX = error code (05h,06h) (see #01680 at AH=59h/BX=0000h)
		Notes:  data is read beginning at current file position, and the file position
				  is updated after a successful read
				the returned AX may be smaller than the request in CX if a partial
				  read occurred
				if reading from CON, read stops at first CR
				under the FlashTek X-32 DOS extender, the pointer is in DS:EDX
		BUG:    Novell NETX.EXE v3.26 and 3.31 do not set CF if the read fails due to
				  a record lock (see AH=5Ch), though it does return AX=0005h; this
				  has been documented by Novell
		SeeAlso: AH=27h,AH=40h,AH=93h,INT 2F/AX=1108h,INT 2F/AX=1229h
		
		--------D-213C-------------------------------
		INT 21 - DOS 2+ - "CREAT" - CREATE OR TRUNCATE FILE
				AH = 3Ch
				CX = file attributes (see #01401)
				DS:DX -> ASCIZ filename
		Return: CF clear if successful
					AX = file handle
				CF set on error
					AX = error code (03h,04h,05h) (see #01680 at AH=59h/BX=0000h)
		Notes:  if a file with the given name exists, it is truncated to zero length
				under the FlashTek X-32 DOS extender, the pointer is in DS:EDX
				DR DOS checks the system password or explicitly supplied password at
				  the end of the filename against the reserved field in the directory
				  entry before allowing access
		SeeAlso: AH=16h,AH=3Dh,AH=5Ah,AH=5Bh,AH=93h,INT 2F/AX=1117h

		Bitfields for file attributes:
		Bit(s)  Description     (Table 01401)
		 0      read-only
		 1      hidden
		 2      system
		 3      volume label (ignored)
		 4      reserved, must be zero (directory)
		 5      archive bit
		 7      if set, file is shareable under Novell NetWare
		 
		--------D-213D-------------------------------
		INT 21 - DOS 2+ - "OPEN" - OPEN EXISTING FILE
				AH = 3Dh
				AL = access and sharing modes (see #01402)
				DS:DX -> ASCIZ filename
				CL = attribute mask of files to look for (server call only)
		Return: CF clear if successful
					AX = file handle
				CF set on error
					AX = error code (01h,02h,03h,04h,05h,0Ch,56h) (see #01680 at AH=59h)
		Notes:  file pointer is set to start of file
				if SHARE or a network is loaded, the file open may fail if the file
				  is already open, depending on the combination of sharing modes
				  (see #01403,#01404)
				file handles which are inherited from a parent also inherit sharing
				  and access restrictions
				files may be opened even if given the hidden or system attributes
				under the FlashTek X-32 DOS extender, the pointer is in DS:EDX
				DR DOS checks the system password or explicitly supplied password at
				  the end of the filename (following a semicolon) against the reserved
				  field in the directory entry before allowing access
				sharing modes are only effective on local drives if SHARE is loaded
		BUG:    Novell DOS 7 SHARE v1.00 would refuse file access in the cases in
				  #01403 marked with [1] (read-only open of a read-only file
				  which had previously been opened in compatibility mode); this was
				  fixed in SHARE v1.01 of 09/29/94
		SeeAlso: AH=0Fh,AH=3Ch,AX=4301h,AX=5D00h,INT 2F/AX=1116h,INT 2F/AX=1226h

		Bitfields for access and sharing modes:
		Bit(s)  Description     (Table 01402)
		 2-0    access mode
				000 read only
				001 write only
				010 read/write
				011 (DOS 5+ internal) passed to redirector on EXEC to allow
						case-sensitive filenames
		 3      reserved (0)
		 6-4    sharing mode (DOS 3.0+) (see #01403)
				000 compatibility mode
				001 "DENYALL" prohibit both read and write access by others
				010 "DENYWRITE" prohibit write access by others
				011 "DENYREAD" prohibit read access by others
				100 "DENYNONE" allow full access by others
				111 network FCB (only available during server call)
		 7      inheritance
				if set, file is private to current process and will not be inherited
				  by child processes
		SeeAlso: #01782,#01403
		
		INT 21 - DOS 2+ - "LSEEK" - SET CURRENT FILE POSITION
				AH = 42h
				AL = origin of move
					00h start of file
					01h current file position
					02h end of file
				BX = file handle
				CX:DX = (signed) offset from origin of new file position
		Return: CF clear if successful
					DX:AX = new file position in bytes from start of file
				CF set on error
					AX = error code (01h,06h) (see #01680 at AH=59h/BX=0000h)
		Notes:  for origins 01h and 02h, the pointer may be positioned before the
				  start of the file; no error is returned in that case (except under
				  Windows NT), but subsequent attempts at I/O will produce errors
				if the new position is beyond the current end of file, the file will
				  be extended by the next write (see AH=40h); for FAT32 drives, the
				  file must have been opened with AX=6C00h with the "extended size"
				  flag in order to expand the file beyond 2GB
		BUG:    using this method to grow a file from zero bytes to a very large size
				  can corrupt the FAT in some versions of DOS; the file should first
				  be grown from zero to one byte and then to the desired large size
		SeeAlso: AH=24h,INT 2F/AX=1228h
		int 21 u - ifshlp.sys
			ah = 3hf - support driver program for workgroups
			
		INT 21 - WORKGRP.SYS - GET ENTRY POINT
				AH = 3Fh
				BX = file handle for device "NET$HLP$"
				CX = 0008h
				DS:DX -> buffer for entry point record (see #01485)
		Return: CF clear if successful
					AX = number of bytes actually read (0 if at EOF before call)
				CF set on error
					AX = error code (05h,06h) (see #01680 at AH=59h/BX=0000h)
		Program: WORKGRP.SYS is the portion of Microsoft's Workgroup Connection which
				  permits communication with PCs running Windows for Workgroups or
				  LAN Manager
		SeeAlso: AX=4402h"WORKGRP.SYS",INT 2F/AX=9400h