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

⟦5c758d58c⟧

    Length: 14338 (0x3802)
    Notes: pts_type(SC)
    Names: »INTVMD.SC«

Derivation

└─⟦efe3a1cfc⟧ Bits:30009667 Philips computer tape "600113"
    └─⟦this⟧ »TOSSWORK/INTVMD.SC« 

PTS(SC)

	IDENT INTVMD 	REL 8.2 78-09-15  870105040820 

* 
*************************************************** 
* 
*   PHILIPS TERMINAL SYSTEM PTS 
* 
*   INTVMD = INTERRUPT VECTORS AND SYSTEM START 
* 
* 
* 
* 
* 
* 
*************************************************** 



* 
* 
*   THIS MODULE CONTAINS HARDWARE INTERRUPT VECTORS,
*   COMMUNICATION VECTOR TABLE,STACK AREA 
*   AND MONITOR INITIALIZATION. 
* 
* 









	EJECT


	ENTRY	CVTMSZ	MEMORY SIZE 
	ENTRY	CVTSTB	STACK BASE
	ENTRY	CVTSBA	ADDRESS TO START OF BUFFER POOL 
	ENTRY	CVTEBA	ADDRESS TO END OF BUFFER POOL 
	ENTRY	CVTINP	INTERPRETER ADDRESS TABLE 
	ENTRY	CVTDK	START UP DISC
	ENTRY	CVTAPA	APPLICATION ADDRESS 
	ENTRY	CVTAPS	APPLICATION START ADDRESS 
	ENTRY	CVTCLK	REAL TIME CLOCK 
	ENTRY	LOOP	IDLE LOOP 
	ENTRY	INIM40	MONCON ENTRY
	ENTRY	CVTLSB	SEGMENT LOAD BLOCK TABLE ADDRESS
	ENTRY	FREPAR	FREE PARTITION POINTER
	ENTRY	PARLEN	PARTITION LENGTH
	ENTRY	NUMPAR	NUMBER OF PARTITIONS

	EXTRN	IHPFAR	POWER FAIL / AUTO RESTART 
	EXTRN	IHLKM	LKM INTERRUPT
	EXTRN	IHRTC	REAL TIME CLOCK
	EXTRN	IHTW	TYPEWRITER
	EXTRN	IHTC	CASSETTE TAPE 
	EXTRN	IHSOP	SYSTEM OPERATORS PANEL 
**
**
**
**
**
**
	EXTRN	CHRT1	REMOTE CHANNEL UNIT NO. 1
	EXTRN	CHRT2	REMOTE CHANNEL UNIT NO. 2
	EXTRN	CHRT3
	EXTRN	CHRT4
	EXTRN	IHCC1	CASSETTE CHANGER NO. 1 
	EXTRN	IHCC2	                     2 
	EXTRN	IHCC3	                     3 
	EXTRN	CHLT1	LOCAL CHANNEL UNIT NO. 1 
	EXTRN	CHLT2	LOCAL CHANNEL UNIT NO. 2 
	EXTRN	CHLT3
	EXTRN	CHLT4	LOCAL CHANNEL UNIT NO. 4 
	EXTRN	IHFD	FLOPPY DISCEN 
	EXTRN	IHLP	LINE PRINTER
	EXTRN	IHCR	CARD-READER 
	EXTRN	IHDU1	DISC UNIT NO. 1
	EXTRN	IHDU2	DISC UNIT NO. 2
	EXTRN	IHMT	MAG. TAPE 
	EXTRN	ILLINT	ILLEGAL INTERRUPT 
	EXTRN	HALT	HALT ROUTINE

	EXTRN	TCTAB
	EXTRN	TTB:ID	TASK IDENTIFICATION 
	EXTRN	TTB:ST	TASK STATUS AND LEVEL 
	EXTRN	PRUN	TTAB FOR RUNNING PROGRAM
	EXTRN	INIMON	MONITOR INITIALIZATION ROUTINE
	EXTRN	BUG	BUGGER 
	EXTRN	PFINIT	INIT AFTER MASTER CLEAR 
	EXTRN	IHINPT	TRAP HANDLER
