added missing "modify" declarations in cdpmi.h inline assembly blocks
[dosdemo] / src / dos / cdpmi.h
index cdfd2f7..92bc5b3 100644 (file)
@@ -6,7 +6,9 @@
 #endif
 
 #include "inttypes.h"
+#include "util.h"
 
+#pragma pack (push, 1)
 struct dpmi_regs {
        uint32_t edi, esi, ebp;
        uint32_t reserved;
@@ -14,7 +16,8 @@ struct dpmi_regs {
        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);
@@ -27,8 +30,12 @@ void dpmi_munmap(void *addr);
                "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" \
@@ -59,7 +66,7 @@ void dpmi_munmap(void *addr);
                "mov ax, cx" \
                value[eax] \
                parm[ebx][esi] \
-               modify[cx di];
+               modify[bx cx di esi];
 
 #pragma aux dpmi_munmap = \
                "mov ax, 0x801" \
@@ -67,7 +74,7 @@ void dpmi_munmap(void *addr);
                "shr ebx, 16" \
                "int 0x31" \
                parm[ebx] \
-               modify[ax];
+               modify[ax cx ebx];
 #endif /* __WATCOMC__ */
 
 #ifdef __DJGPP__