summaryrefslogtreecommitdiff
path: root/backend.c
diff options
context:
space:
mode:
authorMichael Pavone <pavone@retrodev.com>2019-04-18 19:47:50 -0700
committerMichael Pavone <pavone@retrodev.com>2019-04-18 19:47:50 -0700
commitaa41d9724e763de7a64776a7a2c262a5757383f9 (patch)
tree37ff43745e254182d89a99a7f80333700341c84c /backend.c
parent3ecfc320d19f84248ef5f8b403ac8bd1cb737dd1 (diff)
WIP new 68K core using CPU DSL
Diffstat (limited to 'backend.c')
-rw-r--r--backend.c32
1 files changed, 32 insertions, 0 deletions
diff --git a/backend.c b/backend.c
index f95e604..4629c16 100644
--- a/backend.c
+++ b/backend.c
@@ -154,6 +154,38 @@ uint16_t read_word(uint32_t address, void **mem_pointers, cpu_options *opts, voi
return 0xFFFF;
}
+void write_word(uint32_t address, uint16_t value, void **mem_pointers, cpu_options *opts, void *context)
+{
+ memmap_chunk const *chunk = find_map_chunk(address, opts, 0, NULL);
+ if (!chunk) {
+ return;
+ }
+ uint32_t offset = (address - chunk->start) & chunk->mask;
+ if (chunk->flags & MMAP_WRITE) {
+ uint8_t *base;
+ if (chunk->flags & MMAP_PTR_IDX) {
+ base = mem_pointers[chunk->ptr_index];
+ } else {
+ base = chunk->buffer;
+ }
+ if (base) {
+ if ((chunk->flags & MMAP_ONLY_ODD) || (chunk->flags & MMAP_ONLY_EVEN)) {
+ offset /= 2;
+ if (chunk->flags & MMAP_ONLY_EVEN) {
+ value >>= 16;
+ }
+ base[offset] = value;
+ } else {
+ *(uint16_t *)(base + offset) = value;
+ }
+ return;
+ }
+ }
+ if ((!(chunk->flags & MMAP_WRITE) || (chunk->flags & MMAP_FUNC_NULL)) && chunk->write_16) {
+ chunk->write_16(offset, context, value);
+ }
+}
+
uint8_t read_byte(uint32_t address, void **mem_pointers, cpu_options *opts, void *context)
{
memmap_chunk const *chunk = find_map_chunk(address, opts, 0, NULL);