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

⟦56d7a4234⟧

    Length: 11176 (0x2ba8)
    Notes: pts_type(SC)
    Names: »LDTASK.SC«

Derivation

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

PTS(SC)

	IDENT LDTASK 	REL 8.2 78-09-15  870105040820 

* 
******************************* 
* 
*   PHILIPS TERMINAL SYSTEM PTS 
* 
*   LDTASK = LOAD TASK
* 
* 
* 
* 
* 
* 
******************************* 
* 
* 
	ENTRY	LDTASK 
	ENTRY	ECBRED	LOAD TASK READ ECB
* 
* 
	EXTRN	QTJOB	TASK QUEUE 
	EXTRN	FREPAR	FREE COREMEMORY PARTITION 
	EXTRN	PARLEN	LENGTH OF PARTITION 
	EXTRN	PARNUM	NUMBER OF PARTITION 
	EXTRN	GETBLK	MONITOR FREE BLOCK
	EXTRN	FREBLK	PARAM. FROM MON.BLOCK 
	EXTRN	TTB:SA	NAME OF THE 5W IN TTAB
	EXTRN	TTB:SP	SEGMENT POINTER 
	EXTRN	TTB:SS	SEGMENT START 
	EXTRN	LRUQUE	POINTER TO FIRST SEGMENT IN QUEUE 
	EXTRN	PARTEN	ADDRESS TO FREE PARTITION 
	EXTRN	LDPEND	LOAD PENDING. LDTASK IN PAUSE 
	EXTRN	CVTINP	SUBROUTINE TABLE ADDRESS
	EXTRN	CVTDK	START UP DISC
	EJECT
* 
* 
* 
* 
ECBRED	DATA	/F0,0,410,0,0,0 
SEGMNO	RES	1	SEGMENT NUMBER 
* 
* 
	EJECT
LDTASK	EQU	*
* 
* 
*   MONBLK = GET PARAMETERS FROM A MONITOR BLOCK
* 
* 
MONBLK	EQU	*
	LDKL	A14,STBLD	LOAD STACK BASE 
	LD	A4,CVTDK	GET START DISC 
	ST	A4,ECBRED 
	LDR	A4,A1
	CF	A15,FREBLK	--GET MON.BLOCK
	LDR	A9,A1	SAVE TTAB-ADDRESS
	ST	A3,SEGMNO	SAVE SEGMENT POINTER
	LDR	A12,A2 
* 
*   TEST IF SEGMENT ALREADY IS LOADED 
* 
LDTEST	EQU	*
	LDR*	A1,A3	LOADED ?
	RF(N)	PART	NO
	LD	A10,2,A3	NEW LOAD ADDRESS 
	ABL	ACTIV
* 
*   PART = SEEK FREE PARTTION IN CORE MEMORY
* 
PART	EQU	*
	LD	A10,FREPAR	GET PARTITION POINTER
	RF(NZ)	UPDFRE
	LD	A8,LRUQUE	ZERO ?
	RF(NE)	SEEK
* 
*   MEMORY SPACE NOT AVAILABLE
*   INDICATE LOADING PENDING AND PAUSE LDTASK 
* 
PAUSE	EQU	* 
	IM	LDPEND
	ENB
	LKM		PAUSE LDTASK
	DATA	5 
	INH
	RB	LDTEST
* 
UPDFRE	LDR*	A7,A10	NEXT FREE PARTITION
	ST	A7,FREPAR	UPDATE PARTITION POINTER
	RF	FINITO
SEEK	LDR*	A7,A8 
	RF(E)	READY
	LDR	A8,A7
	RB	SEEK
READY	LD	A10,-8,A8	LOAD ADDR. TO FREE PARTITION 
* 
*   UPLSBT = UPDATE LSBT SEGMENT STATUS 
* 
UPLSBT	EQU	*
	LDK	A7,/80 
	SC	A7,-10,A8	UNLOADED
	LD	A6,-2,A8	PRECEDENT
	RF(Z)	FIN
	CM	2,A6	UPDATE END OF QUEUE
	RF	FINO
FIN	CM	LRUQUE	NO LRUQUE 
FINO	LDK	A6,0	SET CONST.
	STR	A6,A8	PRECEDENT=0
	ST	A6,-2,A8	SUCCEDENT=0
