From 2b837cf6fbfb8b12421f33ca6fb43c3c776b7c65 Mon Sep 17 00:00:00 2001 From: ripsaw8080 Date: Wed, 22 Jun 2016 16:29:13 +0000 Subject: [PATCH] Correct stack pointer for COM format programs when there is less than 64K of memory available. Fixes Corncob 3D issue reported in bug #443. Imported-from: https://svn.code.sf.net/p/dosbox/code-0/dosbox/trunk@3988 --- src/dos/dos_execute.cpp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/dos/dos_execute.cpp b/src/dos/dos_execute.cpp index 80faeb82..4b27cab0 100644 --- a/src/dos/dos_execute.cpp +++ b/src/dos/dos_execute.cpp @@ -419,8 +419,11 @@ bool DOS_Execute(char * name,PhysPt block_pt,Bit8u flags) { RealPt csip,sssp; if (iscom) { csip=RealMake(pspseg,0x100); - sssp=RealMake(pspseg,0xfffe); - mem_writew(PhysMake(pspseg,0xfffe),0); + if (memsize<0x1000) { + LOG(LOG_EXEC,LOG_WARN)("COM format with only %X paragraphs available",memsize); + sssp=RealMake(pspseg,(memsize<<4)-2); + } else sssp=RealMake(pspseg,0xfffe); + mem_writew(Real2Phys(sssp),0); } else { csip=RealMake(loadseg+head.initCS,head.initIP); sssp=RealMake(loadseg+head.initSS,head.initSP);