DataMuseum.dk

Presents historical artifacts from the history of:

Philips Data Systems

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about Philips Data Systems

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - metrics - download

⟦6d9bfb81e⟧

    Length: 20016 (0x4e30)
    Notes: pts_type(SC)
    Names: »MSUBS.SC«

Derivation

└─⟦c47f25c27⟧ Bits:30009688 Philips computer tape "600318"
    └─⟦this⟧ »M:KMDV/MSUBS.SC« 
└─⟦efe3a1cfc⟧ Bits:30009667 Philips computer tape "600113"
    └─⟦this⟧ »TOSSWORK/MSUBS.SC« 
└─⟦fcfed1ed9⟧ Bits:30009706 Philips computer tape "M_167"
    └─⟦this⟧ »M:167D/MSUBS.SC« 

PTS(SC)

	IDENT MSUBS 	REL 8.2 78-09-15  870105040820

			SWLXY INCLUDED 
			REL 8.1 78-04-21 

* 
**************************************************
* 
*   PHILIPS TERMINAL SYSTEM PTS 
* 
*   MSUBS = MONITOR SUBROUTINES 
* 
* 
* 
* 
* 
* 
**************************************************
* 
*   THIS MODULE CONTAINS THE FOLLOWING MONITOR
*   SUBROUTINES:
* 
*   -SAVE8    SAVE 8 REGISTERS ON STACK 
*   -QTJOB    QUEUE TERMINAL JOB FOR DISPATCHING
*   -QMJOB   QUEUE MONITOR JOB FOF DISPATCHING
*   -ACTOT    ACTIVATE TERMINAL PROGRAM ON FIFO BASIS 
*   -ACTOTP   ACTIVATE TERMINAL PROGRAM ON LIFO BASIS 
*   -EXIT    PROGRAM EXIT 
*   -GETBLK   GET A FREE MONITOR BLOCK
*   -FREBLK   SET A MONITOR BLOCK FREE
*   -FNDDWT   FIND DWT ADDRESS
*   -FNDTID   FIND TERMINAL IDENTIFICATION
*   -TABIO    ABORT I/O WITH ACTIVATION 
*   -TENDIO   END I/O 
*   -PFINIT   RESTAR DEVICE 
*   -SWL48    SWITCH TO LEVEL 48
*   -SWLXY    SWITCH TO LEVEL XY
*   -HALT     HALT MODULE 
	EJECT
* 
*********** 
* ENTRIES * 
*********** 
* 
* 
	ENTRY	SAVE8	SAVE 8 REGISTERS 
	ENTRY	QTJOB	QUEUE TERMINAL JOB 
	ENTRY	QMJOB	QUEUE MONITOR JOB
	ENTRY	ACTOT	ACTIVATE TERMINAL
	ENTRY	EXIT	PROGRAM EXIT
	ENTRY	GETBLK	GET BLOCK 
	ENTRY	FREBLK	SET BLOCK FREE
	ENTRY	FNDDWT	FIND DWT
	ENTRY	FNDTID	FIND TERMINAL INDENTIFICATION 
	ENTRY	TABIO	ABORT I/O WITH ACTIVATION
	ENTRY	TENDIO	END I/O 
	ENTRY	PFINIT	RESTART DEVICE
	ENTRY	SWL48	SWITCH TO LEVEL 48 
	ENTRY	SWLXY	SWITCH TO LEVEL XY 
	ENTRY	ILLINT	ILLEGAL INTERRUPT ROUTINE 
	ENTRY	INTSAV	SAVE AREA LAST INTERRUPT
	ENTRY	HALT	HALT-MODULE 
	EJECT
* 
* 
*   ENTRIES TO RESTORE REGISTERS A8-A1 WITHOUT
*   ENEABLE INTERRUPTS
* 
* 
	ENTRY	IHRET8	RESTORE FROM A8 
	ENTRY	IHRET7	             A7 
	ENTRY	IHRET6	             A6 
	ENTRY	IHRET5	             A5 
	ENTRY	IHRET4	             A4 
	ENTRY	IHRET3	             A3 
	ENTRY	IHRET2	             A2 
	ENTRY	IHRET1	             A1 
	ENTRY	IHRTN	RETURN WITHOUT ENABLE INTERRUPTS 
	EJECT
