comparison backend.c @ 2041:638eb2d25696 mame_interp

Merge from default
author Michael Pavone <pavone@retrodev.com>
date Thu, 05 Aug 2021 09:29:33 -0700
parents a7b753e260a2 45c4b74e7676
children 3142602d21d8
comparison
equal deleted inserted replaced
1984:0d5f88e53dca 2041:638eb2d25696
56 memmap_chunk const *find_map_chunk(uint32_t address, cpu_options *opts, uint16_t flags, uint32_t *size_sum) 56 memmap_chunk const *find_map_chunk(uint32_t address, cpu_options *opts, uint16_t flags, uint32_t *size_sum)
57 { 57 {
58 if (size_sum) { 58 if (size_sum) {
59 *size_sum = 0; 59 *size_sum = 0;
60 } 60 }
61 uint32_t minsize;
62 if (flags == MMAP_CODE) {
63 minsize = 1 << (opts->ram_flags_shift + 3);
64 } else {
65 minsize = 0;
66 }
61 address &= opts->address_mask; 67 address &= opts->address_mask;
62 for (memmap_chunk const *cur = opts->memmap, *end = opts->memmap + opts->memmap_chunks; cur != end; cur++) 68 for (memmap_chunk const *cur = opts->memmap, *end = opts->memmap + opts->memmap_chunks; cur != end; cur++)
63 { 69 {
64 if (address >= cur->start && address < cur->end) { 70 if (address >= cur->start && address < cur->end) {
65 return cur; 71 return cur;
66 } else if (size_sum && (cur->flags & flags) == flags) { 72 } else if (size_sum && (cur->flags & flags) == flags) {
67 *size_sum += chunk_size(opts, cur); 73 uint32_t size = chunk_size(opts, cur);
74 if (size < minsize) {
75 size = minsize;
76 }
77 *size_sum += size;
68 } 78 }
69 } 79 }
70 return NULL; 80 return NULL;
71 } 81 }
72 82
269 } 279 }
270 280
271 uint32_t ram_size(cpu_options *opts) 281 uint32_t ram_size(cpu_options *opts)
272 { 282 {
273 uint32_t size = 0; 283 uint32_t size = 0;
284 uint32_t minsize = 1 << (opts->ram_flags_shift + 3);
274 for (int i = 0; i < opts->memmap_chunks; i++) 285 for (int i = 0; i < opts->memmap_chunks; i++)
275 { 286 {
276 if (opts->memmap[i].flags & MMAP_CODE) { 287 if (opts->memmap[i].flags & MMAP_CODE) {
277 if (opts->memmap[i].mask == opts->address_mask) { 288 uint32_t cursize = chunk_size(opts, opts->memmap + i);
278 size += opts->memmap[i].end - opts->memmap[i].start; 289 if (cursize < minsize) {
290 size += minsize;
279 } else { 291 } else {
280 size += opts->memmap[i].mask + 1; 292 size += cursize;
281 } 293 }
282 } 294 }
283 } 295 }
284 return size; 296 return size;
285 } 297 }