1.1 --- a/src/mem.c Tue Jan 10 14:00:00 2006 +0000
1.2 +++ b/src/mem.c Wed May 24 11:50:19 2006 +0000
1.5 - * $Id: mem.c,v 1.11 2006-01-10 14:00:00 nkeynes Exp $
1.6 + * $Id: mem.c,v 1.12 2006-05-20 02:38:58 nkeynes Exp $
1.7 * mem.c is responsible for creating and maintaining the overall system memory
1.8 * map, as visible from the SH4 processor.
1.13 struct mem_region *mem_map_region( void *mem, uint32_t base, uint32_t size,
1.14 - char *name, int flags )
1.15 + char *name, int flags, uint32_t repeat_offset,
1.16 + uint32_t repeat_until )
1.19 mem_rgn[num_mem_rgns].base = base;
1.20 @@ -232,14 +233,23 @@
1.21 mem_rgn[num_mem_rgns].mem = mem;
1.24 - for( i=0; i<size>>PAGE_BITS; i++ )
1.25 - page_map[(base>>PAGE_BITS)+i] = mem + (i<<PAGE_BITS);
1.27 + for( i=0; i<size>>PAGE_BITS; i++ )
1.28 + page_map[(base>>PAGE_BITS)+i] = mem + (i<<PAGE_BITS);
1.29 + base += repeat_offset;
1.30 + } while( base <= repeat_until );
1.32 return &mem_rgn[num_mem_rgns-1];
1.35 void *mem_create_ram_region( uint32_t base, uint32_t size, char *name )
1.37 + return mem_create_repeating_ram_region( base, size, name, size, base );
1.40 +void *mem_create_repeating_ram_region( uint32_t base, uint32_t size, char *name,
1.41 + uint32_t repeat_offset, uint32_t repeat_until )
1.45 assert( (base&0xFFFFF000) == base ); /* must be page aligned */
1.48 mem = mem_alloc_pages( size>>PAGE_BITS );
1.50 - mem_map_region( mem, base, size, name, MEM_FLAG_RAM );
1.51 + mem_map_region( mem, base, size, name, MEM_FLAG_RAM, repeat_offset, repeat_until );
1.60 - mem_map_region( mem, base, size, file, MEM_FLAG_ROM );
1.61 + mem_map_region( mem, base, size, file, MEM_FLAG_ROM, size, base );
1.64 calc_crc = crc32(0L, mem, size);