* 
************* 
* EXTERNALS * 
************* 
* 
* 
	EXTRN	DISQUE	POINTER TO FIRST PLACE IN DISPATCHER QUEUE
	EXTRN	TTMJOB	TTAB-ADDRESS OF MJOB
	EXTRN	TTB:ST	TERMINAL STATUS AND PRIORITY LEVEL
	EXTRN	TTB:ID	TERMINAL IDENTIFICATION 
	EXTRN	TTB:SA	SAVE AREA 
	EXTRN	TTB:PP	POINTER TO PENDING QUEUE
	EXTRN	TTB:TD	TERMINAL DEVICE TABLE 
	EXTRN	RETUR8 
	EXTRN	FREQUE	POINTER TO FIRST FREE MONITOR BLOCK 
	EXTRN	DWTST	DWT STATUS 
	EXTRN	DWTADR	   -DRIVER ENTRY
	EXTRN	DWTWAT	   -WAIT/ACTIVATE INDICATOR 
	EXTRN	DWTECB	   -ECB ADDRESS 
	EXTRN	DWTTQ	   =ADDRESS TO TTAB ON QUEUE 
	EXTRN	DWTTAB	   -TTAB ADDRESS
	EXTRN	DWTTDM	DM TASK TTAB ADDRESS
	EXTRN	TCTAB	TERMINAL CONTROL TABLE 
	EXTRN	CDTAB	COMMON DEVICE TABLE
	EXTRN	PFTAB	TABLE OF DEVICES TO BE RESTARTED 
	EXTRN	TTB:SP,TTB:SS
	EXTRN	RTNA15	RETURN AND ENABLE 
	EXTRN	TIODM,CHKIND,REQEND	DM-ENTRIES 
* 
* 
SOP	EQU	/2E	SOP DEVICE ADDRESS
	EJECT
* 
* 
*   S A V E 8 
* 
*   SUBROUTINE TO SAVE 8 REGISTERS ON STACK 
*   WITHOUT ENABLING INTERRUPTS.
* 
* 
SAVE8	EQU	* 
	INH		INHIBIT INTERRUPTS
	STR	A3,A15 
	STR	A4,A15 
	STR	A5,A15 
	STR	A6,A15 
	STR	A7,A15 
	STR	A8,A15 
	LD	A3,16,A15	LOAD P.C. (RETURN ADDRESS)
	ST	A3,SAVE81	AND MODIFY BRANCH ADDRESS 
	ST	A2,14,A15 
	ST	A1,16,A15 
	LD	A3,12,A15	RESTORE A3
	ABL	0	THIS IS USED TO BRANCH BACK
SAVE81	EQU	*-2
* 
	EJECT
* 
* 
*   Q T J O B 
* 
*   SUBROUTINE TO QUEUE TERMINAL JOB FOR DISPATCHING
*   ENTRY PARAMETER:- 
* 
*   A5 = TTAB-ADDRESS OF PROGRAM TO BE QUEUED.
* 
*   THE REQUESTED JOB IS PUT IN DISPATCHER QUEUE ON 
*   PRIORITY BASIS. WITHIN ONE PRIORITY LEVEL JOB IS
*   PUT LAST IN QUEUE.
* 
* 
* 
QTJOB	EQU	* 
	INH
	STR	A1,A15	SAVE A1-A3 ON STACK 
	STR	A2,A15 
	STR	A3,A15 
	LDKL	A1,DISQUE	LOAD QUEUE ANCHOR ADDRESS 
	LC	A3,TTB:ST+1,A5	LOAD LEVEL TO BE QUEUED
QTJ010	LDR	A2,A1	SAVE LAST ADDRESS
	LDR*	A1,A1	FOLLOW THE THREAD 
	RF(Z)	QTJ020	END QUEUE FOUND 
	CC	A3,TTB:ST+1,A1	COMPARE LEVELS 
	RB(NL)	QTJ010	TRY NEXT 
