src/memory.c

branch
experimental_memory_mapper_v2
changeset 132
8a7dc9b5b1db
parent 128
3246b74d96bc
parent 129
8b24770dea79
child 133
84ed5ec1d1e0
     1.1 --- a/src/memory.c	Fri Jan 18 17:03:48 2013 +0000
     1.2 +++ b/src/memory.c	Fri Jan 18 22:52:43 2013 +0000
     1.3 @@ -11,7 +11,8 @@
     1.4  // The value which will be returned if the CPU attempts to read from empty memory
     1.5  // TODO (FIXME?) - need to figure out if R/W ops wrap around. This seems to appease the UNIX kernel and P4TEST.
     1.6  #define EMPTY 0xFFFFFFFFUL
     1.7 -// #define EMPTY 0x55555555UL
     1.8 +//#define EMPTY 0x55555555UL
     1.9 +//#define EMPTY 0x00000000UL
    1.10  
    1.11  /******************
    1.12   * Memory mapping
    1.13 @@ -742,10 +743,8 @@
    1.14  		uint32_t newAddr = MAP_ADDR(address);
    1.15  
    1.16  		if (newAddr <= 0x1fffff) {
    1.17 -			if (newAddr >= state.base_ram_size)
    1.18 -				return EMPTY & 0xffffffff;
    1.19 -			else
    1.20 -				return RD32(state.base_ram, newAddr, state.base_ram_size - 1);
    1.21 +			// Base memory wraps around
    1.22 +			return RD32(state.base_ram, newAddr, state.base_ram_size - 1);
    1.23  		} else {
    1.24  			if ((newAddr <= (state.exp_ram_size + 0x200000 - 1)) && (newAddr >= 0x200000))
    1.25  				return RD32(state.exp_ram, newAddr - 0x200000, state.exp_ram_size - 1);
    1.26 @@ -795,10 +794,8 @@
    1.27  		uint32_t newAddr = MAP_ADDR(address);
    1.28  
    1.29  		if (newAddr <= 0x1fffff) {
    1.30 -			if (newAddr >= state.base_ram_size)
    1.31 -				return EMPTY & 0xffff;
    1.32 -			else
    1.33 -				return RD16(state.base_ram, newAddr, state.base_ram_size - 1);
    1.34 +			// Base memory wraps around
    1.35 +			return RD16(state.base_ram, newAddr, state.base_ram_size - 1);
    1.36  		} else {
    1.37  			if ((newAddr <= (state.exp_ram_size + 0x200000 - 1)) && (newAddr >= 0x200000))
    1.38  				return RD16(state.exp_ram, newAddr - 0x200000, state.exp_ram_size - 1);
    1.39 @@ -848,10 +845,8 @@
    1.40  		uint32_t newAddr = MAP_ADDR(address);
    1.41  
    1.42  		if (newAddr <= 0x1fffff) {
    1.43 -			if (newAddr >= state.base_ram_size)
    1.44 -				return EMPTY & 0xff;
    1.45 -			else
    1.46 -				return RD8(state.base_ram, newAddr, state.base_ram_size - 1);
    1.47 +			// Base memory wraps around
    1.48 +			return RD8(state.base_ram, newAddr, state.base_ram_size - 1);
    1.49  		} else {
    1.50  			if ((newAddr <= (state.exp_ram_size + 0x200000 - 1)) && (newAddr >= 0x200000))
    1.51  				return RD8(state.exp_ram, newAddr - 0x200000, state.exp_ram_size - 1);