Mercurial > repos > blastem
comparison m68k_core.c @ 1214:afa3d0a227ae
Fix regression in handling of unmapped memory addresses
author | Michael Pavone <pavone@retrodev.com> |
---|---|
date | Wed, 01 Feb 2017 19:33:11 -0800 |
parents | 191ac490fb3d |
children | 2e6dcb5c11a2 |
comparison
equal
deleted
inserted
replaced
1213:9e4c44757b1a | 1214:afa3d0a227ae |
---|---|
563 | 563 |
564 memmap_chunk const *mem_chunk = find_map_chunk(address, &opts->gen, 0, NULL); | 564 memmap_chunk const *mem_chunk = find_map_chunk(address, &opts->gen, 0, NULL); |
565 if (mem_chunk) { | 565 if (mem_chunk) { |
566 //calculate the lowest alias for this address | 566 //calculate the lowest alias for this address |
567 address = mem_chunk->start + ((address - mem_chunk->start) & mem_chunk->mask); | 567 address = mem_chunk->start + ((address - mem_chunk->start) & mem_chunk->mask); |
568 } else { | |
569 address &= opts->gen.address_mask; | |
568 } | 570 } |
569 uint32_t chunk = address / NATIVE_CHUNK_SIZE; | 571 uint32_t chunk = address / NATIVE_CHUNK_SIZE; |
570 if (!native_code_map[chunk].base) { | 572 if (!native_code_map[chunk].base) { |
571 return NULL; | 573 return NULL; |
572 } | 574 } |
587 native_map_slot * native_code_map = opts->gen.native_code_map; | 589 native_map_slot * native_code_map = opts->gen.native_code_map; |
588 memmap_chunk const *mem_chunk = find_map_chunk(address, &opts->gen, 0, NULL); | 590 memmap_chunk const *mem_chunk = find_map_chunk(address, &opts->gen, 0, NULL); |
589 if (mem_chunk) { | 591 if (mem_chunk) { |
590 //calculate the lowest alias for this address | 592 //calculate the lowest alias for this address |
591 address = mem_chunk->start + ((address - mem_chunk->start) & mem_chunk->mask); | 593 address = mem_chunk->start + ((address - mem_chunk->start) & mem_chunk->mask); |
594 } else { | |
595 address &= opts->gen.address_mask; | |
592 } | 596 } |
593 | 597 |
594 uint32_t chunk = address / NATIVE_CHUNK_SIZE; | 598 uint32_t chunk = address / NATIVE_CHUNK_SIZE; |
595 if (!native_code_map[chunk].base) { | 599 if (!native_code_map[chunk].base) { |
596 return 0; | 600 return 0; |
633 ram_flags_off = final_off >> (opts->gen.ram_flags_shift + 3); | 637 ram_flags_off = final_off >> (opts->gen.ram_flags_shift + 3); |
634 context->ram_code_flags[ram_flags_off] |= 1 << ((final_off >> opts->gen.ram_flags_shift) & 7); | 638 context->ram_code_flags[ram_flags_off] |= 1 << ((final_off >> opts->gen.ram_flags_shift) & 7); |
635 } | 639 } |
636 //calculate the lowest alias for this address | 640 //calculate the lowest alias for this address |
637 address = mem_chunk->start + ((address - mem_chunk->start) & mem_chunk->mask); | 641 address = mem_chunk->start + ((address - mem_chunk->start) & mem_chunk->mask); |
642 } else { | |
643 address &= opts->gen.address_mask; | |
638 } | 644 } |
639 | 645 |
640 uint32_t chunk = address / NATIVE_CHUNK_SIZE; | 646 uint32_t chunk = address / NATIVE_CHUNK_SIZE; |
641 if (!native_code_map[chunk].base) { | 647 if (!native_code_map[chunk].base) { |
642 native_code_map[chunk].base = native_addr; | 648 native_code_map[chunk].base = native_addr; |