diff options
author | Richard Henderson <rth@twiddle.net> | 2010-05-07 09:52:51 -0700 |
---|---|---|
committer | Blue Swirl <blauwirbel@gmail.com> | 2010-05-07 16:58:38 +0000 |
commit | 3cab721d0e01422337d14250f66b6362eb573aa2 (patch) | |
tree | f5134ce2a93dd289cad50bcbb669d0576ed2b183 /exec.c | |
parent | 4cbd40cec0e5b54856bad2ddcc714ca8be350029 (diff) |
Fill in unassigned mem read/write callbacks.
Implement the "functions may be omitted with NULL pointer"
interface mentioned in the function block comment by transforming
NULL entries in the read/write arrays into calls to the
unassigned_mem family of functions.
Signed-off-by: Richard Henderson <rth@twiddle.net>
Signed-off-by: Blue Swirl <blauwirbel@gmail.com>
Diffstat (limited to 'exec.c')
-rw-r--r-- | exec.c | 12 |
1 files changed, 10 insertions, 2 deletions
@@ -3262,6 +3262,8 @@ static int cpu_register_io_memory_fixed(int io_index, CPUWriteMemoryFunc * const *mem_write, void *opaque) { + int i; + if (io_index <= 0) { io_index = get_free_io_mem_idx(); if (io_index == -1) @@ -3272,8 +3274,14 @@ static int cpu_register_io_memory_fixed(int io_index, return -1; } - memcpy(io_mem_read[io_index], mem_read, 3 * sizeof(CPUReadMemoryFunc*)); - memcpy(io_mem_write[io_index], mem_write, 3 * sizeof(CPUWriteMemoryFunc*)); + for (i = 0; i < 3; ++i) { + io_mem_read[io_index][i] + = (mem_read[i] ? mem_read[i] : unassigned_mem_read[i]); + } + for (i = 0; i < 3; ++i) { + io_mem_write[io_index][i] + = (mem_write[i] ? mem_write[i] : unassigned_mem_write[i]); + } io_mem_opaque[io_index] = opaque; return (io_index << IO_MEM_SHIFT); |