edea

A ps1 emulator in harelang
Log | Files | Refs

instruction.ha (553B)


      1 use fmt;
      2 export type instruction = struct {
      3 	instr: u32,
      4 	func: u32,
      5 	t: u32,
      6 	s: u32,
      7 	d: u32,
      8 	imm: u32,
      9 	imm_se: u32,
     10 	sub: u32,
     11 	shift: u32,
     12 	imm_jump: u32,
     13 	cop_opcode: u32,
     14 };
     15 
     16 export fn new(ins: u32) instruction = {
     17 
     18 	let i = instruction {
     19 		instr = ins,
     20 		func = ins >> 26,
     21 		t = (ins >> 16) & 0x1f,
     22 		s = (ins >> 21) & 0x1f,
     23 		d = (ins >> 11) & 0x1f,
     24 		imm = ins & 0xffff,
     25 		imm_se = ((ins & 0xffff): i16): u32,
     26 		sub = ins & 0x3f,
     27 		shift = (ins >> 6) & 0x1f,
     28 		imm_jump = ins & 0x3ffffff,
     29 		cop_opcode = (ins >> 21) & 0x1f
     30 	};
     31 
     32 	return i;
     33 };