FINITO	EQU	*
	LDK	A7,/C0 
	SCR	A7,A3	SET NEW SEGMENT STATUS=UNDER LOADING 
	ST	A10,2,A3	LOAD ADDRESS 
* 
*   SAVE AND LOAD REGISTERS FOR 
*   READ AND RELOCATION ROUTINE 
* 
	ENB
	SUKL	A10,10
	ST	A10,ECBRED+2	READ BUFFER ADDRESS
	ADKL	A10,2	RELOCATION BASE=PARTITION START ADDR.-8 
	LDR	A13,A10	LOAD ADDRESS POINTER 
	LD	A6,4,A3	SECTOR ADDRESS
	LDK	A7,/F8	LOWEST FLEX.DISC FILE CODE
	CW	A7,CVTDK
	RF(G)	CONT	NOT FLEXIBLE DISC 
* 
*  LOCK FLEXIBLE DISC (IF UNLOCKED) 
* 
	LDK	A7,/A6	LOCK ORDER
	LDKL	A8,ECBRED 
	LKM
	DATA	1 
	LD	A7,8,A8	RETURN CODE 
	ANK	A7,/27	FAULTY FORMAT,SEEK- CRC ERROR,NOT OPER. 
	RF(Z)	CONT	OK ,ALREADY LOCKED
	ANK	A7,1 
	RF(NZ)	ERRLOD	NOT OPERABLE 
	LDK	A7,2	I/O ERROR 
	RF	ERRLOD
CONT	EQU	*
	EJECT
************************************************************
* 
*   READ AND RELOCATION ROUTINE 
* 
*   ENTRY PARAMETERS: 
*   A10= RELOCATION BASE
*   A13= MEMORY ADDRESS POINTER 
* 
*   REGISTER USAGE: 
*   A1 = LAST WORD TO RELOCATE
*   A2 = RELOCATION BITS CHECK REG
*   A3 = ADDRESS OF RELOCATION TABLE
*   A4 = RELOCATION BIT COUNTER 
*   A5 =
*   A7 = CODE WORD COUNTER
*   A8 = CODE WORD
* 
************************************************************

* 
*   READ FIRST SECTOR FOR RELOCATION AND GET RELOC. PARAMETERS
* 
	CF	A14,IOSUBS	--READ SECTOR
	LDR	A7,A7	READ ERROR?
	RF(NZ)	ERRLOD
	LD	A1,4,A10	LOAD MODULE LENGTH IN BYTES
	ADR	A1,A10	ADD RELOCATION BASE TO GET END ADDRESS
* 
*   RELOCATE SECTOR 
* 
RELSEC	LDKL	A7,376	NUMBER OF BYTES IN NORMAL SECTOR 
	LDR	A3,A13 
	ADR	A3,A7	ADDRESS TO RELOCATION WORDS
* 
*   GET RELOCATION WORD 
* 
RELWRD	LDK	A4,16	INITIATE RELOCATION BIT COUNTER
	LDR*	A2,A3	GET RELOCATION WORD 
	RF(NZ)	REL200	IF NOT ZERO JMP AND RELOCATE 
* 
*   NO MORE RELOCATION BY THIS WORD 
* 
RENONE	ADR	A4,A4	NUMBER OF BYTES TO ADD 
	ADR	A13,A4 
	SRL	A1,1 
	LDR	A5,A13 
	SRL	A5,1 
	CWR	A5,A1	MODULE END?
	RF(NL)	RELEND	YES
	SLL	A1,1 
	SUR	A7,A4	SECTOR ENDED?
	RF(P)	REL100	JMP IF NOT
	ADR	A13,A7 
	RF	SECEND
REL100	ADK	A3,2	UPDATE RELOCATION WORD POINTER
	RB	RELWRD	GET NEXT WORD
* 
*   PERFORM RELOCATION
* 
RELNXT	SLL	A2,1	RELOCATE THIS MODULE WORD?
	RB(Z)	RENONE	NO MORE TO RELOCATE BY THIS WORD! 
REL200	RF(N)	REL300	YES RELOCATE MODULE WORD
	SLN	A2,A5	NOT THIS WORD - GET NEXT 
	SUR	A4,A5
	ADR	A5,A5
	SUR	A7,A5
	ADR	A13,A5 
	RF	REL400
