X-Git-Url: http://git.mutantstargoat.com/user/nuclear/?a=blobdiff_plain;f=src%2Fdos%2Fcdpmi.h;fp=src%2Fdos%2Fcdpmi.h;h=9ce64e19c00545675a1ce356ce262382a1e23fd9;hb=0165ec15f868a16a70b56ada2d42db0cb69ea193;hp=0000000000000000000000000000000000000000;hpb=a1f76b7a26c675e16cb78fecc9b6a1c0fc9c05c3;p=dosdemo diff --git a/src/dos/cdpmi.h b/src/dos/cdpmi.h new file mode 100644 index 0000000..9ce64e1 --- /dev/null +++ b/src/dos/cdpmi.h @@ -0,0 +1,44 @@ +#ifndef DPMI_H_ +#define DPMI_H_ + +#ifdef __DJGPP__ +#include +#endif + +#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); + +#ifdef __WATCOMC__ +#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); +#endif /* __WATCOMC__ */ + +#ifdef __DJGPP__ +#define dpmi_real_int(inum, regs) __dpmi_int((inum), (__dpmi_regs*)(regs)) +#endif + +void *dpmi_mmap(uint32_t phys_addr, unsigned int size); +void dpmi_munmap(void *addr); + +#endif /* DPMI_H_ */