INSERT[D0LANG]; NOMIDASINIT; TITLE[d0rsr]; *last edited by CT June 10, 1979 SETTASK[17]; RV[REFR,77]; *memory refresh address *The following registers hold the volatile state of the processor on a fault: RV[RXALU,76]; *ALU result and SALUF RV[RXAPC,75]; *APCTask&APC RV[RXCTASK,74]; *CTASK.NCIA RV[RXPPB,73]; *Page,Parity,BootReason RV[RXSTK,72]; *Stackpointer RV[RTMP,71]; *temporary *The following registers are used for D0-Midas communication (RTMP is also used): RV[RWSTAT,70]; *status register RV[RDATA,67]; *holds data *FFault determines how faults will be treated when programs are running. If it is *zero, all faults will be reported to Midas. If FFault is nonzero, the kernel will *send control through location 120 when a fault occurs and PARITY # 0 (faults with *PARITY = 0 are breakpoints). RV[FFAULT,66]; *Registers between 360 and 367 are used by the Midas overlays. The following *registers, used by WriteMI, are also in this range. RV[RADDR,65]; RV[RCNT,64]; RV[STACK4,64]; RV[RW0,63]; RV[STACK3,63]; RV[RW1,62]; RV[STACK2,62]; RV[STACK1,61]; MC[pStk1,361]; *pointer to stack1 RV[STACK0,60]; *Constants for Recv and Send MC[RecvByte,12]; MC[RecvWord,16]; MC[SendByte,21]; MC[SendWord,25]; *The following are at fixed locations in Kernel.mc: UserFault: Return, AT[120]; NextCom: Return, AT[7404]; Send: Return, AT[7460]; Recv: Return, AT[7464]; *d0rsr overlay *Used by Midas to read RM 0 and RM 11-17, which cannot be read with the stackpointer, since *stack overflow would be caused. *Notify task 0 at 7510 + ReadCode to do the read OverlayArea: RWSTAT ← RecvByte, Call[Recv], at[7500]; *get code (0-10b) into T RTMP ← pStk1,at[7501]; Stkp ← RTMP, at[7502]; *set stkp to point to stack1 stack1 ← 7400c, at[7503]; stack1 ← (stack1) + (110c), at[7504]; stack1 ← (stack1) + (T), at[7505]; *stack1 points to task 0, location 7510 + ReadCode stack0 ← 177400c, at[7506]; *set up stack0 to point to task 17, location 7523 stack0 ← (stack0) + (123c), goto[NotifyBothWays], at[7507]; SetTask[0]; RV[R0,0]; RV[R11,11]; RV[R12,12]; RV[R13,13]; RV[R14,14]; RV[R15,15]; RV[R16,16]; RV[R17,17]; MNBR ← R0,goto[NotifyBothWays],at[7510]; MNBR ← R11,goto[NotifyBothWays],at[7511]; MNBR ← R12,goto[NotifyBothWays],at[7512]; MNBR ← R13,goto[NotifyBothWays],at[7513]; MNBR ← R14,goto[NotifyBothWays],at[7514]; MNBR ← R15,goto[NotifyBothWays],at[7515]; MNBR ← R16,goto[NotifyBothWays],at[7516]; MNBR ← R17,goto[NotifyBothWays],at[7517]; SetTask[17]; nop, AT[7520]; NotifyBothWays: APC&APCTask ← Stack&-1,at[7521]; return, AT[7522]; T ← MNBR, AT[7523]; *back in task 17 RDATA ← T, AT[7524]; RWSTAT ← SendWord, Call[Send], AT[7525]; *send the word to Midas goto[NextCom], AT[7526]; END;