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

⟦e062440dc⟧

    Length: 11116 (0x2b6c)
    Notes: pts_type(SC)
    Names: »LRPINT.SC«

Derivation

└─⟦fcfed1ed9⟧ Bits:30009706 Philips computer tape "M_167"
    └─⟦this⟧ »M:167D/LRPINT.SC« 

PTS(SC)

	IDENT LRPINT 	REL 8.2 78-09-15  870105040820 

* 
**************************************************
* 
*   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
*********** 
* ENTRIES * 
*********** 
* 
	ENTRY	IHLKM	LKM INTERRUPT HANDLER
	ENTRY	LKMRQE	LKM REQUEST ERROR 
	ENTRY	LKMQDI	QUEUE 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 
* 
************* 
* EXTERNALS * 
************* 
* 
	EXTRN	TDISP	DISPATCHER 
	EXTRN	LKMDIS	ENTRY TO BE DISPATCHED AFTR LKM-REQUEST 
	EXTRN	PRUN	TTAB OF RUNING PROGRAM
	EXTRN	QTJOB	QUEUE TERMINAL JOB 
	EXTRN	SWL48	SWITCH TO LEVEL 48 
	EXTRN	TTB:SA	FIRST WORD OF SAVE AREA IN TTAB 
	EXTRN	TTB:TD	START OF TERMINAL DEVICES 
	EXTRN	LKMAL	LKM REQUEST TABLE
	EXTRN	FREBLK	SET BLOCK FREE
	EXTRN	QMJOB	QUEUE MONITOR JOB
	EXTRN	RETU14	RESTORE A1-A14 FROM INTERRUPT STACK 
	EXTRN	CVTCLK	REAL TIME CLOCK 
	EXTRN	PFINIT	RESTART OF DEVICES
	EXTRN	SAVE8	SAVE 8 REGISTERS 
	EXTRN	PFTAB	POWER FAIL TABLE 
	EXTRN	HALT	HALT-MODULE 
	EXTRN	SACT	ACTIVE SEGMENT
	EXTRN	LRUNEW	INSERT SEGMENT IN LRUQUEUE
	EXTRN	INTSAV	INTERRUPT SAVE MODULE 
	EJECT
* 
* 
*    BY MEANS OF CONDITIONAL ASSEMBLY IT IS POSSIBLE
*    TO EXCLUDE MONITOR CLOCK FUNCTIONS.
*    THIS IS DONE BY SETTING X:A = 0
* 
X:A	EQU	1 
KLOCKA	EQU	0
	EJECT
* 
* 
*   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.
*   - DISPATCH ADDRESS 'LKMDIS' AND 8 REGISTERS ARE SET ON STACK
*   - TTB:SA IS UPDATED IN TTAB 
*   - EXIT CONDITIONS ARE SET AND A BRANCH IS MADE TO 
*     APPROPIATE LKM-PROCESSOR. 
* 
*   EXIT CONDITIONS ARE:
* 
*   A4 = LABLE ADDRESS OF LKM-REQUEST 
*        (A4=0 INDICATES NO LABLE IN LKM-REQUEST) 
*   A5 = TTAB-ADDRESS OF CALLING PROGRAM
*   A2 AND A3 ARE LOST. 
*   ALL OTHER REGISTERS REMAIN UNCHANGED FROM CALLING 
*   PROGRAM.
* 
* 
* 
IHLKM	EQU	* 
	ST	P,INTSAV
			SAVE LAST INTERRUPT
	RIT	/1D	RESET INTERNAL INTERRUPT FLAG
LKM010	INH
	ST	A15,LKM020	SAVE A15 
	LD	A15,PRUN	LOAD TTAB-ADDRESS
	ADKL	A15,TTB:SA+28	SET A15 TO LAST IN SAVE AREA
	STR	A14,A15	SAVE USERS 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 
	LDKL	A15,0	RESTORE A15 STACK POINTER 
LKM020	EQU	*-2
* 
* 
*   GET DISPATCH ADDRESS AND SWITCH LEVEL 
* 
	LDR*	A2,A15
	LDR*	A2,A15	LOAD P.C. AND ADJUST STACK POINTER 
	LD	A3,-2,A2
	CWK	A3,/2804 
	RF(E)	LKM025	LKM 
	CWK	A3,/6300 
	RF(E)	LKM025	TRAP
	LDK	A1,7	HALT PARAMETER
	CF	A15,HALT	HALT IF STACK OVERFLOW 
LKM025	LDKL	A3,LKMDIS 
	STR	A3,A15	SET DISPATCH ADDRESS ON STACK 
	LDKL	A3,/C000
	STR	A3,A15	SET LEVEL 48
	SUKL	A15,16	RESERVE SPACE FOR 8 REGISTERS
	LD	A3,SACT	ACTIVE SEGMENT
	RF(E)	LKM027 
	CF	A15,LRUNEW
	CM	SACT
LKM027	EQU	*
	CF	A15,SWL48	SWITCH TO LEVEL 48
	LD	A5,PRUN	LOAD TTAB-ADDRESS OF CALLING PROGRAM
	LDK	A4,0	RESET LABEL INDICATOR 
	LDR*	A3,A2	LOAD DATA DIRECTIVE 
	RF(NN)	LKM030	NO LABLE 
