summaryrefslogtreecommitdiff
path: root/dos/getsetsl.c
diff options
context:
space:
mode:
Diffstat (limited to 'dos/getsetsl.c')
-rw-r--r--dos/getsetsl.c17
1 files changed, 17 insertions, 0 deletions
diff --git a/dos/getsetsl.c b/dos/getsetsl.c
index fadef438..5260a2a1 100644
--- a/dos/getsetsl.c
+++ b/dos/getsetsl.c
@@ -123,3 +123,20 @@ void memcpy_from_sl(void *dst, const void *src, size_t len)
: "r" (seg)
: "memory");
}
+
+void memset_sl(void *dst, int c, size_t len)
+{
+ uint16_t seg;
+ uint16_t off;
+
+ seg = ds() + ((size_t)dst >> 4);
+ off = (size_t)dst & 15;
+
+ asm volatile("pushw %%es ; "
+ "movw %3,%%es ; "
+ "rep ; stosb ; "
+ "popw %%es"
+ : "+D" (off), "+c" (len)
+ : "a" (c), "r" (seg)
+ : "memory");
+}