QTJ020	STR	A1,A5	INSET IN QUEUE 
	STR	A5,A2
	ABL	IHRET3 
	EJECT
* 
* 
*   Q M J O B 
* 
*   SUBROUTINE TO QUEUE MONITOR JOBS ON LEVEL 49
*   ENTRY PARAMETERS:-
* 
*   A1 = PARAMETER
* 
*   A2 = DISPATCH ADDRESS 
* 
*   A5 IS SET TO TTAB-ADDRESS OF MONITORJOBS AND THE
*   SUBROUTINE 'ACTOT' IS USED TO ACTIVATE AND QUEUE THE
*   JOB.
* 
* 
* 
QMJOB	EQU	* 
	CF	A15,SAVE8 
	LDKL	A5,TTMJOB	SET TTAB-ADDRESS
	LDK	A3,0 
	RF	ACT02	AND GO TO ACTOT 
	EJECT
* 
* 
*   A C T O T , A C T O T P 
* 
*   SUBROUTINE TO ACTIVATE A TERMINAL PROGRAM.
*   ENTRY PARAMETERS:-
* 
*   A1 = PARAMETER
*   A2 = DISPATCH ADDRESS 
*   A3 = SEGMENT POINTER
*   A5 = TTAB-ADDRESS 
*   A7 = ABORT PARAMETER, 0 IF NO ABORTION OF I/O 
* 
*   - IF REQUESTED PROGRAM IS NOT ACTIVE THE PROGRAM IS 
*     PUT IN DISPATCHER QUEUE VIA SUBROUTINE 'QTJOB'. 
*   - IF PROGRAM IS ACTIVE, THE REQUEST IS PUT IN A PENDING 
*     QUEUE.
*   - ACTOT WILL PUT REQUEST IN PENDING QUEUE ON FIFO BASIS 
*   - ACTOTP WILL PUT REQUEST IN PENDING QUEUE ON LIFO BASIS
* 
* 
ACTOTP	EQU	*
	CF	A15,SAVE8	SAVE REGISTERS
	LDK	A6,1	INDICATE LIFO 
	RF	ACT03 
ACTOT	EQU	* 
	CF	A15,SAVE8	SAVE REGISTERS
ACT02	LDK	A6,0	INDICATE FIFO PENDING QUEUING
ACT03	EQU	* 
	LD	A4,TTB:SA,A5	IS PROGRAM ACTIVE? 
	RF(NZ)	ACT020	YES, PUT IN PENDING QUEUE
	LDR	A3,A3
	RF(E)	ACT05
	LD	A4,2,A3	LOAD ADDRESS
	ADR	A2,A4
	ST	A4,TTB:SS,A5	LAST SEGMENT START 
ACT05	ST	A2,TTB:SA,A5	DISPATCH ADDRESS
	ST	A3,TTB:SP,A5	SEGMENT POINTER
	ST	A1,TTB:SA+2,A5	AND PARAMETER
	LD	A4,TTB:ID,A5	SET TERMINAL ID
	ST	A4,TTB:SA+4,A5	TO A2 IN SAVE AREA 
	ST	A7,TTB:SA+14,A5	TO A7 IN SAVE AREA
	CF	A15,QTJOB	AND QUEUE THE JOB 
ACT010	ABL	IHRET8 
	EJECT
* 
* 
*   PUT REQUEST IN PENDING QUEUE. 
* 
ACT020	CF	A15,GETBLK	GET A FREE BLOCK 
	LDR	A2,A4
	LDR	A1,A7	ABORT PARAMETER
	CF	A15,GETBLK
	ADKL	A5,TTB:PP 
ACT030	LDR	A3,A5	SAVE ADDRESS 
	LDR*	A5,A5	FOLLOW THE QUEUE THREAD 
	LDR	A6,A6	QUEUE ON FIFO BASIS? 
	RF(NZ)	ACT040	NO, PUT FIRST IN QUEUE 
	LDR	A5,A5	END OF QUEUE?
	RB(NZ)	ACT030	NO, TRY NEXT!
