diff --git a/src/mem.c b/src/mem.c
index bb7778fc2..d5a391ebc 100644
--- a/src/mem.c
+++ b/src/mem.c
@@ -68,7 +68,7 @@ uint32_t biosmask;
int readlnum=0,writelnum=0;
int cachesize=256;
-uint8_t *ram,*rom;
+uint8_t *rom;
uint8_t romext[32768];
uint32_t ram_mapped_addr[64];
@@ -1327,6 +1327,7 @@ void mem_init(void)
ram = malloc(mem_size * 1024);
readlookup2 = malloc(1024 * 1024 * sizeof(uintptr_t));
writelookup2 = malloc(1024 * 1024 * sizeof(uintptr_t));
+ rom = NULL;
biosmask = 0xffff;
pages = malloc((((mem_size + 384) * 1024) >> 12) * sizeof(page_t));
page_lookup = malloc((1 << 20) * sizeof(page_t *));
diff --git a/src/rom.c b/src/rom.c
index 6259696cb..ef087a16b 100644
--- a/src/rom.c
+++ b/src/rom.c
@@ -13,7 +13,7 @@
* - c386sx16 BIOS fails checksum
* - the loadfont() calls should be done elsewhere
*
- * Version: @(#)rom.c 1.0.5 2017/09/28
+ * Version: @(#)rom.c 1.0.6 2017/09/30
*
* Authors: Sarah Walker,
* Miran Grca,
@@ -50,7 +50,6 @@ rom_fopen(wchar_t *fn, wchar_t *mode)
}
-
int
rom_getfile(wchar_t *fn, wchar_t *s, int size)
{
@@ -138,6 +137,9 @@ rom_load_linear(wchar_t *fn, uint32_t addr, int sz, int off, uint8_t *ptr)
return(0);
}
+ /* Make sure we only look at the base-256K offset. */
+ addr &= 0x03ffff;
+
(void)fseek(f, off, SEEK_SET);
(void)fread(ptr+addr, sz, 1, f);
(void)fclose(f);
@@ -163,6 +165,9 @@ rom_load_interleaved(wchar_t *fnl, wchar_t *fnh, uint32_t addr, int sz, int off,
return(0);
}
+ /* Make sure we only look at the base-256K offset. */
+ addr &= 0x03ffff;
+
(void)fseek(fl, off, SEEK_SET);
(void)fseek(fh, off, SEEK_SET);
for (c=0; c