diff backend.c @ 2113:0013362c320c

Fix handling of ram code flag offset calculation for ranges that are not an even multiple of the code flag page size
author Michael Pavone <pavone@retrodev.com>
date Sun, 13 Feb 2022 22:52:52 -0800
parents 45c4b74e7676
children 9caebcfeac72
line wrap: on
line diff
--- a/backend.c	Sun Feb 13 22:52:19 2022 -0800
+++ b/backend.c	Sun Feb 13 22:52:52 2022 -0800
@@ -56,11 +56,11 @@
 	if (size_sum) {
 		*size_sum = 0;
 	}
-	uint32_t minsize;
+	uint32_t size_round_mask;
 	if (flags == MMAP_CODE) {
-		minsize = 1 << (opts->ram_flags_shift + 3);
+		size_round_mask = (1 << (opts->ram_flags_shift + 3)) - 1;
 	} else {
-		minsize = 0;
+		size_round_mask = 0;
 	}
 	address &= opts->address_mask;
 	for (memmap_chunk const *cur = opts->memmap, *end = opts->memmap + opts->memmap_chunks; cur != end; cur++)
@@ -69,8 +69,11 @@
 			return cur;
 		} else if (size_sum && (cur->flags & flags) == flags) {
 			uint32_t size = chunk_size(opts, cur);
-			if (size < minsize) {
-				size = minsize;
+			if (size_round_mask) {
+				if (size & size_round_mask) {
+					size &= ~size_round_mask;
+					size += size_round_mask + 1;
+				}
 			}
 			*size_sum += size;
 		}