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

⟦509a88e8f⟧

    Length: 17306 (0x439a)
    Notes: pts_type(SC)
    Names: »LDTASK.SC«

Derivation

└─⟦025d39960⟧ Bits:30009672 Philips computer tape "600133"
    └─⟦this⟧ »M:DSB/LDTASK.SC« 
└─⟦1fa4b7c7b⟧ Bits:30009694 Philips computer tape "600410A"
    └─⟦this⟧ »MODMON/LDTASK.SC« 
└─⟦245262b9f⟧ Bits:30009679 Philips computer tape "600220"
    └─⟦this⟧ »M:92NA/LDTASK.SC« 
    └─⟦this⟧ »M:92SP/LDTASK.SC« 
└─⟦38a30a456⟧ Bits:30009662 Philips computer tape "600104"
    └─⟦this⟧ »M:92OD/LDTASK.SC« 
└─⟦3a2bec7de⟧ Bits:30009687 Philips computer tape "600313"
    └─⟦this⟧ »M:821/LDTASK.SC« 
└─⟦470bcbfc6⟧ Bits:30009709 Philips computer tape "M_92LP"
    └─⟦this⟧ »M:92LP/LDTASK.SC« 
└─⟦6349b94c6⟧ Bits:30009684 Philips computer tape "600308"
    └─⟦this⟧ »M:92D1/LDTASK.SC« 
└─⟦726a6c4ca⟧ Bits:30009685 Philips computer tape "600309"
    └─⟦this⟧ »M:92D2/LDTASK.SC« 
└─⟦9ad21746d⟧ Bits:30009682 Philips computer tape "600304"
    └─⟦this⟧ »M:92NA/LDTASK.SC« 
└─⟦a25d6defe⟧ Bits:30009676 Philips computer tape "600210"
    └─⟦this⟧ »M:92NA/LDTASK.SC« 
    └─⟦this⟧ »M:92SP/LDTASK.SC« 
└─⟦dab19bdd7⟧ Bits:30009677 Philips computer tape "600218"
    └─⟦this⟧ »M:261/LDTASK.SC« 

PTS(SC)

	IDENT LDTASK 	REL 9.2 79-12-06  870105040920 

			=2, DEVICE TABLE LENGTH DATA WORD
			REL 9.2 79-11-16 
			=1, QLTASK RETURN IN ENABLE
			REL 9.1 79-05-23 
* 
**************************************************
* 
*   PHILIPS TERMINAL SYSTEM PTS 
* 
*   LDTASK = LOAD TASK
* 
* 
* 
* 
**************************************************
* 
* 
*   THIS MODULE CONTAINS THE LOAD TASK
*   USED IN TOSS MEMORY MANAGEMENT SYSTEMS. 
* 
*   IT CONTAINS TWO ENTRY POINTS: 
* 
*   - LT:DSK   USED IN DISC PAGING SYSTEMS
*   - LT:SWB   USED IN SWAPPABLE WORK BLOCK SYSTEMS 
* 
* 
	EJECT			LDTASK 
* 
* 
*********** 
* ENTRIES * 
*********** 
* 
* 
	ENTRY	LT:DSK	DISC PAGING ENTRY 
	ENTRY	LT:SWB	SWAPPABLE WORK BLOCK ENTRY
	ENTRY	TTABLD	LOAD TASK TTAB
	ENTRY	QLTDSK	ACTIVATE LDTASK AT ENTRY LT:DSK 
	ENTRY	QLTSWB	ACTIVATE LDTASK AT ENTRY LT:SWB 
	ENTRY	PQEMTY	PAGE QUEUE EMPTY FLAG 
	EJECT			LDTASK 
