@node DPMI Specification, dpmi To obtain the DPMI specification, Contact Intel and order document number 240977-001. Also, try ftp.qdeck.com:/pub/memory/dpmi* and http://www.delorie.com/djgpp/doc/dpmi/. @node DPMI Overview, dpmi @example extern unsigned short __dpmi_error; @end example For most functions, the error returned from the DPMI server is stored in this variable. @example typedef struct @{ unsigned short offset16; unsigned short segment; @} __dpmi_raddr; @end example This structure is used to hold a real-mode address, which consists of a segment:offset pair. @example typedef struct @{ unsigned long offset32; unsigned short selector; @} __dpmi_paddr; @end example This structure is used to hold a protected-mode address, which consists of a selector:offset pair. @example typedef struct @{ unsigned long handle; /* 0, 2 */ unsigned long size; /* or count */ /* 4, 6 */ unsigned long address; /* 8, 10 */ @} __dpmi_meminfo; @end example This structure is used by many functions that need to refer to blocks of 32-bit memory. The @code{size} field doubles as a count for those operations that want a count of something, or return a count. @example typedef union @{ struct @{ unsigned long edi; unsigned long esi; unsigned long ebp; unsigned long res; unsigned long ebx; unsigned long edx; unsigned long ecx; unsigned long eax; @} d; struct @{ unsigned short di, di_hi; unsigned short si, si_hi; unsigned short bp, bp_hi; unsigned short res, res_hi; unsigned short bx, bx_hi; unsigned short dx, dx_hi; unsigned short cx, cx_hi; unsigned short ax, ax_hi; unsigned short flags; unsigned short es; unsigned short ds; unsigned short fs; unsigned short gs; unsigned short ip; unsigned short cs; unsigned short sp; unsigned short ss; @} x; struct @{ unsigned char edi[4]; unsigned char esi[4]; unsigned char ebp[4]; unsigned char res[4]; unsigned char bl, bh, ebx_b2, ebx_b3; unsigned char dl, dh, edx_b2, edx_b3; unsigned char cl, ch, ecx_b2, ecx_b3; unsigned char al, ah, eax_b2, eax_b3; @} h; @} __dpmi_regs; @end example This structure is used by functions that pass register information, such as simulating real-mode calls. @example typedef struct @{ unsigned char major; unsigned char minor; unsigned short flags; unsigned char cpu; unsigned char master_pic; unsigned char slave_pic; @} __dpmi_version_ret; @end example This structure is used to return version information to the program. @example typedef struct @{ unsigned long largest_available_free_block_in_bytes; unsigned long maximum_unlocked_page_allocation_in_pages; unsigned long maximum_locked_page_allocation_in_pages; unsigned long linear_address_space_size_in_pages; unsigned long total_number_of_unlocked_pages; unsigned long total_number_of_free_pages; unsigned long total_number_of_physical_pages; unsigned long free_linear_address_space_in_pages; unsigned long size_of_paging_file_partition_in_pages; unsigned long reserved[3]; @} __dpmi_free_mem_info; @end example This structure is used to return information about the state of virtual memory in the system. @example typedef struct @{ unsigned long total_allocated_bytes_of_physical_memory_host; unsigned long total_allocated_bytes_of_virtual_memory_host; unsigned long total_available_bytes_of_virtual_memory_host; unsigned long total_allocated_bytes_of_virtual_memory_vcpu; unsigned long total_available_bytes_of_virtual_memory_vcpu; unsigned long total_allocated_bytes_of_virtual_memory_client; unsigned long total_available_bytes_of_virtual_memory_client; unsigned long total_locked_bytes_of_memory_client; unsigned long max_locked_bytes_of_memory_client; unsigned long highest_linear_address_available_to_client; unsigned long size_in_bytes_of_largest_free_memory_block; unsigned long size_of_minimum_allocation_unit_in_bytes; unsigned long size_of_allocation_alignment_unit_in_bytes; unsigned long reserved[19]; @} __dpmi_memory_info; @end example This is also used to return memory information, but by a different function. @example typedef struct @{ unsigned long data16[2]; unsigned long code16[2]; unsigned short ip; unsigned short reserved; unsigned long data32[2]; unsigned long code32[2]; unsigned long eip; @} __dpmi_callback_info; @end example This structure is used to install TSR programs. @example typedef struct @{ unsigned long size_requested; unsigned long size; unsigned long handle; unsigned long address; unsigned long name_offset; unsigned short name_selector; unsigned short reserved1; unsigned long reserved2; @} __dpmi_shminfo; @end example This structure is used to manipulate shared memory regions.