diff --git a/src/m68k.rs b/src/m68k.rs index 1933e18..d04889f 100644 --- a/src/m68k.rs +++ b/src/m68k.rs @@ -1675,11 +1675,12 @@ impl M68K { } fn trap(&mut self, vector: u8) -> Result<(), InsExecError> { + let orig_sr = self.sr; + self.sr |= 0x2000; let new_pc = self.read_address((u32::from(vector) * 4) + self.vbr, Size::Long)?; self.push(u32::from(vector), Size::Word)?; self.push(self.pc, Size::Long)?; - self.push(u32::from(self.sr), Size::Word)?; - self.sr |= 0x2000; + self.push(u32::from(orig_sr), Size::Word)?; self.pc = new_pc; Ok(()) } @@ -1692,6 +1693,8 @@ impl M68K { fault_addr: u32, write_data: u16, ) -> Result<(), InsExecError> { + let orig_sr = self.sr; + self.sr |= 0x2000; let new_pc = self.read_address(2 * 4 + self.vbr, Size::Long)?; // Version & internal information self.push(0, Size::Long)?; @@ -1729,8 +1732,7 @@ impl M68K { // Program counter self.push(self.pc, Size::Long)?; // Status register - self.push(u32::from(self.sr), Size::Word)?; - self.sr |= 0x2000; + self.push(u32::from(orig_sr), Size::Word)?; self.pc = new_pc; Ok(()) }