util.ha (1546B)
1 use fmt; 2 use os; 3 4 export const DEBUG: bool = false; 5 6 export const BIOS_START: u32 = 0x1FC00000; 7 export def BIOS_SIZE: u64 = 512 * 1024; 8 9 export const MEMCONTROL_START: u32 = 0x1F801000; 10 export const MEMCONTROL_SIZE: u64 = 36; 11 12 export const RAM_SIZE_START: u32 = 0x1F801060; 13 export const RAM_SIZE_SIZE: u64 = 4; 14 15 export const CACHE_CONTROL_START: u32 = 0xFFFE0130; 16 export const CACHE_CONTROL_SIZE: u64 = 4; 17 18 export const RAM_START: u32 = 0x00000000; 19 export const RAM_SIZE: u64 = 2 * 1024 * 1024; 20 21 export const SPU_START: u32 = 0x1F801C00; 22 export const SPU_SIZE: u64 = 640; 23 24 export const EXPANSION_1_START: u32 = 0x1F000000; 25 export const EXPANSION_1_SIZE: u64 = 512*1024; 26 27 export const EXPANSION_2_START: u32 = 0x1F802000; 28 export const EXPANSION_2_SIZE: u64 = 66; 29 30 export const IRQ_CONTROL_START: u32 = 0x1F801070; 31 export const IRQ_CONTROL_SIZE: u64 = 8; 32 33 export const TIMERS_START: u32 = 0x1F801100; 34 export const TIMERS_SIZE: u64 = 0x30; 35 36 export const DMA_START: u32 = 0x1F801080; 37 export const DMA_SIZE: u64 = 0x80; 38 39 export const GPU_START: u32 = 0x1F801810; 40 export const GPU_SIZE: u64 = 8; 41 42 export const REGION_MASK: [8]u32 = [ 43 // KUSEG: 2MB 44 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 45 // KSEG0: 512MB 46 0x7fffffff, 47 // KSEG1: 512MB 48 0x1fffffff, 49 // KSEG2: 1MB 50 0xffffffff, 0xffffffff 51 ]; 52 53 export fn mask_region(addr: u32) u32 = { 54 let idx = (addr >> 29): size; 55 return addr & REGION_MASK[idx]; 56 }; 57 58 59 export fn contains(start: u32, length: u32, addr: u32) (u32 | void) = { 60 if (addr >= start && addr < start + length) 61 return addr-start; 62 };