X-Git-Url: http://git.mutantstargoat.com/user/nuclear/?p=dosdemo;a=blobdiff_plain;f=src%2Fdos%2Fcdpmi.h;h=cdfd2f7e9e1b91c1cfbf300a7f10614618ae6d49;hp=9ce64e19c00545675a1ce356ce262382a1e23fd9;hb=e306e700b04607927f659948590c2c2ed234157e;hpb=5f36e95f19ad8d7a5a1dd546ffeb54ce95d51749 diff --git a/src/dos/cdpmi.h b/src/dos/cdpmi.h index 9ce64e1..cdfd2f7 100644 --- a/src/dos/cdpmi.h +++ b/src/dos/cdpmi.h @@ -7,7 +7,7 @@ #include "inttypes.h" -struct dpmi_real_regs { +struct dpmi_regs { uint32_t edi, esi, ebp; uint32_t reserved; uint32_t ebx, edx, ecx, eax; @@ -18,27 +18,60 @@ struct dpmi_real_regs { uint16_t dpmi_alloc(unsigned int par, uint16_t *sel); void dpmi_free(uint16_t sel); +void dpmi_int(int inum, struct dpmi_regs *regs); +void *dpmi_mmap(uint32_t phys_addr, unsigned int size); +void dpmi_munmap(void *addr); #ifdef __WATCOMC__ #pragma aux dpmi_alloc = \ - "mov eax, 0x100" \ + "mov ax, 0x100" \ "int 0x31" \ "mov [edi], dx" \ - value[ax] parm[ebx][edi]; + value[ax] \ + parm[ebx][edi]; #pragma aux dpmi_free = \ - "mov eax, 0x101" \ + "mov ax, 0x101" \ + "int 0x31" \ + parm[dx] \ + modify[ax]; + +#pragma aux dpmi_int = \ + "mov ax, 0x300" \ + "xor ecx, ecx" \ + "int 0x31" \ + parm[ebx][edi] \ + modify[ax ecx]; + +#pragma aux dpmi_mmap = \ + "mov ax, 0x800" \ + "mov cx, bx" \ + "shr ebx, 16" \ + "mov di, si" \ + "shr esi, 16" \ "int 0x31" \ - parm[dx]; + "jnc mmap_skip_err" \ + "xor bx, bx" \ + "xor cx, cx" \ + "mmap_skip_err:" \ + "mov ax, bx" \ + "shl eax, 16" \ + "mov ax, cx" \ + value[eax] \ + parm[ebx][esi] \ + modify[cx di]; -void dpmi_real_int(int inum, struct dpmi_real_regs *regs); +#pragma aux dpmi_munmap = \ + "mov ax, 0x801" \ + "mov cx, bx" \ + "shr ebx, 16" \ + "int 0x31" \ + parm[ebx] \ + modify[ax]; #endif /* __WATCOMC__ */ #ifdef __DJGPP__ -#define dpmi_real_int(inum, regs) __dpmi_int((inum), (__dpmi_regs*)(regs)) +#define dpmi_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_ */