1.1 --- a/src/mem.c Sat Dec 20 03:01:40 2008 +0000
1.2 +++ b/src/mem.c Mon Dec 22 09:51:11 2008 +0000
1.4 #include "dreamcast.h"
1.6 sh4ptr_t *page_map = NULL;
1.7 +mem_region_fn_t *ext_address_space = NULL;
1.9 +extern struct mem_region_fn mem_region_unmapped;
1.11 int mem_load(FILE *f);
1.12 void mem_save(FILE *f);
1.15 void mem_init( void )
1.18 + mem_region_fn_t *ptr;
1.19 page_map = mmap( NULL, sizeof(sh4ptr_t) * LXDREAM_PAGE_TABLE_ENTRIES,
1.20 PROT_READ|PROT_WRITE, MAP_ANON|MAP_PRIVATE, -1, 0 );
1.21 if( page_map == MAP_FAILED ) {
1.22 - ERROR( "Unable to allocate page map! (%s)", strerror(errno) );
1.25 + FATAL( "Unable to allocate page map! (%s)", strerror(errno) );
1.27 + memset( page_map, 0, sizeof(sh4ptr_t) * LXDREAM_PAGE_TABLE_ENTRIES );
1.29 + ext_address_space = mmap( NULL, sizeof(mem_region_fn_t) * LXDREAM_PAGE_TABLE_ENTRIES,
1.30 + PROT_READ|PROT_WRITE, MAP_ANON|MAP_PRIVATE, -1, 0 );
1.31 + if( ext_address_space == MAP_FAILED ) {
1.32 + FATAL( "Unable to allocate external memory map (%s)", strerror(errno) );
1.35 - memset( page_map, 0, sizeof(sh4ptr_t) * LXDREAM_PAGE_TABLE_ENTRIES );
1.36 + for( ptr = ext_address_space, i = LXDREAM_PAGE_TABLE_ENTRIES; i > 0; ptr++, i-- ) {
1.37 + *ptr = &mem_region_unmapped;
1.41 void mem_reset( void )
1.42 @@ -238,8 +250,10 @@
1.46 - for( i=0; i<size>>LXDREAM_PAGE_BITS; i++ )
1.47 + for( i=0; i<size>>LXDREAM_PAGE_BITS; i++ ) {
1.48 page_map[(base>>LXDREAM_PAGE_BITS)+i] = mem + (i<<LXDREAM_PAGE_BITS);
1.49 + ext_address_space[(base>>LXDREAM_PAGE_BITS)+i] = fn;
1.51 base += repeat_offset;
1.52 } while( base <= repeat_until );
1.55 P4_io[(io->base&0x1FFFFFFF)>>19] = io;
1.57 page_map[io->base>>12] = (sh4ptr_t)(uintptr_t)num_io_rgns;
1.58 + ext_address_space[io->base>>12] = &io->fn;
1.60 io_rgn[num_io_rgns] = io;