comparison z80_to_x86.c @ 1222:60d73f42a606

Hacky fix so sound works in Project MD again
author Michael Pavone <pavone@retrodev.com>
date Tue, 14 Feb 2017 05:14:10 -0800
parents 2a799f24563f
children 15c5be05e6a9
comparison
equal deleted inserted replaced
1221:53fc7efdfdab 1222:60d73f42a606
2937 ram_flags_off = final_off >> (opts->gen.ram_flags_shift + 3); 2937 ram_flags_off = final_off >> (opts->gen.ram_flags_shift + 3);
2938 context->ram_code_flags[ram_flags_off] |= 1 << ((final_off >> opts->gen.ram_flags_shift) & 7); 2938 context->ram_code_flags[ram_flags_off] |= 1 << ((final_off >> opts->gen.ram_flags_shift) & 7);
2939 } 2939 }
2940 //calculate the lowest alias for this address 2940 //calculate the lowest alias for this address
2941 address = mem_chunk->start + ((address - mem_chunk->start) & mem_chunk->mask); 2941 address = mem_chunk->start + ((address - mem_chunk->start) & mem_chunk->mask);
2942 } else {
2943 address &= opts->gen.address_mask;
2942 } 2944 }
2943 2945
2944 native_map_slot *map = opts->gen.native_code_map + address / NATIVE_CHUNK_SIZE; 2946 native_map_slot *map = opts->gen.native_code_map + address / NATIVE_CHUNK_SIZE;
2945 if (!map->base) { 2947 if (!map->base) {
2946 map->base = native_address; 2948 map->base = native_address;
2955 map->base = native_address; 2957 map->base = native_address;
2956 map->offsets = malloc(sizeof(int32_t) * NATIVE_CHUNK_SIZE); 2958 map->offsets = malloc(sizeof(int32_t) * NATIVE_CHUNK_SIZE);
2957 memset(map->offsets, 0xFF, sizeof(int32_t) * NATIVE_CHUNK_SIZE); 2959 memset(map->offsets, 0xFF, sizeof(int32_t) * NATIVE_CHUNK_SIZE);
2958 } 2960 }
2959 2961
2960 if (map->offsets[address % NATIVE_CHUNK_SIZE] == INVALID_OFFSET) { 2962 //TODO: better handling of potentially overlapping instructions
2961 map->offsets[address % NATIVE_CHUNK_SIZE] = EXTENSION_WORD; 2963 map->offsets[address % NATIVE_CHUNK_SIZE] = EXTENSION_WORD;
2962 }
2963 } 2964 }
2964 } 2965 }
2965 2966
2966 #define INVALID_INSTRUCTION_START 0xFEEDFEED 2967 #define INVALID_INSTRUCTION_START 0xFEEDFEED
2967 2968