From 80a1591669c0d33075853af54ce8d3b9af615435 Mon Sep 17 00:00:00 2001 From: Michael Pavone Date: Mon, 3 Apr 2017 20:48:13 -0700 Subject: Improved printing of word at absolute address to support reading from all address types. Implemented support for printing the value pointed to by a register. Removed abuse of read_dma_value in internal debugger. --- backend.c | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) (limited to 'backend.c') diff --git a/backend.c b/backend.c index 7967aa0..ea5b64f 100644 --- a/backend.c +++ b/backend.c @@ -93,6 +93,42 @@ void * get_native_pointer(uint32_t address, void ** mem_pointers, cpu_options * return NULL; } +uint16_t read_word(uint32_t address, void **mem_pointers, cpu_options *opts, void *context) +{ + memmap_chunk const *chunk = find_map_chunk(address, opts, 0, NULL); + if (!chunk) { + return 0xFFFF; + } + uint32_t offset = (address - chunk->start) & chunk->mask; + if (chunk->flags & MMAP_READ) { + uint8_t *base; + if (chunk->flags & MMAP_PTR_IDX) { + base = mem_pointers[chunk->ptr_index]; + } else { + base = chunk->buffer; + } + if (base) { + uint16_t val; + if ((chunk->flags & MMAP_ONLY_ODD) || (chunk->flags & MMAP_ONLY_EVEN)) { + offset /= 2; + uint16_t val = base[offset]; + if (chunk->flags & MMAP_ONLY_ODD) { + val |= 0xFF00; + } else { + val = val << 8 | 0xFF; + } + } else { + val = *(uint16_t *)(base + offset); + } + return val; + } + } + if ((!(chunk->flags & MMAP_READ) || (chunk->flags & MMAP_FUNC_NULL)) && chunk->read_16) { + return chunk->read_16(offset, context); + } + return 0xFFFF; +} + uint32_t chunk_size(cpu_options *opts, memmap_chunk const *chunk) { if (chunk->mask == opts->address_mask) { -- cgit v1.2.3