mirror of
				https://github.com/Ryujinx/Ryujinx.git
				synced 2025-10-24 18:20:31 -07:00 
			
		
		
		
	* Implement MSR instruction Fix #1342. Now Pocket Rumble is playable. * Address gdkchan's comments * Address gdkchan's comments * Address gdkchan's comment
		
			
				
	
	
		
			30 lines
		
	
	
		
			909 B
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			30 lines
		
	
	
		
			909 B
		
	
	
	
		
			C#
		
	
	
	
	
	
| using ARMeilleure.State;
 | |
| 
 | |
| namespace ARMeilleure.Decoders
 | |
| {
 | |
|     class OpCode32MsrReg : OpCode32
 | |
|     {
 | |
|         public bool R      { get; }
 | |
|         public int  Mask   { get; }
 | |
|         public int  Rd     { get; }
 | |
|         public bool Banked { get; }
 | |
|         public int  Rn     { get; }
 | |
| 
 | |
|         public new static OpCode Create(InstDescriptor inst, ulong address, int opCode) => new OpCode32MsrReg(inst, address, opCode);
 | |
| 
 | |
|         public OpCode32MsrReg(InstDescriptor inst, ulong address, int opCode) : base(inst, address, opCode)
 | |
|         {
 | |
|             R = ((opCode >> 22) & 1) != 0;
 | |
|             Mask = (opCode >> 16) & 0xf;
 | |
|             Rd = (opCode >> 12) & 0xf;
 | |
|             Banked = ((opCode >> 9) & 1) != 0;
 | |
|             Rn = (opCode >> 0) & 0xf;
 | |
| 
 | |
|             if (Rn == RegisterAlias.Aarch32Pc || Mask == 0)
 | |
|             {
 | |
|                 Instruction = InstDescriptor.Undefined;
 | |
|             }
 | |
|         }
 | |
|     }
 | |
| }
 |