aboutsummaryrefslogtreecommitdiffstats
path: root/src/loader.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/loader.c')
-rw-r--r--src/loader.c19
1 files changed, 19 insertions, 0 deletions
diff --git a/src/loader.c b/src/loader.c
index 1d8225f..7c6c839 100644
--- a/src/loader.c
+++ b/src/loader.c
@@ -666,6 +666,20 @@ uint16_t create_PSP(const char *cmdline, const char *environment, int env_size,
dosPSP[7] = 0xFE; // this jumps to 0xC0, where an
dosPSP[8] = 0x1D; // INT 21h is patched.
dosPSP[9] = 0xF0;
+ dosPSP[10] = 0x22; // Handler for INT 22h
+ dosPSP[11] = 0x00;
+ dosPSP[12] = 0x00;
+ dosPSP[13] = 0x00;
+ dosPSP[14] = 0x23; // Handler for INT 23h
+ dosPSP[15] = 0x00;
+ dosPSP[16] = 0x00;
+ dosPSP[17] = 0x00;
+ dosPSP[18] = 0x24; // Handler for INT 24h
+ dosPSP[19] = 0x00;
+ dosPSP[20] = 0x00;
+ dosPSP[21] = 0x00;
+ dosPSP[22] = 0xFE; // 16: Parent PSP, use special value of FFFE
+ dosPSP[23] = 0xFF; // to signal no parent DOS process
dosPSP[44] = 0xFF & env_seg; // 2C: environment segment
dosPSP[45] = 0xFF & (env_seg >> 8); //
dosPSP[80] = 0xCD; // 50: INT 21h / RETF
@@ -698,6 +712,11 @@ unsigned get_current_PSP(void)
return current_PSP;
}
+void set_current_PSP(unsigned psp_seg)
+{
+ current_PSP = psp_seg;
+}
+
static int g16(uint8_t *buf)
{
return buf[0] + (buf[1] << 8);
Un proyecto texto-plano.xyz