* 

FD	EQU	/09	FD DEVICE ADDRESS
CHCR	EQU	/0E	CHCR DEVICE ADDRESS
SOP	EQU	/2E	SOP DEVICE ADDRESS
X:A	EQU	/0	 
SEGLEN	EQU	X:A	SEGMENT LENGTH IN BYTES
X:B	EQU	0 
NUMPAR	EQU	X:B	NUMBER OF PARTITIONS 
*    BY SETTING X:A NOT EQUAL TO ZERO, UNLOAD IS NOT
*    PERFORMED ON CASSETTE AFTER THE APPLICATION LOADING
* 
X:C	EQU	0 
UNLOAD	EQU	X:C
DOPDSK	EQU	0
REL0	EQU	*
	EJECT

* 
*	INTERRUPT VECTORS 
* 

	DATA	IHPFAR	      0
	DATA	IHLKM	      1 
	DATA	IHRTC	      2 
	DATA	ILLINT	      3
	DATA	ILLINT	      4
	DATA	ILLINT	      5
	DATA	ILLINT	      6
	DATA	IHTW	      7
	DATA	IHTC	      8
	DATA	IHSOP	      9 
	DATA	ILLINT	     10
	DATA	ILLINT	     11
	DATA	ILLINT	     12
	DATA	ILLINT	     13
	DATA	CHLT1	     14 
	DATA	IHFD	     15
	DATA	CHRT1	     16 
	DATA	CHRT2	     17 
	DATA	CHRT3	     18 
	DATA	CHRT4	     19 
	DATA	IHCC1	     20 
	DATA	IHCC2	     21 
	DATA	ILLINT	     22
	DATA	IHCC3	     23 
	DATA	CHLT1	     24 
	DATA	CHLT2	     25 
	DATA	CHLT3	     26 
	DATA	CHLT4	     27 
	DATA	ILLINT	     28
	DATA	ILLINT	     29
	DATA	IHFD	     30
	DATA	ILLINT	     31
	DATA	ILLINT	     32
	DATA	ILLINT	     33
	DATA	IHLP	     34
	DATA	IHCR	     35
	DATA	ILLINT	     36
	DATA	ILLINT	     37
	DATA	ILLINT	     38
	DATA	ILLINT	     39
	DATA	IHDU1	     40 
	DATA	IHDU2	     41 
	DATA	ILLINT	     42
	DATA	ILLINT	     43
	DATA	IHMT	     44
	DATA	ILLINT	     45
	DATA	ILLINT	     46
	DATA	ILLINT	     47
	DATA	ILLINT	     48
	DATA	ILLINT	     49
	DATA	ILLINT	     50
	DATA	ILLINT	     51
	DATA	ILLINT	     52
	DATA	ILLINT	     53
	DATA	ILLINT	     54
	DATA	ILLINT	     55
	DATA	ILLINT	     56
	DATA	ILLINT	     57
	DATA	ILLINT	     58
	DATA	ILLINT	     59
	DATA	ILLINT	     60
	DATA	ILLINT	     61
	DATA	ILLINT	     62
	DATA	IHINPT	TRAP ROUTINE 
	HLT
	EJECT

* 
*	SYSTEM HALTS
* 

	HLT
	HLT




* 
*	COMMUNICATION VECTOR TABLE
* 

CVTMSZ	DATA	0	MEMORY SIZE 
CVTSTB	DATA	STB	STACK BASE
CVTSBA	DATA	0	START OF BUFFER AREA
CVTEBA	DATA	0	END OF BUFFER AREA
CVTINP	DATA	0	INTERPPRETER TABLE ADDRESS
	RF	INIT
	RF	BUGG
CVTAPA	DATA	0	APPLICATION ADDRESS 
CVTAPS	DATA	0	APPLICATON START ADDRESS
CVTCLK	DATA	0	REAL TIME CLOCK 
CVTLSB	DATA	0	ADDRESS TO LOAD SEGMENT BLOCK TABLE 
CVTDK	DATA	0	START UP DISC
FREPAR	DATA	0	FREE PARTITION POINTER
PARLEN	DATA	0	LENGTH OF PARTITIONS IN BYTES 
CVTAPN	DATA	0	APPLICATION NUMBER (START SWITCH) 
CVTSUB	DATA	0	ADDRESS TO IPL READ SECTOR SUBROUTINE 
	EJECT

