public static void setMEM2Upper(UInt32 upper) { ValidAreas[1] = new AddressRange(AddressType.UncachedMem2, 0x90000000, upper); }
public static void setDataUpper(TCPGecko upper) { UInt32 mem; switch (upper.OsVersionRequest()) { case 400: case 410: mem = upper.peek_kern(0xffe8619c); break; case 500: case 510: return; // TODO: This doesn't work for some reason - crashes on connection? //mem = upper.peek_kern(0xffe8591c); //break; default: return; } UInt32 tbl = upper.peek_kern(mem + 4); UInt32 lst = upper.peek_kern(tbl + 20); UInt32 init_start = upper.peek_kern(lst + 0 + 0x00); UInt32 init_len = upper.peek_kern(lst + 4 + 0x00); UInt32 code_start = upper.peek_kern(lst + 0 + 0x10); UInt32 code_len = upper.peek_kern(lst + 4 + 0x10); UInt32 data_start = upper.peek_kern(lst + 0 + 0x20); UInt32 data_len = upper.peek_kern(lst + 4 + 0x20); ValidAreas[0] = new AddressRange(AddressType.Ex, init_start, init_start + init_len); ValidAreas[1] = new AddressRange(AddressType.Ex, code_start, code_start + code_len); ValidAreas[2] = new AddressRange(AddressType.Rw, data_start, data_start + data_len); }