* 
*   RELOCATE ONE MODULE WORD
* 
REL300	LDR*	A8,A13	GET WORD 
	ADR	A8,A10	ADD BASE
	STR	A8,A13	RESTORE WORD
REL400	EQU	*
	ADKL	A13,2 
	CWR	A13,A1	RELOCATION ENDED? 
	RF(E)	RELEND	YES 
	SUK	A7,2 
	RF(Z)	SECEND	JMP IF END OF SECTOR
	SUK	A4,1	GET NEXT RELOCATION BIT 
	RB(P)	RELNXT	RELOCATE NEXT MODULE WORD 
	RB	REL100
* 
*   GET NEXT SECTOR FOR RELOCATION
* 
SECEND	ADK	A6,1	UPDATE SECTOR POINTER 
	SUKL	A13,2 
	LDR*	A5,A13	SAVE LAST WORD 
	ST	A13,ECBRED+2	SET READ BUFFER ADDRESS
	CF	A14,IOSUBS	READ SECTOR
	LDR	A7,A7	READ ERROR?
	RF(NZ)	ERRLOD
	STR	A5,A13	RESTORE LAST WORD 
	ADKL	A13,2	UPDATE MEMORY POINTER 
	RB	RELSEC	RELOCATE NEXT SECTOR 
* 
*   SAVE START OF BUFFER POOL AND INDICATE LOADING ENDED
* 
RELEND	EQU	*
	ADKL	A10,8	PARTITION STARTADDR.
	LD	A3,SEGMNO	GET SEGMENT ADDRESS 
	LDK	A7,/00 
	SCR	A7,A3	STATUS= LOADED , READY 
* 
*   GET START ADDRESS IN SEGMENT
* 
ACTIV	EQU	* 
	LDR	A12,A12	DISPATCHER 
	RF(N)	DSPFOR	AVTIVATION
	ADR	A12,A10
	LDR*	A12,A12	ABSOLUTE ADDRESS
	RF	UPDTTB
DSPFOR	NGR	A12,A12
	ADR	A12,A10
UPDTTB	ST	A12,TTB:SA,A9 
	ST	A10,TTB:SS,A9	SEGMENT START ADDRESS 
	ST	A3,TTB:SP,A9	SEGMENT POINTER
DIRECT	LDR	A5,A9
	CF	A15,QTJOB	--START CALLING TASK
	ENB
	LKM
	DATA	3	EXIT
ERRLOD	LD	A5,CVTINP 
	SUK	A5,2 
	LDR*	A5,A5 
	ST	A5,TTB:SA,A9
	ST	A7,TTB:SA+14,A9	ERROR RETURN CODE 
	LDK	A5,/80 
	SC*	A5,SEGMNO
	LD	A5,FREPAR 
	ADKL	A10,8 
	ST	A10,FREPAR
	STR	A5,A10 
	CM	TTB:SP,A9 
	RB	DIRECT
	EJECT
* 
*   IOSUBS = READ SECTOR SUBROUTINE 
* 
*   THIS ROUTINE READS ONE SECTOR FROM DISC 
*   AND ALSO CHECKS THE RETURN CODE CONDITION 
* 
IOSUBS	EQU	*
	LDK	A7,/91 
	LDKL	A8,ECBRED 
	ST	A6,10,A8	STORE SECTOR NUMBER IN ECB-WORD
	LKM
	DATA	1 
* 
* 
*   RETCOD CHECKS AND TRANSLATES RETURNCODE AFTER READ. 
* 
*   INPUT:8,A8 = RETURN CODE AFTER READ 
* 
*   OUTPUT:A7 = 0 NO ERROR
*               1 DISC. IO ERROR
*               2 DISC. INOPERABLE
*               3 NEW VOLUME LOADED 
* 
* 
RETCOD	EQU	*
	LD	A7,8,A8	GET RETURN CODE 
	ANKL	A7,/FEFF	BIT 7 ONLY RETRIES 
	RF(Z)	UT	NO ERROR
	ANK	A7,/83 
	RF(Z)	DISCIO	BIT 0-6,9-13
	ANK	A7,/3
	RB(Z)	IOSUBS	BIT 8 NEW VOLUME LOADED 
	LDK	A7,1	DISC INOPERABLE 
DISCIO	ADK	A7,1	DISC IO ERROR 
UT	RTN	A14
* 
	RES	10 
STBLD	EQU	*-2 
* 
	END

Full view