trap: obtain vector/psw from d-space
This commit is contained in:
parent
ac14e7be71
commit
6542640512
1 changed files with 3 additions and 3 deletions
6
cpu.cpp
6
cpu.cpp
|
@ -1496,7 +1496,7 @@ bool cpu::misc_operations(const uint16_t instr)
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
case 0b0000000000000100: // IOT
|
case 0b0000000000000100: // IOT
|
||||||
//trap(020); disabled for debugging
|
//trap(020); disabled for debugging TODO
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
case 0b0000000000000110: // RTT
|
case 0b0000000000000110: // RTT
|
||||||
|
@ -1626,10 +1626,10 @@ void cpu::trap(uint16_t vector, const int new_ipl, const bool is_interrupt)
|
||||||
// make sure the trap vector is retrieved from kernel space
|
// make sure the trap vector is retrieved from kernel space
|
||||||
psw &= 037777; // mask off 14/15
|
psw &= 037777; // mask off 14/15
|
||||||
|
|
||||||
setPC(b->readWord(vector + 0));
|
setPC(b->readWord(vector + 0, d_space));
|
||||||
|
|
||||||
// switch to kernel mode & update 'previous mode'
|
// switch to kernel mode & update 'previous mode'
|
||||||
uint16_t new_psw = b->readWord(vector + 2) & 0147777; // mask off old 'previous mode'
|
uint16_t new_psw = b->readWord(vector + 2, d_space) & 0147777; // mask off old 'previous mode'
|
||||||
if (new_ipl != -1)
|
if (new_ipl != -1)
|
||||||
new_psw = (new_psw & ~0xe0) | (new_ipl << 5);
|
new_psw = (new_psw & ~0xe0) | (new_ipl << 5);
|
||||||
new_psw |= (before_psw >> 2) & 030000; // apply new 'previous mode'
|
new_psw |= (before_psw >> 2) & 030000; // apply new 'previous mode'
|
||||||
|
|
Loading…
Add table
Reference in a new issue