* 
* 
************* 
* EXTERNALS * 
************* 
* 
* 
	EXTRN	TLDS15	ENTRY IN TLDSEG 
	EXTRN	TLDS20	ENTRY IN TLDSEG 
	EXTRN	MEXIT	MONITOR TASK EXIT
	EXTRN	LKMERR	HALT SYSTEM DUE TO FATAL LKM ERROR
	EXTRN	ACTOT	ACTIVATE TASK
	EXTRN	QTJOB	QUEUE TASK FOR DISPATCHING 
	EXTRN	PAGQUE	FREE PAGE QUEUE 
	EXTRN	PAG:QB	QUEUE LINK BACKWARDS
	EXTRN	PAG:PA	PAGE ADDRESS
	EXTRN	PAG:SB	SEGMENT BLOCK ADDRESS 
	EXTRN	SEG:DS	DISC SECTOR ADDRESS 
	EXTRN	SEG:EL	SEGMENT LENGTH
	EXTRN	SEG:PB	PAGE BLOCK ADDRESS
	EXTRN	SWB:DS	DISC SECTOR ADDRESS OF FIRST COPY 
	EXTRN	SWB:EL	SWB LENGTH (BYTES)
	EXTRN	SWB:NS	SWB LENGTH (SECTORS)
	EXTRN	ECBBA	ECB BUFFER ADDRESS 
	EXTRN	ECBRC	ECB RETURN CODE
	EXTRN	ECBCW	ECB CONTROL WORD 
	EXTRN	TTB:SA	TTAB SAVE AREA
	EXTRN	TTB:MT	MMU TABLE 
	EXTRN	TTB:SB	SEGMENT BLOCK ADDRESS 
	EXTRN	SCTPLD	PROGRAM LOADING DEVICE
	EXTRN	SCTPSZ	PAGE SIZE 
	EXTRN	SCTLAP	LOGICAL ADDRESS OF PAGES
	EXTRN	T:ACSB	CURRENT SEGMENT BASE
	EJECT			LDTASK 
* 
* 
***************************************** 
* 
*	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 INCLUDING TOSS SWAPPABLE WORK 
*	BLOCKS IS OBTAINED BY SETTING SWPBLK EQU 1. 
* 
SWPBLK	EQU	0
* 
* 
*	A PROGRAM VERSION USING TOSS ASSEMBLER OVERLAY
*	IS OBTAINED BY SETTING ASSOLY EQU 1.
* 
ASSOLY	EQU	0
* 
	EJECT			LDTASK 
* 
*	LDTASK ECB AND BUFFER AREAS 
* 
LD:ECB	DATA	0,0,410,0,0,0	ECB AREA FOR LOAD TASK
* 
LD:BUF	RES	205	INTERMEDIATE BUFFER FOR LOAD TASK
* 
	RES	2	LOAD TASK STACK (ONE LEVEL)
LD:STB	EQU	*-2	LOAD TASK STACK BASE 
* 
PQEMTY	DATA	0	PAGE QUEUE EMPTY FLAG 
* 
	EJECT			LDTASK 
* 
*	TTABLD (LOAD TASK TTAB) 
* 
	IFT	MMUPAG=1 
	RES	16	LDTASK MMU TABLE
	XIF
* 
	DATA	0	SEGMENT BLOCK ADDRESS 
* 
TTABLD	EQU	*	TTABLD ENTRY 
	DATA	0	DISPATCHER QUEUE LINK 
	DATA	'#L'	TASK IDENTIFICATION
	DATA	49	PRIORITY LEVEL 
	DATA	0	PENDING POINTER 
	DATA	/C4C0	PSW (PROGRAM STATUS WORD) 
	DATA	0	DISPATCH ADDRESS
	DATA	0,0,0,0,0,0,0	REGISTER SAVE AREA, A1-A14
	DATA	0,0,0,0,0,0,0 
	DATA	2	DEVICE TABLE LENGTH	=2
* 
	EJECT			LDTASK 
* 
* 
**********
* LT:DSK *
**********
* 
* 
*   LT:DSK PERFORMS LOADING OF DISC RESIDENT SEGMENTS INTO CORE.
* 
*   INPUT:  A1 = SEGMENT BLOCK ADDRESS
*           A3 = TTAB ADDRESS OF CALLING TASK 
* 
* 
LT:DSK	EQU	*	LDTASK DISC PAGING ENTRY 
	LD	A13,TTB:SA+26,A3	GET A13 FROM TTAB SAVE AREA
	LDKL	A5,TTABLD	GET LDTASK TTAB ADDRESS 
	LDR*	A2,A1	GET SEGMENT STATUS
	RF(NN)	LTD:05	SEGMENT NOT LOADED IN CORE?
