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

⟦26c3fe215⟧

    Length: 13694 (0x357e)
    Notes: pts_type(SC)
    Names: »LRPINT.SC«

Derivation

└─⟦3a2bec7de⟧ Bits:30009687 Philips computer tape "600313"
    └─⟦this⟧ »M:821/LRPINT.SC« 
└─⟦dab19bdd7⟧ Bits:30009677 Philips computer tape "600218"
    └─⟦this⟧ »M:261/LRPINT.SC« 

PTS(SC)

	IDENT LRPINT 	9.2DK 1 79-11-16  870105040920 

			=DK1, HANGING REM. TERM. 
			80-03-11 
* 
* 
**************************************************
* 
*   PHILIPS TERMINAL SYSTEM PTS 
* 
*   LRPINT = INTERRUPT HANDLERS FOR LKM, RTC
*            AND POWER FAILURE
* 
* 
* 
* 
* 
**************************************************
* 
* 
*   THIS MODULE CONTAINS MANDATORY INTERRUPT HANDLERS 
*   FOR TOSS. THESE ARE:
* 
*   -IHLKM:  LKM INTERRUPT
* 
*   -IHRTC:  RTC INTERRUPT
* 
*   -IHPFAR: POWER FAILURE INTERRUPT
* 
*   IN THIS MODULE ENTRIES FOR REQUEST ERRORS ALSO ARE
*   PROVIDED. THESE ARE:
* 
*   -LKMRQE: SET A7 = -1, QUEUE JOB AND DISPATCH
* 
*   -LKMQDI: QUEUE JOB AND DISPATCH 
* 
	EJECT			LRPINT 
* 
* 
*********** 
* ENTRIES * 
*********** 
* 
* 
	ENTRY	IHLKM	LKM INTERRUPT HANDLER
	ENTRY	LKM030	SPECIAL TLDSEG REQUEST ERROR ENTRY
	ENTRY	LKMRQE	LKM REQUEST ERROR 
	ENTRY	LKMERR	HALT SYSTEM DUE TO FATAL LKM ERROR
	ENTRY	LKMQDI	QUEUE JOB AND DISPATCH
	ENTRY	IHRTC	RTC INTERRUPT HANDLER
	ENTRY	TIMQUE	POINTER TO FIRST BLOCK IN TIMER QUEUE 
	ENTRY	MONCLO	MONITOR CLOCK 
	ENTRY	IHPFAR	POWER FAILURE INTERRUPT HANDLER 
	ENTRY	INIFLG	INITIALIZATION FLAG 
	EJECT			LRPINT 
* 
* 
************* 
* EXTERNALS * 
************* 
* 
* 
	EXTRN	TDISP	DISPATCHER 
	EXTRN	DISQUE	DISPATCHER QUEUE
	EXTRN	PRUN	TTAB OF RUNNING PROGRAM 
	EXTRN	MEXIT	MONITOR TASK EXIT
	EXTRN	MONMMU	MONITOR (SYSTEM) MMU TABLE
	EXTRN	QTJOB	QUEUE TASK 
	EXTRN	QMJOB	QUEUE MONITOR JOB
	EXTRN	SWL48	SWITCH TO LEVEL 48 
	EXTRN	SWLXY	SWITCH TO LEVEL XY 
	EXTRN	FREBLK	SET BLOCK FREE
	EXTRN	SAVE8	SAVE 8 REGISTERS 
	EXTRN	PFINIT	RESTART OF DEVICES
	EXTRN	HALT	HALT MODULE 
	EXTRN	INTSAV	INTERRUPT SAVE MODULE 
	EXTRN	TTABLD	LOAD TASK TTAB
	EXTRN	PQEMTY	PAGE QUEUE EMPTY FLAG 
	EXTRN	PAGQUE	FREE PAGE QUEUE 
	EXTRN	SEG:PB	PAGE BLOCK ADDRESS
	EXTRN	PAG:QB	QUEUE LINK BACKWARD 
	EXTRN	TTB:SB	SEGMENT BLOCK POINTER 
	EXTRN	TTB:PW	PROGRAM STATUS WORD 
	EXTRN	TTB:SA	FIRST WORD OF SAVE AREA IN TTAB 
	EXTRN	LKMAL	LKM REQUEST TABLE
	EJECT			LRPINT 
