diff --git a/src/dos/dos_memory.cpp b/src/dos/dos_memory.cpp index ec4758a6..25aae77b 100644 --- a/src/dos/dos_memory.cpp +++ b/src/dos/dos_memory.cpp @@ -91,6 +91,7 @@ bool DOS_AllocateMemory(Bit16u * segment,Bit16u * blocks) { Bit16u umb_start=dos_infoblock.GetStartOfUMBChain(); if (umb_start==UMB_START_SEG) { + /* start with UMBs if requested (bits 7 or 6 set) */ if (mem_strat&0xc0) mcb_segment=umb_start; } else if (umb_start!=0xffff) LOG(LOG_DOSMISC,LOG_ERROR)("Corrupt UMB chain: %x",umb_start); @@ -99,58 +100,99 @@ bool DOS_AllocateMemory(Bit16u * segment,Bit16u * blocks) { DOS_MCB psp_mcb(dos.psp()-1); char psp_name[9]; psp_mcb.GetFileName(psp_name); - bool stop=false; - while(!stop) { + Bit16u found_seg=0,found_seg_size=0; + for (;;) { mcb.SetPt(mcb_segment); if (mcb.GetPSPSeg()==0) { /* Check for enough free memory in current block */ Bit16u block_size=mcb.GetSize(); if (block_size<(*blocks)) { if (bigsize