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;