Mercurial > repos > blastem
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 } |