ACT040	EQU	*
	STR	A4,A3	SET BLOCK IN QUEUE 
	STR	A5,A4
	RB	ACT010
	EJECT
* 
* 
*   E X I T 
* 
*   SUBROUTINE TO SET A PROGRAM FREE AND QUEUE FIRST
*   PENDING PROGRAM 
* 
*   ENTRY PARAMETER:- 
* 
*   A5 = TTAB-ADDRESS 
*   REGISTERS A3 AND A4 ARE LOST
* 
EXIT	EQU	*
	INH
	CM	TTB:SA,A5	RESET PROGRAM COUNTER 
	LD	A4,TTB:PP,A5	GET PENDING PROGRAM POINTER
	RF(Z)	EXT010	NO PENDING PROGRAM
	LDR*	A3,A4	GET QUEUE THREAD
	ST	A3,TTB:PP,A5	AND SAVE IN PENDING POINTER
	CF	A15,FREBLK	RELEASE BLOCK AND GET PARAMS 
	LDR	A7,A1	ABORT PARAMETER
	LDR	A4,A2
	CF	A15,FREBLK
	CF	A15,ACTOT	ACTIVATE TERMINAL 
EXT010	RF	GBL020
	EJECT
* 
* 
*   G E T B L K 
* 
*   SUBROUTINE TO GET A FREE BLOCK FROM MONITOR 
*   BLOCK POOL.REGISTERS A3-A1 ARE STORED IN FOUND
*   FREE BLOCK. 
* 
*   EXIT PARAMETER:-
* 
*   A4 = ADDRESS TO FOUND FREE BLOCK
* 
* 
* 
GETBLK	EQU	*
	INH
	STR	A5,A15	SAVE A5 
	LD	A4,FREQUE	GET FIRST BLOCK IN FREE QUEUE 
	RF(NZ)	GBL010
	LDK	A1,/B	HALT PARAMETER 
	CF	A15,HALT		HALT IF ALL BLOCKS OCCUPIED 
GBL010	LDR*	A5,A4 
	ST	A5,FREQUE	TAKE BLOCK OUT OF FREE QUEUE
	STR	A3,A4	STORE A3-A1 IN BLOCK 
	ST	A2,2,A4 
	ST	A1,4,A4 
	LDR*	A5,A15	RESTORE A5 
GBL020	ABL	IHRTN
	EJECT
* 
* 
*   F R E B L K 
* 
*   SUBROUTINE TO GET PARAMETERS FROM A MONITOR BLOCK 
*   AND SET THIS BLOCK FREE.
* 
*   ENTRY PARAMETER:- 
* 
*   A4 = BLOCKADDRESS 
* 
*   EXIT PARAMETERS:- 
* 
*   A3 = FIRST PARAMETER IN BLOCK 
*   A2 = SECOND    "          " 
*   A1 = THIRD     "          " 
* 
* 
FREBLK	EQU	*
	INH
	LDR*	A3,A4	UPDATE A3 
	LD	A1,FREQUE 
	STR	A1,A4
	ST	A4,FREQUE	SET BLOCK FREE
	LD	A2,2,A4 
	LD	A1,4,A4 
	ABL	IHRTN
	EJECT

* 
*	F N D D W T 
* 
* ENTRY PARAMETERS:-
* 
* A5 = TTAB ADDRESS 
* A7 = ORDER CODE WHEN CALLED FROM DATA MANAGEMENT
* A8 = ECB ADDRESS
* 
* EXIT PARAMETERS:- 
* 
* A2 = DWT INDEX
* A6 = DWT ADDRESS IF FOUND ELSE 0
* 

FNDDWT	STR	A1,A15	SAVE A1 
	LDKL	A6,TTB:TD 
	ADR	A6,A5	GET ADDRESS TO TERMINAL DEVICE TABLE 
	LDR*	A1,A6	GET TABLE LENGTH
	ADK	A6,2	ADDRESS TO FIRST FILE CODE
	LDR*	A2,A8	LOAD FILE CODE FROM ECB 

