- memory parameter handling rewrite completed

- added BXPN_* symbols for parameter names (taken from old save/restore branch)
This commit is contained in:
Volker Ruppert 2006-02-17 22:27:38 +00:00
parent 6b2ab6aa92
commit a14b2a9720
4 changed files with 155 additions and 131 deletions

View File

@ -1,5 +1,5 @@
/////////////////////////////////////////////////////////////////////////
// $Id: bochs.h,v 1.172 2006-02-16 21:44:16 vruppert Exp $
// $Id: bochs.h,v 1.173 2006-02-17 22:27:38 vruppert Exp $
/////////////////////////////////////////////////////////////////////////
//
// Copyright (C) 2002 MandrakeSoft S.A.
@ -471,15 +471,6 @@ typedef struct {
bx_param_num_c *Oirq;
} bx_ata_options;
typedef struct {
bx_param_string_c *Opath;
bx_param_num_c *Oaddress;
} bx_rom_options;
typedef struct {
bx_param_string_c *Opath;
} bx_vgarom_options;
typedef struct {
bx_param_num_c *Onprocessors;
bx_param_num_c *Oncores;
@ -488,10 +479,6 @@ typedef struct {
bx_param_bool_c *Oreset_on_triple_fault;
} bx_cpu_options;
typedef struct {
bx_param_num_c *Osize;
} bx_mem_options;
typedef struct {
bx_param_bool_c *Oenabled;
bx_param_string_c *Ooutfile;
@ -584,12 +571,7 @@ typedef struct BOCHSAPI {
bx_usb_options usb[BX_N_USB_HUBS];
bx_pcislot_options pcislot[BX_N_PCI_SLOTS];
bx_pnic_options pnic;
bx_rom_options rom;
bx_vgarom_options vgarom;
bx_rom_options optrom[BX_N_OPTROM_IMAGES]; // Optional rom images
bx_rom_options optram[BX_N_OPTRAM_IMAGES]; // Optional ram images
bx_cpu_options cpu;
bx_mem_options memory;
bx_parport_options par[BX_N_PARALLEL_PORTS]; // parallel ports
bx_sb16_options sb16;
bx_param_enum_c *Obootdrive[3];

View File

@ -1,5 +1,5 @@
/////////////////////////////////////////////////////////////////////////
// $Id: config.cc,v 1.74 2006-02-16 21:44:16 vruppert Exp $
// $Id: config.cc,v 1.75 2006-02-17 22:27:38 vruppert Exp $
/////////////////////////////////////////////////////////////////////////
//
// Copyright (C) 2002 MandrakeSoft S.A.
@ -813,108 +813,111 @@ void bx_init_options ()
bx_list_c *optram = new bx_list_c (memory, "optram", "");
// memory options (ram & rom)
bx_options.memory.Osize = new bx_param_num_c (ram,
bx_param_num_c *ramsize = new bx_param_num_c(ram,
"size",
"Amount of RAM in megabytes",
1, 2048,
BX_DEFAULT_MEM_MEGS);
bx_options.memory.Osize->set_format ("Memory size in megabytes: %d");
bx_options.memory.Osize->set_ask_format ("Enter memory size (MB): [%d] ");
ramsize->set_format("Memory size in megabytes: %d");
ramsize->set_ask_format("Enter memory size (MB): [%d] ");
#if BX_WITH_WX
bx_options.memory.Osize->set_label ("Memory size (megabytes)");
bx_options.memory.Osize->set_options (bx_param_num_c::USE_SPIN_CONTROL);
ramsize->set_label("Memory size (megabytes)");
ramsize->set_options(bx_param_num_c::USE_SPIN_CONTROL);
#endif
bx_options.rom.Opath = new bx_param_filename_c (rom,
bx_param_filename_c *rompath = new bx_param_filename_c(rom,
"path",
"Pathname of ROM image to load",
"", BX_PATHNAME_LEN);
bx_options.rom.Opath->set_format ("Name of ROM BIOS image: %s");
rompath->set_format ("Name of ROM BIOS image: %s");
sprintf(name, "%s/BIOS-bochs-latest", get_builtin_variable("BXSHARE"));
bx_options.rom.Opath->set_initial_val (name);
bx_options.rom.Oaddress = new bx_param_num_c (rom,
rompath->set_initial_val(name);
bx_param_num_c *romaddr = new bx_param_num_c(rom,
"addr",
"The address at which the ROM image should be loaded",
0, BX_MAX_BIT32U,
0);
bx_options.rom.Oaddress->set_base (16);
romaddr->set_base(16);
#if BX_WITH_WX
bx_options.rom.Opath->set_label ("ROM BIOS image");
bx_options.rom.Oaddress->set_label ("ROM BIOS address");
bx_options.rom.Oaddress->set_format ("0x%05x");
rompath->set_label("ROM BIOS image");
romaddr->set_label("ROM BIOS address");
romaddr->set_format("0x%05x");
#else
bx_options.rom.Oaddress->set_format ("ROM BIOS address: 0x%05x");
romaddr->set_format("ROM BIOS address: 0x%05x");
#endif
bx_options.vgarom.Opath = new bx_param_filename_c (vgarom,
bx_param_filename_c *vgarompath = new bx_param_filename_c(vgarom,
"path",
"Pathname of VGA ROM image to load",
"", BX_PATHNAME_LEN);
bx_options.vgarom.Opath->set_format ("Name of VGA BIOS image: %s");
vgarompath->set_format("Name of VGA BIOS image: %s");
#if BX_WITH_WX
bx_options.vgarom.Opath->set_label ("VGA BIOS image");
vgarompath->set_label("VGA BIOS image");
#endif
sprintf(name, "%s/VGABIOS-lgpl-latest", get_builtin_variable("BXSHARE"));
bx_options.vgarom.Opath->set_initial_val (name);
vgarompath->set_initial_val(name);
bx_param_filename_c *optpath;
bx_param_num_c *optaddr;
for (i=0; i<BX_N_OPTROM_IMAGES; i++) {
sprintf (name, "%d", i+1);
bx_list_c *optnum1 = new bx_list_c (optrom, strdup(name), "");
sprintf (descr, "Pathname of optional ROM image #%d to load", i+1);
bx_options.optrom[i].Opath = new bx_param_filename_c (optnum1,
sprintf(name, "%d", i+1);
bx_list_c *optnum1 = new bx_list_c(optrom, strdup(name), "");
sprintf(descr, "Pathname of optional ROM image #%d to load", i+1);
optpath = new bx_param_filename_c(optnum1,
"path",
strdup(descr),
"", BX_PATHNAME_LEN);
sprintf (label, "Name of optional ROM image #%d", i+1);
strcat(label, " : %s");
bx_options.optrom[i].Opath->set_format (strdup(label));
optpath->set_format(strdup(label));
sprintf (descr, "The address at which the optional ROM image #%d should be loaded", i+1);
bx_options.optrom[i].Oaddress = new bx_param_num_c (optnum1,
optaddr = new bx_param_num_c(optnum1,
"addr",
strdup(descr),
0, BX_MAX_BIT32U,
0);
bx_options.optrom[i].Oaddress->set_base (16);
optaddr->set_base(16);
#if BX_WITH_WX
sprintf (label, "Optional ROM image #%d", i+1);
bx_options.optrom[i].Opath->set_label (strdup(label));
bx_options.optrom[i].Oaddress->set_label ("Address");
bx_options.optrom[i].Oaddress->set_format ("0x%05x");
optpath->set_label(strdup(label));
optaddr->set_label("Address");
optaddr->set_format("0x%05x");
#else
sprintf (label, "Optional ROM #%d address:", i+1);
strcat(label, " 0x%05x");
bx_options.optrom[i].Oaddress->set_format (strdup(label));
optaddr->set_format(strdup(label));
#endif
}
for (i=0; i<BX_N_OPTRAM_IMAGES; i++) {
sprintf (name, "%d", i+1);
bx_list_c *optnum2 = new bx_list_c (optram, strdup(name), "");
sprintf (descr, "Pathname of optional RAM image #%d to load", i+1);
bx_options.optram[i].Opath = new bx_param_filename_c (optnum2,
sprintf(name, "%d", i+1);
bx_list_c *optnum2 = new bx_list_c(optram, strdup(name), "");
sprintf(descr, "Pathname of optional RAM image #%d to load", i+1);
optpath = new bx_param_filename_c(optnum2,
"path",
strdup(descr),
"", BX_PATHNAME_LEN);
sprintf (label, "Name of optional RAM image #%d", i+1);
sprintf(label, "Name of optional RAM image #%d", i+1);
strcat(label, " : %s");
bx_options.optram[i].Opath->set_format (strdup(label));
optpath->set_format(strdup(label));
sprintf (name, "memory.optram.%d.address", i+1);
sprintf (descr, "The address at which the optional RAM image #%d should be loaded", i+1);
bx_options.optram[i].Oaddress = new bx_param_num_c (optnum2,
optaddr = new bx_param_num_c(optnum2,
"addr",
strdup(descr),
0, BX_MAX_BIT32U,
0);
bx_options.optram[i].Oaddress->set_base (16);
optaddr->set_base(16);
#if BX_WITH_WX
sprintf (label, "Optional RAM image #%d", i+1);
bx_options.optram[i].Opath->set_label (strdup(label));
bx_options.optram[i].Oaddress->set_label ("Address");
bx_options.optram[i].Oaddress->set_format ("0x%05x");
optpath->set_label(strdup(label));
optaddr->set_label("Address");
optaddr->set_format("0x%05x");
#else
sprintf (label, "Optional RAM #%d address:", i+1);
sprintf(label, "Optional RAM #%d address:", i+1);
strcat(label, " 0x%05x");
bx_options.optram[i].Oaddress->set_format (strdup(label));
optaddr->set_format(strdup(label));
#endif
}
memory->get_options()->set(bx_list_c::USE_TAB_WINDOW);
@ -924,30 +927,30 @@ void bx_init_options ()
optram->set_label("Optional RAM Images");
bx_param_c *memory_init_list[] = {
bx_options.memory.Osize,
bx_options.rom.Opath,
bx_options.rom.Oaddress,
bx_options.vgarom.Opath,
bx_options.optrom[0].Opath,
bx_options.optrom[0].Oaddress,
bx_options.optrom[1].Opath,
bx_options.optrom[1].Oaddress,
bx_options.optrom[2].Opath,
bx_options.optrom[2].Oaddress,
bx_options.optrom[3].Opath,
bx_options.optrom[3].Oaddress,
bx_options.optram[0].Opath,
bx_options.optram[0].Oaddress,
bx_options.optram[1].Opath,
bx_options.optram[1].Oaddress,
bx_options.optram[2].Opath,
bx_options.optram[2].Oaddress,
bx_options.optram[3].Opath,
bx_options.optram[3].Oaddress,
SIM->get_param(BXPN_MEM_SIZE),
SIM->get_param(BXPN_ROM_PATH),
SIM->get_param(BXPN_ROM_ADDRESS),
SIM->get_param(BXPN_VGA_ROM_PATH),
SIM->get_param(BXPN_OPTROM1_PATH),
SIM->get_param(BXPN_OPTROM1_ADDRESS),
SIM->get_param(BXPN_OPTROM2_PATH),
SIM->get_param(BXPN_OPTROM2_ADDRESS),
SIM->get_param(BXPN_OPTROM3_PATH),
SIM->get_param(BXPN_OPTROM3_ADDRESS),
SIM->get_param(BXPN_OPTROM4_PATH),
SIM->get_param(BXPN_OPTROM4_ADDRESS),
SIM->get_param(BXPN_OPTRAM1_PATH),
SIM->get_param(BXPN_OPTRAM1_ADDRESS),
SIM->get_param(BXPN_OPTRAM2_PATH),
SIM->get_param(BXPN_OPTRAM2_ADDRESS),
SIM->get_param(BXPN_OPTRAM3_PATH),
SIM->get_param(BXPN_OPTRAM3_ADDRESS),
SIM->get_param(BXPN_OPTRAM4_PATH),
SIM->get_param(BXPN_OPTRAM4_ADDRESS),
NULL
};
menu = new bx_list_c (BXP_MENU_MEMORY, "Bochs Memory Options", "memmenu", memory_init_list);
menu->get_options ()->set (menu->SHOW_PARENT);
menu = new bx_list_c(BXP_MENU_MEMORY, "Bochs Memory Options", "memmenu", memory_init_list);
menu->get_options()->set(menu->SHOW_PARENT);
// serial and parallel port options
@ -2694,74 +2697,80 @@ static Bit32s parse_line_formatted(char *context, int num_params, char *params[]
if (num_params != 2) {
PARSE_ERR(("%s: megs directive: wrong # args.", context));
}
SIM->get_param_num("memory.standard.ram.size")->set(atol(params[1]));
SIM->get_param_num(BXPN_MEM_SIZE)->set(atol(params[1]));
} else if (!strcmp(params[0], "romimage")) {
if ((num_params < 2) || (num_params > 3)) {
PARSE_ERR(("%s: romimage directive: wrong # args.", context));
}
if (!strncmp(params[1], "file=", 5)) {
SIM->get_param_string("memory.standard.rom.path")->set(&params[1][5]);
SIM->get_param_string(BXPN_ROM_PATH)->set(&params[1][5]);
} else {
PARSE_ERR(("%s: romimage directive malformed.", context));
}
if (num_params == 3) {
if (!strncmp(params[2], "address=", 8)) {
if ((params[2][8] == '0') && (params[2][9] == 'x'))
SIM->get_param_num("memory.standard.rom.addr")->set(strtoul (&params[2][8], NULL, 16));
SIM->get_param_num(BXPN_ROM_ADDRESS)->set(strtoul (&params[2][8], NULL, 16));
else
SIM->get_param_num("memory.standard.rom.addr")->set(strtoul (&params[2][8], NULL, 10));
SIM->get_param_num(BXPN_ROM_ADDRESS)->set(strtoul (&params[2][8], NULL, 10));
} else {
PARSE_ERR(("%s: romimage directive malformed.", context));
}
} else {
SIM->get_param_num("memory.standard.rom.addr")->set (0);
SIM->get_param_num(BXPN_ROM_ADDRESS)->set (0);
}
} else if (!strcmp(params[0], "vgaromimage")) {
if (num_params != 2) {
PARSE_ERR(("%s: vgaromimage directive: wrong # args.", context));
}
if (!strncmp(params[1], "file=", 5)) {
SIM->get_param_string("memory.standard.vgarom.path")->set(&params[1][5]);
SIM->get_param_string(BXPN_VGA_ROM_PATH)->set(&params[1][5]);
} else {
BX_INFO(("WARNING: syntax has changed, please use 'vgaromimage: file=...' now"));
SIM->get_param_string("memory.standard.vgarom.path")->set (params[1]);
SIM->get_param_string(BXPN_VGA_ROM_PATH)->set (params[1]);
}
} else if (!strncmp(params[0], "optromimage", 11)) {
int num = atoi(&params[0][11]);
char tmppath[80], tmpaddr[80];
if ((num < 1) || (num > BX_N_OPTROM_IMAGES)) {
PARSE_ERR(("%s: optromimage%d: not supported", context, num));
}
if (num_params != 3) {
PARSE_ERR(("%s: optromimage%d directive: wrong # args.", context, num));
}
sprintf(tmppath, "memory.optrom.%d.path", num);
sprintf(tmpaddr, "memory.optrom.%d.addr", num);
for (i=1; i<num_params; i++) {
if (!strncmp(params[i], "file=", 5)) {
bx_options.optrom[num-1].Opath->set (&params[i][5]);
SIM->get_param_string(tmppath)->set(&params[i][5]);
} else if (!strncmp(params[i], "address=", 8)) {
if ((params[i][8] == '0') && (params[2][9] == 'x'))
bx_options.optrom[num-1].Oaddress->set (strtoul (&params[i][8], NULL, 16));
SIM->get_param_num(tmpaddr)->set(strtoul (&params[i][8], NULL, 16));
else
bx_options.optrom[num-1].Oaddress->set (strtoul (&params[i][8], NULL, 10));
SIM->get_param_num(tmpaddr)->set(strtoul (&params[i][8], NULL, 10));
} else {
PARSE_ERR(("%s: optromimage%d directive malformed.", context, num));
}
}
} else if (!strncmp(params[0], "optramimage", 11)) {
int num = atoi(&params[0][11]);
char tmppath[80], tmpaddr[80];
if ((num < 1) || (num > BX_N_OPTRAM_IMAGES)) {
PARSE_ERR(("%s: ramimage%d: not supported", context, num));
}
if (num_params != 3) {
PARSE_ERR(("%s: ramimage%d directive: wrong # args.", context, num));
}
sprintf(tmppath, "memory.optram.%d.path", num);
sprintf(tmpaddr, "memory.optram.%d.addr", num);
for (i=1; i<num_params; i++) {
if (!strncmp(params[i], "file=", 5)) {
bx_options.optram[num-1].Opath->set (&params[i][5]);
SIM->get_param_string(tmppath)->set(&params[i][5]);
} else if (!strncmp(params[i], "address=", 8)) {
if ((params[i][8] == '0') && (params[2][9] == 'x'))
bx_options.optram[num-1].Oaddress->set (strtoul (&params[i][8], NULL, 16));
SIM->get_param_num(tmpaddr)->set(strtoul (&params[i][8], NULL, 16));
else
bx_options.optram[num-1].Oaddress->set (strtoul (&params[i][8], NULL, 10));
SIM->get_param_num(tmpaddr)->set(strtoul (&params[i][8], NULL, 10));
} else {
PARSE_ERR(("%s: optram%d directive malformed.", context, num));
}
@ -3619,6 +3628,7 @@ int bx_write_keyboard_options (FILE *fp, bx_keyboard_options *opt)
int bx_write_configuration (char *rc, int overwrite)
{
int i;
char *strptr, tmppath[80], tmpaddr[80];
BX_INFO (("write configuration to %s\n", rc));
// check if it exists. If so, only proceed if overwrite is set.
@ -3637,13 +3647,15 @@ int bx_write_configuration (char *rc, int overwrite)
fprintf (fp, ", options=\"%s\"\n", bx_options.Odisplaylib_options->getptr ());
else
fprintf (fp, "\n");
fprintf (fp, "megs: %d\n", bx_options.memory.Osize->get ());
if (strlen (bx_options.rom.Opath->getptr ()) > 0)
fprintf (fp, "romimage: file=\"%s\", address=0x%05x\n", bx_options.rom.Opath->getptr(), (unsigned int)bx_options.rom.Oaddress->get ());
fprintf (fp, "megs: %d\n", SIM->get_param_num(BXPN_MEM_SIZE)->get());
strptr = SIM->get_param_string(BXPN_ROM_PATH)->getptr();
if (strlen(strptr) > 0)
fprintf (fp, "romimage: file=\"%s\", address=0x%05x\n", strptr, (unsigned int)SIM->get_param_num(BXPN_ROM_ADDRESS)->get());
else
fprintf (fp, "# no romimage\n");
if (strlen (bx_options.vgarom.Opath->getptr ()) > 0)
fprintf (fp, "vgaromimage: file=\"%s\"\n", bx_options.vgarom.Opath->getptr ());
strptr = SIM->get_param_string(BXPN_VGA_ROM_PATH)->getptr();
if (strlen(strptr) > 0)
fprintf (fp, "vgaromimage: file=\"%s\"\n", strptr);
else
fprintf (fp, "# no vgaromimage\n");
fprintf (fp, "boot: %s", bx_options.Obootdrive[0]->get_choice(bx_options.Obootdrive[0]->get() - 1));
@ -3663,14 +3675,20 @@ int bx_write_configuration (char *rc, int overwrite)
bx_write_atadevice_options (fp, channel, 1, &bx_options.atadevice[channel][1]);
}
for (i=0; i<BX_N_OPTROM_IMAGES; i++) {
if (strlen (bx_options.optrom[i].Opath->getptr ()) > 0)
fprintf (fp, "optromimage%d: file=\"%s\", address=0x%05x\n", i+1, bx_options.optrom[i].Opath->getptr(),
(unsigned int)bx_options.optrom[i].Oaddress->get ());
sprintf(tmppath, "memory.optrom.%d.path", i+1);
sprintf(tmpaddr, "memory.optrom.%d.addr", i+1);
strptr = SIM->get_param_string(tmppath)->getptr();
if (strlen(strptr) > 0)
fprintf(fp, "optromimage%d: file=\"%s\", address=0x%05x\n", i+1, strptr,
(unsigned int)SIM->get_param_num(tmpaddr)->get());
}
for (i=0; i<BX_N_OPTRAM_IMAGES; i++) {
if (strlen (bx_options.optram[i].Opath->getptr ()) > 0)
fprintf (fp, "optramimage%d: file=\"%s\", address=0x%05x\n", i+1, bx_options.optram[i].Opath->getptr(),
(unsigned int)bx_options.optram[i].Oaddress->get ());
sprintf(tmppath, "memory.optram.%d.path", i+1);
sprintf(tmpaddr, "memory.optram.%d.addr", i+1);
strptr = SIM->get_param_string(tmppath)->getptr();
if (strlen(strptr) > 0)
fprintf(fp, "optramimage%d: file=\"%s\", address=0x%05x\n", i+1, strptr,
(unsigned int)SIM->get_param_num(tmpaddr)->get());
}
// parallel ports
for (i=0; i<BX_N_PARALLEL_PORTS; i++) {

View File

@ -1,5 +1,5 @@
/////////////////////////////////////////////////////////////////////////
// $Id: siminterface.h,v 1.155 2006-02-16 21:44:17 vruppert Exp $
// $Id: siminterface.h,v 1.156 2006-02-17 22:27:38 vruppert Exp $
/////////////////////////////////////////////////////////////////////////
//
// Intro to siminterface by Bryce Denney:
@ -81,7 +81,6 @@
// between the siminterface and the CI. Search for "event structures" below.
//////////////////////////////////////////////////////
// BX_USE_TEXTCONFIG should be set to 1 when the text mode configuration interface
// is compiled in. This gives each type of parameter a text_print and text_ask
@ -117,6 +116,30 @@ typedef enum {
BXT_LIST
} bx_objtype;
// define parameter path names. These names give the location in the
// parameter tree where each can be found. The names correspond to
// the old BXP_* enum values, which have been eliminated.
#define BXPN_MEM_SIZE "memory.standard.ram.size"
#define BXPN_ROM_PATH "memory.standard.rom.path"
#define BXPN_ROM_ADDRESS "memory.standard.rom.addr"
#define BXPN_VGA_ROM_PATH "memory.standard.vgarom.path"
#define BXPN_OPTROM1_PATH "memory.optrom.1.path"
#define BXPN_OPTROM1_ADDRESS "memory.optrom.1.addr"
#define BXPN_OPTROM2_PATH "memory.optrom.2.path"
#define BXPN_OPTROM2_ADDRESS "memory.optrom.2.addr"
#define BXPN_OPTROM3_PATH "memory.optrom.3.path"
#define BXPN_OPTROM3_ADDRESS "memory.optrom.3.addr"
#define BXPN_OPTROM4_PATH "memory.optrom.4.path"
#define BXPN_OPTROM4_ADDRESS "memory.optrom.4.addr"
#define BXPN_OPTRAM1_PATH "memory.optram.1.path"
#define BXPN_OPTRAM1_ADDRESS "memory.optram.1.addr"
#define BXPN_OPTRAM2_PATH "memory.optram.2.path"
#define BXPN_OPTRAM2_ADDRESS "memory.optram.2.addr"
#define BXPN_OPTRAM3_PATH "memory.optram.3.path"
#define BXPN_OPTRAM3_ADDRESS "memory.optram.3.addr"
#define BXPN_OPTRAM4_PATH "memory.optram.4.path"
#define BXPN_OPTRAM4_ADDRESS "memory.optram.4.addr"
// list if parameter id values. The actual values are not important;
// it's only important that they all be different from each other.
typedef enum {

View File

@ -1,5 +1,5 @@
/////////////////////////////////////////////////////////////////////////
// $Id: main.cc,v 1.310 2006-02-16 21:44:16 vruppert Exp $
// $Id: main.cc,v 1.311 2006-02-17 22:27:38 vruppert Exp $
/////////////////////////////////////////////////////////////////////////
//
// Copyright (C) 2002 MandrakeSoft S.A.
@ -891,12 +891,12 @@ int bx_init_hardware()
BX_SUPPORT_CLGD54XX?"cirrus":""));
// Check if there is a romimage
if (strcmp(bx_options.rom.Opath->getptr(),"") == 0) {
if (strcmp(SIM->get_param_string(BXPN_ROM_PATH)->getptr(),"") == 0) {
BX_ERROR(("No romimage to load. Is your bochsrc file loaded/valid ?"));
}
// set up memory and CPU objects
bx_param_num_c *bxp_memsize = SIM->get_param_num("memory.standard.ram.size");
bx_param_num_c *bxp_memsize = SIM->get_param_num(BXPN_MEM_SIZE);
Bit32u memSize = bxp_memsize->get() * 1024*1024;
#if BX_SUPPORT_ICACHE
@ -906,28 +906,29 @@ int bx_init_hardware()
BX_MEM(0)->init_memory(memSize);
// First load the BIOS and VGABIOS
BX_MEM(0)->load_ROM(bx_options.rom.Opath->getptr(), bx_options.rom.Oaddress->get(), 0);
BX_MEM(0)->load_ROM(bx_options.vgarom.Opath->getptr(), 0xc0000, 1);
BX_MEM(0)->load_ROM(SIM->get_param_string(BXPN_ROM_PATH)->getptr(),
SIM->get_param_num(BXPN_ROM_ADDRESS)->get(), 0);
BX_MEM(0)->load_ROM(SIM->get_param_string(BXPN_VGA_ROM_PATH)->getptr(), 0xc0000, 1);
// Then load the optional ROM images
if (strcmp(bx_options.optrom[0].Opath->getptr(), "") !=0)
BX_MEM(0)->load_ROM(bx_options.optrom[0].Opath->getptr(), bx_options.optrom[0].Oaddress->get(), 2);
if (strcmp(bx_options.optrom[1].Opath->getptr(), "") !=0 )
BX_MEM(0)->load_ROM(bx_options.optrom[1].Opath->getptr(), bx_options.optrom[1].Oaddress->get(), 2);
if (strcmp(bx_options.optrom[2].Opath->getptr(), "") !=0)
BX_MEM(0)->load_ROM(bx_options.optrom[2].Opath->getptr(), bx_options.optrom[2].Oaddress->get(), 2);
if (strcmp(bx_options.optrom[3].Opath->getptr(), "") !=0)
BX_MEM(0)->load_ROM(bx_options.optrom[3].Opath->getptr(), bx_options.optrom[3].Oaddress->get(), 2);
if (strcmp(SIM->get_param_string(BXPN_OPTROM1_PATH)->getptr(), "") !=0)
BX_MEM(0)->load_ROM(SIM->get_param_string(BXPN_OPTROM1_PATH)->getptr(), SIM->get_param_num(BXPN_OPTROM1_ADDRESS)->get(), 2);
if (strcmp(SIM->get_param_string(BXPN_OPTROM2_PATH)->getptr(), "") !=0)
BX_MEM(0)->load_ROM(SIM->get_param_string(BXPN_OPTROM2_PATH)->getptr(), SIM->get_param_num(BXPN_OPTROM2_ADDRESS)->get(), 2);
if (strcmp(SIM->get_param_string(BXPN_OPTROM3_PATH)->getptr(), "") !=0)
BX_MEM(0)->load_ROM(SIM->get_param_string(BXPN_OPTROM3_PATH)->getptr(), SIM->get_param_num(BXPN_OPTROM3_ADDRESS)->get(), 2);
if (strcmp(SIM->get_param_string(BXPN_OPTROM4_PATH)->getptr(), "") !=0)
BX_MEM(0)->load_ROM(SIM->get_param_string(BXPN_OPTROM4_PATH)->getptr(), SIM->get_param_num(BXPN_OPTROM4_ADDRESS)->get(), 2);
// Then load the optional RAM images
if (strcmp(bx_options.optram[0].Opath->getptr(), "") !=0)
BX_MEM(0)->load_RAM(bx_options.optram[0].Opath->getptr(), bx_options.optram[0].Oaddress->get(), 2);
if (strcmp(bx_options.optram[1].Opath->getptr(), "") !=0)
BX_MEM(0)->load_RAM(bx_options.optram[1].Opath->getptr(), bx_options.optram[1].Oaddress->get(), 2);
if (strcmp(bx_options.optram[2].Opath->getptr(), "") !=0)
BX_MEM(0)->load_RAM(bx_options.optram[2].Opath->getptr(), bx_options.optram[2].Oaddress->get(), 2);
if (strcmp(bx_options.optram[3].Opath->getptr(), "") !=0)
BX_MEM(0)->load_RAM(bx_options.optram[3].Opath->getptr(), bx_options.optram[3].Oaddress->get(), 2);
if (strcmp(SIM->get_param_string(BXPN_OPTRAM1_PATH)->getptr(), "") !=0)
BX_MEM(0)->load_RAM(SIM->get_param_string(BXPN_OPTRAM1_PATH)->getptr(), SIM->get_param_num(BXPN_OPTRAM1_ADDRESS)->get(), 2);
if (strcmp(SIM->get_param_string(BXPN_OPTRAM2_PATH)->getptr(), "") !=0)
BX_MEM(0)->load_RAM(SIM->get_param_string(BXPN_OPTRAM2_PATH)->getptr(), SIM->get_param_num(BXPN_OPTRAM2_ADDRESS)->get(), 2);
if (strcmp(SIM->get_param_string(BXPN_OPTRAM3_PATH)->getptr(), "") !=0)
BX_MEM(0)->load_RAM(SIM->get_param_string(BXPN_OPTRAM3_PATH)->getptr(), SIM->get_param_num(BXPN_OPTRAM3_ADDRESS)->get(), 2);
if (strcmp(SIM->get_param_string(BXPN_OPTRAM4_PATH)->getptr(), "") !=0)
BX_MEM(0)->load_RAM(SIM->get_param_string(BXPN_OPTRAM4_PATH)->getptr(), SIM->get_param_num(BXPN_OPTRAM4_ADDRESS)->get(), 2);
#if BX_SUPPORT_SMP == 0
BX_CPU(0)->initialize(BX_MEM(0));