mirror of
https://github.com/TomHarte/CLK.git
synced 2024-12-26 09:29:45 +00:00
Fixes RTR: the whole top half of the SR should be preserved.
Specifically, the 68000 Reference Manual says: "The supervisor portion of the status register is unaffected." Clearly when I first read that I misread it as the supervisor _flag_ (rather than _portion_) should be preserved.
This commit is contained in:
parent
daacd6805e
commit
3cb5684d95
@ -1854,11 +1854,11 @@ template <class T, bool dtack_is_implicit, bool signal_will_perform> void Proces
|
||||
RTE and RTR share an implementation.
|
||||
*/
|
||||
case Operation::RTE_RTR:
|
||||
// If this is RTR, patch out the is_supervisor bit.
|
||||
// If this is RTR, patch out the supervisor half of the status register.
|
||||
if(decoded_instruction_.full == 0x4e77) {
|
||||
source_bus_data_[0].full =
|
||||
(source_bus_data_[0].full & uint32_t(~(1 << 13))) |
|
||||
uint32_t(is_supervisor_ << 13);
|
||||
const auto current_status = get_status();
|
||||
source_bus_data_[0].halves.low.halves.high =
|
||||
uint8_t(current_status >> 8);
|
||||
}
|
||||
set_status(source_bus_data_[0].full);
|
||||
break;
|
||||
|
Loading…
Reference in New Issue
Block a user