;************************************** ;* DVNO3S * ;* INTERFACE BETWEEN HARDWARE AND IMP* ;* DATE: 20 SEP 84 * ;************************************** ; FOR SUP40 AND BEYOND - 100 INTERRUPTS - AND EXPANDED DUMP ; AUTOMATIC POWER UP ADDED PS=177776; PROCESSOR STATUS WORD IDLEST=-1; SUPERVISOR IDLE FLAG INTVAL=40; DEDICATED LOCATION FOR INTERRUPT NUMBER ALARMF=44; DITTO - FOR CLOCK PSECT=46; DITTO - CURRENT PSECT LASTPS = 54 PXPT=56; POINTS TO RECORD P2 & PXP IN KERNAL UPAR=177640 UPDR=177600 UPAR0=40; INDEC INTO PSECT UPDR0=UPAR0+2; DITTO UR0=14 UR4=UR0+10; ALL DITTO UPC=UR0+14 UPS=UR0+16 USP=UR0+20 UTRP=UR0+22 SWR = 777570 .=0 0,0 ADDERR, 340 ADDERR, 340; SUPPOSE IT OUGHT TO BE DIFFERENT !!!!!! BPTINT,340 IOTINT,340; 20,22 PWERUP, 340; POWER UP CODE SVC,340; EMT HANDLER .+2,0 .+2,0 .+2,0 .+2,0; 50,52 .+2,0; 54,56 .=40 INT6BA; FOR USE IN SBLD ONLY .=60 KBINT,340,TTINT,340 .=70; PR AND PP INT PRINT,340 LPINT,340 .=100 TIMINT,340 TIMINT,340; ALLOW FOR BOTH CLOCKS .=120; GRAPH PLOTTER INT GPINT, 340 .=140; DUMP ADDRESS JMP DUMP .=200; LP (REAL) INT LPINT,340 .=220; DISC INT DKINT, 340 .=224; TU16 INT TU16IT,340 .=230; CR INT CRINT,340 .=250; SEGMENTATION TRAP SEGTRP, 340 .=270; BIG DISC INT RP4INT, 340 .=300; PL11 #1 (TELETYPE), VEC=175610 KB2INT,340 TT2INT,340 ; PL11 #2 (TEXTTRONIC), VEC = 175620 KB3INT,340 TT3INT,340 .=65760; CODE TO TRAP TOP OF REAL STORE CLR @#65770 RTI ; .PAGE .=1300; LEAVING ROOM FOR SUP STACK RUN: MOV PSECT, R3; GET CURRENT PSECT BEQ IDLE; GO INTO IDLE LOOP MOV R3, R0; PSECT POINTER TO R0 ADD #USP, R0; POINT R0 AT USER SP CMP LASTPS,R3; SAME AS LAST TIME? BEQ NOSER; YES, SO DONT RESTORE SEG REGS MOV R3,LASTPS; MAKE IT TRUE NOW MOV #UPAR,R1; POINT R1 AT USER SEG REGISTER PAR 0 MOV #UPDR,R2; R2 AT PDR 0 MOV #8.,R5; 8 REGISTERS ADD #UPAR0,R3; POINT R3 AT REGS IN PSECT LOOP: MOV (R3)+,(R1)+; SHIFT PAR(N) MOV (R3),(R2)+; PDR(N) ADD #10-2,R3; POINT AT NEXT BLOCK 077505; SOB R5,LOOP; BRACH BACK TILL FINISHED MOV #030340,PS; SET PREVIOUS MODE=USER MOV (R0),-(SP); PLANT ON STACK .WORD 6606; MTPI R6 - SET R16 NOSER: MOV -(R0), -(SP); PLANT PS ON STACK MOV -(R0), -(SP); AND PC MOV -(R0), R5 MOV -(R0),R4 MOV -(R0),R3 MOV -(R0), R2 MOV -(R0), R1 MOV -(R0),R0; RESTORE ALL HIS REGISTERS .WORD 6; RTT; AND EXIT TO HIM IDLE:; IDLE LOOP CLR PS WAIT BR IDLE DPTAB: 0; NORMAL BRUN = 0 SAVER4: 0 SAVER5: 0; MAIN SUPERVISOR PLANTS VALUES HERE SVC: JSR R5,SAVE; SAVE THE REGS MOV UPC-UTRP(R4), R4; PUT HIS PC ON THE STACK .WORD 6544; MFPI -(R4); GET THE WORD BEFORE THE PC (EMT CODE) MOVB (SP)+,R1; GET THE CODE (BYTE) INTO R1 EXIT: MOV SAVER4, R4 MOV SAVER5, R5; AND RESTORE R5 EXIT2: RTS PC SAVE: MOV R4,-(SP) MOV LASTPS,R4; PSECT ADDR ADD #UR0,R4; POINT AT USER REGS MOV R0,(R4)+ MOV R1,(R4)+ MOV R2,(R4)+ MOV R3,(R4)+ MOV (SP)+,(R4)+; R4 MOV (SP)+,(R4)+; R5 MOV (SP)+,(R4)+; PC MOV (SP)+,(R4)+; PS .WORD 6506; MFPI R6 - GET USER R6 MOV (SP)+,(R4)+; AND SAVE MOV R5,PC; AND RETURN INT: TST PSECT; IS THERE AN ACTIVE TASK? BNE NORMAL; YES, SO SAVE ITS REGISTERS ADD #4, SP; DUMP PC&PS MOV #-1,R1; SET INT CODE=-1 BR EXIT2; AND EXIT NORMAL: JSR R5,SAVE; SAVE THE CONTEXT MOV #-1,R1; SET SERVICE=INTERRUPT BR EXIT; AND RETURN ; ********************************************************* ; DEVICE INTERRUPTS KBINT: MOV #-2,INTVAL BR INT TTINT: MOV #-1,INTVAL BR INT TIMINT: CLR INTVAL; INT VALUE=0 BR INT DKINT: MOV #-3, INTVAL BR INT SEGTRP: MOV #1, @#52 ERR2: BIT #030000,PS; PREVIOUS = USER? BNE ERR3; YES, IE USER TASK ERROR JMP DUMP; NO, SO WERE IN SUPER STATE (KERNAL ERROR) - SO DUMP IT ERR3: MOV #-4,INTVAL BR INT ADDERR: MOV #2, @#52 BR ERR2 TU16IT: MOV #-5, INTVAL BR INT SPEC: MOV PSECT,R0 MOV 2(R0),-(SP); PICKUP TASK ID MOV PXPT,R0; GET POINTER TO RECORD P2 IN KERNAL MOV (SP)+,6(R0); SAVE TASK ID IN P_C MOV 2(SP),4(R0); SAVE TH EPC IN P_B MOV (SP)+, R0; RESTORE R0 INT2: BR INT; IN CASE ITS NEEDED LATER INT6BA: ; NB: ALL INTS BENEATH MAY BE OVERWRITTEN BY SBLD ************* TXINT: MOV #-6, INTVAL BR INT RXINT: MOV #-7, INTVAL BR INT RP4INT: MOV #-10, INTVAL BR INT LPINT: MOV #-11, INTVAL BR INT BPTINT: MOV #-12,INTVAL MOV R0,-(SP); SAVE R0 FOR TEMP USE BR SPEC .WORD 240; PADDING, SO SAME LENGTH KB2INT: MOV #-13,INTVAL BR INT TT2INT: MOV #-14, INTVAL BR INT KB3INT: MOV #-15, INTVAL BR INT TT3INT: MOV #-16, INTVAL BR INT MOV #-17, INTVAL BR INT CRINT: MOV #-20,INTVAL BR INT PRINT: MOV #-21,INTVAL BR INT GPINT: MOV #-22, INTVAL; GRAPH PLOTTER BR INT DTINT: MOV #-23, INTVAL BR INT X1INT: MOV #-24, INTVAL BR INT X2INT: MOV #-25, INTVAL BR INT MOV #-26,INTVAL BR INT2 MOV #-27,INTVAL BR INT2 MOV #-30,INTVAL BR INT2 MOV #-31,INTVAL BR INT2 MOV #-32,INTVAL BR INT2 MOV #-33,INTVAL BR INT2 MOV #-34,INTVAL BR INT2 MOV #-35,INTVAL BR INT2 MOV #-36,INTVAL INTX:BR INT2 MOV #-37,INTVAL BR INT2 MOV #-40,INTVAL BR INT2 MOV #-41,INTVAL BR INT2 MOV #-42,INTVAL BR INT2 MOV #-43,INTVAL BR INT2 MOV #-44,INTVAL BR INT2 MOV #-45,INTVAL BR INTX MOV #-46,INTVAL BR INTX MOV #-47,INTVAL BR INTX MOV #-50,INTVAL BR INTX MOV #-51,INTVAL BR INTX MOV #-52,INTVAL BR INTX MOV #-53,INTVAL BR INTX MOV #-54,INTVAL BR INTX MOV #-55,INTVAL BR INTX MOV #-56,INTVAL BR INTX MOV #-57,INTVAL BR INTX MOV #-60,INTVAL BR INTX MOV #-49.,INTVAL BR INTX MOV #-50.,INTVAL BR INTX MOV #-51.,INTVAL BR INTX MOV #-52.,INTVAL BR INTX MOV #-53.,INTVAL BR INTX MOV #-54.,INTVAL BR INTX MOV #-55.,INTVAL BR INTX MOV #-56.,INTVAL BR INTX MOV #-57.,INTVAL BR INTX MOV #-58.,INTVAL BR INTX MOV #-59.,INTVAL BR INTX MOV #-60.,INTVAL BR INTX MOV #-61.,INTVAL INTY:BR INTX MOV #-62.,INTVAL BR INTY MOV #-63.,INTVAL BR INTY MOV #-64.,INTVAL BR INTY MOV #-65.,INTVAL BR INTY MOV #-66.,INTVAL BR INTY MOV #-67.,INTVAL BR INTY MOV #-68.,INTVAL BR INTY MOV #-69.,INTVAL BR INTY MOV #-70.,INTVAL BR INTY MOV #-71.,INTVAL BR INTY MOV #-72.,INTVAL BR INTY MOV #-73.,INTVAL BR INTY MOV #-74.,INTVAL BR INTY MOV #-75.,INTVAL BR INTY MOV #-76.,INTVAL BR INTY MOV #-77.,INTVAL BR INTY MOV #-78.,INTVAL BR INTY MOV #-79.,INTVAL BR INTY MOV #-80.,INTVAL BR INTY MOV #-81.,INTVAL BR INTY MOV #-82.,INTVAL BR INTY MOV #-83.,INTVAL BR INTY MOV #-84.,INTVAL BR INTY MOV #-85.,INTVAL BR INTY ; ******* SECTION TO HANDLE (NEW) IOT TRAP ; R0 = NEW PAGE NUMBER TO BE MAPPED IN VIRT MEMORY ; R1 = 2*SEG NUMBER THAT IT IS TO GO IN ; IOTINT: BIT #177761, R1; SEG < 7 & NOT ODD * 2 BNE IOTFAI; NOT SEG 7 & CERTAINLY NOT ANYWHERE BEYOND MOV R0,UPAR(R1); PLANT PAGE ADDRESS IN H/W REGISTER MOV #4406,UPDR(R1); AND LENGTH OF 500 (OCT) BYTES ASL R1 ASL R1; FOR *8 DISPLACEMENT IN PSECT RECORD ADD PSECT,R1; INDEX R1 INTO PSECT ADD #UPAR0,R1; INTO SEG PART OF IT MOV R0,(R1)+; PAGE ADDRESS INTO PSECT DESCRIPTOR MOV #4406,(R1)+; AND ACCESS PERMISSIONS IOTFAI: RTI; AND GET OUT ; ; ********** END OF IOT SECTION DUMP: HALT; IF DUMPER PART OUT ; PSTR: MOVB (R1)+, R0; GET NEXT SYMBOL FROM STRING ; PSYM: TSTB @#777564; TT OUT READY? ; BPL PSYM; NO, SO LOOP ; MOV R0,@#777566; OUTPUT CHAR ; BNE PSTR; R0 IS NON-ZERO, SO MORE TOGO ; RTS PC ; ; ; DUMPD: .ASCII /*** DUMP TAKEN ***/ ; .BYTE 0 ; .EVEN ; ; DUMP: MOV R5,@#34 ; MOV SP,@#36 ; MOV #177412, R1; DUMPER FOR AN RK05 ; MOV #14124, (R1); DISC ADDRESS ; CLR -(R1); CORE ADDRESS=0 ; MOV #1000002, -(R1); WC = MAX ; MOV #3, -(R1); WRITE+GO ; DLOOP: TSTB (R1) ; BPL DLOOP ; MOV #3,(R1); WRITE+GO AGAIN ; DLOOP2: TSTB (R1) ; BPL DLOOP2 ; BIT #20000,@#777402 ; BNE DUMP; NO, SO GO AGAIN ; MOV #DUMPD,R1 ; JSR PC,PSTR ; ; TST SWR; RELOAD IF ADDRESS LOOKS OK ; BLT PWERUP ; HALT; HALT IF DUMP ADDFRESS SET ; ; ; END OF DUMPER - INTO AUTO RELOAD PWERUP: MOV SWR,PC; GET ADDRESS IN SWITCHES - AND GO TO IT .END