--- cci/d/event/prvins_evt.s 2019/07/28 12:24:19 1.1.1.1 +++ cci/d/event/prvins_evt.s 2019/07/28 12:30:55 1.1.1.2 @@ -27,6 +27,8 @@ _prv_evt: mtpr $31,$IPL /* Set IPL to HIGH */ movab (sp),_savvec0 /* Save current SP */ mtpr _savvec0,$ISP /* Set ISP to current SP */ + mfpr $KSP,_savvec9 /* Save kernal stack pointer */ + mfpr $USP,_savveca /* Save user stack pointer */ movl _scb+PINSTVEC,_savvec2 /* Save priv. inst. fault vector */ movab vecvec4,_scb+PINSTVEC /* Sew new vector */ # @@ -35,12 +37,6 @@ _prv_evt: umode: movl $0x01000000,-(sp) /* Set PSL on stack; User mode */ movab ldctx,-(sp) /* Set PC for REI */ - movab _pcb0,r1 - mtpr r1,$PCBB /* Set PCBB to PCB_0 */ - addl3 $16,_savvec0,r1 - movl r1,_pcb0 /* Set PCB_KSP to SP + 16 */ - addl2 $16,r1 - movl r1,_pcb0+4 /* Set PCB_USP to SP + 32 */ clrl r5 /* R5 used as flags to be */ /* checked in event handler */ rei /* REI to User mode */ @@ -107,8 +103,7 @@ prvhlt: movl exp_pc,r7 movpsl r3 phlt: - svpctx -# jmp *badrtn /* Try HALT : Can not test this now */ + halt /* Try HALT instruction */ incl r5 /* Should never come here; set flag */ movl $2,r0 /* Expected fault did not happen !! */ jmp *badrtn /* R0 = error code */ @@ -160,7 +155,9 @@ nxt: lastst: /* All done,return to monitor */ movl _savvec2,_scb+PINSTVEC - mtpr _savvec0,$ISP + mtpr _savvec0,$ISP /* restore interrupt stack pointer */ + mtpr _savvec9,$KSP /* restore interrupt kernal pointer */ + mtpr _savveca,$USP /* restore interrupt user pointer */ pushl $0 /* Push dummy PC, PSL on stack */ pushl $0 /* We are now still on Kernel stack */ mtpr $31,$IPL