From 5a4c1e320a5148a5859cf38c21a0cbf2cea2088c Mon Sep 17 00:00:00 2001 From: Ulf Wohlers Date: Fri, 8 Nov 2002 14:13:31 +0000 Subject: [PATCH] Added mode "load" in dos_execute Imported-from: https://svn.code.sf.net/p/dosbox/code-0/dosbox/trunk@489 --- src/dos/dos_execute.cpp | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/src/dos/dos_execute.cpp b/src/dos/dos_execute.cpp index bb3c6232..56414bd7 100644 --- a/src/dos/dos_execute.cpp +++ b/src/dos/dos_execute.cpp @@ -208,7 +208,7 @@ bool DOS_Execute(char * name,PhysPt block_pt,Bit8u flags) { Bitu headersize,imagesize; DOS_ParamBlock block(block_pt); block.LoadData(); - if (flags!=LOADNGO && flags!=OVERLAY) { + if (flags!=LOADNGO && flags!=OVERLAY && flags!=LOAD) { E_Exit("DOS:Not supported execute mode %d for file %s",flags,name); } /* Check for EXE or COM File */ @@ -302,6 +302,20 @@ bool DOS_Execute(char * name,PhysPt block_pt,Bit8u flags) { csip=RealMake(loadseg+head.initCS,head.initIP); sssp=RealMake(loadseg+head.initSS,head.initSP); } + + if (flags==LOAD) { + DOS_PSP callpsp(dos.psp); + /* Save the SS:SP on the PSP of calling program */ + callpsp.SetStack(RealMakeSeg(ss,reg_sp)); + /* Switch the psp's */ + dos.psp=pspseg; + + block.exec.initsssp = sssp; + block.exec.initcsip = csip; + block.SaveData(); + return true; + } + if (flags==LOADNGO) { /* Get Caller's program CS:IP of the stack and set termination address to that */ RealSetVec(0x22,RealMake(mem_readw(SegPhys(ss)+reg_sp+2),mem_readw(SegPhys(ss)+reg_sp)));