* 
*	INIMON AND BUGGER ENTRIES 
* 

INIT	LDKL	A1,INIMON	INITIALIZE AND START APPL 
	RF	BRANCH

BUGG	LDKL	A13,/90	START BUGGER
	LDKL	A14,-8
	AD	A14,CVTAPA
	LDKL	A1,BUG
BRANCH	ABR(NZ)	A1 
	HLT
TRAP	LDK	A1,/D	HALT PARAMETER 
	CF	A15,HALT
	EJECT
* 
*   SAVE MEMORY SIZE, END OF BUFFER POOL
*   AND LOAD STACK BASE 
* 
*   ON ENTRY: 
*   A1 = APPLICATION DISC ADDRESS 
*   A2 = START UP DISC, F0=FIX, F1=CARTRIDGE
*   A9 = ADDRESS TO DPL (A9+2 = ADDRESS TO APPLICATION NO.) 
*   A10= RELOCATION BASE
*   A11= BUFFER ADDRESS+2 
*   A12= MONITOR START ADDRESS
*   A13= APPLICATION ADDRESS
*   A14= MEMORY SIZE
*   A15= ADDRESS TO READ SECTOR SUBROUTINE
* 
INIM	EQU	*
	ST	A2,CVTDK
	ST	A14,CVTMSZ	MEMORY SIZE
	SUKL	A14,2 
	ST	A14,CVTEBA	END OF BUFFER POOL 
	IFT	DOPDSK=1 
	LDR	A13,A9 
	LDR	A9,A12 
	ORKL	A12,/FFE
	ST	A12,CVTEBA
	ADKL	A12,2 
	ST	A12,CVTMSZ
	LDR	A12,A9 
	XIF
	LDR	A14,P	LOAD STACK BASE
	LDKL	A2,/400	INDICATE LOAD ON SOP
	OTR	A2,0,SOP 
	LD	A2,2,A9	APPLICATION NO. 
	ST	A2,CVTAPN	SAVE IN CVT 
	ST	A15,CVTSUB	SAVE ADDRESS TO READ SECTOR SUBR.
* 
*   READ LSBT 
* 
	LDR	A6,A1
	IFT	DOPDSK=1 
	SUK	A6,1 
	ST	A3,CVTAPN 
	RF	INIM20
	XIF
	CFR	A14,A15	READ LSBT
	LDR*	A2,A11	GET LENGTH 
	CWK	A2,12	ONE SEGMENT ?
	RF(E)	INIM20 
	ST	A13,CVTLSB	STORE ADDRESS TO LSBT
	ADK	A2,2 
INIM08	EQU	*
	LDR	A3,A11	BUFFER ADDRESS
	LDR	A5,A13 
	ADKL	A5,408
INIM10	LDR*	A4,A3	GET TABLE WORD
	STR	A4,A13	STORE TABLE WORD
	ADKL	A13,2	UPDATE MEMORY ADDRESS 
	ADK	A3,2	INCREMENT FETCH ADDRESS 
	SUK	A2,2	READY ? 
	RF(E)	INIM20 
	CWR	A5,A13 
	RB(NE)	INIM10
	ADK	A6,1 
	CFR	A14,A15
	RB	INIM08
	EJECT
* 
*   SAVE APPLICATION ADDRESS AND RELOCATION BASE
* 
INIM20	ST	A13,CVTAPA	APPLICATION ADDRESS
	ADR	A10,A13	APPLICATION RELOCATION BASE
	EJECT
