From a94ef4eddc78de38a8817e2c909bc8bde077a120 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20Strohh=C3=A4cker?= Date: Sat, 6 Sep 2008 14:47:15 +0000 Subject: [PATCH] move first shell's psp/environment into low dos memory, uses complete MCBs for them (gold aztecs doesn't like it otherwise) Imported-from: https://svn.code.sf.net/p/dosbox/code-0/dosbox/trunk@3216 --- include/dos_inc.h | 5 +++-- src/shell/shell.cpp | 20 +++++++++++++------- 2 files changed, 16 insertions(+), 9 deletions(-) diff --git a/include/dos_inc.h b/include/dos_inc.h index 9ea928f2..f3c6b833 100644 --- a/include/dos_inc.h +++ b/include/dos_inc.h @@ -16,7 +16,7 @@ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ -/* $Id: dos_inc.h,v 1.75 2008-08-29 19:27:04 c2woody Exp $ */ +/* $Id: dos_inc.h,v 1.76 2008-09-06 14:47:02 c2woody Exp $ */ #ifndef DOSBOX_DOS_INC_H #define DOSBOX_DOS_INC_H @@ -85,7 +85,8 @@ enum { RETURN_EXIT=0,RETURN_CTRLC=1,RETURN_ABORT=2,RETURN_TSR=3}; #define DOS_SDA_SEG 0xb2 // dos swappable area #define DOS_SDA_OFS 0 #define DOS_CDS_SEG 0x108 -#define DOS_MEM_START 0x118 //First Segment that DOS can use +#define DOS_FIRST_SHELL 0x118 +#define DOS_MEM_START 0x158 //First Segment that DOS can use #define DOS_PRIVATE_SEGMENT 0xc800 #define DOS_PRIVATE_SEGMENT_END 0xd000 diff --git a/src/shell/shell.cpp b/src/shell/shell.cpp index 1122e462..d7032b92 100644 --- a/src/shell/shell.cpp +++ b/src/shell/shell.cpp @@ -16,7 +16,7 @@ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ -/* $Id: shell.cpp,v 1.92 2008-08-11 12:52:36 qbix79 Exp $ */ +/* $Id: shell.cpp,v 1.93 2008-09-06 14:47:15 c2woody Exp $ */ #include #include @@ -572,8 +572,8 @@ void SHELL_Init() { PROGRAMS_MakeFile("COMMAND.COM",SHELL_ProgramStart); /* Now call up the shell for the first time */ - Bit16u psp_seg=DOS_GetMemory(16+3)+1; - Bit16u env_seg=DOS_GetMemory(1+(4096/16))+1; + Bit16u psp_seg=DOS_FIRST_SHELL; + Bit16u env_seg=DOS_FIRST_SHELL+19; //DOS_GetMemory(1+(4096/16))+1; Bit16u stack_seg=DOS_GetMemory(2048/16); SegSet16(ss,stack_seg); reg_sp=2046; @@ -586,11 +586,17 @@ void SHELL_Init() { /* Set up int 23 to "int 20" in the psp. Fixes what.exe */ real_writed(0,0x23*4,((Bit32u)psp_seg<<16)); - /* Setup MCB and the environment */ + /* Setup MCBs */ + DOS_MCB pspmcb((Bit16u)(psp_seg-1)); + pspmcb.SetPSPSeg(psp_seg); // MCB of the command shell psp + pspmcb.SetSize(0x10+2); + pspmcb.SetType(0x4d); DOS_MCB envmcb((Bit16u)(env_seg-1)); - envmcb.SetPSPSeg(psp_seg); - envmcb.SetSize(4096/16); + envmcb.SetPSPSeg(psp_seg); // MCB of the command shell environment + envmcb.SetSize(0x28); + envmcb.SetType(0x4d); + /* Setup environment */ PhysPt env_write=PhysMake(env_seg,0); MEM_BlockWrite(env_write,path_string,strlen(path_string)+1); env_write+=strlen(path_string)+1; @@ -626,8 +632,8 @@ void SHELL_Init() { tail.count=strlen(init_line); strcpy(tail.buffer,init_line); MEM_BlockWrite(PhysMake(psp_seg,128),&tail,128); + /* Setup internal DOS Variables */ - dos.dta(RealMake(psp_seg,0x80)); dos.psp(psp_seg);