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