Added a memory write boundary protection in the ram watch window to prevent users from writing into ROM memory area.

This commit is contained in:
Matthew Budd 2020-05-23 16:28:43 -04:00
parent c46d3e2a9d
commit 40379a32dc
1 changed files with 44 additions and 41 deletions

View File

@ -949,53 +949,56 @@ static void ramWatch_cell_edited_cb (GtkCellRendererText * cell,
case 1: case 1:
case 2: case 2:
{ {
writefunc wfunc; if ( (rw->addr >= 0) && (rw->addr < 0x8000) )
if (rw->size == 2)
{ {
if (rw->type) writefunc wfunc;
if (rw->size == 2)
{ {
rw->val.u16 = if (rw->type)
strtol (new_text, NULL, 0); {
rw->val.u16 =
strtol (new_text, NULL, 0);
}
else
{
rw->val.i16 =
strtol (new_text, NULL, 0);
}
wfunc = GetWriteHandler (rw->addr);
if (wfunc)
{
wfunc ((uint32) rw->addr,
(uint8) (rw->val.u16 & 0x00ff));
}
wfunc = GetWriteHandler (rw->addr + 1);
if (wfunc)
{
wfunc ((uint32) rw->addr + 1,
(uint8) ((rw->val.
u16 & 0xff00) >> 8));
}
} }
else else
{ {
rw->val.i16 = if (rw->type)
strtol (new_text, NULL, 0); {
} rw->val.u8 = strtol (new_text, NULL, 0);
wfunc = GetWriteHandler (rw->addr); }
else
{
rw->val.i8 = strtol (new_text, NULL, 0);
}
wfunc = GetWriteHandler (rw->addr);
if (wfunc) if (wfunc)
{ {
wfunc ((uint32) rw->addr, wfunc ((uint32) rw->addr,
(uint8) (rw->val.u16 & 0x00ff)); (uint8) rw->val.u8);
} }
wfunc = GetWriteHandler (rw->addr + 1);
if (wfunc)
{
wfunc ((uint32) rw->addr + 1,
(uint8) ((rw->val.
u16 & 0xff00) >> 8));
}
}
else
{
if (rw->type)
{
rw->val.u8 = strtol (new_text, NULL, 0);
}
else
{
rw->val.i8 = strtol (new_text, NULL, 0);
}
wfunc = GetWriteHandler (rw->addr);
if (wfunc)
{
wfunc ((uint32) rw->addr,
(uint8) rw->val.u8);
} }
} }
} }