edea

A ps1 emulator in harelang
Log | Files | Refs

ram.ha (1181B)


      1 use fmt;
      2 
      3 export type ram = struct {
      4 	data: []u8
      5 };
      6 
      7 export fn new() ram = {
      8 
      9 	let b:[2*1024*1024]u8 = [0xca...];
     10 
     11 	return ram {
     12 		data = alloc(b),
     13 	};
     14 
     15 };
     16 
     17 export fn load32(ram: ram, o: u32) u32 = {
     18 	let off = o;
     19 
     20 	let b0 = ram.data[off + 0]: u32;
     21 	let b1 = ram.data[off + 1]: u32;
     22 	let b2 = ram.data[off + 2]: u32;
     23 	let b3 = ram.data[off + 3]: u32;
     24 
     25 	let res = b0 | (b1 << 8) | (b2 << 16) | (b3 << 24);
     26 
     27 	return res;
     28 
     29 };
     30 
     31 export fn load16(ram: ram, o: u32) u16 = {
     32 	let off = o;
     33 
     34 	let b0 = ram.data[off + 0]: u16;
     35 	let b1 = ram.data[off + 1]: u16;
     36 
     37 	let res = b0 | (b1 << 8);
     38 
     39 	return res;
     40 
     41 };
     42 
     43 export fn load8(ram: ram, o: u32) u8 = {
     44 	return ram.data[o:size];
     45 };
     46 
     47 export fn store16(ram: ram, o: u32, val: u16) void = {
     48 	let off = o;
     49 
     50 	let b0 = val: u8;
     51 	let b1 = (val >> 8): u8;
     52 
     53 	ram.data[o + 0] = b0;
     54 	ram.data[o + 1] = b1;
     55 };
     56 
     57 export fn store32(ram: ram, o: u32, val: u32) void = {
     58 	let off = o;
     59 
     60 	let b0 = val: u8;
     61 	let b1 = (val >> 8): u8;
     62 	let b2 = (val >> 16): u8;
     63 	let b3 = (val >> 24): u8;
     64 
     65 	ram.data[o + 0] = b0;
     66 	ram.data[o + 1] = b1;
     67 	ram.data[o + 2] = b2;
     68 	ram.data[o + 3] = b3;
     69 
     70 };
     71 
     72 export fn store8(ram: ram, o: u32, val: u8) void = {
     73 	ram.data[o + 0] = val;
     74 };