* 
*	UPDATE MMU TABLE FOR CALLING TASK (IF MMU) AND
*	REMOVE PAGE FROM PAGQUE 
* 
	LDR	A7,A3	SAVE A3
	LDR	A5,A3
	LD	A1,SEG:PB,A1	GET PAGE BLOCK ADDRESS 
	CF	A15,TLDS15
	LDR	A5,A7	GET TTAB ADDRESS OF CALLING TASK 
	ABL	LTD:80 
* 
	EJECT			LDTASK 
* 
*	NO PAGE AVAILABLE. PAUSE LDTASK UNTIL RESTARTED 
*	BY IHLKM WHEN PAGE AVAILABLE AGAIN. 
* 
LTD:00	EQU	*
	IM	PQEMTY	INDICATE PAGE QUEUE EMPTY
	LKM
	DATA	5	PAUSE LDTASK
* 
*	GET ONE PAGE FROM PAGQUE
* 
LTD:05	EQU	*
	LD	A2,PAGQUE+2 
	CWK	A2,PAGQUE
	RB(E)	LTD:00	NO PAGE AVAILABLE?
* 
	EJECT			LDTASK 
* 
*	TAKE FOUND PAGE OUT OF PAGQUE 
* 
	LD	A4,PAG:QB,A2	ADDRESS TO NEXT PAGE BLOCK 
	ST	A4,PAGQUE+2	UPDATE QUEUE ANCHOR 
	LDR*	A12,A2	GET PAGQUE ADDRESS AND UPDATE... 
	STR	A12,A4	...QUEUE LINK FORWARD FOR NEXT BLOCK
	CMR	A2	RESET QUEUE LINK FORWARD OF REMOVED BLK 
	LDKL	A6,/4000	SEGMENT UNDER LOADING BIT
	LD	A4,PAG:SB,A2	GET OLD SEGMENT BLOCK ADDRESS
	RF(Z)	LTD:15 
	SCR	A6,A4	RESET STATUS 
* 
LTD:15	EQU	*
	ORRS	A6,A1	INDICATE SEGMENT UNDER LOADING
	ST	A2,SEG:PB,A1	SET NEW PAGE BLOCK ADDRESS 
	ST	A1,PAG:SB,A2	SET NEW SEGMENT BLOCK ADDRESS
* 
	IFT	MMUPAG=1 
* 
*	UPDATE MMU TABLE FOR CALLING TASK AND LDTASK
* 
	INH
	MS	3,TTB:SA+2,A5	SAVE A1-A3 IN TTAB SAVE AREA
	TL	TTB:MT,A3	LOAD MMU WITH CALLING TASK
	TS	TTB:MT,A5	STORE IN LDTASK MMU TABLE 
	LDR	A1,A2
	LDR	A3,A5	TTAB ADDRESS OF LDTASK 
	CF	A15,TLDS20	UPDATE MMU TABLE FOR LDTASK
	TS	TTB:MT,A3	STORE NEW MMU TABLE FOR CALLING TASK
	ENB
	XIF
* 
	EJECT			LDTASK 
* 
*	PREPARE FOR READING OF SEGMENT
* 
	LD	A6,SEG:EL,A1	GET SEGMENT LENGTH 
	SRL	A6,1	CONVERT LENGTH TO WORDS 
	LD	A4,SCTPSZ	GET PAGE SIZE 
	SRL	A4,1	CONVERT LENGTH TO WORDS 
	LDR	A5,A3	GET TTAB ADDRESS OF CALLING TASK 
	LD	A3,PAG:PA,A2	GET PAGE ADDRESS (PHYSICAL)
	LD	A2,SEG:DS,A1	GET SEGMENT DISC ADDRESS 
	LDR	A9,A1	SAVE SEGMENT BLOCK ADDRESS 
	LDR	A11,A5	INDICATE DISC PAGING (A11 <> 0) 
* 
	IFT	MMUPAG=0 
	ST	A3,T:ACSB,A13	UPDATE CURRENT SEGMENT BASE 
	XIF
* 
LTD:35	EQU	*	ENTRY USED BY LT:SWB 
	LDK	A7,/91	PHYSICAL READ 
* 
*	SET ECB PARAMETERS
* 
LTD:40	EQU	*	ENTRY USED BY LT:SWB 
	LDKL	A14,LD:STB	LOAD LDTASK STACK BASE 
	LDKL	A8,LD:ECB	GET LD:ECB ADDRESS
	ST	A2,ECBCW,A8 
