From 8439de78e90471c2aa7d434da43618a68d741f31 Mon Sep 17 00:00:00 2001 From: Jeremy Penner Date: Fri, 1 Sep 2023 19:10:52 -0400 Subject: [PATCH] Implement segalloc for minijort --- minijort.c | 9 +++++++++ minijort.exe | Bin 79411 -> 81642 bytes minijort.prj | Bin 3743 -> 3743 bytes 3 files changed, 9 insertions(+) diff --git a/minijort.c b/minijort.c index 3241e15..a388370 100755 --- a/minijort.c +++ b/minijort.c @@ -791,6 +791,14 @@ void f_rand() { PUSHI(rand()); } +void f_segalloc() { + void far* ptr = farmalloc(0x10010UL); + unsigned long linearaddr = ((unsigned long)FP_SEG(ptr) << 4) + + ((unsigned long)FP_OFF(ptr)); + int segment = ((linearaddr & 0x000ffff0UL) >> 4); + PUSHI(segment); +} + void f_init() { CDEF("[", f_compileoff); f_immediate(); CDEF("]", f_compileon); @@ -900,6 +908,7 @@ void f_init() { CDEF("chdir", f_chdir); CDEF("memmove", f_memmove); CDEF("rand", f_rand); + CDEF("segalloc", f_segalloc); PCONST("$DOCREATE", f_docreate); PCONST("$DOVAR", f_dovar); PCONST("$DODEFERRED", f_dodeferred); diff --git a/minijort.exe b/minijort.exe index a23729f6a04d9b2b0ac4075c8b14e1b727cc2c09..d90fa0669386d13132bdee24cf7d95b0a98c27ff 100755 GIT binary patch delta 14002 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 delta 11832 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 Yb2Q?6nY`ez`(bdfnn9;|2)ks96LnA zC%5q$sQ;NO9L~vb2}rUqC~(Ax{r~UGz!vu(B<$8Iz+@E;^O`7Un-3rK!)B%d1q DRF)%}