--- uae/src/memory.c 2018/04/24 16:40:05 1.1.1.3 +++ uae/src/memory.c 2018/04/24 16:42:12 1.1.1.4 @@ -22,6 +22,13 @@ int ersatzkickfile = 0; +uae_u32 allocated_chipmem; +uae_u32 allocated_fastmem; +uae_u32 allocated_bogomem; +uae_u32 allocated_gfxmem; +uae_u32 allocated_z3fastmem; +uae_u32 allocated_a3000mem; + #ifdef SAVE_MEMORY_BANKS addrbank *mem_banks[65536]; #else @@ -59,140 +66,121 @@ uae_u32 chipmem_mask, kickmem_mask, bogo /* A dummy bank that only contains zeros */ -static uae_u32 dummy_lget(uaecptr) REGPARAM; -static uae_u32 dummy_wget(uaecptr) REGPARAM; -static uae_u32 dummy_bget(uaecptr) REGPARAM; -static void dummy_lput(uaecptr, uae_u32) REGPARAM; -static void dummy_wput(uaecptr, uae_u32) REGPARAM; -static void dummy_bput(uaecptr, uae_u32) REGPARAM; -static int dummy_check(uaecptr addr, uae_u32 size) REGPARAM; - -uae_u32 REGPARAM2 dummy_lget(uaecptr addr) -{ - if (currprefs.illegal_mem) { - sprintf (warning_buffer, "Illegal lget at %08lx\n", addr); - write_log (warning_buffer); - } +static uae_u32 dummy_lget (uaecptr) REGPARAM; +static uae_u32 dummy_wget (uaecptr) REGPARAM; +static uae_u32 dummy_bget (uaecptr) REGPARAM; +static void dummy_lput (uaecptr, uae_u32) REGPARAM; +static void dummy_wput (uaecptr, uae_u32) REGPARAM; +static void dummy_bput (uaecptr, uae_u32) REGPARAM; +static int dummy_check (uaecptr addr, uae_u32 size) REGPARAM; + +uae_u32 REGPARAM2 dummy_lget (uaecptr addr) +{ + if (currprefs.illegal_mem) + write_log ("Illegal lget at %08lx\n", addr); + return 0; } -uae_u32 REGPARAM2 dummy_wget(uaecptr addr) +uae_u32 REGPARAM2 dummy_wget (uaecptr addr) { - if (currprefs.illegal_mem) { - sprintf (warning_buffer, "Illegal wget at %08lx\n", addr); - write_log (warning_buffer); - } + if (currprefs.illegal_mem) + write_log ("Illegal wget at %08lx\n", addr); + return 0; } -uae_u32 REGPARAM2 dummy_bget(uaecptr addr) +uae_u32 REGPARAM2 dummy_bget (uaecptr addr) { - if (currprefs.illegal_mem) { - sprintf (warning_buffer, "Illegal bget at %08lx\n", addr); - write_log (warning_buffer); - } + if (currprefs.illegal_mem) + write_log ("Illegal bget at %08lx\n", addr); + return 0; } -void REGPARAM2 dummy_lput(uaecptr addr, uae_u32 l) +void REGPARAM2 dummy_lput (uaecptr addr, uae_u32 l) { - if (currprefs.illegal_mem) { - sprintf (warning_buffer, "Illegal lput at %08lx\n", addr); - write_log (warning_buffer); - } + if (currprefs.illegal_mem) + write_log ("Illegal lput at %08lx\n", addr); } -void REGPARAM2 dummy_wput(uaecptr addr, uae_u32 w) +void REGPARAM2 dummy_wput (uaecptr addr, uae_u32 w) { - if (currprefs.illegal_mem) { - sprintf (warning_buffer, "Illegal wput at %08lx\n", addr); - write_log (warning_buffer); - } + if (currprefs.illegal_mem) + write_log ("Illegal wput at %08lx\n", addr); } -void REGPARAM2 dummy_bput(uaecptr addr, uae_u32 b) +void REGPARAM2 dummy_bput (uaecptr addr, uae_u32 b) { - if (currprefs.illegal_mem) { - sprintf (warning_buffer, "Illegal bput at %08lx\n", addr); - write_log (warning_buffer); - } + if (currprefs.illegal_mem) + write_log ("Illegal bput at %08lx\n", addr); } -int REGPARAM2 dummy_check(uaecptr addr, uae_u32 size) +int REGPARAM2 dummy_check (uaecptr addr, uae_u32 size) { - if (currprefs.illegal_mem) { - sprintf (warning_buffer, "Illegal check at %08lx\n", addr); - write_log (warning_buffer); - } + if (currprefs.illegal_mem) + write_log ("Illegal check at %08lx\n", addr); + return 0; } /* A3000 "motherboard resources" bank. */ -static uae_u32 mbres_lget(uaecptr) REGPARAM; -static uae_u32 mbres_wget(uaecptr) REGPARAM; -static uae_u32 mbres_bget(uaecptr) REGPARAM; -static void mbres_lput(uaecptr, uae_u32) REGPARAM; -static void mbres_wput(uaecptr, uae_u32) REGPARAM; -static void mbres_bput(uaecptr, uae_u32) REGPARAM; -static int mbres_check(uaecptr addr, uae_u32 size) REGPARAM; +static uae_u32 mbres_lget (uaecptr) REGPARAM; +static uae_u32 mbres_wget (uaecptr) REGPARAM; +static uae_u32 mbres_bget (uaecptr) REGPARAM; +static void mbres_lput (uaecptr, uae_u32) REGPARAM; +static void mbres_wput (uaecptr, uae_u32) REGPARAM; +static void mbres_bput (uaecptr, uae_u32) REGPARAM; +static int mbres_check (uaecptr addr, uae_u32 size) REGPARAM; static int mbres_val = 0; -uae_u32 REGPARAM2 mbres_lget(uaecptr addr) +uae_u32 REGPARAM2 mbres_lget (uaecptr addr) { - if (currprefs.illegal_mem) { - sprintf (warning_buffer, "Illegal lget at %08lx\n", addr); - write_log (warning_buffer); - } + if (currprefs.illegal_mem) + write_log ("Illegal lget at %08lx\n", addr); + return 0; } -uae_u32 REGPARAM2 mbres_wget(uaecptr addr) +uae_u32 REGPARAM2 mbres_wget (uaecptr addr) { - if (currprefs.illegal_mem) { - sprintf (warning_buffer, "Illegal wget at %08lx\n", addr); - write_log (warning_buffer); - } + if (currprefs.illegal_mem) + write_log ("Illegal wget at %08lx\n", addr); + return 0; } -uae_u32 REGPARAM2 mbres_bget(uaecptr addr) +uae_u32 REGPARAM2 mbres_bget (uaecptr addr) { - if (currprefs.illegal_mem) { - sprintf (warning_buffer, "Illegal bget at %08lx\n", addr); - write_log (warning_buffer); - } + if (currprefs.illegal_mem) + write_log ("Illegal bget at %08lx\n", addr); + return (addr & 0xFFFF) == 3 ? mbres_val : 0; } -void REGPARAM2 mbres_lput(uaecptr addr, uae_u32 l) +void REGPARAM2 mbres_lput (uaecptr addr, uae_u32 l) { - if (currprefs.illegal_mem) { - sprintf (warning_buffer, "Illegal lput at %08lx\n", addr); - write_log (warning_buffer); - } + if (currprefs.illegal_mem) + write_log ("Illegal lput at %08lx\n", addr); } -void REGPARAM2 mbres_wput(uaecptr addr, uae_u32 w) +void REGPARAM2 mbres_wput (uaecptr addr, uae_u32 w) { - if (currprefs.illegal_mem) { - sprintf (warning_buffer, "Illegal wput at %08lx\n", addr); - write_log (warning_buffer); - } + if (currprefs.illegal_mem) + write_log ("Illegal wput at %08lx\n", addr); } -void REGPARAM2 mbres_bput(uaecptr addr, uae_u32 b) +void REGPARAM2 mbres_bput (uaecptr addr, uae_u32 b) { - if (currprefs.illegal_mem) { - sprintf (warning_buffer, "Illegal bput at %08lx\n", addr); - write_log (warning_buffer); - } + if (currprefs.illegal_mem) + write_log ("Illegal bput at %08lx\n", addr); + if ((addr & 0xFFFF) == 3) mbres_val = b; } -int REGPARAM2 mbres_check(uaecptr addr, uae_u32 size) +int REGPARAM2 mbres_check (uaecptr addr, uae_u32 size) { - if (currprefs.illegal_mem) { - sprintf (warning_buffer, "Illegal check at %08lx\n", addr); - write_log (warning_buffer); - } + if (currprefs.illegal_mem) + write_log ("Illegal check at %08lx\n", addr); + return 0; } @@ -200,17 +188,16 @@ 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; +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 REGPARAM2 chipmem_lget (uaecptr addr) { uae_u32 *m; addr -= chipmem_start & chipmem_mask; @@ -219,7 +206,7 @@ uae_u32 REGPARAM2 chipmem_lget(uaecptr a return do_get_mem_long(m); } -uae_u32 REGPARAM2 chipmem_wget(uaecptr addr) +uae_u32 REGPARAM2 chipmem_wget (uaecptr addr) { uae_u16 *m; addr -= chipmem_start & chipmem_mask; @@ -228,14 +215,14 @@ uae_u32 REGPARAM2 chipmem_wget(uaecptr a return do_get_mem_word(m); } -uae_u32 REGPARAM2 chipmem_bget(uaecptr addr) +uae_u32 REGPARAM2 chipmem_bget (uaecptr addr) { addr -= chipmem_start & chipmem_mask; addr &= chipmem_mask; return chipmemory[addr]; } -void REGPARAM2 chipmem_lput(uaecptr addr, uae_u32 l) +void REGPARAM2 chipmem_lput (uaecptr addr, uae_u32 l) { uae_u32 *m; addr -= chipmem_start & chipmem_mask; @@ -244,7 +231,7 @@ void REGPARAM2 chipmem_lput(uaecptr addr do_put_mem_long(m, l); } -void REGPARAM2 chipmem_wput(uaecptr addr, uae_u32 w) +void REGPARAM2 chipmem_wput (uaecptr addr, uae_u32 w) { uae_u16 *m; addr -= chipmem_start & chipmem_mask; @@ -253,21 +240,21 @@ void REGPARAM2 chipmem_wput(uaecptr addr do_put_mem_word(m, w); } -void REGPARAM2 chipmem_bput(uaecptr addr, uae_u32 b) +void REGPARAM2 chipmem_bput (uaecptr addr, uae_u32 b) { addr -= chipmem_start & chipmem_mask; addr &= chipmem_mask; chipmemory[addr] = b; } -int REGPARAM2 chipmem_check(uaecptr addr, uae_u32 size) +int REGPARAM2 chipmem_check (uaecptr addr, uae_u32 size) { addr -= chipmem_start & chipmem_mask; addr &= chipmem_mask; - return (addr + size) < chipmem_size; + return (addr + size) <= allocated_chipmem; } -uae_u8 REGPARAM2 *chipmem_xlate(uaecptr addr) +uae_u8 REGPARAM2 *chipmem_xlate (uaecptr addr) { addr -= chipmem_start & chipmem_mask; addr &= chipmem_mask; @@ -278,16 +265,16 @@ uae_u8 REGPARAM2 *chipmem_xlate(uaecptr static uae_u8 *bogomemory; -static uae_u32 bogomem_lget(uaecptr) REGPARAM; -static uae_u32 bogomem_wget(uaecptr) REGPARAM; -static uae_u32 bogomem_bget(uaecptr) REGPARAM; -static void bogomem_lput(uaecptr, uae_u32) REGPARAM; -static void bogomem_wput(uaecptr, uae_u32) REGPARAM; -static void bogomem_bput(uaecptr, uae_u32) REGPARAM; -static int bogomem_check(uaecptr addr, uae_u32 size) REGPARAM; -static uae_u8 *bogomem_xlate(uaecptr addr) REGPARAM; +static uae_u32 bogomem_lget (uaecptr) REGPARAM; +static uae_u32 bogomem_wget (uaecptr) REGPARAM; +static uae_u32 bogomem_bget (uaecptr) REGPARAM; +static void bogomem_lput (uaecptr, uae_u32) REGPARAM; +static void bogomem_wput (uaecptr, uae_u32) REGPARAM; +static void bogomem_bput (uaecptr, uae_u32) REGPARAM; +static int bogomem_check (uaecptr addr, uae_u32 size) REGPARAM; +static uae_u8 *bogomem_xlate (uaecptr addr) REGPARAM; -uae_u32 REGPARAM2 bogomem_lget(uaecptr addr) +uae_u32 REGPARAM2 bogomem_lget (uaecptr addr) { uae_u32 *m; addr -= bogomem_start & bogomem_mask; @@ -296,7 +283,7 @@ uae_u32 REGPARAM2 bogomem_lget(uaecptr a return do_get_mem_long(m); } -uae_u32 REGPARAM2 bogomem_wget(uaecptr addr) +uae_u32 REGPARAM2 bogomem_wget (uaecptr addr) { uae_u16 *m; addr -= bogomem_start & bogomem_mask; @@ -305,14 +292,14 @@ uae_u32 REGPARAM2 bogomem_wget(uaecptr a return do_get_mem_word(m); } -uae_u32 REGPARAM2 bogomem_bget(uaecptr addr) +uae_u32 REGPARAM2 bogomem_bget (uaecptr addr) { addr -= bogomem_start & bogomem_mask; addr &= bogomem_mask; return bogomemory[addr]; } -void REGPARAM2 bogomem_lput(uaecptr addr, uae_u32 l) +void REGPARAM2 bogomem_lput (uaecptr addr, uae_u32 l) { uae_u32 *m; addr -= bogomem_start & bogomem_mask; @@ -321,7 +308,7 @@ void REGPARAM2 bogomem_lput(uaecptr addr do_put_mem_long(m, l); } -void REGPARAM2 bogomem_wput(uaecptr addr, uae_u32 w) +void REGPARAM2 bogomem_wput (uaecptr addr, uae_u32 w) { uae_u16 *m; addr -= bogomem_start & bogomem_mask; @@ -330,21 +317,21 @@ void REGPARAM2 bogomem_wput(uaecptr addr do_put_mem_word(m, w); } -void REGPARAM2 bogomem_bput(uaecptr addr, uae_u32 b) +void REGPARAM2 bogomem_bput (uaecptr addr, uae_u32 b) { addr -= bogomem_start & bogomem_mask; addr &= bogomem_mask; bogomemory[addr] = b; } -int REGPARAM2 bogomem_check(uaecptr addr, uae_u32 size) +int REGPARAM2 bogomem_check (uaecptr addr, uae_u32 size) { addr -= bogomem_start & bogomem_mask; addr &= bogomem_mask; - return (addr + size) < bogomem_size; + return (addr + size) <= allocated_bogomem; } -uae_u8 REGPARAM2 *bogomem_xlate(uaecptr addr) +uae_u8 REGPARAM2 *bogomem_xlate (uaecptr addr) { addr -= bogomem_start & bogomem_mask; addr &= bogomem_mask; @@ -355,16 +342,16 @@ uae_u8 REGPARAM2 *bogomem_xlate(uaecptr static uae_u8 *a3000memory; -static uae_u32 a3000mem_lget(uaecptr) REGPARAM; -static uae_u32 a3000mem_wget(uaecptr) REGPARAM; -static uae_u32 a3000mem_bget(uaecptr) REGPARAM; -static void a3000mem_lput(uaecptr, uae_u32) REGPARAM; -static void a3000mem_wput(uaecptr, uae_u32) REGPARAM; -static void a3000mem_bput(uaecptr, uae_u32) REGPARAM; -static int a3000mem_check(uaecptr addr, uae_u32 size) REGPARAM; -static uae_u8 *a3000mem_xlate(uaecptr addr) REGPARAM; +static uae_u32 a3000mem_lget (uaecptr) REGPARAM; +static uae_u32 a3000mem_wget (uaecptr) REGPARAM; +static uae_u32 a3000mem_bget (uaecptr) REGPARAM; +static void a3000mem_lput (uaecptr, uae_u32) REGPARAM; +static void a3000mem_wput (uaecptr, uae_u32) REGPARAM; +static void a3000mem_bput (uaecptr, uae_u32) REGPARAM; +static int a3000mem_check (uaecptr addr, uae_u32 size) REGPARAM; +static uae_u8 *a3000mem_xlate (uaecptr addr) REGPARAM; -uae_u32 REGPARAM2 a3000mem_lget(uaecptr addr) +uae_u32 REGPARAM2 a3000mem_lget (uaecptr addr) { uae_u32 *m; addr -= a3000mem_start & a3000mem_mask; @@ -373,7 +360,7 @@ uae_u32 REGPARAM2 a3000mem_lget(uaecptr return do_get_mem_long(m); } -uae_u32 REGPARAM2 a3000mem_wget(uaecptr addr) +uae_u32 REGPARAM2 a3000mem_wget (uaecptr addr) { uae_u16 *m; addr -= a3000mem_start & a3000mem_mask; @@ -382,14 +369,14 @@ uae_u32 REGPARAM2 a3000mem_wget(uaecptr return do_get_mem_word(m); } -uae_u32 REGPARAM2 a3000mem_bget(uaecptr addr) +uae_u32 REGPARAM2 a3000mem_bget (uaecptr addr) { addr -= a3000mem_start & a3000mem_mask; addr &= a3000mem_mask; return a3000memory[addr]; } -void REGPARAM2 a3000mem_lput(uaecptr addr, uae_u32 l) +void REGPARAM2 a3000mem_lput (uaecptr addr, uae_u32 l) { uae_u32 *m; addr -= a3000mem_start & a3000mem_mask; @@ -398,7 +385,7 @@ void REGPARAM2 a3000mem_lput(uaecptr add do_put_mem_long(m, l); } -void REGPARAM2 a3000mem_wput(uaecptr addr, uae_u32 w) +void REGPARAM2 a3000mem_wput (uaecptr addr, uae_u32 w) { uae_u16 *m; addr -= a3000mem_start & a3000mem_mask; @@ -407,18 +394,18 @@ void REGPARAM2 a3000mem_wput(uaecptr add do_put_mem_word(m, w); } -void REGPARAM2 a3000mem_bput(uaecptr addr, uae_u32 b) +void REGPARAM2 a3000mem_bput (uaecptr addr, uae_u32 b) { addr -= a3000mem_start & a3000mem_mask; addr &= a3000mem_mask; a3000memory[addr] = b; } -int REGPARAM2 a3000mem_check(uaecptr addr, uae_u32 size) +int REGPARAM2 a3000mem_check (uaecptr addr, uae_u32 size) { addr -= a3000mem_start & a3000mem_mask; addr &= a3000mem_mask; - return (addr + size) < a3000mem_size; + return (addr + size) <= allocated_a3000mem; } uae_u8 REGPARAM2 *a3000mem_xlate(uaecptr addr) @@ -432,16 +419,16 @@ uae_u8 REGPARAM2 *a3000mem_xlate(uaecptr uae_u8 *kickmemory; -static uae_u32 kickmem_lget(uaecptr) REGPARAM; -static uae_u32 kickmem_wget(uaecptr) REGPARAM; -static uae_u32 kickmem_bget(uaecptr) REGPARAM; -static void kickmem_lput(uaecptr, uae_u32) REGPARAM; -static void kickmem_wput(uaecptr, uae_u32) REGPARAM; -static void kickmem_bput(uaecptr, uae_u32) REGPARAM; -static int kickmem_check(uaecptr addr, uae_u32 size) REGPARAM; -static uae_u8 *kickmem_xlate(uaecptr addr) REGPARAM; +static uae_u32 kickmem_lget (uaecptr) REGPARAM; +static uae_u32 kickmem_wget (uaecptr) REGPARAM; +static uae_u32 kickmem_bget (uaecptr) REGPARAM; +static void kickmem_lput (uaecptr, uae_u32) REGPARAM; +static void kickmem_wput (uaecptr, uae_u32) REGPARAM; +static void kickmem_bput (uaecptr, uae_u32) REGPARAM; +static int kickmem_check (uaecptr addr, uae_u32 size) REGPARAM; +static uae_u8 *kickmem_xlate (uaecptr addr) REGPARAM; -uae_u32 REGPARAM2 kickmem_lget(uaecptr addr) +uae_u32 REGPARAM2 kickmem_lget (uaecptr addr) { uae_u32 *m; addr -= kickmem_start & kickmem_mask; @@ -450,7 +437,7 @@ uae_u32 REGPARAM2 kickmem_lget(uaecptr a return do_get_mem_long(m); } -uae_u32 REGPARAM2 kickmem_wget(uaecptr addr) +uae_u32 REGPARAM2 kickmem_wget (uaecptr addr) { uae_u16 *m; addr -= kickmem_start & kickmem_mask; @@ -459,36 +446,39 @@ uae_u32 REGPARAM2 kickmem_wget(uaecptr a return do_get_mem_word(m); } -uae_u32 REGPARAM2 kickmem_bget(uaecptr addr) +uae_u32 REGPARAM2 kickmem_bget (uaecptr addr) { addr -= kickmem_start & kickmem_mask; addr &= kickmem_mask; return kickmemory[addr]; } -void REGPARAM2 kickmem_lput(uaecptr addr, uae_u32 b) +void REGPARAM2 kickmem_lput (uaecptr addr, uae_u32 b) { - if (currprefs.illegal_mem) sprintf (warning_buffer, "Illegal kickmem lput at %08lx\n", addr); + if (currprefs.illegal_mem) + write_log ("Illegal kickmem lput at %08lx\n", addr); } -void REGPARAM2 kickmem_wput(uaecptr addr, uae_u32 b) +void REGPARAM2 kickmem_wput (uaecptr addr, uae_u32 b) { - if (currprefs.illegal_mem) sprintf (warning_buffer, "Illegal kickmem wput at %08lx\n", addr); + if (currprefs.illegal_mem) + write_log ("Illegal kickmem wput at %08lx\n", addr); } -void REGPARAM2 kickmem_bput(uaecptr addr, uae_u32 b) +void REGPARAM2 kickmem_bput (uaecptr addr, uae_u32 b) { - if (currprefs.illegal_mem) sprintf (warning_buffer, "Illegal kickmem lput at %08lx\n", addr); + if (currprefs.illegal_mem) + write_log ("Illegal kickmem lput at %08lx\n", addr); } -int REGPARAM2 kickmem_check(uaecptr addr, uae_u32 size) +int REGPARAM2 kickmem_check (uaecptr addr, uae_u32 size) { addr -= kickmem_start & kickmem_mask; addr &= kickmem_mask; - return (addr + size) < kickmem_size; + return (addr + size) <= kickmem_size; } -uae_u8 REGPARAM2 *kickmem_xlate(uaecptr addr) +uae_u8 REGPARAM2 *kickmem_xlate (uaecptr addr) { addr -= kickmem_start & kickmem_mask; addr &= kickmem_mask; @@ -497,19 +487,19 @@ uae_u8 REGPARAM2 *kickmem_xlate(uaecptr /* Default memory access functions */ -int REGPARAM2 default_check(uaecptr a, uae_u32 b) +int REGPARAM2 default_check (uaecptr a, uae_u32 b) { return 0; } -uae_u8 REGPARAM2 *default_xlate(uaecptr a) +uae_u8 REGPARAM2 *default_xlate (uaecptr a) { write_log ("Your Amiga program just did something terribly stupid\n"); uae_reset(); return kickmem_xlate (get_long (0xF80000)); /* So we don't crash. */ } -static int load_kickstart(void) +static int load_kickstart (void) { int i; uae_u32 cksum = 0, prevck = 0; @@ -524,7 +514,7 @@ static int load_kickstart(void) 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); + memcpy(kickmemory,(char*)0x1000000 - kickmem_size, kickmem_size); goto chk_sum; } #endif @@ -584,7 +574,7 @@ static int load_kickstart(void) prevck = cksum; } if (cksum != 0xFFFFFFFFul) { - write_log("Kickstart checksum incorrect. You probably have a corrupted ROM image.\n"); + write_log ("Kickstart checksum incorrect. You probably have a corrupted ROM image.\n"); } return 1; } @@ -629,71 +619,76 @@ addrbank kickmem_bank = { char *address_space, *good_address_map; int good_address_fd; + +static void init_mem_banks (void) +{ + int i; + for (i = 0; i < 65536; i++) + put_mem_bank (i<<16, &dummy_bank); +} + #define MAKE_USER_PROGRAMS_BEHAVE 1 -void memory_init(void) +void memory_init (void) { char buffer[4096]; char *nam; int i, fd; int custom_start; - chipmem_mask = chipmem_size - 1; - kickmem_mask = kickmem_size - 1; - bogomem_mask = bogomem_size - 1; - a3000mem_mask = a3000mem_size - 1; + allocated_chipmem = currprefs.chipmem_size; + allocated_bogomem = currprefs.bogomem_size; + allocated_a3000mem = currprefs.a3000mem_size; #ifdef USE_MAPPED_MEMORY - fd = open("/dev/zero", O_RDWR); - good_address_map = mmap(NULL, 1 << 24, PROT_READ, MAP_PRIVATE, fd, 0); + fd = open ("/dev/zero", O_RDWR); + good_address_map = mmap (NULL, 1 << 24, PROT_READ, MAP_PRIVATE, fd, 0); /* Don't believe USER_PROGRAMS_BEHAVE. Otherwise, we'd segfault as soon * as a decrunch routine tries to do color register hacks. */ - address_space = mmap(NULL, 1 << 24, PROT_READ | (USER_PROGRAMS_BEHAVE || MAKE_USER_PROGRAMS_BEHAVE? PROT_WRITE : 0), MAP_PRIVATE, fd, 0); + address_space = mmap (NULL, 1 << 24, PROT_READ | (USER_PROGRAMS_BEHAVE || MAKE_USER_PROGRAMS_BEHAVE? PROT_WRITE : 0), MAP_PRIVATE, fd, 0); if ((int)address_space < 0 || (int)good_address_map < 0) { write_log ("Your system does not have enough virtual memory - increase swap.\n"); - abort(); + abort (); } #ifdef MAKE_USER_PROGRAMS_BEHAVE - memset(address_space + 0xDFF180, 0xFF, 32*2); + memset (address_space + 0xDFF180, 0xFF, 32*2); #else /* Likewise. This is mostly for mouse button checks. */ if (USER_PROGRAMS_BEHAVE) - memset(address_space + 0xA00000, 0xFF, 0xF00000 - 0xA00000); + memset (address_space + 0xA00000, 0xFF, 0xF00000 - 0xA00000); #endif - chipmemory = mmap(address_space, 0x200000, PROT_READ|PROT_WRITE, MAP_PRIVATE | MAP_FIXED, fd, 0); - kickmemory = mmap(address_space + 0xF80000, 0x80000, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED, fd, 0); + chipmemory = mmap (address_space, 0x200000, PROT_READ|PROT_WRITE, MAP_PRIVATE | MAP_FIXED, fd, 0); + kickmemory = mmap (address_space + 0xF80000, 0x80000, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED, fd, 0); close(fd); - good_address_fd = open(nam = tmpnam (NULL), O_CREAT|O_RDWR, 0600); + good_address_fd = open (nam = tmpnam (NULL), O_CREAT|O_RDWR, 0600); memset (buffer, 1, sizeof(buffer)); write (good_address_fd, buffer, sizeof buffer); unlink (nam); - for (i = 0; i < chipmem_size; i += 4096) - mmap(good_address_map + i, 4096, PROT_READ, MAP_FIXED | MAP_PRIVATE, - good_address_fd, 0); + for (i = 0; i < allocated_chipmem; i += 4096) + mmap (good_address_map + i, 4096, PROT_READ, MAP_FIXED | MAP_PRIVATE, + good_address_fd, 0); for (i = 0; i < kickmem_size; i += 4096) - mmap(good_address_map + i + 0x1000000 - kickmem_size, 4096, PROT_READ, - MAP_FIXED | MAP_PRIVATE, good_address_fd, 0); + mmap (good_address_map + i + 0x1000000 - kickmem_size, 4096, PROT_READ, + MAP_FIXED | MAP_PRIVATE, good_address_fd, 0); #else - kickmemory = (uae_u8 *)xmalloc(kickmem_size); - chipmemory = (uae_u8 *)malloc(chipmem_size); + kickmemory = (uae_u8 *)xmalloc (kickmem_size); + chipmemory = (uae_u8 *)malloc (allocated_chipmem); - while (!chipmemory && chipmem_size > 512*1024) { - chipmem_size >>= 1; - chipmem_mask = chipmem_size - 1; - chipmemory = (uae_u8 *)malloc(chipmem_size); + while (! chipmemory && allocated_chipmem > 512*1024) { + allocated_chipmem >>= 1; + chipmemory = (uae_u8 *)malloc (allocated_chipmem); if (chipmemory) - fprintf (stderr, "Reducing chipmem size to %dkb\n", chipmem_size>>10); + fprintf (stderr, "Reducing chipmem size to %dkb\n", allocated_chipmem >> 10); } - if (!chipmemory) { + if (! chipmemory) { write_log ("virtual memory exhausted (chipmemory)!\n"); - abort(); + abort (); } #endif - for(i = 0; i < 65536; i++) - put_mem_bank (i<<16, &dummy_bank); + init_mem_banks (); /* Map the chipmem into all of the lower 16MB */ map_banks (&chipmem_bank, 0x00, 256); @@ -705,24 +700,28 @@ void memory_init(void) /* @@@ Does anyone have a clue what should be in the 0x200000 - 0xA00000 * range on an Amiga without expansion memory? */ - custom_start = chipmem_size >> 16; + custom_start = allocated_chipmem >> 16; if (custom_start < 0x20) custom_start = 0x20; map_banks (&dummy_bank, custom_start, 0xA0 - custom_start); /*map_banks (&mbres_bank, 0xDE, 1);*/ - if (bogomem_size > 0) - bogomemory = (uae_u8 *)xmalloc (bogomem_size); - if (bogomem_size > 0) - map_banks(&bogomem_bank, 0xC0, bogomem_size >> 16); - - if (a3000mem_size > 0) - a3000memory = (uae_u8 *)xmalloc (a3000mem_size); - if (a3000mem_size > 0) - map_banks(&a3000mem_bank, a3000mem_start >> 16, a3000mem_size >> 16); + if (allocated_bogomem > 0) + bogomemory = (uae_u8 *)xmalloc (allocated_bogomem); + if (bogomemory != 0) + map_banks (&bogomem_bank, 0xC0, allocated_bogomem >> 16); + else + allocated_bogomem = 0; + + if (allocated_a3000mem > 0) + a3000memory = (uae_u8 *)xmalloc (allocated_a3000mem); + if (a3000memory != 0) + map_banks (&a3000mem_bank, a3000mem_start >> 16, allocated_a3000mem >> 16); + else + allocated_a3000mem = 0; map_banks (&rtarea_bank, 0xF0, 1); - if (!load_kickstart ()) { + if (! load_kickstart ()) { init_ersatz_rom (kickmemory); ersatzkickfile = 1; } @@ -731,9 +730,15 @@ void memory_init(void) if (cloanto_rom) map_banks (&kickmem_bank, 0xE0, 8); + + chipmem_mask = allocated_chipmem- 1; + kickmem_mask = kickmem_size - 1; + bogomem_mask = allocated_bogomem - 1; + a3000mem_mask = allocated_a3000mem - 1; + } -void map_banks(addrbank *bank, int start, int size) +void map_banks (addrbank *bank, int start, int size) { int bnr; unsigned long int hioffs = 0, endhioffs = 0x100;