* 
* 
*   LKM-REQUEST WITH LABLE
* 
	ADK	A2,2 
	LDR*	A4,A2	LOAD LABLE
	NGR	A3,A3	NEGATE DATA
* 
* 
*   UPDATE TTB:SA AND GO TO LKM-PROCESSOR 
* 
LKM030	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 
	LD	A3,LKMAL,A3 
	RF(Z)	LKMRQE	ERROR IF NOT PRESENT
	INH		INHIBIT INTERRUPTS
	ABR	A3	BRANCH TO LKM-PROCESSOR 
	EJECT
* 
* 
*   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 
	ABL	TDISP	GO TO DISPATCHER 
	EJECT
* 
*   I H R T C 
* 
*   THIS IS THE REAL TIME CLOCK INTERRUPT HANDLER 
*   THE TIMER QUEUE WILL BE PROCESSED EACH 100 MS 
* 
IHRTC	EQU	* 
	ST	P,INTSAV	SAVE LAST INTERRUPT
	RIT	/1B	RESET INTERRUPT FLAG 
	IM	COUNT 
	RF(P)	RTC010 
	RTN	A15
RTC010	CF	A15,SAVE8 
	IM	CVTCLK	INCREMENT CVT CLOCK
	LDKL	A4,-4	SET 100 MS SWITCH 
	ST	A4,COUNT
	LDKL	A2,CLOCK	QUEUE CLOCK-ROUTINE AS MJOB
	CF	A15,QMJOB 
* 
	IFT	KLOCKA=1 
* 
	IM	DINKAN
	RF(P)	RTC025	UPDATE MONITOR CLOCK EACH SECOND
* 
	XIF
* 
RTC020	ABL	TDISP
* 
	IFT	KLOCKA=1 
	EJECT
* 
* 
*    MONITOR CLOCK UPDATING ROUTINE STARTED EACH SECOND 
* 
* 
MCLOCK	EQU	*
RTC025	LDKL	A4,-9	SET SECOND SWITCH 
	ST	A4,DINKAN 
	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 ? 
	RF(N)	MCLO30	MIDNIGTH CARRY
	RB(P)	MCLO10	UPDATE MINUTES
	LDK	A3,24	UPDATE HOURS 
	RB	MCLO20
MCLO30	IM	MONCLO	UPDATE 24 HOUR CARRY 
	RB	RTC020	GOTO DISPATCHER
* 
* 
	XIF
* 
MONCLO	EQU	*
	IFT	KLOCKA=1 
	DATA	0	ACCUMULATED 24 HOUR CARRY 
* 
	DATA	0	HOUR
	DATA	0	MINUTE
	DATA	0	SECOND
* 
DINKAN	DATA	0	SECOND SWITCH 
* 
* 
	XIF
	EJECT

* 
*   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
	RB(Z)	RTC020	END OF QUEUE

	IM	4,A4	INCREMENT TIMER
	RB(N)	CLK10	NOT TIME OUT, GET NEXT IN QUEUE
	RF(Z)	CLK30	TIME OUT 

	LDR*	A3,A4	RELEASE TIMER 
	STR	A3,A6
	CF	A15,FREBLK
	LDR	A4,A2
	CF	A15,FREBLK
	RB	CLK20 

CLK30	CF	A15,CLK40	CALL TIME OUT ROUTINE
	INH
	RB	CLK10 

CLK40	CF	A15,SAVE8
	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
* 
* 
*   I H P F A R 
* 
*   THIS IS THE POWER FAIL/AUTO RESTART INTERRUPT HANDLER 
* 
* 
* 1. POWER OFF
* 
*    REGISTERS A1-A14 ARE SAVED ON INTERRUPT STACK AND
*    STACK POINTER IS SAVED IN CORE 
*    THEN SYSTEM IS HALTED
* 
* 
* 2. POWER ON 
* 
*    STACK POINTER A15 IS RESTORED
*    COMMON DEVICES ARE RESTARTED BY MODULE PFINIT
*    REGISTERS A1 - A14 ARE RESTORED FROM INTERRUPT STACK 
*    AND RETURN IS GIVEN TO INTERRUPTED PROGRAM 
* 
* 
* 
* WORK AREAS
* 
* 
PFX	DATA	1	POWER ON OFF INDICATOR 
* 
* 
INIFLG	DATA	1	INITIALIZATION FLAG 
* 
	EJECT
* 
* 
* 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)	PFA200	POWER ON
* 
* POWER OFF 
* 
	CF	A15,SAVE8	SAVE A1 - A8 ON STACK 
	STR	A9,A15	SAVE A9 - A14 ON STACK
	STR	A10,A15
	STR	A11,A15
	STR	A12,A15
	STR	A13,A15
	STR	A14,A15
	ST	A15,PFA210	SAVE A15 STACK POINTER 
PFA100	HLT		HALT SYSTEM 
* 
* POWER ON
* 
PFA200	EQU	*
	LDKL	A15,0	RESTORE A15 STACK POINTER 
PFA210	EQU	*-2
	CM	INIFLG	RESET INITIALIZATION FLAG
	CF	A15,PFINIT	RESTART COMMON DEVICES 
	ABL	RETU14	RESTORE A1-A14 FROM INTERRUPT STACK 
	END

Full view