* 
*   READ AND RELOCATION ROUTINE 
* 
*   ON ENTRY: 
*           A10 = RELOCATION BASE 
*           A11 = INPUT BUFFER ADDRESS
*           A13 = OUTPUT ADDRESS
* 
*   REGISTER USAGE: 
*                 A2 = RELOCATION BITS CHECK REG
*                 A3 = ADDRESS OF RELOCATION TABLE
*                 A4 = RELOCATION BIT COUNTER 
*                 A5 = CODE WORD ADDRESS
*                 A7 = CODE WORD COUNTER
*                 A8 = CODE WORD
* 
*   READ SECTORS OF LOAD MODULE AND RELOCATE
	ADK	A6,1	UPDATE SECTOR NUMBER
	CFR	A14,A15	READ FIRST SECTOR
	LDR*	A2,A11	START ADDRESS
	ADR	A2,A10	ADD RELOCATION BASE 
	ST	A2,CVTAPS	SAVE START ADDRESS
	LD	A1,4,A11	LENGTH IN BYTES
	ADR	A1,A10	ADD RELOCATION BASE 
	ADK	A1,2 
	LDKL	A7,368	BYTES IN FIRST SECTOR
	LDR	A3,A11 
	ADK	A3,8	BUFFER START
	LDKL	A4,-4 
	RF	RELOCS
RELOC	LDK	A4,0
	LDKL	A7,376	NUMBER OF BYTES IN NORMAL SECTOR 
	LDR	A3,A11 
RELOCS	LDR	A5,A3	BUFFER ADDRESS POINTER 
	ADR	A3,A7	ADDRESS TO RELOCATION WORDS
MOV	EQU	* 
	LDR*	A2,A3	RELOCATION BITS 
	SRC	A2,1 
	LDR	A4,A4	FIRST SECTOR ? 
	RF(E)	RELOCF	NO
	SLC	A2,4 
RELOCF	ADK	A3,2	POINTER TO NEXT RELOCATION WORD 
	ADK	A4,16	NUMBER OF BITS 
MOVE	EQU	*
	LDR*	A8,A5	GET CODE WORD FROM BUFFER 
	SLC	A2,1	CHECK RELOCATION BIT
	RF(NN)	MOVABS	NO RELOCATION
	ADR	A8,A10	ADD RELOCATION BASE 
MOVABS	STR	A8,A13	STORE CODE WORD 
	ADK	A5,2	UPDATE BUFFER POINTER 
	ADKL	A13,2	UPDATE MEMORY POINTER 
	CWR	A13,A1	APPL. LOADED ?
	RF(E)	REDEND 
	CWR	A13,A9	LAST POSITION ADMITTED ?
	RF(NE)	MONFOR	NO 
	LDKL	A1,/100 
FELUTG	OTR	A1,0,SOP 
	HLT
MONFOR	SUK	A7,2	LAST ?
	RF(Z)	MOVEND	YES 
	SUK	A4,1	NEXT RELOCATION WORD ?
	RB(P)	MOVE 
	RB	MOV	YES 
MOVEND	ADK	A6,1	UPDATE SECTOR POINTER 
	CFR	A14,A15	READ NEXT SECTOR 
	RB	RELOC 
	EJECT
* 
*   SAVE START OF BUFFER POOL AND INDICATE LOADING ENDED
* 
REDEND	EQU	*
	ST	A13,CVTSBA
	LDKL	A4,NUMPAR	OVERLAY SYSTEM ?
	RF(E)	INIM35	NO
	ADKL	A13,10	DUMMY NEEDED AT SEGMENT LOAD 
	ST	A13,CVTSBA	START OF BUFFER POOL 
* 
*   CALCULATE NECESSARY PARTITION LENGTH
* 
	LDKL	A1,SEGLEN	GET MINIMUM LENGTH IN BYTES 
	SUR	A2,A2
	SUKL	A1,368	BYTES IN 1:ST SECTOR 
	RF(NP)	PAREND
	ADKL	A2,368
PARADD	SUKL	A1,376	BYTES IN 2:ND-N:TH SECTOR
	RF(NP)	PAREND
	ADKL	A2,376
	RB	PARADD
PAREND	ADKL	A2,408	RESERVED SPACE FOR LAST SECTOR 
	ST	A2,PARLEN 
	EJECT
