fix(cpu): properly decode multiply instructions
This commit is contained in:
		
							
								
								
									
										14
									
								
								src/cpu.zig
									
									
									
									
									
								
							
							
						
						
									
										14
									
								
								src/cpu.zig
									
									
									
									
									
								
							| @@ -449,13 +449,6 @@ fn armPopulate() [0x1000]ArmInstrFn { | ||||
|                 lut[i] = psrTransfer(I, R, kind); | ||||
|             } | ||||
|  | ||||
|             if (i >> 6 & 0x3F == 0b000000 and i & 0xF == 0b1001) { | ||||
|                 const A = i >> 5 & 1 == 1; | ||||
|                 const S = i >> 4 & 1 == 1; | ||||
|  | ||||
|                 lut[i] = multiply(A, S); | ||||
|             } | ||||
|  | ||||
|             if (i == 0x121) { | ||||
|                 lut[i] = branchAndExchange; | ||||
|             } | ||||
| @@ -470,6 +463,13 @@ fn armPopulate() [0x1000]ArmInstrFn { | ||||
|                 lut[i] = halfAndSignedDataTransfer(P, U, I, W, L); | ||||
|             } | ||||
|  | ||||
|             if (i >> 6 & 0x3F == 0b000000 and i & 0xF == 0b1001) { | ||||
|                 const A = i >> 5 & 1 == 1; | ||||
|                 const S = i >> 4 & 1 == 1; | ||||
|  | ||||
|                 lut[i] = multiply(A, S); | ||||
|             } | ||||
|  | ||||
|             if (i >> 10 & 0x3 == 0b01) { | ||||
|                 const I = i >> 9 & 1 == 1; | ||||
|                 const P = i >> 8 & 1 == 1; | ||||
|   | ||||
| @@ -58,7 +58,7 @@ pub fn halfAndSignedDataTransfer(comptime P: bool, comptime U: bool, comptime I: | ||||
|                     // STRH | ||||
|                     bus.write16(address, @truncate(u16, cpu.r[rd])); | ||||
|                 } else { | ||||
|                     std.debug.panic("[CPU] TODO: Figure out if this is also SWP", .{}); | ||||
|                     std.debug.print("[CPU|ARM|SignedDataTransfer] {X:0>8} was improperly decoded", .{opcode}); | ||||
|                 } | ||||
|             } | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user