#ifdef __DJGPP__
#include <dpmi.h>
-#endif
+#include <sys/nearptr.h>
+
+#define virt_to_phys(v) ((v) + __djgpp_base_address)
+#define phys_to_virt(p) ((p) - __djgpp_base_address)
+
+#else /* not djgpp (basically watcom) */
+
+#define virt_to_phys(v) (v)
+#define phys_to_virt(p) (p)
+
+#endif /* __DJGPP__ */
#include "inttypes.h"
+#include "util.h"
+#pragma pack (push, 1)
struct dpmi_regs {
uint32_t edi, esi, ebp;
uint32_t reserved;
uint16_t flags;
uint16_t es, ds, fs, gs;
uint16_t ip, cs, sp, ss;
-};
+} PACKED;
+#pragma pack (pop)
uint16_t dpmi_alloc(unsigned int par, uint16_t *sel);
void dpmi_free(uint16_t sel);
"mov ax, 0x100" \
"int 0x31" \
"mov [edi], dx" \
+ "jnc alloc_skip_err" \
+ "xor ax, ax" \
+ "alloc_skip_err:" \
value[ax] \
- parm[ebx][edi];
+ parm[ebx][edi] \
+ modify[dx];
#pragma aux dpmi_free = \
"mov ax, 0x101" \
"mov ax, cx" \
value[eax] \
parm[ebx][esi] \
- modify[cx di];
+ modify[bx cx di esi];
#pragma aux dpmi_munmap = \
"mov ax, 0x801" \
"shr ebx, 16" \
"int 0x31" \
parm[ebx] \
- modify[ax];
+ modify[ax cx ebx];
#endif /* __WATCOMC__ */
#ifdef __DJGPP__