- partial sync with BRANCH_SAVE_RESTORE_3 (hardware save/restore not present yet)
* fixed minimum limit of signed variable types * don't set the initial value of shadow parameters * fixed range check for shadow parameters * added support for setting the value base (decimal/hex) of numeric shadow parameters. The text format hex number is now initialized in the constructor * added missing newline after filename for binary data * fixed data size of 64-bit shadow parameters * fixed save/restore output format of numeric parameters (signed/unsigned/64-bit) * cpu/init.cc: fixed macro name and added missing #undef line
This commit is contained in:
parent
eb2104d0de
commit
52c4666465
@ -532,19 +532,19 @@ typedef bx_address bx_lin_address;
|
||||
#define BX_MAX_BIT64U ( (Bit64u) -1 )
|
||||
#define BX_MIN_BIT64U ( 0 )
|
||||
#define BX_MAX_BIT64S ( ((Bit64u) -1) >> 1 )
|
||||
#define BX_MIN_BIT64S ( -(((Bit64u) -1) >> 1) )
|
||||
#define BX_MIN_BIT64S ( (Bit64s)-(((Bit64u) -1) >> 1) )
|
||||
#define BX_MAX_BIT32U ( (Bit32u) -1 )
|
||||
#define BX_MIN_BIT32U ( 0 )
|
||||
#define BX_MAX_BIT32S ( ((Bit32u) -1) >> 1 )
|
||||
#define BX_MIN_BIT32S ( -(((Bit32u) -1) >> 1) )
|
||||
#define BX_MIN_BIT32S ( (Bit32s)-(((Bit32u) -1) >> 1) )
|
||||
#define BX_MAX_BIT16U ( (Bit16u) -1 )
|
||||
#define BX_MIN_BIT16U ( 0 )
|
||||
#define BX_MAX_BIT16S ( ((Bit16u) -1) >> 1 )
|
||||
#define BX_MIN_BIT16S ( -(((Bit16u) -1) >> 1) )
|
||||
#define BX_MIN_BIT16S ( (Bit16s)-(((Bit16u) -1) >> 1) )
|
||||
#define BX_MAX_BIT8U ( (Bit8u) -1 )
|
||||
#define BX_MIN_BIT8U ( 0 )
|
||||
#define BX_MAX_BIT8S ( ((Bit8u) -1) >> 1 )
|
||||
#define BX_MIN_BIT8S ( -(((Bit8u) -1) >> 1) )
|
||||
#define BX_MIN_BIT8S ( (Bit8s)-(((Bit8u) -1) >> 1) )
|
||||
|
||||
|
||||
// create an unsigned integer type that is the same size as a pointer.
|
||||
|
@ -1,5 +1,5 @@
|
||||
/////////////////////////////////////////////////////////////////////////
|
||||
// $Id: init.cc,v 1.98 2006-04-16 10:12:31 vruppert Exp $
|
||||
// $Id: init.cc,v 1.99 2006-04-22 18:14:54 vruppert Exp $
|
||||
/////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Copyright (C) 2001 MandrakeSoft S.A.
|
||||
@ -345,7 +345,8 @@ void BX_CPU_C::initialize(BX_MEM_C *addrspace)
|
||||
DEFPARAM_SEG_REG(TR);
|
||||
DEFPARAM_GLOBAL_SEG_REG(GDTR, gdtr);
|
||||
DEFPARAM_GLOBAL_SEG_REG(IDTR, idtr);
|
||||
#undef DEFPARAM_SEGREG
|
||||
#undef DEFPARAM_SEG_REG
|
||||
#undef DEFPARAM_GLOBAL_SEG_REG
|
||||
|
||||
#if BX_SUPPORT_X86_64==0
|
||||
param = new bx_shadow_num_c(list, "EFLAGS", "EFLAGS",
|
||||
@ -379,7 +380,7 @@ void BX_CPU_C::initialize(BX_MEM_C *addrspace)
|
||||
param = new bx_shadow_num_c(
|
||||
list,
|
||||
"IOPL", "IOPL",
|
||||
&eflags.val32,
|
||||
&eflags.val32, 10,
|
||||
12, 13);
|
||||
param->set_range(0, 3);
|
||||
#if BX_SUPPORT_X86_64==0
|
||||
|
@ -1,5 +1,5 @@
|
||||
/////////////////////////////////////////////////////////////////////////
|
||||
// $Id: siminterface.cc,v 1.143 2006-04-16 10:12:31 vruppert Exp $
|
||||
// $Id: siminterface.cc,v 1.144 2006-04-22 18:14:55 vruppert Exp $
|
||||
/////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// See siminterface.h for description of the siminterface concept.
|
||||
@ -1086,9 +1086,18 @@ void bx_real_sim_c::save_sr_param(FILE *fp, bx_param_c *node, const char *sr_pat
|
||||
switch (node->get_type()) {
|
||||
case BXT_PARAM_NUM:
|
||||
if (((bx_param_num_c*)node)->get_base() == 10) {
|
||||
fprintf(fp, "%d\n", ((bx_param_num_c*)node)->get());
|
||||
if (((bx_param_num_c*)node)->get_min() >= BX_MIN_BIT64U) {
|
||||
if (((bx_param_num_c*)node)->get_max() > BX_MAX_BIT32U) {
|
||||
fprintf(fp, FMT_LL"u\n", ((bx_param_num_c*)node)->get());
|
||||
} else {
|
||||
fprintf(fp, "%u\n", ((bx_param_num_c*)node)->get());
|
||||
}
|
||||
} else {
|
||||
fprintf(fp, "%d\n", ((bx_param_num_c*)node)->get());
|
||||
}
|
||||
} else {
|
||||
fprintf(fp, "0x%x\n", ((bx_param_num_c*)node)->get());
|
||||
fprintf(fp, node->get_format(), ((bx_param_num_c*)node)->get());
|
||||
fprintf(fp, "\n");
|
||||
}
|
||||
break;
|
||||
case BXT_PARAM_BOOL:
|
||||
@ -1115,7 +1124,7 @@ void bx_real_sim_c::save_sr_param(FILE *fp, bx_param_c *node, const char *sr_pat
|
||||
}
|
||||
break;
|
||||
case BXT_PARAM_DATA:
|
||||
fprintf(fp, "%s.%s", node->get_parent()->get_name(), node->get_name());
|
||||
fprintf(fp, "%s.%s\n", node->get_parent()->get_name(), node->get_name());
|
||||
sprintf(tmpstr, "%s/%s.%s", sr_path, node->get_parent()->get_name(), node->get_name());
|
||||
fp2 = fopen(tmpstr, "wb");
|
||||
if (fp != NULL) {
|
||||
@ -1197,7 +1206,8 @@ bx_param_num_c::bx_param_num_c(bx_param_c *parent,
|
||||
char *name,
|
||||
char *label,
|
||||
char *description,
|
||||
Bit64s min, Bit64s max, Bit64s initial_val)
|
||||
Bit64s min, Bit64s max, Bit64s initial_val,
|
||||
bx_bool is_shadow)
|
||||
: bx_param_c(SIM->gen_param_id(), name, description)
|
||||
{
|
||||
set_type(BXT_PARAM_NUM);
|
||||
@ -1209,10 +1219,13 @@ bx_param_num_c::bx_param_num_c(bx_param_c *parent,
|
||||
this->handler = NULL;
|
||||
this->enable_handler = NULL;
|
||||
this->base = default_base;
|
||||
this->is_shadow = is_shadow;
|
||||
// dependent_list must be initialized before the set(),
|
||||
// because set calls update_dependents().
|
||||
dependent_list = NULL;
|
||||
set(initial_val);
|
||||
if (!is_shadow) {
|
||||
set(initial_val);
|
||||
}
|
||||
if (parent) {
|
||||
BX_ASSERT(parent->get_type() == BXT_LIST);
|
||||
this->parent = (bx_list_c *)parent;
|
||||
@ -1313,14 +1326,19 @@ bx_shadow_num_c::bx_shadow_num_c(bx_param_c *parent,
|
||||
char *name,
|
||||
char *description,
|
||||
Bit64s *ptr_to_real_val,
|
||||
int base,
|
||||
Bit8u highbit,
|
||||
Bit8u lowbit)
|
||||
: bx_param_num_c(parent, name, description, NULL, BX_MIN_BIT64S, BX_MAX_BIT64S, *ptr_to_real_val)
|
||||
: bx_param_num_c(parent, name, description, NULL, BX_MIN_BIT64S, BX_MAX_BIT64S, *ptr_to_real_val, 1)
|
||||
{
|
||||
this->varsize = 16;
|
||||
this->varsize = 64;
|
||||
this->lowbit = lowbit;
|
||||
this->mask = (1 << (highbit - lowbit)) - 1;
|
||||
val.p64bit = ptr_to_real_val;
|
||||
if (base == 16) {
|
||||
this->base = base;
|
||||
this->text_format = "0x%x";
|
||||
}
|
||||
}
|
||||
|
||||
// Unsigned 64 bit
|
||||
@ -1328,14 +1346,19 @@ bx_shadow_num_c::bx_shadow_num_c(bx_param_c *parent,
|
||||
char *name,
|
||||
char *label,
|
||||
Bit64u *ptr_to_real_val,
|
||||
int base,
|
||||
Bit8u highbit,
|
||||
Bit8u lowbit)
|
||||
: bx_param_num_c(parent, name, label, NULL, BX_MIN_BIT64U, BX_MAX_BIT64U, *ptr_to_real_val)
|
||||
: bx_param_num_c(parent, name, label, NULL, BX_MIN_BIT64U, BX_MAX_BIT64U, *ptr_to_real_val, 1)
|
||||
{
|
||||
this->varsize = 16;
|
||||
this->varsize = 64;
|
||||
this->lowbit = lowbit;
|
||||
this->mask = (1 << (highbit - lowbit)) - 1;
|
||||
val.p64bit = (Bit64s*) ptr_to_real_val;
|
||||
if (base == 16) {
|
||||
this->base = base;
|
||||
this->text_format = "0x%x";
|
||||
}
|
||||
}
|
||||
|
||||
// Signed 32 bit
|
||||
@ -1343,14 +1366,19 @@ bx_shadow_num_c::bx_shadow_num_c(bx_param_c *parent,
|
||||
char *name,
|
||||
char *label,
|
||||
Bit32s *ptr_to_real_val,
|
||||
int base,
|
||||
Bit8u highbit,
|
||||
Bit8u lowbit)
|
||||
: bx_param_num_c(parent, name, label, NULL, BX_MIN_BIT32S, BX_MAX_BIT32S, *ptr_to_real_val)
|
||||
: bx_param_num_c(parent, name, label, NULL, BX_MIN_BIT32S, BX_MAX_BIT32S, *ptr_to_real_val, 1)
|
||||
{
|
||||
this->varsize = 16;
|
||||
this->lowbit = lowbit;
|
||||
this->mask = (1 << (highbit - lowbit)) - 1;
|
||||
val.p32bit = ptr_to_real_val;
|
||||
if (base == 16) {
|
||||
this->base = base;
|
||||
this->text_format = "0x%08x";
|
||||
}
|
||||
}
|
||||
|
||||
// Unsigned 32 bit
|
||||
@ -1358,14 +1386,19 @@ bx_shadow_num_c::bx_shadow_num_c(bx_param_c *parent,
|
||||
char *name,
|
||||
char *label,
|
||||
Bit32u *ptr_to_real_val,
|
||||
int base,
|
||||
Bit8u highbit,
|
||||
Bit8u lowbit)
|
||||
: bx_param_num_c(parent, name, label, NULL, BX_MIN_BIT32U, BX_MAX_BIT32U, *ptr_to_real_val)
|
||||
: bx_param_num_c(parent, name, label, NULL, BX_MIN_BIT32U, BX_MAX_BIT32U, *ptr_to_real_val, 1)
|
||||
{
|
||||
this->varsize = 32;
|
||||
this->lowbit = lowbit;
|
||||
this->mask = (1 << (highbit - lowbit)) - 1;
|
||||
val.p32bit = (Bit32s*) ptr_to_real_val;
|
||||
if (base == 16) {
|
||||
this->base = base;
|
||||
this->text_format = "0x%08x";
|
||||
}
|
||||
}
|
||||
|
||||
// Signed 16 bit
|
||||
@ -1373,14 +1406,19 @@ bx_shadow_num_c::bx_shadow_num_c(bx_param_c *parent,
|
||||
char *name,
|
||||
char *label,
|
||||
Bit16s *ptr_to_real_val,
|
||||
int base,
|
||||
Bit8u highbit,
|
||||
Bit8u lowbit)
|
||||
: bx_param_num_c(parent, name, label, NULL, BX_MIN_BIT16S, BX_MAX_BIT16S, *ptr_to_real_val)
|
||||
: bx_param_num_c(parent, name, label, NULL, BX_MIN_BIT16S, BX_MAX_BIT16S, *ptr_to_real_val, 1)
|
||||
{
|
||||
this->varsize = 16;
|
||||
this->lowbit = lowbit;
|
||||
this->mask = (1 << (highbit - lowbit)) - 1;
|
||||
val.p16bit = ptr_to_real_val;
|
||||
if (base == 16) {
|
||||
this->base = base;
|
||||
this->text_format = "0x%04x";
|
||||
}
|
||||
}
|
||||
|
||||
// Unsigned 16 bit
|
||||
@ -1388,14 +1426,19 @@ bx_shadow_num_c::bx_shadow_num_c(bx_param_c *parent,
|
||||
char *name,
|
||||
char *label,
|
||||
Bit16u *ptr_to_real_val,
|
||||
int base,
|
||||
Bit8u highbit,
|
||||
Bit8u lowbit)
|
||||
: bx_param_num_c(parent, name, label, NULL, BX_MIN_BIT16U, BX_MAX_BIT16U, *ptr_to_real_val)
|
||||
: bx_param_num_c(parent, name, label, NULL, BX_MIN_BIT16U, BX_MAX_BIT16U, *ptr_to_real_val, 1)
|
||||
{
|
||||
this->varsize = 16;
|
||||
this->lowbit = lowbit;
|
||||
this->mask = (1 << (highbit - lowbit)) - 1;
|
||||
val.p16bit = (Bit16s*) ptr_to_real_val;
|
||||
if (base == 16) {
|
||||
this->base = base;
|
||||
this->text_format = "0x%04x";
|
||||
}
|
||||
}
|
||||
|
||||
// Signed 8 bit
|
||||
@ -1403,14 +1446,19 @@ bx_shadow_num_c::bx_shadow_num_c(bx_param_c *parent,
|
||||
char *name,
|
||||
char *label,
|
||||
Bit8s *ptr_to_real_val,
|
||||
int base,
|
||||
Bit8u highbit,
|
||||
Bit8u lowbit)
|
||||
: bx_param_num_c(parent, name, label, NULL, BX_MIN_BIT8S, BX_MAX_BIT8S, *ptr_to_real_val)
|
||||
: bx_param_num_c(parent, name, label, NULL, BX_MIN_BIT8S, BX_MAX_BIT8S, *ptr_to_real_val, 1)
|
||||
{
|
||||
this->varsize = 16;
|
||||
this->lowbit = lowbit;
|
||||
this->mask = (1 << (highbit - lowbit)) - 1;
|
||||
val.p8bit = ptr_to_real_val;
|
||||
if (base == 16) {
|
||||
this->base = base;
|
||||
this->text_format = "0x%02x";
|
||||
}
|
||||
}
|
||||
|
||||
// Unsigned 8 bit
|
||||
@ -1418,14 +1466,19 @@ bx_shadow_num_c::bx_shadow_num_c(bx_param_c *parent,
|
||||
char *name,
|
||||
char *label,
|
||||
Bit8u *ptr_to_real_val,
|
||||
int base,
|
||||
Bit8u highbit,
|
||||
Bit8u lowbit)
|
||||
: bx_param_num_c(parent, name, label, NULL, BX_MIN_BIT8U, BX_MAX_BIT8U, *ptr_to_real_val)
|
||||
: bx_param_num_c(parent, name, label, NULL, BX_MIN_BIT8U, BX_MAX_BIT8U, *ptr_to_real_val, 1)
|
||||
{
|
||||
this->varsize = 8;
|
||||
this->lowbit = lowbit;
|
||||
this->mask = (1 << (highbit - lowbit)) - 1;
|
||||
val.p8bit = (Bit8s*) ptr_to_real_val;
|
||||
if (base == 16) {
|
||||
this->base = base;
|
||||
this->text_format = "0x%02x";
|
||||
}
|
||||
}
|
||||
|
||||
Bit64s bx_shadow_num_c::get64() {
|
||||
@ -1450,7 +1503,7 @@ Bit64s bx_shadow_num_c::get64() {
|
||||
void bx_shadow_num_c::set(Bit64s newval)
|
||||
{
|
||||
Bit64u tmp = 0;
|
||||
if ((newval < min || newval > max) && (Bit64u)max != BX_MAX_BIT64U)
|
||||
if (((newval < min) || (newval > max)) && (min != BX_MIN_BIT64S) && ((Bit64u)max != BX_MAX_BIT64U))
|
||||
BX_PANIC (("numerical parameter %s was set to " FMT_LL "d, which is out of range " FMT_LL "d to " FMT_LL "d", get_name (), newval, min, max));
|
||||
switch (varsize) {
|
||||
case 8:
|
||||
|
@ -1,5 +1,5 @@
|
||||
/////////////////////////////////////////////////////////////////////////
|
||||
// $Id: siminterface.h,v 1.187 2006-04-16 10:12:31 vruppert Exp $
|
||||
// $Id: siminterface.h,v 1.188 2006-04-22 18:14:55 vruppert Exp $
|
||||
/////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Intro to siminterface by Bryce Denney:
|
||||
@ -654,6 +654,7 @@ protected:
|
||||
param_enable_handler enable_handler;
|
||||
int base;
|
||||
Bit32u options;
|
||||
bx_bool is_shadow;
|
||||
public:
|
||||
enum {
|
||||
// When a bx_param_num_c is displayed in dialog, USE_SPIN_CONTROL controls
|
||||
@ -664,7 +665,8 @@ public:
|
||||
char *name,
|
||||
char *label,
|
||||
char *description,
|
||||
Bit64s min, Bit64s max, Bit64s initial_val);
|
||||
Bit64s min, Bit64s max, Bit64s initial_val,
|
||||
bx_bool is_shadow = 0);
|
||||
virtual void reset();
|
||||
void set_handler(param_event_handler handler);
|
||||
void set_enable_handler(param_enable_handler handler);
|
||||
@ -704,48 +706,56 @@ public:
|
||||
char *name,
|
||||
char *label,
|
||||
Bit64s *ptr_to_real_val,
|
||||
int base = 10,
|
||||
Bit8u highbit = 63,
|
||||
Bit8u lowbit = 0);
|
||||
bx_shadow_num_c(bx_param_c *parent,
|
||||
char *name,
|
||||
char *label,
|
||||
Bit64u *ptr_to_real_val,
|
||||
int base = 10,
|
||||
Bit8u highbit = 63,
|
||||
Bit8u lowbit = 0);
|
||||
bx_shadow_num_c(bx_param_c *parent,
|
||||
char *name,
|
||||
char *label,
|
||||
Bit32s *ptr_to_real_val,
|
||||
int base = 10,
|
||||
Bit8u highbit = 31,
|
||||
Bit8u lowbit = 0);
|
||||
bx_shadow_num_c(bx_param_c *parent,
|
||||
char *name,
|
||||
char *label,
|
||||
Bit32u *ptr_to_real_val,
|
||||
int base = 10,
|
||||
Bit8u highbit = 31,
|
||||
Bit8u lowbit = 0);
|
||||
bx_shadow_num_c(bx_param_c *parent,
|
||||
char *name,
|
||||
char *label,
|
||||
Bit16s *ptr_to_real_val,
|
||||
int base = 10,
|
||||
Bit8u highbit = 15,
|
||||
Bit8u lowbit = 0);
|
||||
bx_shadow_num_c(bx_param_c *parent,
|
||||
char *name,
|
||||
char *label,
|
||||
Bit16u *ptr_to_real_val,
|
||||
int base = 10,
|
||||
Bit8u highbit = 15,
|
||||
Bit8u lowbit = 0);
|
||||
bx_shadow_num_c(bx_param_c *parent,
|
||||
char *name,
|
||||
char *label,
|
||||
Bit8s *ptr_to_real_val,
|
||||
int base = 10,
|
||||
Bit8u highbit = 7,
|
||||
Bit8u lowbit = 0);
|
||||
bx_shadow_num_c(bx_param_c *parent,
|
||||
char *name,
|
||||
char *label,
|
||||
Bit8u *ptr_to_real_val,
|
||||
int base = 10,
|
||||
Bit8u highbit = 7,
|
||||
Bit8u lowbit = 0);
|
||||
virtual Bit64s get64();
|
||||
|
Loading…
x
Reference in New Issue
Block a user