X-Git-Url: http://git.mutantstargoat.com/user/nuclear/?p=dos_sbtest;a=blobdiff_plain;f=src%2Fdpmi.h;fp=src%2Fdpmi.h;h=5f068233e60bfff72c4e26e67ddfcbd63d85f581;hp=0000000000000000000000000000000000000000;hb=07c19444f4f2a55abf97d181ab62aeaa51033c62;hpb=01a545fde6dc446fe626382f8bba50b9b7c1a35b diff --git a/src/dpmi.h b/src/dpmi.h new file mode 100644 index 0000000..5f06823 --- /dev/null +++ b/src/dpmi.h @@ -0,0 +1,34 @@ +#ifndef DPMI_H_ +#define DPMI_H_ + +#include "inttypes.h" + +struct dpmi_real_regs { + uint32_t edi, esi, ebp; + uint32_t reserved; + uint32_t ebx, edx, ecx, eax; + uint16_t flags; + uint16_t es, ds, fs, gs; + uint16_t ip, cs, sp, ss; +}; + +uint16_t dpmi_alloc(unsigned int par, uint16_t *sel); +void dpmi_free(uint16_t sel); + +#pragma aux dpmi_alloc = \ + "mov eax, 0x100" \ + "int 0x31" \ + "mov [edi], dx" \ + value[ax] parm[ebx][edi]; + +#pragma aux dpmi_free = \ + "mov eax, 0x101" \ + "int 0x31" \ + parm[dx]; + +void dpmi_real_int(int inum, struct dpmi_real_regs *regs); + +void *dpmi_mmap(uint32_t phys_addr, unsigned int size); +void dpmi_munmap(void *addr); + +#endif /* DPMI_H_ */