Tue, 28 Dec 2010 17:47:01 +0000
finish expansion memory emulation
src/main.c | file | annotate | diff | revisions | |
src/memory.c | file | annotate | diff | revisions |
1.1 diff -r c895256b528d -r f772d3c40531 src/main.c 1.2 --- a/src/main.c Tue Dec 28 17:31:28 2010 +0000 1.3 +++ b/src/main.c Tue Dec 28 17:47:01 2010 +0000 1.4 @@ -165,7 +165,7 @@ 1.5 // set up system state 1.6 // 512K of RAM 1.7 int i; 1.8 - if ((i = state_init(512*1024, 0)) != STATE_E_OK) { 1.9 + if ((i = state_init(512*1024, 512*1024)) != STATE_E_OK) { 1.10 fprintf(stderr, "ERROR: Emulator initialisation failed. Error code %d.\n", i); 1.11 return i; 1.12 }
2.1 diff -r c895256b528d -r f772d3c40531 src/memory.c 2.2 --- a/src/memory.c Tue Dec 28 17:31:28 2010 +0000 2.3 +++ b/src/memory.c Tue Dec 28 17:47:01 2010 +0000 2.4 @@ -561,11 +561,14 @@ 2.5 } else if (address <= 0x3fffff) { 2.6 // RAM access 2.7 uint32_t newAddr = mapAddr(address, false); 2.8 - if (newAddr <= 0x1fffff) 2.9 + if (newAddr <= 0x1fffff) { 2.10 return RD32(state.base_ram, newAddr, state.base_ram_size - 1); 2.11 - else 2.12 - return 0xFFFFFFFF; 2.13 - // TODO: expansion RAM 2.14 + } else { 2.15 + if (newAddr <= (state.exp_ram_size + 0x200000 - 1)) 2.16 + return RD32(state.exp_ram, newAddr - 0x200000, state.exp_ram_size - 1); 2.17 + else 2.18 + return 0xffffffff; 2.19 + } 2.20 } else if ((address >= 0x400000) && (address <= 0x7FFFFF)) { 2.21 // I/O register space, zone A 2.22 switch (address & 0x0F0000) { 2.23 @@ -607,11 +610,14 @@ 2.24 } else if (address <= 0x3fffff) { 2.25 // RAM access 2.26 uint32_t newAddr = mapAddr(address, false); 2.27 - if (newAddr <= 0x1fffff) 2.28 + if (newAddr <= 0x1fffff) { 2.29 return RD16(state.base_ram, newAddr, state.base_ram_size - 1); 2.30 - else 2.31 - return 0xFFFF; 2.32 - // TODO: expansion RAM 2.33 + } else { 2.34 + if (newAddr <= (state.exp_ram_size + 0x200000 - 1)) 2.35 + return RD16(state.exp_ram, newAddr - 0x200000, state.exp_ram_size - 1); 2.36 + else 2.37 + return 0xffff; 2.38 + } 2.39 } else if ((address >= 0x400000) && (address <= 0x7FFFFF)) { 2.40 // I/O register space, zone A 2.41 switch (address & 0x0F0000) { 2.42 @@ -653,11 +659,14 @@ 2.43 } else if (address <= 0x3fffff) { 2.44 // RAM access 2.45 uint32_t newAddr = mapAddr(address, false); 2.46 - if (newAddr <= 0x1fffff) 2.47 + if (newAddr <= 0x1fffff) { 2.48 return RD8(state.base_ram, newAddr, state.base_ram_size - 1); 2.49 - else 2.50 - return 0xFFFFFFFF; 2.51 - // TODO: expansion RAM 2.52 + } else { 2.53 + if (newAddr <= (state.exp_ram_size + 0x200000 - 1)) 2.54 + return RD8(state.exp_ram, newAddr - 0x200000, state.exp_ram_size - 1); 2.55 + else 2.56 + return 0xff; 2.57 + } 2.58 } else if ((address >= 0x400000) && (address <= 0x7FFFFF)) { 2.59 // I/O register space, zone A 2.60 switch (address & 0x0F0000) { 2.61 @@ -696,9 +705,11 @@ 2.62 } else if (address <= 0x3FFFFF) { 2.63 // RAM access 2.64 uint32_t newAddr = mapAddr(address, true); 2.65 - if (newAddr <= 0x1fffff) 2.66 + if (newAddr <= 0x1fffff) { 2.67 WR32(state.base_ram, newAddr, state.base_ram_size - 1, value); 2.68 - // TODO: expansion ram 2.69 + } else { 2.70 +// WR32(state.exp_ram, newAddr - 0x200000, state.exp_ram_size - 1, value); 2.71 + } 2.72 } else if ((address >= 0x400000) && (address <= 0x7FFFFF)) { 2.73 // I/O register space, zone A 2.74 switch (address & 0x0F0000) { 2.75 @@ -735,9 +746,11 @@ 2.76 } else if (address <= 0x3FFFFF) { 2.77 // RAM access 2.78 uint32_t newAddr = mapAddr(address, true); 2.79 - if (newAddr <= 0x1fffff) 2.80 + if (newAddr <= 0x1fffff) { 2.81 WR16(state.base_ram, newAddr, state.base_ram_size - 1, value); 2.82 - // TODO: expansion ram 2.83 + } else { 2.84 +// WR16(state.exp_ram, newAddr - 0x200000, state.exp_ram_size - 1, value); 2.85 + } 2.86 } else if ((address >= 0x400000) && (address <= 0x7FFFFF)) { 2.87 // I/O register space, zone A 2.88 switch (address & 0x0F0000) { 2.89 @@ -774,9 +787,11 @@ 2.90 } else if (address <= 0x3FFFFF) { 2.91 // RAM access 2.92 uint32_t newAddr = mapAddr(address, true); 2.93 - if (newAddr <= 0x1fffff) 2.94 + if (newAddr <= 0x1fffff) { 2.95 WR8(state.base_ram, newAddr, state.base_ram_size - 1, value); 2.96 - // TODO: expansion ram 2.97 + } else { 2.98 +// WR8(state.exp_ram, newAddr - 0x200000, state.exp_ram_size - 1, value); 2.99 + } 2.100 } else if ((address >= 0x400000) && (address <= 0x7FFFFF)) { 2.101 // I/O register space, zone A 2.102 switch (address & 0x0F0000) {