edea

A ps1 emulator in harelang
Log | Files | Refs

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 };