FND100	SUK	A1,4 
	RF(N)	FND110	FILE CODE NOT IN TTAB 
	CC	A2,1,A6	SEARCH IN DEVICE TABLE
	RF(NE)	FND106	BRANCH IF NOT FOUND
	STR	A1,A15 
	LD	A1,2,A6	DWT ADDR
	LD	A1,DWTADR,A1	DRIVER ENTRY 
	CWK	A1,TIODM 
	RF(NE)	FND200	NOT DM REQ 
	CF	A15,CHKIND	CHECK INDEX IN DM DMSUBR 
	RF	FND200	INDEX OK 
	LDR*	A1,A15
FND106	EQU	*
	ADK	A6,4	ADDRESS TO NEXT FILE CODE 
	RB	FND100	TRY NEXT 
	EJECT
* 
* SEARCH IN COMMON DEVICE TABLE 
* 

FND110	LD	A6,CDTAB	CDTAB ADDRESS
	LDR*	A1,A6	CDTAB LENGTH
	ADK	A6,2	POINTER TO FIRST ENTRY

FND120	SUK	A1,4 
	RF(N)	FND130	FILE CODE NOT FOUND 
	CC	A2,1,A6	
	RF(NE)	FND126	FILE CODE NOT FOUND
	STR	A1,A15 
	LD	A1,2,A6 
	LD	A1,DWTADR,A1
	CWK	A1,TIODM 
	RF(NE)	FND200	NOT DM REQ 
	CF	A15,CHKIND	CHECK INDEX IN DM
	RF	FND200	INDEX OK 
	LDR*	A1,A15
FND126	EQU	*
	ADK	A6,4 
	RB	FND120	TRY NEXT ENTRY IN CDTAB

FND130	SUR	A6,A6
	RF	FND210
FND200	LDR*	A1,A15	RESET STACK
	LCR	A2,A6	LOAD DWT INDEX 
	LD	A6,2,A6	LOAD DWT ADDRESS
FND210	RF	IHRET1
	EJECT
* 
* 
*	F N D T I D 
* 
* 
* SUBROUTINE TO FIND TTAB ADDRESS FROM TERMINAL IDENTIFICATION
* 
* 
* ENTRY PARAMETER:
* 
* A7 = TERMINAL IDNETIFICATION
* 
* 
* EXIT PARAMETER: 
* 
* A2 = TTAB ADDRESS 
* A2 = 0 INDICATES ILLEGAL IDENTIFICATION 
* 
* 
FNDTID	STR	A1,A15	SAVE REG. A1
	LD*	A1,TCTAB	TCTAB LENGTH
	AD	A1,TCTAB

FTI010	SUK	A1,2 
	CW	A1,TCTAB
	RF(E)	FTI030	ALL TTABS EXAMINED
	LDR*	A2,A1	TTAB ADDRESS
	RB(Z)	FTI010	NOT IN SYSTEM 
	CW	A7,TTB:ID,A2	COMPARE IDENTIFICATIONS
	RB(NE)	FTI010	NO MATCH. TRY NEXT 

FTI020	RF	IHRET1
FTI030	SUR	A2,A2	ILLEGAL IDENTIFICATION 
	RF	IHRET1
	EJECT
