--- uae/src/memory.c 2018/04/24 16:42:12 1.1.1.4 +++ uae/src/memory.c 2018/04/24 16:56:47 1.1.1.8 @@ -20,6 +20,9 @@ #include #endif +/* Set by each memory handler that does not simply access real memory. */ +int special_mem; + int ersatzkickfile = 0; uae_u32 allocated_chipmem; @@ -36,29 +39,29 @@ addrbank mem_banks[65536]; #endif #ifdef NO_INLINE_MEMORY_ACCESS -__inline__ uae_u32 longget(uaecptr addr) +__inline__ uae_u32 longget (uaecptr addr) { - return call_mem_get_func(get_mem_bank(addr).lget, addr); + return call_mem_get_func (get_mem_bank (addr).lget, addr); } -__inline__ uae_u32 wordget(uaecptr addr) +__inline__ uae_u32 wordget (uaecptr addr) { - return call_mem_get_func(get_mem_bank(addr).wget, addr); + return call_mem_get_func (get_mem_bank (addr).wget, addr); } -__inline__ uae_u32 byteget(uaecptr addr) +__inline__ uae_u32 byteget (uaecptr addr) { - return call_mem_get_func(get_mem_bank(addr).bget, addr); + return call_mem_get_func (get_mem_bank (addr).bget, addr); } -__inline__ void longput(uaecptr addr, uae_u32 l) +__inline__ void longput (uaecptr addr, uae_u32 l) { - call_mem_put_func(get_mem_bank(addr).lput, addr, l); + call_mem_put_func (get_mem_bank (addr).lput, addr, l); } -__inline__ void wordput(uaecptr addr, uae_u32 w) +__inline__ void wordput (uaecptr addr, uae_u32 w) { - call_mem_put_func(get_mem_bank(addr).wput, addr, w); + call_mem_put_func (get_mem_bank (addr).wput, addr, w); } -__inline__ void byteput(uaecptr addr, uae_u32 b) +__inline__ void byteput (uaecptr addr, uae_u32 b) { - call_mem_put_func(get_mem_bank(addr).bput, addr, b); + call_mem_put_func (get_mem_bank (addr).bput, addr, b); } #endif @@ -76,6 +79,7 @@ static int dummy_check (uaecptr addr, ua uae_u32 REGPARAM2 dummy_lget (uaecptr addr) { + special_mem |= S_READ; if (currprefs.illegal_mem) write_log ("Illegal lget at %08lx\n", addr); @@ -84,6 +88,7 @@ uae_u32 REGPARAM2 dummy_lget (uaecptr ad uae_u32 REGPARAM2 dummy_wget (uaecptr addr) { + special_mem |= S_READ; if (currprefs.illegal_mem) write_log ("Illegal wget at %08lx\n", addr); @@ -92,6 +97,7 @@ uae_u32 REGPARAM2 dummy_wget (uaecptr ad uae_u32 REGPARAM2 dummy_bget (uaecptr addr) { + special_mem |= S_READ; if (currprefs.illegal_mem) write_log ("Illegal bget at %08lx\n", addr); @@ -100,16 +106,19 @@ uae_u32 REGPARAM2 dummy_bget (uaecptr ad void REGPARAM2 dummy_lput (uaecptr addr, uae_u32 l) { + special_mem |= S_WRITE; if (currprefs.illegal_mem) write_log ("Illegal lput at %08lx\n", addr); } void REGPARAM2 dummy_wput (uaecptr addr, uae_u32 w) { + special_mem |= S_WRITE; if (currprefs.illegal_mem) write_log ("Illegal wput at %08lx\n", addr); } void REGPARAM2 dummy_bput (uaecptr addr, uae_u32 b) { + special_mem |= S_WRITE; if (currprefs.illegal_mem) write_log ("Illegal bput at %08lx\n", addr); } @@ -135,6 +144,7 @@ static int mbres_val = 0; uae_u32 REGPARAM2 mbres_lget (uaecptr addr) { + special_mem |= S_READ; if (currprefs.illegal_mem) write_log ("Illegal lget at %08lx\n", addr); @@ -143,6 +153,7 @@ uae_u32 REGPARAM2 mbres_lget (uaecptr ad uae_u32 REGPARAM2 mbres_wget (uaecptr addr) { + special_mem |= S_READ; if (currprefs.illegal_mem) write_log ("Illegal wget at %08lx\n", addr); @@ -151,6 +162,7 @@ uae_u32 REGPARAM2 mbres_wget (uaecptr ad uae_u32 REGPARAM2 mbres_bget (uaecptr addr) { + special_mem |= S_READ; if (currprefs.illegal_mem) write_log ("Illegal bget at %08lx\n", addr); @@ -159,16 +171,19 @@ uae_u32 REGPARAM2 mbres_bget (uaecptr ad void REGPARAM2 mbres_lput (uaecptr addr, uae_u32 l) { + special_mem |= S_WRITE; if (currprefs.illegal_mem) write_log ("Illegal lput at %08lx\n", addr); } void REGPARAM2 mbres_wput (uaecptr addr, uae_u32 w) { + special_mem |= S_WRITE; if (currprefs.illegal_mem) write_log ("Illegal wput at %08lx\n", addr); } void REGPARAM2 mbres_bput (uaecptr addr, uae_u32 b) { + special_mem |= S_WRITE; if (currprefs.illegal_mem) write_log ("Illegal bput at %08lx\n", addr); @@ -188,31 +203,27 @@ int REGPARAM2 mbres_check (uaecptr addr, uae_u8 *chipmemory; -static uae_u32 chipmem_lget (uaecptr) REGPARAM; -static uae_u32 chipmem_wget (uaecptr) REGPARAM; -static uae_u32 chipmem_bget (uaecptr) REGPARAM; -static void chipmem_lput (uaecptr, uae_u32) REGPARAM; -static void chipmem_wput (uaecptr, uae_u32) REGPARAM; -static void chipmem_bput (uaecptr, uae_u32) REGPARAM; static int chipmem_check (uaecptr addr, uae_u32 size) REGPARAM; static uae_u8 *chipmem_xlate (uaecptr addr) REGPARAM; uae_u32 REGPARAM2 chipmem_lget (uaecptr addr) { uae_u32 *m; + addr -= chipmem_start & chipmem_mask; addr &= chipmem_mask; m = (uae_u32 *)(chipmemory + addr); - return do_get_mem_long(m); + return do_get_mem_long (m); } uae_u32 REGPARAM2 chipmem_wget (uaecptr addr) { uae_u16 *m; + addr -= chipmem_start & chipmem_mask; addr &= chipmem_mask; m = (uae_u16 *)(chipmemory + addr); - return do_get_mem_word(m); + return do_get_mem_word (m); } uae_u32 REGPARAM2 chipmem_bget (uaecptr addr) @@ -225,19 +236,21 @@ uae_u32 REGPARAM2 chipmem_bget (uaecptr void REGPARAM2 chipmem_lput (uaecptr addr, uae_u32 l) { uae_u32 *m; + addr -= chipmem_start & chipmem_mask; addr &= chipmem_mask; m = (uae_u32 *)(chipmemory + addr); - do_put_mem_long(m, l); + do_put_mem_long (m, l); } void REGPARAM2 chipmem_wput (uaecptr addr, uae_u32 w) { uae_u16 *m; + addr -= chipmem_start & chipmem_mask; addr &= chipmem_mask; m = (uae_u16 *)(chipmemory + addr); - do_put_mem_word(m, w); + do_put_mem_word (m, w); } void REGPARAM2 chipmem_bput (uaecptr addr, uae_u32 b) @@ -280,7 +293,7 @@ uae_u32 REGPARAM2 bogomem_lget (uaecptr addr -= bogomem_start & bogomem_mask; addr &= bogomem_mask; m = (uae_u32 *)(bogomemory + addr); - return do_get_mem_long(m); + return do_get_mem_long (m); } uae_u32 REGPARAM2 bogomem_wget (uaecptr addr) @@ -289,7 +302,7 @@ uae_u32 REGPARAM2 bogomem_wget (uaecptr addr -= bogomem_start & bogomem_mask; addr &= bogomem_mask; m = (uae_u16 *)(bogomemory + addr); - return do_get_mem_word(m); + return do_get_mem_word (m); } uae_u32 REGPARAM2 bogomem_bget (uaecptr addr) @@ -305,7 +318,7 @@ void REGPARAM2 bogomem_lput (uaecptr add addr -= bogomem_start & bogomem_mask; addr &= bogomem_mask; m = (uae_u32 *)(bogomemory + addr); - do_put_mem_long(m, l); + do_put_mem_long (m, l); } void REGPARAM2 bogomem_wput (uaecptr addr, uae_u32 w) @@ -314,7 +327,7 @@ void REGPARAM2 bogomem_wput (uaecptr add addr -= bogomem_start & bogomem_mask; addr &= bogomem_mask; m = (uae_u16 *)(bogomemory + addr); - do_put_mem_word(m, w); + do_put_mem_word (m, w); } void REGPARAM2 bogomem_bput (uaecptr addr, uae_u32 b) @@ -357,7 +370,7 @@ uae_u32 REGPARAM2 a3000mem_lget (uaecptr addr -= a3000mem_start & a3000mem_mask; addr &= a3000mem_mask; m = (uae_u32 *)(a3000memory + addr); - return do_get_mem_long(m); + return do_get_mem_long (m); } uae_u32 REGPARAM2 a3000mem_wget (uaecptr addr) @@ -366,7 +379,7 @@ uae_u32 REGPARAM2 a3000mem_wget (uaecptr addr -= a3000mem_start & a3000mem_mask; addr &= a3000mem_mask; m = (uae_u16 *)(a3000memory + addr); - return do_get_mem_word(m); + return do_get_mem_word (m); } uae_u32 REGPARAM2 a3000mem_bget (uaecptr addr) @@ -382,7 +395,7 @@ void REGPARAM2 a3000mem_lput (uaecptr ad addr -= a3000mem_start & a3000mem_mask; addr &= a3000mem_mask; m = (uae_u32 *)(a3000memory + addr); - do_put_mem_long(m, l); + do_put_mem_long (m, l); } void REGPARAM2 a3000mem_wput (uaecptr addr, uae_u32 w) @@ -391,7 +404,7 @@ void REGPARAM2 a3000mem_wput (uaecptr ad addr -= a3000mem_start & a3000mem_mask; addr &= a3000mem_mask; m = (uae_u16 *)(a3000memory + addr); - do_put_mem_word(m, w); + do_put_mem_word (m, w); } void REGPARAM2 a3000mem_bput (uaecptr addr, uae_u32 b) @@ -434,7 +447,7 @@ uae_u32 REGPARAM2 kickmem_lget (uaecptr addr -= kickmem_start & kickmem_mask; addr &= kickmem_mask; m = (uae_u32 *)(kickmemory + addr); - return do_get_mem_long(m); + return do_get_mem_long (m); } uae_u32 REGPARAM2 kickmem_wget (uaecptr addr) @@ -443,7 +456,7 @@ uae_u32 REGPARAM2 kickmem_wget (uaecptr addr -= kickmem_start & kickmem_mask; addr &= kickmem_mask; m = (uae_u16 *)(kickmemory + addr); - return do_get_mem_word(m); + return do_get_mem_word (m); } uae_u32 REGPARAM2 kickmem_bget (uaecptr addr) @@ -505,16 +518,16 @@ static int load_kickstart (void) uae_u32 cksum = 0, prevck = 0; unsigned char buffer[20]; - FILE *f = zfile_open(romfile, "rb"); + FILE *f = zfile_open (currprefs.romfile, "rb"); if (f == NULL) { write_log ("No Kickstart ROM found.\n"); -#if defined(AMIGA)||defined(__POS__) +#if defined AMIGA || defined __POS__ #define USE_UAE_ERSATZ "USE_UAE_ERSATZ" - if (!getenv(USE_UAE_ERSATZ)) { - fprintf (stderr, "Using current ROM. (create ENV:%s to " - "use uae's ROM replacement)\n",USE_UAE_ERSATZ); - memcpy(kickmemory,(char*)0x1000000 - kickmem_size, kickmem_size); + if (!getenv (USE_UAE_ERSATZ)) { + fprintf (stderr, "Using current ROM. (create ENV:%s to " + "use uae's ROM replacement)\n", USE_UAE_ERSATZ); + memcpy (kickmemory, (char*)0x1000000 - kickmem_size, kickmem_size); goto chk_sum; } #endif @@ -542,11 +555,11 @@ static int load_kickstart (void) cloanto_rom = 1; write_log ("ROM image is an encrypted \"Amiga Forever\" ROM file.\n"); - if (strlen (keyfile) == 0) { + if (strlen (currprefs.keyfile) == 0) { write_log ("No filename given for ROM key file.\n"); return 0; } - keyf = zfile_open (keyfile, "rb"); + keyf = zfile_open (currprefs.keyfile, "rb"); if (keyf == 0) { write_log ("Could not find ROM key file.\n"); return 0; @@ -688,6 +701,7 @@ void memory_init (void) } #endif + do_put_mem_long ((uae_u32 *)(chipmemory + 4), 0); init_mem_banks (); /* Map the chipmem into all of the lower 16MB */ @@ -753,5 +767,5 @@ void map_banks (addrbank *bank, int star endhioffs = 0x10000; for (hioffs = 0; hioffs < endhioffs; hioffs += 0x100) for (bnr = start; bnr < start+size; bnr++) - put_mem_bank((bnr + hioffs) << 16, bank); + put_mem_bank ((bnr + hioffs) << 16, bank); }