* 
	IFT	MMUPAG=0 
	SUK	A3,2 
	LDR	A12,A3 
	LD	A2,SCTPLD	GET PROGRAM DISC FILE CODE
	STR	A2,A8
	ST	A3,ECBBA,A8	SET BUFFER ADDRESS
	RF	LTD:60
	XIF
* 
	EJECT			LDTASK 
* 
* 
	IFT	ASSOLY=1 
	LD	A2,SCTPLD	GET PROGRAM DISC FILE CODE
	STR	A2,A8
	LDKL	A1,LD:BUF	GET LDTASK BUFFER ADDRESS 
	ST	A1,ECBBA,A8 
	CF	A14,LTD:85	READ FIRST SECTOR TO LD:BUF
	XIF
* 
	IFT	MMUPAG=1 
	IFT	SWPBLK=1 
	LDR	A11,A11	CHECK DISC PAGING/SWB FLAG 
	RF(NZ)	LTD:43	DISC PAGING REQUEST? 
* 
	EJECT			LDTASK 
* 
* 
	LDR	A12,A3	SAVE LOGICAL BUFFER ADDRESS 
	ECR	A2,A3	CONVERT LOGICAL ADDRESS TO PHYSICAL
	ANKL	A3,/FFF 
	SRL	A2,3 
	ANK	A2,/1E	MMUTAB INDEX (5 BITS) 
	ADR	A2,A5	ADD TTAB ADDRESS 
	LC	A2,TTB:MT,A2	GET PHYSICAL PAGE ADDRESS
	SRL	A2,2 
	ECR	A1,A2
	ANK	A2,/0F 
	SRC	A2,4 
	ORR	A3,A2
	RF(NZ)	LTD:48
	SUKL	A1,/1000
	RF	LTD:48
* 
LTD:43	EQU	*
	XIF
* 
	IFT	MMUPAG=1 
	LDR	A1,A3
	SRL	A1,2 
	SLL	A3,2 
	RF(NZ)	LTD:45
	SUKL	A1,/1000
* 
	EJECT			LDTASK 
* 
* 
LTD:45	EQU	*
	LDR	A12,A3 
	ANKL	A12,/FFF	CONVERT PHYSICAL ADDRESS TO LOGICAL
	OR	A12,SCTLAP
* 
LTD:48	EQU	*
	SUK	A3,2 
	ST	A3,ECBBA,A8	SET BUFFER ADDRESS
	ANKL	A1,/3000
	OR	A1,SCTPLD	GET PROGRAM DISC FILE CODE
	STR	A1,A8
* 
	IFT	ASSOLY=0 
	SUKL	A12,2 
	RF	LTD:60
	XIF
* 
	IFT	ASSOLY=1 
* 
*	MOVE FIRST SECTOR TO PAGE AREA
* 
	LDKL	A1,LD:BUF+2 
	LDR	A2,A12 
	LDKL	A3,376
	MVSU	A3	MOVE FIRST SECTOR TO PAGE
	SUKL	A12,2 
	XIF
* 
	EJECT			LDTASK 
* 
* 
LTD:50	EQU	*
	IM	ECBCW,A8	POINT TO NEXT SECTOR 
* 
	IFT	ASSOLY=0 
	LDK	A1,200 
	XIF
* 
	IFT	ASSOLY=1 
	LDK	A1,188 
	XIF
* 
	SUR	A6,A1	GET REMAINING LENGTH OF SEGMENT/SWB
	RF(NP)	LTD:75	SEGMENT/SWB HANDLING FINISHED? 
	SUR	A4,A1	GET REMAINING LENGTH OF PAGE 
	ADR	A1,A1
	ADR	A12,A1	UPDATE PAGE AREA POINTER
* 
	IFT	MMUPAG=1 
	LD	A10,ECBBA,A8	GET BUFFER ADDRESS 
	RF(N)	LTD:55 
	ADS	A1,ECBBA,A8	UPDATE BUFFER ADDRESS
	RF	LTD:60
* 
LTD:55	EQU	*
	ADS	A1,ECBBA,A8	UPDATE BUFFER ADDRESS
	RF(N)	LTD:60	NOT OVERFLOW? 
	LDKL	A1,/1000	OVERFLOW CORRECTION
	ADRS	A1,A8 
	XIF
