Last update: 2003-01-18
Copyright © 2003 Salvatore Isaja
Permission is granted to copy, distribute and/or modify this document under the terms of
the GNU Free Documentation License, Version 1.2 or any later version published by the Free
Software Foundation; with no Invariant Sections, with no Front-Cover Texts, and with no
Back-Cover Texts. A copy of the license is included by reference.
The DPMI driver lets DPMI applications to be run under FreeDOS-32, providing
them the DPMI and DOS Application Programming Interfaces (APIs) they expect.
This document is a summary of system calls recognized by the FD32 DPMI driver.
The following table lists the implemented (tick) and unimplemented (cross) DPMI services. Unless differently stated, each service is called through INT 31h, with the specified value of the AX register. The ver column shows the DPMI compatibility version.
| LDT Management Services |
| AX | ver | description |
| 0000 | 0.9 | Allocate LDT Descriptors |
| 0001 | 0.9 | Free LDT Descriptor |
| 0002 | 0.9 | Segment to Descriptor |
| 0003 | 0.9 | Get Selector Increment Value |
| 0006 | 0.9 | Get Segment Base Address |
| 0007 | 0.9 | Set Segment Base Address |
| 0008 | 0.9 | Set Segment Limit |
| 0009 | 0.9 | Set Descriptor Access Rights |
| 000A | 0.9 | Create Alias Descriptor |
| 000B | 0.9 | Get Descriptor |
| 000C | 0.9 | Set Descriptor |
| 000D | 0.9 | Allocate Specific LDT Descriptor |
| 000E | 1.0 | Get Multiple Descriptors |
| 000F | 1.0 | Set Multiple Descriptors |
| Extended Memory Management Services |
| AX | ver | description |
| 0500 | 0.9 | Get Free Memory Information |
| 0501 | 0.9 | Allocate Memory Block |
| 0502 | 0.9 | Free Memory Block |
| 0503 | 0.9 | Resize Memory Block |
| 0504 | 1.0 | Allocate Linear Memory Block |
| 0505 | 1.0 | Resize Linear Memory Block |
| 0506 | 1.0 | Get Page Attributes |
| 0507 | 1.0 | Set Page Attributes [FAKE] |
| 0508 | 1.0 | Map Device in Memory Block |
| 0509 | 1.0 | Map Conventional Memory in Memory Block |
| 050A | 1.0 | Get Memory Block Size and Base |
| 050B | 1.0 | Get Memory Information |
| 0800 | 0.9 | Physical Address Mapping |
| 0801 | 1.0 | Free Physical Address Mapping |
| 0D00 | 1.0 | Allocate Shared Memory |
| 0D01 | 1.0 | Free Shared Memory |
| 0D02 | 1.0 | Serialize on Shared Memory |
| 0D03 | 1.0 | Free Serialization on Shared Memory |
| DOS Memory Management Services |
| AX | ver | description |
| 0100 | 0.9 | Allocate DOS Memory Block |
| 0101 | 0.9 | Free DOS Memory Block |
| 0102 | 0.9 | Resize DOS Memory Block |
| Interrupt Management Services |
| AX | ver | description |
| 0200 | 0.9 | Get Real Mode Interrupt Vector |
| 0201 | 0.9 | Set Real Mode Interrupt Vector |
| 0202 | 0.9 | Get Processor Exception Handler Vector |
| 0203 | 0.9 | Set Processor Exception Handler Vector |
| 0204 | 0.9 | Get Protected Mode Interrupt Vector |
| 0205 | 0.9 | Set Protected Mode Interrupt Vector |
| 0210 | 1.0 | Get Extended Processor Exception Handler Vector (Protected Mode) |
| 0211 | 1.0 | Get Extended Processor Exception Handler Vector (Real Mode) |
| 0212 | 1.0 | Set Extended Processor Exception Handler Vector (Protected Mode) |
| 0213 | 1.0 | Set Extended Processor Exception Handler Vector (Real Mode) |
| 0900 | 0.9 | Get and Disable Virtual Interrupt State |
| 0901 | 0.9 | Get and Enable Virtual Interrupt State |
| 0902 | 0.9 | Get Virtual Interrupt State |
| Translation Services |
| AX | ver | description |
| 0300 | 0.9 | Simulate Real Mode Interrupt [HARD-CODED] |
| 0301 | 0.9 | Call Real Mode Procedure With Far Return Frame |
| 0302 | 0.9 | Call Real Mode Procedure With IRET Frame |
| 0303 | 0.9 | Allocate Real Mode Callback Address |
| 0304 | 0.9 | Free Real Mode Callback Address |
| 0305 | 0.9 | Get State Save/Restore Addresses |
| 0306 | 0.9 | Get Raw Mode Switch Addresses |
| Page Management Services |
| AX | ver | description |
| 0600 | 0.9 | Lock Linear Region [FAKE] |
| 0601 | 0.9 | Unlock Linear Region |
| 0602 | 0.9 | Mark Real Mode Region as Pageable |
| 0603 | 0.9 | Relock Real Mode Region |
| 0604 | 0.9 | Get Page Size |
| 0702 | 0.9 | Mark Page as Demand Paging Candidate |
| 0703 | 0.9 | Discard Page Contents |
| Debug Support Services |
| AX | ver | description |
| 0B00 | 0.9 | Set Debug Watchpoint |
| 0B01 | 0.9 | Clear Debug Watchpoint |
| 0B02 | 0.9 | Get State of Debug Watchpoint |
| 0B03 | 0.9 | Reset Debug Watchpoint |
| Miscellaneous Services |
| AX | ver | description |
| 0400 | 0.9 | Get Version |
| 0401 | 1.0 | Get DPMI Capabilities |
| 0A00 | 0.9 | Get Vendor-Specific API Entry Point |
| 0C00 | 1.0 | Install Resident Service Provider Callback |
| 0C01 | 1.0 | Terminate and Stay Resident |
| 0E00 | 1.0 | Get Coprocessor Status |
| 0E01 | 1.0 | Set Coprocessor Emulation |
| |
Int |
Registers |
Compatibility |
Description |
|
21h |
AH=0Fh |
DOS 1+ |
Open file using FCB |
|
21h |
AH=10h |
DOS 1+ |
Close file using FCB |
|
21h |
AH=11h |
DOS 1+ |
Find first matching file using FCB |
|
21h |
AH=12h |
DOS 1+ |
Find next matching file using FCB |
|
21h |
AH=13h |
DOS 1+ |
Delete file using FCB |
|
21h |
AH=14h |
DOS 1+ |
Sequential read from file using FCB |
|
21h |
AH=15h |
DOS 1+ |
Sequential write to file using FCB |
|
21h |
AH=16h |
DOS 1+ |
Create or truncate file using FCB |
|
21h |
AH=17h |
DOS 1+ |
Rename file using FCB |
|
21h |
AH=21h |
DOS 1+ |
Read random record from file using FCB |
|
21h |
AH=22h |
DOS 1+ |
Write random record to file using FCB |
|
21h |
AH=23h |
DOS 1+ |
Get file size from FCB |
|
21h |
AH=24h |
DOS 1+ |
Set random record number for FCB |
|
21h |
AH=27h |
DOS 1+ |
Random block read from file using FCB |
|
21h |
AH=28h |
DOS 1+ |
Random block write to file using FCB |
|
21h |
AH=29h |
DOS 1+ |
Parse file name into FCB |
| |
Int |
Registers |
Compatibility |
Description |
|
21h |
AH=0Dh |
DOS 1+ |
Disk reset |
|
21h |
AH=0Eh |
DOS 1+ |
Set default drive |
|
21h |
AH=19h |
DOS 1+ |
Get default drive |
|
21h |
AH=1Ah |
DOS 1+ |
Set Disk Transfer Area address |
|
21h |
AH=1Bh |
DOS 1+ |
Get allocation information for default drive |
|
21h |
AH=1Ch |
DOS 1+ |
Get allocation information for specific drive |
|
21h |
AH=1Fh |
DOS 1+ |
Get Drive Parameter Block for default drive |
|
21h |
AH=2Eh DL=00h |
DOS 1+ |
Set verify flag |
|
21h |
AH=2Fh |
DOS 2+ |
Get Disk Transfer Area address |
|
21h |
AH=32h |
DOS 2+ |
Get DOS Drive Parameter Block for specific drive |
|
21h |
AX=3305h |
DOS 2+ |
Get boot drive |
|
21h |
AH=36h |
DOS 2+ |
Get free disk space |
|
21h | AH=39h | DOS 2+ | "MKDIR" Create subdirectory |
|
21h | AH=3Ah | DOS 2+ | "RMDIR" - Remove subdirectory |
|
21h | AH=3Bh | DOS 2+ | "CHDIR" - Set current directory |
|
21h | AH=3Ch | DOS 2+ | "CREAT" - Create or truncate file |
|
21h | AH=3Dh | DOS 2+ | "OPEN" - Open existing file |
|
21h | AH=3Eh | DOS 2+ | "CLOSE" - Close file |
|
21h | AH=3Fh | DOS 2+ | "READ" - Read from file or device |
|
21h | AH=40h | DOS 2+ | "WRITE" - Write to file or device |
|
21h | AH=41h | DOS 2+ | "UNLINK" - Delete file |
|
21h | AH=42h | DOS 2+ | "LSEEK" - Set current file position |
|
21h | AX=4300h | DOS 2+ | Get file attributes |
|
21h | AX=4301h | DOS 2+ | "CHMOD" - Set file attributes |
|
21h | AX=4302h | DOS 7+ | Get compressed file size |
|
21h | AX=43FFh BP=5053h | DOS 7.20+ | Extended-length file name operations |
|
21h | AH=45h | DOS 2+ | "DUP" - Duplicate file handle |
|
21h | AH=46h | DOS 2+ | "DUP2", "FORCEDUP" - Force duplicate file handle |
|
21h | AH=47h | DOS 2+ | "CWD" - Get current directory |
|
21h | AH=4Eh | DOS 2+ | "FINDFIRST" - Find first matching file |
|
21h | AH=4Fh | DOS 2+ | "FINDNEXT" - Find next matching file |
|
21h | AH=56h | DOS 2+ | "RENAME" - Rename or move file |
|
21h | AX=5700h | DOS 2+ | Get file's last modification date and time |
|
21h | AX=5701h | DOS 2+ | Set file's last modification date and time |
|
21h | AX=5702h | DOS 4 only | Get extended attributes for file |
|
21h | AX=5703h | DOS 4 only | Get extended attribute properties |
|
21h | AX=5704h | DOS 4 only | Set extended attributes |
|
21h | AX=5704h | DOS 7+ | Get file's last access date and time |
|
21h | AX=5705h | DOS 7+ | Set file's last access date and time |
|
21h | AX=5706h | DOS 7+ | Get file's creation date and time |
|
21h | AX=5707h | DOS 7+ | Set file's creation date and time |
|
21h | AH=5Ah | DOS 3.0+ | Create temporary file |
|
21h | AH=5Bh | DOS 3.0+ | Create new file |
|
21h | AH=5Ch | DOS 3.0+ | "FLOCK" - Record locking |
|
21h | AX=5F07h | DOS 5+ | Enable drive |
|
21h | AX=5F08h | DOS 5+ | Disable drive |
|
21h | AX=60h | DOS 3.0+ | "TRUENAME" - Canonicalize file name or path |
|
21h | AH=67h | DOS 3.3+ | Set file handle count (Job File Table size) |
|
21h | AH=68h | DOS 3.3+ | "FFLUSH" - Commit file |
|
21h | AH=69h | DOS 4.0+ | Get/set disk serial number |
|
21h | AH=6Ah | DOS 4.0+ | Commit file |
|
21h | AX=6C00h | DOS 4.0+ | Extended open/create file |
|
21h | AH=73h | DOS 7+ | Drive locking |
|
21h | AX=7302h | Win95+ | "Get_ExtDBP" - Get extended Drive Parameter Block for FAT32 drive |
|
21h | AX=7303h | Win95+ | Get free space on FAT32 drive |
|
21h | AX=7304h | Win95+ | Set DPB to use for formatting a FAT32 drive |
| | Int | Registers | Compatibility | Description |
|
21h | AX=710Dh | Win95+ | Reset drive |
|
21h | AX=7139h | Win95+ | "MKDIR" - Make directory with Long File Names support |
|
21h | AX=713Ah | Win95+ | "RMDIR" - Remove directory with Long File Names support |
|
21h | AX=713Bh | Win95+ | "CHDIR" - Set current directory with Long File Names support |
|
21h | AX=7141h | Win95+ | "UNLINK" - Delete file with Long File Names support |
|
21h | AX=7143h | Win95+ |
"CHMOD" - Extended get/set file attributes |
|
21h | AX=7147h | Win95+ | "CWD" - Get current directory with Long File Name support |
|
21h | AX=714Eh | Win95+ | "FINDFIRST" - Find first matching file with Long File Names support |
|
21h | AX=714Fh | Win95+ | "FINDNEXT" - Find next matching file with Long File Names support |
|
21h | AX=7156h | Win95+ | "RENAME" - Rename or move file with Long File Names support |
|
21h | AX=7160h CL=00h | Win95+ | "TRUENAME" - Canonicalize path with Long File Names support |
|
21h | AX=7160h CL=01h | Win95+ | "TRUENAME" - Get canonical short (8.3) name for file |
|
21h | AX=7160h CL=02h | Win95+ | "TRUENAME" - Get canonical long file name or path |
|
21h | AX=716Ch | Win95+ | "OPEN" - Create or open file with Long File Names support |
|
21h | AX=71A0h | Win95+ | Get volume informations |
|
21h | AX=71A1h | Win95+ | "FINDCLOSE" - Terminate directory search |
|
21h | AX=71A6h | Win95+ | Get file informations by handle |
|
21h | AX=71A7h BL=00h | Win95+ | Convert Windows 64-bit time to DOS time |
|
21h | AX=71A7h BL=01h | Win95+ | Convert DOS time to Windows 64-bit time |
|
21h | AX=71A8h | Win95+ | Generate short name alias for long file name |
|
21h | AX=71A9h | Win95+ | Server create or open file |
|
21h | AX=71AAh BH=00h | Win95+ | Create subst |
|
21h | AX=71AAh BH=01h | Win95+ | Terminate subst |
|
21h | AX=71AAh BH=02h | Win95+ | Query subst |
|
21h | AH=72h | Win95 beta | "FINDCLOSE" - Terminate directory search |