* 
* 
***************************************** 
* 
*	CONDITIONAL ASSEMBLY
* 
***************************************** 
* 
*	A PROGRAM VERSION USING TOSS MMU PAGING 
*	IS OBTAINED BY SETTING MMUPAG EQU 1.
* 
MMUPAG	EQU	1
* 
* 
*	A PROGRAM VERSION USING THE EXTENDED INSTRUCTION
*	SET IS OBTAINED BY SETTING CPU852 EQU 0.
* 
CPU852	EQU	0
* 
* 
*	A PROGRAM VERSION USING TOSS DISC PAGING
*	IS OBTAINED BY SETTING DSKPAG EQU 1.
* 
DSKPAG	EQU	1
* 
* 
*	A PROGRAM VERSION USING NO MONITOR CLOCK FUNCTIONS
*	IS OBTAINED BY SETTING MCLOCK EQU 0.
* 
X:A	EQU	1 
MONCLK	EQU	1
* 
	EJECT			LRPINT 
* 
* 
*   I H L K M 
* 
* 
*   THIS IS THE LKM INTERRUPT HANDLER. THE FOLLOWING
*   STEPS ARE CARRIED OUT:
* 
*   - IF STACK OVERFLOW SYSTEM HALTS. 
* 
*   - ELSE REGISTERS A1 - A14 ARE SAVED IN TTAB FOR RUNNING 
*     PROGRAM.
* 
*   - EXIT CONDITIONS ARE SET AND A BRANCH IS MADE TO 
*     APPROPRIATE LKM PROCESSOR.
* 
*   EXIT CONDITIONS ARE:
* 
*   A4 = LABEL ADDRESS OF LKM REQUEST 
*        (A4 = 0 INDICATES NO LABEL IN LKM REQUEST) 
*   A5 = TTAB ADDRESS OF CALLING PROGRAM
*   A2, A3 AND A6 ARE LOST. 
* 
*   ALL OTHER REGISTERS REMAIN UNCHANGED FROM CALLING 
*   PROGRAM.
* 
* 
* 
IHLKM	EQU	* 
	ST	P,INTSAV	SAVE LAST INTERRUPT
	RIT	/1D	RESET INTERNAL INTERRUPT FLAG
* 
	EJECT			LRPINT 
* 
* 
	ST	A15,LKM010	SAVE A15 
	LD	A15,PRUN	LOAD TTAB ADDRESS
* 
	IFT	CPU852=1 
	ADKL	A15,TTB:SA+28	SET A15 TO LAST IN SAVE AREA
	STR	A14,A15	SAVE USER REGISTERS, -A14
	STR	A13,A15	-A13 
	STR	A12,A15	-A12 
	STR	A11,A15	-A11 
	STR	A10,A15	-A10 
	STR	A9,A15	-A9 
	STR	A8,A15	-A8 
	STR	A7,A15	-A7 
	STR	A6,A15	-A6 
	STR	A5,A15	-A5 
	STR	A4,A15	-A4 
	STR	A3,A15	-A3 
	STR	A2,A15	-A2 
	STR	A1,A15	-A1 
	XIF
* 
	IFT	CPU852=0 
	MS	14,TTB:SA+2,A15	SAVE A1-A14 IN TTAB SAVE AREA 
	XIF
* 
	LD	A5,PRUN	GET TTAB ADDRESS OF CALLING TASK
	LDKL	A15,0	RESTORE A15 STACK POINTER 
LKM010	EQU	*-2
* 
	EJECT			LRPINT 
* 
*   GET LKM REQUEST PARAMETERS
* 
	LDR*	A3,A15
	LDR*	A2,A15	LOAD P.C. AND ADJUST STACK POINTER 
	ST	A3,TTB:PW,A5	STORE PSW IN TTAB