* 
	IFT	MMUPAG=0 
	ADS	A1,ECBBA,A8	UPDATE BUFFER ADDRESS
	XIF
* 
	EJECT			LDTASK 
* 
* 
LTD:60	EQU	*
	CWK	A4,204	CHECK REMAINING LENGTH OF PAGE
	RF(L)	LTD:65	NOT ROOM FOR ONE MORE SECTOR IN PAGE? 
* 
	IFT	MMUPAG=1 
	ELR	A10,A12	SAVE WORD TO BE DESTROYED BY DISC CYL-ID 
	CF	A14,LTD:85	READ/WRITE ONE SECTOR
	ESR	A10,A12	RESTORE SAVED WORD 
	RB	LTD:50
	XIF
* 
	IFT	MMUPAG=0 
	LDR*	A10,A12	SAVE WORD TO BE DESTROYED BY DISC CYL-ID
	CF	A14,LTD:85	READ/WRITE ONE SECTOR
	STR	A10,A12	RESTORE SAVED WORD 
	RB	LTD:50
	XIF
* 
	EJECT			LDTASK 
* 
*	NOT ROOM ENOUGH IN PAGE FOR LAST SECTOR:
*	READ IT TO MEMORY VIA INTERMEDIATE BUFFER 
* 
LTD:65	EQU	*
	LDKL	A1,LD:BUF	GET LDTASK BUFFER ADDRESS 
	ST	A1,ECBBA,A8 
	LDK	A2,/80 
	SCR	A2,A8	INDICATE BUFFER NOW IN SYSTEM AREA 
	CF	A14,LTD:85	READ ONE SECTOR TO LD:BUF
	ADK	A1,2	SKIP CYLINDER ID
	LDR	A2,A12	GET PAGE POINTER
	ADK	A2,2 
	ADR	A6,A6	CONVERT LENGTH TO BYTES
* 
	IFT	MMUPAG=1 
	MVSU	A6	MOVE LAST PART OF SEGMENT/SWB TO PAGE
	XIF
* 
	IFT	MMUPAG=0 
LTD:70	EQU	*
	LDR*	A10,A1	MOVE ONE WORD
	STR	A10,A2 
	ADK	A1,2	INCREMENT BUFFER POINTERS 
	ADK	A2,2 
	SUK	A6,2	DECREMENT COUNTER 
	RB(P)	LTD:70 
	XIF
* 
	EJECT			LDTASK 
* 
* 
LTD:75	EQU	*
	IFT	SWPBLK=1 
	LDR	A11,A11	CHECK DISC PAGING/SWB FLAG 
	RF(Z)	LTD:80	SWB HANDLING? 
	XIF
* 
	LDKL	A4,/C000	INDICATE SEGMENT SUCCESSFULLY LOADED 
	XRRS	A4,A9 
* 
LTD:80	EQU	*
	CF	A15,QTJOB	QUEUE TASK FOR DISPATCHING
	ABL	MEXIT	PERFORM EXIT ON LDTASK 
* 
	EJECT			LDTASK 
* 
*	READ ONE SECTOR FROM DISC 
* 
LTD:85	EQU	*
	LKM
	DATA	1 
	LD	A2,ECBRC,A8	GET RETURN CODE 
	ANKL	A2,/FEFF	SKIP RETRY BIT 
	RF(NZ)	LTD:95	DISC ERROR?
	RTN	A14	NO, RETURN 
* 
*	ERROR: INSERT PAGE IN PAGQUE AGAIN
* 
LTD:95	ANK	A2,1 
	NGR	A2,A2
	SUK	A2,2	ERROR, SET RETURN CODE -2 OR -3 
 	ST	A2,TTB:SA+14,A5	SET RETURN CODE IN A7
* 
	IFT	SWPBLK=1 
	LDR	A11,A11	CHECK DISC PAGING/SWB FLAG 
	RB(Z)	LTD:80	SWB HANDLING? 
	XIF
* 
	CM	TTB:SB,A5	RESET SEGMENT BLOCK ADDRESS 
	LD	A3,SEG:PB,A9	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
	LDK	A4,1	INDICATE SEGMENT ERROR
	SCR	A4,A9
	RB	LTD:80
* 
	EJECT			LDTASK 