* 
*   TEST IF MEMORY SPACE AVAILABLE FOR PARTITIONS 
* 
	LDR	A3,A4
	LDR	A1,A13 
	SRL	A1,1	START ADDRESS REFERENCE 
	LD	A2,PARLEN 
	SRL	A2,1	PARTITION LENGTH REFERENCE
INIM28	ADR	A1,A2	OVERFLOW?
	RF(O)	OVERFL	ERROR 
	SUK	A3,1 
	RB(NZ)	INIM28
	LD	A2,CVTEBA	GET MEMORY SIZE 
	SRL	A2,1 
	CWR	A1,A2
	RF(NG)	INILNK
OVERFL	EQU	*	MEMORY OVERFLOW ERROR
	LDKL	A1,/100 
	RB	FELUTG
	EJECT
* 
*   LINK FREE PARTITION QUEUE 
* 
INILNK	EQU	*
	ST	A13,FREPAR	SET FREE PARTITION POINTER 
INIM29	SUK	A4,1	LAST PARTITION ?
	RF(E)	INIM32 
	LDR	A5,A13 
	AD	A13,PARLEN	ADD PARTITION LENGTH 
	STR	A13,A5	STORE LINK
	RB	INIM29
INIM32	CMR	A13
	EJECT

INIM35	EQU	*
	LDK	A7,0 
	OTR	A7,0,SOP	INDICATE LOADING ENDED
	LD	A7,CVTDK	START UP DISC
	ANK	A7,/F
	SLL	A7,4 
	ORS	A7,INIM37
	ANK	A7,/80 
	RF(Z)	INIM38	NOT FLEX DISC 
	LDK	A7,/C	UNLOCK 
INIM37	CIO	A7,1,FD
	RB(NA)	*-2 
	SST	A7,FD
	RB(NA)	*-2 
INIM38	EQU	*
* 
*   CHECK IF BUGGER IN CORE 
* 
	LDR	A14,A10
	LDKL	A13,INIM40	RESTART ADDRESS
	LDKL	A1,BUG
	ABR(NZ)	A1 
	EJECT

* 
*	FIND FIRST USER TASK
* 
INIM40	EQU	*
	LD	A1,TCTAB	TCTAB ADDRESS
	LDR*	A4,A1	TCTAB LENGTH
INIM50	ADK	A1,2 
	SUK	A4,2 
	RF(NZ)	INIM60
	HLT		NO USER TASK FOUND

INIM60	LDR*	A5,A1	TTAB ADDRESS
	LD	A2,TTB:ID,A5	TASK IDENTIFICATION
	RB(N)	INIM50	MONITOR TASK
	ST	A5,PRUN	SET TTAB FOR RUNNING PROGRAM
	CMR	A5 
	LD	A7,TTB:ST,A5	GET USER LEVEL 
	SRC	A7,6 
	EJECT
* 
*   INITIALIZE STACK
* 
	LDKL	A15,STB-32	STACK BASE - IDLE LOOP 
	LDK	A1,0 
	STR	A1,A15	TTAB-ADDRESS OF IDLE LOOP 
	LDKL	A13,NUMPAR	OVERLAY SYSTEM?
	RF(Z)	INIM70 
	STR	A1,A15	SEGMENT POINTRER OF IDLE LOOP 
* 
*	START SYSTEM
* 

INIM70	EQU	*
	LDKL	A13,WAITIS
	STR	A13,A15	STORE USER START ADDRESS 
	STR	A7,A15	AND LEVEL ON STACK
	ABL	PFINIT	INITIALIZE DEVICES
	DATA	/FC00	PSW IDLE LOOP 
	DATA	LOOP
STB	EQU	*-2	STACK BASE



* 
*	IDLE LOOP 
* 

LOOP	RB	* 
WAITIS	EQU	*
	LDKL	A8,10 
	LKM
	DATA	6 
	LD	A1,CVTDK	START UP DISC
	SLL	A1,8	INTO LEFT BYTE
	LC	A1,CVTAPN+1	APPLICATION NO IN RIGTH BYTE
	LD	A2,CVTSUB	ADDRESS TO IPL READ SECTOR SUBROUTINE 
	ABI	CVTAPS 

	END	INIM 

Full view