# HG changeset patch # User Michael Pavone # Date 1498536797 25200 # Node ID 975b5b7eaa77b47d4eb5cbdaac58d3ab1b32343d # Parent 92e7dafcc0dc06d849809c22b9559b365dc54f74 Fix DMA from byte-wide SRAM diff -r 92e7dafcc0dc -r 975b5b7eaa77 genesis.c --- a/genesis.c Mon Jun 26 21:12:46 2017 -0700 +++ b/genesis.c Mon Jun 26 21:13:17 2017 -0700 @@ -35,13 +35,13 @@ uint16_t read_dma_value(uint32_t address) { genesis_context *genesis = (genesis_context *)current_system; + //TODO: Figure out what happens when you try to DMA from weird adresses like IO or banked Z80 area + if ((address >= 0xA00000 && address < 0xB00000) || (address >= 0xC00000 && address <= 0xE00000)) { + return 0; + } + //addresses here are word addresses (i.e. bit 0 corresponds to A1), so no need to do multiply by 2 - uint16_t *ptr = get_native_pointer(address*2, (void **)genesis->m68k->mem_pointers, &genesis->m68k->options->gen); - if (ptr) { - return *ptr; - } - //TODO: Figure out what happens when you try to DMA from weird adresses like IO or banked Z80 area - return 0; + return read_word(address * 2, (void **)genesis->m68k->mem_pointers, &genesis->m68k->options->gen, genesis->m68k); } static uint16_t get_open_bus_value(system_header *system)