* 
	IFT	MMUPAG=0 
	LD	A3,-2,A2	GET INSTRUCTION CODE 
	LDR*	A6,A2	GET DATA DIRECTIVE
	XIF
* 
	IFT	MMUPAG=1 
	ANK	A3,1 
	RF(NZ)	LKM015	USER MODE? 
	TL	MONMMU	NO, LOAD MONITOR MMU TABLE 
* 
LKM015	EQU	*
 	EL	A3,-2,A2	GET INSTRUCTION CODE
	ELR	A6,A2	GET DATA DIRECTIVE 
	XIF
* 
	CWK	A3,/2804 
	RF(E)	LKM025	LKM?
	CWK	A3,/6300 
	RF(E)	LKM025	TRAP? 
* 
*   STACK OVERFLOW: HALT SYSTEM 
* 
	LDK	A1,7	HALT PARAMETER
	RF	LKM070	HALT SYSTEM DUE TO STACK OVERFLOW
* 
	EJECT			LRPINT 
* 
* 
LKM025	EQU	*
	IFT	DSKPAG=1 
	LD	A3,TTB:SB,A5	GET SEGMENT BLOCK ADDRESS
	RF(Z)	LKM027	NO SEGMENT? 
	LDR*	A4,A3	GET SEGMENT STATUS
	ANKL	A4,/1E00	CHECK IF CORE RESIDENT OR... 
	RF(NZ)	LKM027	...USED BY AN INTERRUPTED TASK 
* 
*   INSERT PAGE BLOCK IN PAGE QUEUE 
* 
	LD	A3,SEG:PB,A3	GET PAGE BLOCK ADDRESS 
	LDKL	A4,PAGQUE	GET PAGQUE ADDRESS
	ST	A4,PAG:QB,A3
	LDR*	A4,A4	GET ADDRESS OF FIRST BLOCK IN PAGQUE
	STR	A4,A3	UPDATE QUEUE LINKS 
	ST	A3,PAGQUE 
	ST	A3,PAG:QB,A4
	LD	A3,PQEMTY	CHECK IF LOAD TASK IN PAUSE STATE 
	RF(Z)	LKM027	PAGE QUEUE NOT EMPTY? 
* 
	EJECT			LRPINT 
* 
*   RESTART LOAD TASK 
* 
	CM	PQEMTY	INDICATE PAGE QUEUE NOT EMPTY
	LDR	A4,A5	SAVE A5
	LDKL	A5,TTABLD	GET LDTASK TTAB ADDRESS 
	CF	A15,QTJOB	RESTART LOAD TASK 
	LDR	A5,A4	RESTORE A5 
	LD	A4,TTB:PW,A5	GET PSW
	ST	A4,-2,A15	RESTORE PSW ON STACK
* 
LKM027	EQU	*
	XIF
* 
	IFF	MMUPAG+DSKPAG=0
	CWK	A6,9	CHECK DATA DIRECTIVE
	RF(E)	LKM060	LOAD SEGMENT REQUEST? 
	XIF
* 
	EJECT			LRPINT 
* 
* 
LKM030	EQU	*
	CM	PRUN	INDICATE IDLE LOOP RUNNING 
	CF	A15,SWL48	SWITCH TO LEVEL 48
	LDK	A4,0 
	LDR	A3,A6	GET DATA DIRECTIVE 
	RF(NN)	LKM050	NO LABEL?
* 
*   LKM REQUEST WITH LABEL
* 
	ADK	A2,2 
	NGR	A3,A3	MAKE DATA DIRECTIVE POSITIVE 
* 
	IFT	MMUPAG=0 
	LDR*	A4,A2	GET LABEL 
	XIF
* 
	IFT	MMUPAG=1 
	ELR	A4,A2	GET LABEL
	XIF
* 
	EJECT			LRPINT 
* 
*   UPDATE TTB:SA AND GO TO LKM PROCESSOR 
* 
LKM050	EQU	*
	ADK	A2,2	SAVE NEXT ADDRESS TO
	ST	A2,TTB:SA,A5	EXECUTE IN TTAB
	ADR	A3,A3	GET INDEX IN LKMAL 
	RF(Z)	LKMQDI	PROGRAM SWITCH REQUEST? 
	CW	A3,LKMAL
	RF(NL)	LKMRQE	INVALID DATA DIRECTIVE?
	INH
	LD	A3,LKMAL,A3 