* 
* 
*      T E N D I O ,  T A B I O 
* 
* 
* THIS MODULE IS CALLED WHEN COMPLETION OF
* I/O OCCURS. 
* 
* - IF I/O AND ACTIVATION REQUEST:- 
* 
*   ACTOT IS CALLED TO START THE TASK 
* 
* -IF NORMAL I/O WITH WAIT:-
* 
*   QTJOB IS CALLED TO QUEUE THE TASK 
*   FOR DISPATCHING WITH THE FOLLOWING PARAMETERS:- 
* 
*   A5 = TTAB-ADDRESS 
* 
* -IF NORMAL I/O WITH NO WAIT:- 
* 
*   NO ACTION REQUIRED
* 
* IF AN EVENT WAS QUEUED FOR THIS DEVICE (DWTECQ NOT = ZERO)
* THAT TASK IS PUT IN DISPATCHER QUEUE TO REPEAT THE LKM INSTRUCTION
* 
* ENTRY PARAMETERS TO THIS SUBROUTINE ARE:- 
* 
*   A1 = RETURN CODE
*   A6 = DWT ADDRESS
* NO REGISTERS ARE DESTROYED
* 
* N.B. THE ECB RETURN CODE IS UPDATED BY MEANS OF 
* AN 'ORS' INSTRUCTION
* 
* 
*  TABIO HAS THE SAME FUNCTION AS TENDIO EXCEPT ABORT PARAMETER A7
*  WILL BE SET TO 1 BEFORE ACTOT IS CALLED IN CASE OF ACTIVATION. 
*  (FOR TENDIO THE ABORT PARAMETER = 0) 
	EJECT
* 
*	CHECK IF ANY TERMINAL ON QUEUE FOR THIS DEVICE
* 
TABIO	EQU	* 
	CF	A15,SAVE8	SAVE REG ON STACK 
	LDK	A7,1	ABORT PARAMETER=1 
	RF	TEN100
TENDIO	EQU	*
	CF	A15,SAVE8	SAVE A1-A8 ON STACK 
	LDK	A7,0	ABORT PARAMETER=0 (NO ABORTION) 
TEN100	EQU	*
	LD	A5,DWTTQ,A6	ANY TASK QUEUED?
	RF(Z)	TEN110	NO

	LD	A2,2,A5	TASK STATUS 
	RF(N)	TEN105	DM REQUEST NEXT 
	LDKL	A2,/800	ATTACH BIT 4
	AN	A2,DWTST,A6 
	RF(Z)	TEN105	DEVICE NOT ATTACHED 
	CW	A5,DWTTAB,A6	ATTACHED TO OTHER TASK?
	RF(NE)	TEN110	YES, DON'T QUEUE TASK
TEN105	EQU	*
	LDR*	A3,A5	YES: UPDATE QUEUE ANCHOR ADDRESS
	ST	A3,DWTTQ,A6 
	CF	A15,QTJOB	QUEUE TASK TO REPEAT REQUEST
	EJECT
* 
* 
* UPDATE ECB AND DWT
* 
* 

TEN110	EQU	*
	LD	A5,DWTTAB,A6	GET TTAB ADDRESS FROM DWT
	LDKL	A2,TIODM
	CW	A2,DWTADR,A6
	RF(NZ)	TEN115	NO DM REQUEST
	LD	A5,DWTTDM,A6	GET TTAB ADDRESS 
	CF	A15,REQEND	RESET REQ BUSY FOR ALL FILES 
TEN115	EQU	*
	LDKL	A2,/8000
	ORS	A2,DWTST,A6	INDICATE DEVICE READY IN DWT 
	LDKL	A3,/DBFF	RESET ECHO-BIT AND BITS 5,6
	ANS	A3,DWTST,A6	RESET ECHO-BIT IN STATUS DWT 
	LD	A3,DWTECB,A6	GET ECB ADDRESS
	RF(Z)	TEN130	BRANCH IF ENTERED FROM ECHO OR RECOVERY 
	ORRS	A2,A3	SET EVENT COMPLETED IN ECB
	ORS	A1,8,A3	SET RETURN CODE IN ECB 
	CM	DWTECB,A6	RESET ECB ADDRESS 
	EJECT
* 
*	CHECK IF WAIT OR ACTIVATION 
* 
	LD	A4,DWTWAT,A6	GET WAIT/ACTIVATE INDICATOR
	RF(Z)	TEN130	NOT WAIT OR ACTIVATION
	CWK	A4,1 
	RF(E)	TEN120	WAIT
	CF	A15,FREBLK	ACTIVATE: GET PARAMETER AND DISP ADDR
	CF	A15,ACTOTP	ACTIVATE TASK ON LIFO BASIS
	RF	TEN130	RETURN 
