summaryrefslogtreecommitdiff
path: root/sim/m68hc11/dv-m68hc11.c
diff options
context:
space:
mode:
authorStephane Carrez <stcarrez@nerim.fr>2002-08-13 08:38:09 +0000
committerStephane Carrez <stcarrez@nerim.fr>2002-08-13 08:38:09 +0000
commit8b1a0bff5c35b29fda1e48f0c5a27ada0dc5312d (patch)
tree2a78c14580b985ac2221bb0bb4c9c8edcfa6402e /sim/m68hc11/dv-m68hc11.c
parent3d9b3a1cf51924a95785cffd25e05158394a6811 (diff)
downloadgdb-8b1a0bff5c35b29fda1e48f0c5a27ada0dc5312d.tar.gz
* dv-m68hc11.c (m68hc11cpu_io_read_buffer): Translate memory
bank window to some virtual address to read from extended memory. (m68hc11cpu_io_write_buffer): Likewise for writing. (attach_m68hc11_regs): When use_bank property is defined, attached to the 68HC12 16K memory bank window. * interp.c (sim_hw_configure): Create memory region for banked memory.
Diffstat (limited to 'sim/m68hc11/dv-m68hc11.c')
-rw-r--r--sim/m68hc11/dv-m68hc11.c23
1 files changed, 23 insertions, 0 deletions
diff --git a/sim/m68hc11/dv-m68hc11.c b/sim/m68hc11/dv-m68hc11.c
index 49c33e318fc..669a045357a 100644
--- a/sim/m68hc11/dv-m68hc11.c
+++ b/sim/m68hc11/dv-m68hc11.c
@@ -321,6 +321,13 @@ attach_m68hc11_regs (struct hw *me,
cpu->cpu_frequency = 8*1000*1000;
}
+ if (hw_find_property (me, "use_bank") != NULL)
+ hw_attach_address (hw_parent (me), 0,
+ exec_map,
+ 0x08000,
+ 0x04000,
+ me);
+
cpu_mode = "expanded";
if (hw_find_property (me, "mode") != NULL)
cpu_mode = hw_find_string_property (me, "mode");
@@ -836,6 +843,14 @@ m68hc11cpu_io_read_buffer (struct hw *me,
sd = hw_system (me);
cpu = STATE_CPU (sd, 0);
+ if (base >= 0x8000 && base < 0xc000)
+ {
+ address_word virt_addr = phys_to_virt (cpu, base);
+ if (virt_addr != base)
+ return sim_core_read_buffer (sd, cpu, space, dest,
+ virt_addr, nr_bytes);
+ }
+
/* Handle reads for the sub-devices. */
base -= controller->attach_address;
result = sim_core_read_buffer (sd, cpu,
@@ -1075,6 +1090,14 @@ m68hc11cpu_io_write_buffer (struct hw *me,
sd = hw_system (me);
cpu = STATE_CPU (sd, 0);
+
+ if (base >= 0x8000 && base < 0xc000)
+ {
+ address_word virt_addr = phys_to_virt (cpu, base);
+ if (virt_addr != base)
+ return sim_core_write_buffer (sd, cpu, space, source,
+ virt_addr, nr_bytes);
+ }
base -= controller->attach_address;
result = sim_core_write_buffer (sd, cpu,
io_map, source, base, nr_bytes);