* 
	IFF	MMUPAG+DSKPAG=0
	RF	LKM065
* 
LKM060	EQU	*	LOAD SEGMENT REQUEST (DATA 9)
	LD	A3,LKMAL+18	GET TLDSEG ADDRESS
	XIF
* 
LKM065	EQU	*
	ABR(NZ)	A3	BRANCH TO LKM PROCESSOR 
* 
	EJECT			LRPINT 
* 
* 
*   L K M E R R 
* 
* 
LKMERR	LDK	A1,15	INDICATE REQUESTED LKM PROC. NOT PRESENT 
* 
LKM070	EQU	*
	CF	A15,HALT	HALT SYSTEM
* 
* 
*   L K M R Q E 
* 
*   SET A7 = -1, QUEUE TERMINAL JOB AND DISPATCH. 
* 
*   A5 = TTAB ADDRESS 
* 
* 
LKMRQE	EQU	*
	LDKL	A2,-1 
	ST	A2,TTB:SA+14,A5	SET -1 IN SAVE AREA A7
* 
* 
*   L K M Q D I 
* 
*   QUEUE TERMINAL JOB AND DISPATCH.
* 
*   A5 = TTAB ADDRESS 
* 
* 
LKMQDI	EQU	*
	CF	A15,QTJOB 
* 
T:DISP	EQU	*	COMMON EXIT TO DISPATCHER
	ABL	TDISP	GO TO DISPATCHER 
* 
	EJECT			LRPINT 
* 
*   I H R T C 
* 
*   THIS IS THE REAL TIME CLOCK INTERRUPT HANDLER.
*   THE TIMER QUEUE WILL BE PROCESSED EACH 100 MS.
* 
IHRTC	ST	P,INTSAV	SAVE LAST INTERRUPT 
	RIT	/1B	RESET INTERRUPT FLAG 
	IM	COUNT 
	RF(P)	RTC010	CHECK TIMER QUEUE?
	RTN	A15
* 
RTC010	EQU	*
	IFT	CPU852=1 
	CF	A15,SAVE8	SAVE A1-A8 ON STACK 
	XIF
* 
	IFT	CPU852=0 
	MSR	8,A15	SAVE A1-A8 ON STACK
	XIF
* 
	LDKL	A4,-4	SET 100 MS SWITCH 
	ST	A4,COUNT
	LDKL	A2,CLOCK	QUEUE CLOCK ROUTINE AS MJOB
	CF	A15,QMJOB 
* 
	IFT	MONCLK=1 
	IM	SECOND
	RF(P)	RTC025	UPDATE MONITOR CLOCK? 
	XIF
* 
RTC020	EQU	*
	CF	A15,SWLXY	SWITCH TO LEVEL XY
	RB	T:DISP
* 
	EJECT			LRPINT 
* 
* 
	IFT	MONCLK=1 
* 
*   MONITOR CLOCK UPDATING ROUTINE STARTED EACH SECOND. 
* 
MCLOCK	EQU	*
RTC025	LDKL	A4,-9	SET SECOND SWITCH 
	ST	A4,SECOND 
	LDK	A4,4 
* 
MCLO10	LDK	A3,60	NUMBER OF MINUTES AND SECONDS
MCLO20	IM	MONCLO+2,A4	INCREMENT TIME
	XR	A3,MONCLO+2,A4	CHANGE MINUTES OR HOURS ?
	RB(NE)	RTC020	GO TO DISPATCHER?
	CM	MONCLO+2,A4	RESTART TIME COUNTER
	SUK	A4,2	END?
	RB(N)	MCLO20	MIDNIGHT CARRY? 
	RB(P)	MCLO10	UPDATE MINUTES? 
	LDK	A3,24	UPDATE HOURS 
	RB	MCLO20
	XIF
