1
0
Fork 0

Add beta2 patch: Move dos tables to c800 to make easier umb management.

Imported-from: https://svn.code.sf.net/p/dosbox/code-0/dosbox/trunk@2730
This commit is contained in:
Peter Veenstra 2007-01-08 20:10:34 +00:00
parent d78d597f92
commit 24b3c2a1b8
5 changed files with 16 additions and 36 deletions

View file

@ -16,7 +16,7 @@
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
/* $Id: dos_inc.h,v 1.63 2007-01-08 19:45:37 qbix79 Exp $ */
/* $Id: dos_inc.h,v 1.64 2007-01-08 20:10:34 qbix79 Exp $ */
#ifndef DOSBOX_DOS_INC_H
#define DOSBOX_DOS_INC_H
@ -158,7 +158,7 @@ void DOS_FreeProcessMemory(Bit16u pspseg);
Bit16u DOS_GetMemory(Bit16u pages);
bool DOS_SetMemAllocStrategy(Bit16u strat);
Bit16u DOS_GetMemAllocStrategy(void);
void DOS_BuildUMBChain(const char* use_umbs,bool ems_active);
void DOS_BuildUMBChain(bool umb_active,bool ems_active);
bool DOS_LinkUMBsToMemChain(Bit16u linkstate);
/* FCB stuff */

View file

@ -303,10 +303,11 @@ bool DOS_FreeMemory(Bit16u segment) {
}
void DOS_BuildUMBChain(const char* use_umbs,bool ems_active) {
if ((strcmp(use_umbs,"false")!=0) && (machine!=MCH_TANDY)) {
Bit16u first_umb_seg=0xc800;
Bit16u first_umb_size=0x1000;
void DOS_BuildUMBChain(bool umb_active,bool ems_active) {
if (umb_active && (machine!=MCH_TANDY)) {
Bit16u first_umb_seg = 0xd000;
Bit16u first_umb_size = 0x2000;
if(ems_active || (machine == MCH_PCJR)) first_umb_size = 0x1000;
dos_infoblock.SetStartOfUMBChain(UMB_START_SEG);
dos_infoblock.SetUMBChainState(0); // UMBs not linked yet
@ -333,27 +334,6 @@ void DOS_BuildUMBChain(const char* use_umbs,bool ems_active) {
mcb.SetSize(first_umb_seg-cover_mcb-1);
mcb.SetFileName("SC ");
if (!ems_active && (strcmp(use_umbs,"max")==0) && (machine!=MCH_PCJR)) {
Bit16u ems_umb_seg=0xe000;
Bit16u ems_umb_size=0x1000;
/* Continue UMB-chain */
umb_mcb.SetSize(first_umb_size-2);
umb_mcb.SetType(0x4d);
DOS_MCB umb2_mcb(ems_umb_seg);
umb2_mcb.SetPSPSeg(0); // currently free
umb2_mcb.SetSize(ems_umb_size-1);
umb2_mcb.SetType(0x5a);
/* A system MCB has to take out the space between the previous and this UMB */
cover_mcb=(Bit16u)(first_umb_seg+umb_mcb.GetSize()+1);
mcb.SetPt(cover_mcb);
mcb.SetType(0x4d);
mcb.SetPSPSeg(0x0008);
mcb.SetSize(ems_umb_seg-cover_mcb-1);
mcb.SetFileName("SC ");
}
} else {
dos_infoblock.SetStartOfUMBChain(0xffff);
dos_infoblock.SetUMBChainState(0);

View file

@ -16,7 +16,7 @@
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
/* $Id: dos_tables.cpp,v 1.24 2007-01-08 19:45:39 qbix79 Exp $ */
/* $Id: dos_tables.cpp,v 1.25 2007-01-08 20:10:34 qbix79 Exp $ */
#include "dosbox.h"
#include "mem.h"
@ -43,7 +43,7 @@ static Bitu call_casemap;
static Bit16u dos_memseg;
Bit16u DOS_GetMemory(Bit16u pages) {
if (pages+dos_memseg>=0xe000) {
if (pages+dos_memseg>=0xd000) {
E_Exit("DOS:Not enough memory for internal tables");
}
Bit16u page=dos_memseg;
@ -73,7 +73,7 @@ static Bit8u country_info[0x22] = {
};
void DOS_SetupTables(void) {
dos_memseg=0xd800;
dos_memseg=0xc800;
Bit16u seg,seg2;Bitu i;
dos.tables.mediaid=RealMake(DOS_GetMemory(4),0);
dos.tables.tempdta=RealMake(DOS_GetMemory(4),0);

View file

@ -16,7 +16,7 @@
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
/* $Id: dosbox.cpp,v 1.105 2007-01-08 19:45:38 qbix79 Exp $ */
/* $Id: dosbox.cpp,v 1.106 2007-01-08 20:10:34 qbix79 Exp $ */
#include <stdlib.h>
#include <stdarg.h>
@ -437,13 +437,13 @@ void DOSBOX_Init(void) {
secprop->Add_bool("xms",true);
secprop->AddInitFunction(&EMS_Init,true);//done
secprop->Add_bool("ems",true);
secprop->Add_string("umb","true");
secprop->Add_bool("umb","true");
secprop->AddInitFunction(&DOS_KeyboardLayout_Init,true);
secprop->Add_string("keyboardlayout", "none");
MSG_Add("DOS_CONFIGFILE_HELP",
"xms -- Enable XMS support.\n"
"ems -- Enable EMS support.\n"
"umb -- Enable UMB support (false,true,max).\n"
"umb -- Enable UMB support.\n"
"keyboardlayout -- Language code of the keyboard layout (or none).\n"
);
// Mscdex

View file

@ -16,7 +16,7 @@
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
/* $Id: xms.cpp,v 1.44 2007-01-08 19:45:41 qbix79 Exp $ */
/* $Id: xms.cpp,v 1.45 2007-01-08 20:10:34 qbix79 Exp $ */
#include <stdlib.h>
#include <string.h>
@ -436,8 +436,8 @@ public:
xms_handles[0].free = false;
/* Set up UMB chain */
umb_available=strcmp(section->Get_string("umb"),"false")!=0;
DOS_BuildUMBChain(section->Get_string("umb"),section->Get_bool("ems"));
umb_available=section->Get_bool("umb");
DOS_BuildUMBChain(section->Get_bool("umb"),section->Get_bool("ems"));
}
~XMS(){