* 
* 
**********
* QLTDSK *
* QLTSWB *
**********
* 
* 
*   THIS ROUTINE PERFORMS ACTIVATION OF THE LOAD TASK.
* 
*   ACTIVATION IS AT LT:DSK WHEN DISC PAGING REQUEST. 
*   ACTIVATION IS AT LT:SWB WHEN SWAPPABLE WORK BLOCK REQUEST.
* 
*   INPUT:  A1 = SEGMENT BLOCK ADDRESS (LT:DSK) 
*  	      = SWAPPABLE WORK BLOCK ADDRESS (LT:SWB) 
*           A3 = TTAB ADDRESS OF CALLING TASK 
* 
*   OUTPUT: A2, A5 ARE DESTROYED
* 
* 
QLTSWB	EQU	*	ACTIVATE LDTASK AT ENTRY LT:SWB
	LDKL	A2,LT:SWB	GET DISPATCH ADDRESS
	RF	QLTASK
* 
QLTDSK	EQU	*	ACTIVATE LDTASK AT ENTRY LT:DSK
	LDKL	A2,LT:DSK	GET DISPATCH ADDRESS
* 
QLTASK	EQU	*
	LDKL	A5,TTABLD	GET LDTASK TTAB ADDRESS 
	ABL	ACTOT	ACTIVATE LDTASK	=1 
* 
	EJECT			LDTASK 
* 
* 
	IFT	SWPBLK=1 
* 
* 
**********
* LT:SWB *
**********
* 
* 
*   LT:SWB HANDLES THE LOADING/STORING OF SWAPPABLE WORK BLOCKS.
* 
*   INPUT:  A1 = SWAPPABLE WORK BLOCK ADDRESS 
*           A3 = TTAB ADDRESS OF CALLING TASK 
* 
* 
LT:SWB	EQU	*	LDTASK SWB HANDLING ENTRY
	IFT	MMUPAG=1 
	INH
	LDKL	A5,TTABLD	GET LDTASK TTAB ADDRESS 
	TL	TTB:MT,A3	LOAD MMU WITH CALLING TASK
	TS	TTB:MT,A5	STORE IN LDTASK MMU TABLE 
	ENB
	XIF
* 
	IFT	SWPBLK=1 
	SUR	A11,A11	INDICATE SWB HANDLING (A11 = 0)
	LDR	A5,A3	GET TTAB ADDRESS OF CALLING TASK 
	LD	A3,TTB:SA+16,A5	GET MEMORY ADDRESS (LOGICAL)
	LD	A4,SWB:DS,A1	GET DISC ADDRESS OF FIRST COPY 
	LD	A6,SWB:EL,A1	GET SWB COPY LENGTH (BYTES)
	LD	A2,SWB:NS,A1	GET SWB COPY LENGTH (SECTORS)
	LDR	A7,A1	SAVE A1
	LD	A1,TTB:SA+14,A5 
	ANK	A1,/FF	GET SWB COPY INDEX
* 
	EJECT			LDTASK 
* 
* 
LTS:10	EQU	*
	SUK	A1,1 
* 
	IFT	CPU852=1 
	RF(NP)	LTS:20
	ADR	A4,A2	COMPUTE DISC ADDRESS OF REQUESTED SWB
	RB	LTS:10
* 
LTS:20	EQU	*
	LDR	A2,A4	GET DISC ADDRESS OF REQUESTED SWB
	XIF
* 
	IFT	SWPBLK=1 
	IFT	CPU852=0 
	MUR	A1	COMPUTE DISC ADDRESS OF REQUESTED SWB 
	ADR	A2,A4
	XIF
* 
	IFT	SWPBLK=1 
	ADK	A6,1 
	SRL	A6,1	CONVERT SWB LENGTH TO WORDS 
	LDR	A4,A6
	ANK	A7,1	GET LOAD/STORE SWB REQUEST FLAG 
	ABL(Z)	LTD:35	LOAD SWB REQUEST?
	LDKL	A4,/7FFF	PARAMETER TO AVOID INTERMEDIATE BUFFER 
	LDK	A7,/95	PHYSICAL WRITE (STORE SWB REQUEST)
	ABL	LTD:40 
	XIF
* 
	IFT	SWPBLK=0 
LT:SWB	ABL	LKMERR	INDICATE SYSGEN ERROR 
	XIF
* 
* 
* 
	END

Full view