diff --git a/src/dos/dos_execute.cpp b/src/dos/dos_execute.cpp index b582a37e..80020c12 100644 --- a/src/dos/dos_execute.cpp +++ b/src/dos/dos_execute.cpp @@ -191,28 +191,24 @@ static void SetupPSP(Bit16u pspseg,Bit16u memsize,Bit16u envseg) { dos.dta=RealMake(pspseg,0x80); } -static void SetupCMDLine(Bit16u pspseg,ParamBlock * block) +static void SetupCMDLine(Bit16u pspseg,DOS_ParamBlock & block) { DOS_PSP psp(pspseg); // if cmdtail==0 it will inited as empty in SetCommandTail - psp.SetCommandTail(block->exec.cmdtail); + psp.SetCommandTail(block.data.exec.cmdtail); } -bool DOS_Execute(char * name,ParamBlock * _block,Bit8u flags) { +bool DOS_Execute(char * name,PhysPt block_pt,Bit8u flags) { EXE_Header head;Bitu i; Bit16u fhandle;Bit16u len;Bit32u pos; Bit16u pspseg,envseg,loadseg,memsize,readsize; HostPt loadaddress;RealPt relocpt; - Bitu headersize,imagesize; + DOS_ParamBlock block(block_pt); + block.LoadData(); if (flags!=LOADNGO && flags!=OVERLAY) { E_Exit("DOS:Not supported execute mode %d for file %s",flags,name); } - - // Parameter block may be overwritten on load, so save these values ! - ParamBlock block; - memcpy(&block,_block,sizeof(ParamBlock)); - /* Check for EXE or COM File */ bool iscom=false; if (!DOS_OpenFile(name,OPEN_READ,&fhandle)) return false; @@ -221,15 +217,22 @@ bool DOS_Execute(char * name,ParamBlock * _block,Bit8u flags) { DOS_CloseFile(fhandle); return false; } + /* Convert the header to correct endian, i hope this works */ + HostPt endian=(HostPt)&head; + for (i=0;i