aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJavier <dev.git@javispedro.com>2022-12-18 21:18:45 +0100
committerJavier <dev.git@javispedro.com>2022-12-18 21:18:45 +0100
commitae74cf99ea1513b7bd03e3a39fa49d3b715f225e (patch)
tree3d293aa224f825fa0c3c19d4e19676f4db14b5fd
parent9a33ea807b463e3ef344e4237eedee4f618d2788 (diff)
downloadvbados-ae74cf99ea1513b7bd03e3a39fa49d3b715f225e.tar.gz
vbados-ae74cf99ea1513b7bd03e3a39fa49d3b715f225e.zip
use pause opcode when waiting for vbox result
-rw-r--r--utils.h9
-rw-r--r--vboxhgcm.h1
2 files changed, 7 insertions, 3 deletions
diff --git a/utils.h b/utils.h
index e207b44..715294e 100644
--- a/utils.h
+++ b/utils.h
@@ -33,14 +33,17 @@
static inline void breakpoint(void);
#pragma aux breakpoint = 0xcd 0x03;
+static inline void pause(void);
+#pragma aux pause = 0xf3 0x90 modify exact [];
+
static inline __segment get_cs(void);
-#pragma aux get_cs = "mov ax, cs" value [ax] modify exact [];
+#pragma aux get_cs = "mov ax, cs" value [ax] modify exact [] nomemory;
static inline __segment get_ds(void);
-#pragma aux get_ds = "mov ax, ds" value [ax] modify exact [];
+#pragma aux get_ds = "mov ax, ds" value [ax] modify exact [] nomemory;
static inline __segment get_ss(void);
-#pragma aux get_ss = "mov ax, ss" value [ax] modify exact [];
+#pragma aux get_ss = "mov ax, ss" value [ax] modify exact [] nomemory;
/** Converts a far pointer into equivalent linear address.
* Note that under protected mode linear != physical (for that, need VDS). */
diff --git a/vboxhgcm.h b/vboxhgcm.h
index bb95eb3..72a7481 100644
--- a/vboxhgcm.h
+++ b/vboxhgcm.h
@@ -32,6 +32,7 @@ static void vbox_hgcm_wait(VMMDevHGCMRequestHeader __far * req)
while (!(*req_flags & VBOX_HGCM_REQ_DONE)) {
// TODO yield guest CPU somehow?
+ pause();
}
}