* 
* 
*   M O N C L O 
* 
* 
MONCLO	EQU	*
	IFT	MONCLK=1 
	DATA	0	ACCUMULATED 24 HOUR CARRY 
	DATA	0	HOUR
	DATA	0	MINUTE
	DATA	0	SECOND
SECOND	DATA	0	SECOND SWITCH 
	XIF
* 
	EJECT			LRPINT 
* 
*   CLOCK ROUTINE STARTED EACH 100 MS.
* 
CLOCK	INH 
	LDKL	A4,TIMQUE	LOAD FIRST TIMER ADDRESS
* 
CLK10	LDR	A6,A4 
CLK20	LDR*	A4,A6	GET TIMER BLOCK
	ABL(Z)	MEXIT	END OF QUEUE
	IM	4,A4	INCREMENT TIMER
	RB(N)	CLK10	NOT TIME OUT?
	RF(Z)	CLK30	TIME OUT?
	LDR*	A3,A4	RELEASE TIMER 
	STR	A3,A6
	CF	A15,FREBLK
	LDR	A4,A2
	CF	A15,FREBLK
	RB	CLK20 
* 
	EJECT			LRPINT 
* 
* 
CLK30	CF	A15,CLK40	CALL TIME OUT ROUTINE
	CF	A15,SWL48	SWITCH TO LEVEL 48	DK1
	INH
	RB	CLK10 
* 
CLK40	EQU	* 
	IFT	CPU852=1 
	CF	A15,SAVE8	SAVE A1-A8 ON STACK 
	XIF
* 
	IFT	CPU852=0 
	MSR	8,A15	SAVE A1-A8 ON STACK
	XIF
* 
				DK1 
	INH
	LD	A2,2,A4	LOAD DISP BLOCK 
	LD	A1,4,A2	GET PARAMETER 
	ABI	2,A2	GO TO TIME OUT ROUTINE
* 
* 
COUNT	DATA	0	100 MS SWITCH
* 
* 
*   T I M Q U E 
* 
*   POINTER TO FIRST BLOCK IN TIMER QUEUE 
* 
* 
TIMQUE	EQU	*
	DATA	0 
* 
	EJECT			LRPINT 
* 
* 
*   I H P F A R 
* 
*   THIS IS THE POWER FAIL/AUTO RESTART INTERRUPT HANDLER.
* 
* 
	DATA	0 
TTABPF	DATA	0	TTAB FOR POWER FAIL 
	DATA	'#P'
	DATA	0 
A15SAV	DATA	0 
	DATA	/00C0 
	DATA	POWOFF
* 
* 
*   WORK AREAS
* 
* 
PFX	DATA	1	POWER ON/OFF INDICATOR 
* 
* 
INIFLG	DATA	1	INITIALIZATION FLAG 
* 
	EJECT			LRPINT 
* 
* 
*   POWER FAIL/AUTO RESTART INTERRUPT 
* 
* 
IHPFAR	EQU	*	 
	ST	P,INTSAV	SAVE LAST INTERRUPT
	RIT	/17	RESET INTERNAL INTERRUPT 
	C1S	PFX	INDICATE POWER ON OR OFF 
	RF(P)	POWON	POWER ON?
* 
*   POWER OFF 
* 
	IFT	CPU852=1 
	CF	A15,SAVE8	SAVE A1-A8 ON STACK 
	XIF
* 
	IFT	CPU852=0 
	MSR	8,A15	SAVE A1-A8 ON STACK
	XIF
* 
	LD	A1,DISQUE	QUEUE PFTASK FIRST FOR DISPATCHING
	LDKL	A2,TTABPF 
	STR	A1,A2
	ST	A2,DISQUE 
	RB	T:DISP
* 
POWOFF	ST	A15,A15SAV	SAVE A15 FOR BETTER TIMES
	HLT
* 
	EJECT			LRPINT 
* 
*   POWER ON
* 
POWON	LD	A15,A15SAV	RELOAD A15
	CM	INIFLG	RESET INIT FLAG
	CF	A15,PFINIT
	CM	PRUN
	RB	T:DISP
* 
* 
* 
	END

Full view