TEN120	EQU	*
	CF	A15,QTJOB	WAIT: QUEUE TASK FOR DISPATCHING
TEN130	EQU	*
	EJECT
* 
* 
*   RESTORE REGISTERS AND RETURN WITHOUT
*   ENABLE INTERRUPTS 
* 
* 
IHRET8	LDR*	A8,A15
IHRET7	LDR*	A7,A15
IHRET6	LDR*	A6,A15
IHRET5	LDR*	A5,A15
IHRET4	LDR*	A4,A15
IHRET3	LDR*	A3,A15
IHRET2	LDR*	A2,A15
IHRET1	LDR*	A1,A15
IHRTN	INH 
	ADKL	A15,4	ADJUST STACK POINTER
	ABR*	A15	AND RETURN
	EJECT
* 
* 
*   P F I N I T 
* 
*   SUBROUTINE TO RESTART DEVICES.
* 
*   ALL RESTART ROUTINES GIVEN IN TABLE 'PFTAB' ARE CALLED. 
*   REGISTERS A1-A8 ARE AVAILABLE FOR THE RESTART ROUTINES. 
* 
* 
PFINIT	EQU	*
	LDK	A1,2	SET INDEX TO FIRST ROUTINE
PFI100	CW	A1,PFTAB	CHECK IF LAST
	RF(NL)	PFI110	ALL RESTARTED
	STR	A1,A15	SAVE A1 
	CFI	A15,PFTAB,A1	CALL RESTART MODULE 
	LDR*	A1,A15	RESTORE A1 
	ADK	A1,2	NEXT DEVICE 
	RB	PFI100
PFI110	RF	SWLRTN	RETURN WHEN ALL STARTED
	EJECT
* 
* 
*   S W L 4 8 
* 
*   SUBROUTINE TO SWITCH PROGRAM PRIORITY LEVEL TO 48.
* 
* 
SWL48	EQU	* 
	INH
	STR	A1,A15 
	LDKL	A1,/C000	PSW FOR LEVEL 48 
	ST	A1,4,A15	SAVE IT ON A15 STACK 
	LDR*	A1,A15	RESTORE A1 
SWLRTN	ABL	RTNA15	RETURN TO CALLER AND ENB
* 
	EJECT			MSUBS
* 
* 
*    S W L X Y
* 
*    SUBROUTINE TO SWITCH PROGRAM PRIORITY LEVEL TO:
*    :=48 IF LEVEL ON STACK IS >=48 
*    :=XY "    "   "    "   "  XY<48
* 
* 
SWLXY	EQU	* 
	INH
	STR	A1,A15	SAVE A1 
	LDKL	A1,/7FF 
	ANS	A1,4,A15	CLEAR LEVEL TO BE SET 
	LC	A1,28,A15	GET LEVEL FROM STACK
	ANK	A1,/FC 
	CWK	A1,/C0	LEVEL IS IN BITS 8-13 
	RF(NL)	LEV48	LEVEL >= 48?
	ECR	A1,A1	NO 
	ORK	A1,/C0	SET RUN AND ENABLE FLIP FLOPS (BITS 8&9)
* 
SETLEV	EQU	*
	ORS	A1,4,A15	SET NEW LEVEL ON STACK
	LDR*	A1,A15	RESTORE A1 
	RTN	A15
* 
LEV48	EQU	*	LEVEL WAS >= 48 
	LDKL	A1,/C0C0	SET LEVEL TO 48 AND BITS 8&9 
	RB	SETLEV
* 
	EJECT
* 
*    INTERRUPT SAVE AND HALT MODULE 
* 
INTSAV	DATA	0 
SAVA15	DATA	0 
ILLINT	LDK	A1,5	HALT PARAMETER
	CF	A15,HALT
HALT	EQU	*
	CF	A15,SAVE8 
	STR	A9,A15 
	STR	A10,A15
	STR	A11,A15
	STR	A12,A15
	STR	A13,A15
	STR	A14,A15
	ST	A15,SAVA15
	OTR	A1,0,SOP	INDICATE TYPE OF HALT 
	HLT
	END

Full view