.TITLE SYSJOB - SYSTEM JOB ; ; CREATED ON 11-SEP-80 ; .IDENT /MK 1.2/ ; 16-SEP-80 ; ;+ ; THE SYSTEM JOB RUNS IN THE FOREGROUND AND PERFORMS SUCH FUNCTIONS ; AS SPOOLER FOR LINEPRINTER AND SUPERVISOR FOR COMPUTER INTERCHANGE ; DRIVER. ; ; MODULES CAN BE INSERTED WITHOUT CHANGING THIS PROGRAM. ; ALL INFORMATION IS LINKED VIA .PSECT'S AT LINKING TIME. ; ; ON START, SYSJOB CALLS ALL SUBROUTINES, WHO'S ADDRESS APEARS ; IN THE INIT JUMP TABLE (INITJT) IN .PSECT INIJT$. ; ; IN THIS INITIATION ROUTINES ACTION AN BE STARTED. ANY REASON ; FOR SUSPENDING SHOULD YIELD IN A 'RTS PC' AND THE TASK SHOULD ; BE CONTINUED WITH COMPLETION ROUTINES. FUNCTIONS WHICH CANNOT BE ; DONE IN COMPLETION ROUTINES, CAN BE DONE IN THE MAINLINE, IF A ; COMPLETION ROUTINE DOES A .RSUM. THE TASK MUST HAVE ONE OR MORE ; ENTRYS IN THE RESUME TABLES. THE COMPLETION ROUTINE SETS ONE OF ; THE TASKS RESUME STATUS BYTES TO A POSITIVE VALUE WHICH INDICATES ; A MAINLINE ACTION PENDING FOR THIS TASK. THE CORRESPONDING ENTRY ; IN THE RESUME JUMP TABLE (RSUMJT) IN .PSECT RSMJT$ (WORDS) MUST ; CONTAIN A SUBROUTINE ADDRESS, TO WHICH SYSJOB JUMPS AS SOON AS ; POSSIBLE. ; .MCALL .SPND ; .PSECT SYSJOB,RW,I,GBL,REL,CON ; START: MOV RSMPTR,R0 TST INITJT(R0) ; RSMPTR HERE USED AS POINTER TO INIT ROUTINES BEQ SUSPND ; END OF TABLE JSR PC,@INITJT(R0) ADD #2,RSMPTR ; NEXT ENTRY BR START ; SUSPND: .SPND 3$: CLR RSMPTR MOV RSMPTR,R0 1$: TSTB RSUMST(R0) BMI SUSPND ; END OF TABLE BNE 2$ ; O.K. JUMP TO ROUTINE INC R0 ; NO RESUME FROM THIS TABLE ENTRY BR 1$ ; LOOP ; 2$: DECB RSUMST(R0) ; ALREADY RECOGNIZED ASL R0 ; TO WORD OFFSET JSR PC,@RSUMJT(R0) BR 3$ ; RSMPTR: .WORD 0 ; .PSECT INIJT$,RW,I,GBL,REL,CON INITJT: .PSECT ROOT$,RW,I,GBL,REL,CON .WORD 0 ; END OF INIT JUMP TABLE ; .PSECT RSMJT$,RW,I,GBL,REL,CON RSUMJT: .PSECT RSMST$,RW,D,GBL,REL,CON RSUMST: .PSECT DATA$,RW,D,GBL,REL,CON .BYTE -1 ; END OF RESUME STATUS TABLE .EVEN ; .END START