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

⟦712fab8b6⟧

    Length: 81074 (0x13cb2)
    Notes: pts_type(SC)
    Names: »SYSLOD.SC«

Derivation

└─⟦173d42e04⟧ Bits:30009663 Philips computer tape "600105"
    └─⟦this⟧ »TOSSWORK/SYSLOD.SC« 
└─⟦48601905a⟧ Bits:30009668 Philips computer tape "600121"
    └─⟦this⟧ »M:DE10/SYSLOD.SC« 
└─⟦d2a299635⟧ Bits:30009698 Philips computer tape "600415"
    └─⟦this⟧ »M:DE10/SYSLOD.SC« 

PTS(SC)

	IDENT SYSLOD 	REL 10.0 80-03-15 870105041000 

			PRR 10.0 80-03-14
			=3,CONDITIONAL ASSEMBLY FOR SYSLOD TEST
			PRR 10.0 80-01-18
			=2,S:GTAB LIMITED TO ONE SECTOR
			PRR 10.0 79-12-20
			=1,SEGBLK/PAGBLK NOT GEN. FOR CORE RES. SEGM.
	ENTRY	SYSLOD 
	ENTRY	SYSBAS 
	ENTRY	NUMSEG 
	ENTRY	PRGLG1 
*************************** 
*                         * 
*  ENTRIES AND EXTERNALS  * 
*                         * 
*************************** 
	EXTRN	CONVRT 
	EXTRN	LDALEN 
	EXTRN	SCTADA 
	EXTRN	SCTANO 
	EXTRN	SCTBUG 
	EXTRN	SCTEFA 
	EXTRN	SCTLAC 
	EXTRN	SCTLAP 
	EXTRN	SCTMMC 
	EXTRN	SCTMMP 
	EXTRN	SCTMSZ 
	EXTRN	SCTNOP 
	EXTRN	SCTNPE 
	EXTRN	SCTOPT 
	EXTRN	SCTIPL 
	EXTRN	SCTPSZ 
	EXTRN	SCTSFA 
	EXTRN	SCTSWB 
	EJECT
	EXTRN	SAVE01 
	EXTRN	SAVE02 
	EXTRN	SAVE03 
	EXTRN	SAVE04 
	EXTRN	SAVE05 
	EXTRN	SAVE06 
	EXTRN	SAVE07 
	EXTRN	SAVE08 
	EXTRN	SAVE09 
	EXTRN	SAVE10 
	EXTRN	SAVE11 
	EXTRN	SAVE12 
	EXTRN	SAVE13 
	EXTRN	SAVE18 
	EXTRN	SAVE20 
	EXTRN	SAVE22 
	EXTRN	SAVE25 
	EXTRN	SAVE26 
	EXTRN	SAVE27 
	EXTRN	SAVE28 
	EXTRN	SAVE29 
	EXTRN	APPTYP 
	EXTRN	REL
	EXTRN	ERROR
	EXTRN	MMDDIV 
	EXTRN	M:REL
	EXTRN	TABBE
	EXTRN	MMEND
	EXTRN	CMPADR 
	EXTRN	MOVE 
	EXTRN	TTB:MT	DISPLACEMENT TO MMU TABLE IN TTAB 
	EXTRN	TTB:CB 
	EJECT
				
				
******************************* 
* CONFIGURATION FILE (CONFIG) * 
******************************* 
			 
* TASK DEFINITION BLOCK:
TDBBT	EQU	0	1A BLOCK TYPE 
TDBNT	EQU	TDBBT+1	2N NUMBER OF TASKS
TDBID	EQU	TDBNT+2	6A TASK ID SAVE09 VALUE 
TDBMC	EQU	TDBID+6	6A MATCHING TASK CLASS
TDBTL	EQU	TDBMC+6	6A TASK LEVEL 
TDBNC	EQU	TDBTL+6	2N NUMBER OF TERMINAL DEVICE CLASSES
* 
TDBFST	EQU	TDBNC+2	SAVE05 TERM DEF
TDC	EQU	7	TERMINAL DEVICE CLASS 
TLC	EQU	6	LINE CONNECTION 
TDBREC	EQU	TDC+TLC	TDB-RECORD LENGTH
* 
SDC	EQU	7	SPECIAL DEVICE CLASS-RECORD 
* 
* COMMON DEVICE DEF. BLOCK: 
CDBBT	EQU	0	1A BLOCK TYPE 
CDBNC	EQU	CDBBT+1	2N NUMBER OF SPEC. DEV. CLASSES 
SDCFST	EQU	CDBNC+2	SAVE05 SDC-RECORD
* 
* 
* USER WORK BLOCK TYPE DEF. BLOCK 
UDBBT	EQU	0	1A BLOCK TYPE 
UDBNU	EQU	UDBBT+1	3A NUMBER OF UWB TYPES
* 
UDBFST	EQU	UDBNU+3	SAVE05 UDB-RECORD
NAMUWB	EQU	3	NAME OF UWB
NUMUBL	EQU	3	NUMBER OF BLOCKS 
UDBREC	EQU	NAMUWB+NUMUBL	UDB RECORD-LENGTH
****************
* SOP-HANDLING *
****************
SOP	EQU	/2E	DEVICE ADDRESS

LMP1	EQU	/400	LAMP 1 CODE 
LMP2	EQU	/200 
LMP3	EQU	/100 
LMP4	EQU	/80
LMP5	EQU	/40
LMP6	EQU	/20
LMP7	EQU	/10
LMP8	EQU	8
LMP9	EQU	4
LMP10	EQU	2 
LMP11	EQU	1 
	EJECT
********************* 
*  OTHER CONSTANTS  * 
********************* 
			 
NUMSEG	EQU	10	DISPL. TO NUMBER OF SEGMENTS IN S:GTAB
COMLG	EQU	4	LENGTH OF COMMON PART 
PAGSIZ	EQU	/1000	 PHYSICAL PAGE SIZE
CBLEN	EQU	256	CASSETTE BUFFER LENGTH
BLKLEN	EQU	6	SEGMENT BLOCK LENGTH 
PAGLG	EQU	8	PAGE LENGTH IN S:GTAB 
PRGLG1	EQU	2
NCHTID	EQU	5	NBR OF CHAR. IN TID RECORD 
SWPFEL	EQU	14	FILE EXTENT LENGTH
	EJECT
*********************** 
*  CASSETTE HANDLING  * 
*********************** 
CHCR	EQU	/E	DEVICE ADDRESS FOR CASSETTE 
LOCK	EQU	/2	LOCK CASSETTE 
SBOT	EQU	8	SEARCH BEGINNING OF TAPE 
STMF	EQU	/C	SEARCH TAPEMARK FORWARD 
* 
*  DISC/FLEXIBLE DISC HANDLING
* 
BUFLEN	EQU	256	LENGTH OF READ BUFFER
DKBA3	EQU	514	BUFFER LENGTH VERSION A3
RECLEN	EQU	9	CONFIGURATION FILE RECORD LENGTH 
FDCU	EQU	/09	FLEXIBLE DISC CU ADDRESS 
FDIOP	EQU	FDCU+FDCU	MUX ADDRESS 
MUXCC	EQU	/8080	1:ST MUX WORD 
MXCCD3	EQU	/80C1	BYTE2=NUMBER OF WORDS
QBLFAC	EQU	6	BLOCKING FACTOR
* 
*  DATA AREA DEFINITION 
* 
SYSBAS	EQU	*
SAVCON	DATA	BUFLEN
MXBUF	DATA	0	DISC/FLEXIBLE DISC BUFFER ADDRESS
SAVMEM	DATA	0	SAVE AREA 
CYLNBR	DATA	/FFFF	CYLINDER NUMBER 
SECNBR	DATA	0	PHYSICAL SECTOR NUMBER
DEVTAB	DATA	/1909,/1101,/0828 
SWPTAB	DATA	'$S','WA','P ','  ' 
	EJECT
			 
***************************************************************** 
*  CALL-FORMAT, PERFORMS:  CFR      A14,A13                     * 
*                          DATA     [REL-ADDRESS]               * 
*                                                               * 
***************************************************************** 
			 
			 
			 
CALL	FORM	16=/F697,16 
	EJECT
**************************
*  CONDITIONAL ASSEMBLY  *
**************************
CASS	EQU	1	1-PROGRAM LOAD DEVICE = CASSETTE 
DISC	EQU	1	1-PROGRAM LOAD DEVICE = DISC 
FLDISC	EQU	1	1-PROGRAM LOAD DEVICE = =FLEXIBLE DISC 
MFDISC	EQU	1	1-PROGRAM LOAD DEVICE = MINI FIXED DISC
CFTEST	EQU	1	1-TEST THE CONFIGURATION FILE
CFTCAS	EQU	CFTEST+CASS
CFTFLD	EQU	CFTEST+FLDISC
LODTST	EQU	0	1-BUGGER START AFTER MONITOR LOADING	=3
	EJECT
******************************************************
*                                                    *
*          APPLICATION LOAD PART OF SYSLOD           *
*          ===============================           *
*                                                    *
*  ENTRY:  A1 - FORMAT AND DEVICE TYPE             *
*          A2 - PROGRAM LOAD DEVICE                  *
*          A3 - APPLICATION NUMBER                   *
*          A7 - APPLICATION DISC ADDRESS BIT 16-31  * 
*          A8 - APPLICATION DISC ADDRESS BIT  0-15  * 
*          A9 - SAVE09 OF FREE AREA                   * 
*         A13 - MONITOR SAVE09 ADDRESS                * 
*                                                    *
*  EXIT:                                             *
*                                                    *
*  SUBROUTINES:  CASSIN,SOPIN,CHCRIO,LODCOM          *
*                LODSEG,REBUF,MOVBUF,RDBLK,          *
*                CONLOD,CONEX,MOVREV                 *
*                                                    *
******************************************************
SYSLOD	EQU	*
* 
*  SAVE REGISTERS 
* 
	ST	A1,SCTSFA+2	SAVE FORMAT AND DEVICE TYPE 
	ST	A2,SCTIPL	SAVE PROGRAM LOAD DEVICE
	ST	A3,SCTANO	APPLICATION NUMBER
	ST	A8,SCTADA	SAVE APPLICATION DISC ADDRESS BIT 0-15
	ST	A7,SCTADA+2	SAVE APPLICATION DISC ADDRESS BIT 16-31 
	ST	A9,SCTSFA	SAVE SAVE09 OF FREE AREA
	IFT	LODTST=1		=3 
	LDKL	A14,SYSBAS		=3
	LDR	A13,P		=3
	ADKL	A13,10		=3
	LD	A1,SCTBUG		=3 
	ABR(NZ)	A1		=3 
	XIF			=3 
	EJECT
* 
*  INDICATE SYSLOD RUNS 
* 
	LDKL	A1,LMP1 
	OTR	A1,0,SOP 
* 
*  INIT POINTER TO SUBROUTINE HANDLER (A13), STACK BASE (A14) 
*  AND ADDRESS TO GETPSW-ROUTINE
* 
	LDR	A8,P	RETURN ADDRESS
	LDKL	A3,REL+2	RELOCATION ROUTINE 
	CFR	A8,A3
	LDKL	A5,/5555	LOAD TEST PATTERN
	LDK	A6,64	INIT PAGE COUNTER
	LD	A1,SCTOPT	GET OPTION WORD 
	ANK	A1,1	MMU IN SYSTEM?
	RF(Z)	AP:100	NO! 
	EJECT
* 
*  EXECUTION PATH FOR SYSTEMS WITH MMU OPTION EXCLUSIVELY 
* 
	SLL	A6,2	UPPER SAVE20=256 KB 
	LDK	A1,0	MMU ENTRY POINTER 
AP:010	EQU	*
	LD	A2,TABBE	GET PAGE ADDRESS 
	SUKL	A2,/400	DECREMENT PHYSICAL PAGE ADDRESS 
	ST	A2,TABBE	STORE IT BACK
	TL	TABBE	LOAD MMU REGISTERS
	ES	A5,PAGSIZ-2,A1	STORE TEST PATTERN 
	EL	A2,PAGSIZ-2,A1	GET MEMORY CONTENT 
	CWR	A2,A5	COMPARE WITH TEST PATTERN
	RF(E)	AP:200 
	SUK	A6,4	DECREMENT NUMBER OF PAGES 
	RB	AP:010
* 
*  END OF EXECUTION PATH FOR SYSTEMS WITH MMU OPTION EXCLUSIVELY
* 
	EJECT
AP:100	EQU	*
* 
*  EXECUTION PATH FOR SYSTEMS WITHOUT MMU OPTION EXCLUSIVELY
* 
	LDKL	A1,PAGSIZ-2	SAVE09 AT /FFFE 
AP:110	EQU	*
	SUKL	A1,PAGSIZ	NEXT PHYSICAL PAGE
	LDR*	A2,A1	SAVE OLD MEMORY CONTENT 
	STR	A5,A1	STORE TEST PATTERN 
	CWR*	A5,A1	CHECK IF MEMORY 
	RF(E)	AP:120	MEMORY END FOUND
	SUK	A6,4	DECREMENT NUMBER OF PHYSICAL PAGES
	RB	AP:110
AP:120	EQU	*
	STR	A2,A1	RESTORE OLD MEMORY CONTENT 
* 
*  END OF EXECUTION PATH FOR SYSTEMS WITHOUT MMU OPTION EXCLUSIVELY 
* 
	EJECT
* 
*  COMMON EXECUTION PATH
* 
AP:200	EQU	*
	ST	A6,SCTMSZ	SAVE NUMBER OF PHYSICAL PAGES 
	SRL	A6,6	NUMBER OF 64KB-PARTITIONS	=2
	ST	A6,SCTEFA+2	STORE	=2
	LDKL	A6,/FFFE	HIGHEST ADDRESS IN PARTITION	=2
	ST	A6,SCTEFA	STORE	=2
* 
*  GET DISC ADDRESS OF APPLICATION VTOC RECORD
* 
	LD	A11,SCTADA+2
	LDKL	A12,SCTADA
* 
*  INIT POINTER TO READ BUFFER. INIT DEVICE ADDRESS FOR READ-ROUTINE
	LD	A9,SCTSFA	POINTER TO READ BUFFER
	LDR	A3,A9	SAVE 
	ADKL	A3,BUFLEN	COMPUTE START OF FREE AREA
	ST	A3,SCTSFA	STORE IN SYSTAB 
	LD	A2,SCTIPL	GET PROGRAM LOAD DEVICE 
	LDR	A1,A2	SAVE 
* 
*  CHECK PROGRAM LOAD MEDIUM
* 
	ANK	A2,/C0	CHECK IF CASSETTE 
	RF(P)	AP:210	YES!
	ST	A9,MXBUF	FLEXIBLE DISC/DISC BUFFER ADDRESS
	LDR	A2,A1	GET PROGRAM LOAD DEVICE
	SRL	A2,4	BIT15 INDICATE UNIT 1 OR 2
	LC	A3,SCTSFA+3	GET DEVICE TYPE 
	ANK	A3,/FF 
	RF(NP)	FDTERR
	SUK	A3,3 
	RF(N)	AP:230	DISC
	RF(Z)	AP:225	MINI FIXED DISC 
	SUK	A3,5 
	RF(Z)	AP:220	FLEXIBLE DISC 
FDTERR	LDKL	A1,LMP10	INDICATE FORMAT/DEVICE TYPE ERROR
	CALL	ERROR 
AP:210	EQU	*
	IFT	CASS=1 
* 
*  PROGRAM LOAD DEVICE = CASSETTE 
* 
	LDKL	A1,RDBLK	GET SUBROUTINE ADDRESS 
	LDR	A10,A1	SAVE	=2 
	ST	A1,READ	STORE IN PROGRAM LOAD SUBROUTINE
AP:215	EQU	*
	CF	A14,RDBLK	READ ONE CASSETTE BLOCK 
	LDR	A1,A1	TAPE MARK? 
	RF(Z)	AP:235	NO! 
	CF	A14,CASSIN	INIT APPLICATION CASSETTE
	RB	AP:215
	XIF
	IFF	CASS=1 
	LDKL	A1,LMP9 
	CALL	ERROR	ILLEGAL MONITOR OPTION
	XIF
	EJECT
AP:220	EQU	*
	IFT	FLDISC=1 
* 
*  PROGRAM LOAD DEVICE = FLEXIBLE DISC
* 
* 
*  MODIFY SCTIPL: /F8 - DRIVE 1, /F9 - DRIVE 2
* 
	ORK 	A2,/F8
	ST	A2,SCTIPL 
* 
*  INIT FLEXIBLE DISC 
* 
	CF	A14,FDINIT
			=2 
			=2 
			=2 
			=2 
	RF	AP:232		=2
	XIF
	IFF	FLDISC=1 
	LDKL	A1,LMP9 
	CALL	ERROR	ILLEGAL MONITOR OPTION
	XIF
	EJECT
AP:225	EQU	*
	IFT	MFDISC=1 
* 
*	PROGRAM LOAD DEVICE = MINI FIXED DISC 
* 
*	MODIFY SCTIPL:/F4-DRIVE 1,/F5-DRIVE 2 
* 
	ORK	A2,/F4 
	ST	A2,SCTIPL 
* 
*	INIT MINI FIXED DISC
* 
	CF	A14,MDINIT
			=2 
			=2 
			=2 
			=2 
	RF	AP:232		=2
	XIF
	IFF	MFDISC=1 
	LDKL	A1,LMP9 
	CALL	ERROR	ILLEGAL MONITOR OPTION
	XIF
	EJECT
AP:230	EQU	*
	IFT	DISC=1 
* 
*  PROGRAM LOAD DEVICE = DISC 
* 
* 
*  MODIFY SCTIPL: /F0 - CARTRIDGE DISC, /F1 - FIX DISC
* 
	SRL	A2,1 
	XRK	A2,1 
	ORK	A2,/F0 
	ST	A2,SCTIPL 
* 
*  INITIALIZE DISC COMMANDS 
* 
	CF	A14,DUINIT
AP:232	EQU	*		=2
	LD	A10,READ	GET SUBROUTINE ADDRESS	=2
	CFR	A14,A10	READ FIRST SECTOR	=2 
	XIF
	IFF	DISC=1 
	LDKL	A1,LMP9 
	CALL	ERROR 
	XIF
	EJECT
AP:235	EQU	*
* 
*  COMMON EXECUTION PATH
* 
* 
*  SAVE INFORMATION ABOUT THE LOAD MODULE 
* 
	LDR*	A6,A9	GET SAVE09 ADDRESS (UNSEGMENTED APPL.)
	ST	A6,SAVE09,A13	SAVE
	LD	A6,COMLG,A9	GET LENGTH OF COMMON PART 
	ST	A6,SAVE04,A13	SAVE
	LD	A2,SCTOPT	GET OPTION WORD 
	LD	A3,PRGLG1+8,A9	GET PROGRAM TYPE 
	ST	A3,APPTYP,A13	SAVE APPLICATION TYPE 
	CWK	A3,'CR'	CREDIT APPLICATION?
	RF(E)	AP2340	YES 
	CWK	A3,'BA'	BASIC APPLICATION
	RF(E)	AP2340	YES 
	CWK	A3,'CO'	COBOL APPLICATION? 
	RF(E)	AP2340	YES 
* 
*  ASSEMBLER APPLICATION
* 
	ORKL	A2,/8000	INDICATE ASSEMBLER APPLICATION 
	ST	A2,SCTOPT	IN OPTION WORD
	RF	AP2350
AP2340	LD	A3,PAGLG+8,A9	PHYSICAL PAGE SIZE
	ST	A3,SCTPSZ	SAVE
AP2350	LD	A5,SCTMSZ	GET NUMBER OF PHYSICAL PAGES
	SRC	A2,1	MMU IN SYSTEM?
	RF(NN)	AP:240	NO!
	EJECT
* 
*  EXECUTION PATH FOR SYSTEMS WITH MMU OPTION 
* 
	LD	A3,SCTPSZ	GET PAGE SIZE 
	LDR	A1,A3	SAVE 
	ANKL	A1,/03FF	EVEN 1K-MULTIPLE?
	RF(Z)	AP:236	YES!
	LDK	A1,LMP8
	CALL	ERROR	INDICATE PAGE SIZE ERROR
AP:236	EQU	*
	SRL	A3,2	LOGICAL PAGE SIZE 
	SLL	A5,8	MAP IT ON MMU 
	ANKL	A5,/FC00	PAGE ADDRESS IN 6 LEFTMOST BITS
	LDR	A1,A5	SAVE 
* 
*  CHECK IF ASSEMBLER APPLICATION 
* 
	SLC	A2,1	ASSEMBLER APPLICATION 
	ABL(N)	AP:330	YES
AP:237	LD	A2,NUMSEG+8,A9	NUMBER OF SEGMENTS 
AP:238	ABL(Z)	AP:330	NO SEGMENTS! 
	RF	AP:245
* 
*  END OF EXECUTION PATH EXCLUSIVELY FOR SYSTEMS WITH MMU OPTION
* 
	EJECT
AP:240	EQU	*
* 
*  EXECUTION PATH EXCLUSIVELY FOR SYSTEMS WITHOUT MMU OPTION
* 
	SLL	A5,10	HIGHEST PHYSICAL AND LOGICAL MEMORY ADDRESS
	LDR	A1,A5	SAVE 
* 
*  CHECK IF ASSEMBLER APPLICATION 
* 
	SLC	A2,1	ASSEMBLER APPLICATION?
	RF(N)	AP:275	YES 
	LD	A2,NUMSEG+8,A9	NUMBER OF SEGMENTS 
	RF(Z)	AP:275	NO SEGMENTS!
	EJECT
AP:245	EQU	*
* 
*  COMMON EXECUTION PATH
* 
	ST	A1,SAVE06,A13	SAVE A1	=2
	ST	A2,SAVE29,A13	SAVE NUMBER OF SEGMENTS 
	LD	A4,SCTOPT	GET OPTION WORD 
	ANK	A4,2	DISC PAGING?
	RF(Z)	AP:260	NO! 
	LD	A4,SCTIPL	GET PROGRAM LOAD DEVICE 
	SUK	A4,/F0	CHECK IF CASSETTE 
	RF(N)	AP:260	CASSETTE - LOAD ALL SEGMENTS! 
* 
*  COMPUTE NUMBER OF CORE RESIDENT PAGES
* 
	CM	SAVE05,A13	RESET COUNTER
	LDR	A6,A9	START OF APPLICATION 
	ADK	A6,14	START OF SEGMENT BLOCKS
AP:250	EQU	*
	ST	A2,SAVE01,A13	SAVE REMAINING NBR OF SEGM.	=2
	ADK	A6,6	NEXT SEGMENT BLOCK
	ST	A9,SAVE03,A13	SAVE A9	=2
	ST	A11,SAVE13,A13	SAVE A11	=2
	LDR	A11,A6	GET POINTER IN S:GTAB	=2
	ADKL	A9,BUFLEN-16	END OF READ BUFFER	=2
	CALL	CMPADR	POINTER OUTSIDE BUFFER?	=2 
	RF(L)	AP:252	NO!	=2
	SUR	A6,A9	DISPLACEMENT IN NEXT SECTOR	=2 
	SUKL	A9,BUFLEN-16	START OF BUFFER	=2 
	ADR	A6,A9	NEXT SEGMENT BLOCK	=2
	LD	A11,SAVE13,A13	GET LAST SECTOR NUMBER	=2
	ST	A3,SAVE07,A13	SAVE A3	=2
	ST	A5,SAVE08,A13	SAVE A5	=2
	CFR	A14,A10	READ NEXT SECTOR/BLOCK	=2
	LD	A3,SAVE07,A13	RESTORE A3	=2 
	LD	A5,SAVE08,A13	RESTORE A5	=2 
	ST	A11,SAVE13,A13	SAVE CURRENT SECTOR NUMBER	=2
AP:252	LD	A11,SAVE13,A13	GET NEXT SECTOR NUMBER	=2
	LD	A9,SAVE03,A13	START OF BUFFER	=2
	LCR	A4,A6	GET SEGMENT TYPE 
	CCK	A4,'RR'	CORE RESIDENT SEGMENT? 
	RF(NE)	AP:255	NO!
	IM	SAVE05,A13	INCREMENT RESIDENT SEGMENT COUNTER 
AP:255	EQU	*
	LD	A2,SAVE01,A13	GET REMAINING NBR OF SEGM.	=2 
	SUK	A2,1	MOORE SEGMENTS? 
	RB(NZ)	AP:250	YES! 
	LD	A11,SCTADA+2	GET APPLICATION START ADDRESS	=2 
	ST	A3,SAVE03,A13	SAVE A3	=2
	ST	A5,SAVE08,A13	SAVE A5	=2
	CFR	A14,A10	READ FIRST SECTOR	=2 
	LD	A3,SAVE03,A13	RESTORE A3	=2 
	LD	A5,SAVE08,A13	RESTORE A5	=2 
	LD	A2,SAVE05,A13	NUMBER OF RESIDENT SEGMENTS 
	RF(Z)	AP:270	NO RESIDENT SEGMENTS! 
AP:260	EQU	*
	ST	A2,SCTNOP	SAVE NUMBER OF PAGES
	LDR	A4,A9	SAVE A9
	LDR	A8,A11	SAVE A11
*			=2
*  CHECK MEMORY OVERFLOW	=2 
* 
	LD	A7,SCTEFA+2	GET PARTITION NUMBER	=2 
AP:262	LD	A11,SCTPSZ	GET PAGE SIZE	=2 
	LD	A9,SCTEFA	GET END OF FREE AREA	=2 
	CALL	CMPADR	ENOUGTH SPACE IN THIS PARTITION?	=2	=2 
	RF(NG)	AP:265	YES!	=2
	SUK	A7,1	DECREMENT	=2
	RF(NP)	AP:280	MEMORY OVERFLOW!	=2
	ST	A7,SCTEFA+2	UPDATE PARTITION NUMBER	=2
AP:265	SUR	A9,A11	COMPUTE END OF FREE AREA	=2 
	ST	A9,SCTEFA	STORE	=2
	CWK	A7,1	FIRST MEMORY PARTITION?	=2
	RF(G)	AP:266	NO!	=2
	LD	A11,SCTSFA	GET START OF FREE AREA	=2
	CALL	CMPADR	COMPARE ADDRESSSES	=2
	RF(NL)	AP:280	MEMORY OVERFLOW!	=2
AP:266	EQU	*		=2
	SUR	A5,A3	DECREMENT PHYSICAL MEMORY ADDRESS
	SUK	A2,1	DECREMENT NUMBER OF PAGES 
	RB(P)	AP:262 
	LDR	A9,A4	RESTORE A9 
	LDR	A11,A8	RESTORE A11 
	ST	A5,SAVE22,A13	SAVE PHYS.ADDRESS TO FIRST SEGMENT
AP:270	EQU	*
	LD	A1,SAVE06,A13	RESTORE A1	=2 
	LD	A2,SCTOPT	GET OPTION WORD 
	ANK	A2,1	MMU IN SYSTEM?
	RF(NZ)	AP:292	YES! 
* 
*  END OF COMMON EXECUTION PATH 
* 
	EJECT
* 
*  EXECUTION PATH EXCLUSIVELY FOR SYSTEMS WITHOUT MMU OPTION
* 
	ST	A5,SAVE08,A13 
AP:275	EQU	*
	LD	A10,COMLG,A9	GET LENGTH OF COMMON PART
	ADKL	A10,3	RESERV ONE EXTRA WORD 
	ANKL	A10,/FFFE 

	LDR	A4,A9	SAVE A9
	LDR	A8,A11	SAVE A11
	LDR	A11,A5 
AP:285	EQU	*
	SUKL	A11,2 
	SUKL	A10,2 
	RF(Z)	AP:290 
	LD	A9,SCTSFA	GET START OF FREE AREA
	CALL	CMPADR	A11 COMPARED TO A9 
	RB(G)	AP:285 
AP:280	LDKL	A1,LMP3 
	CALL	ERROR	MEMORY OVERFLOW!
AP:290	EQU	*
	LDR	A12,A11	RELOCATION BASE
	LDR	A9,A4	RESTORE A9 
	LDR	A11,A8	RESTORE A11 
	LDR	A8,A12	A8 - APPLICATION LOAD - ADDRESS 
	ST	A8,SAVE07,A13	SAVE APPLLICATION LOAD-ADDRESS
	ST	A8,SAVE01,A13	SAVE APPLICATION LOAD-ADDRESS 
	LD	A10,COMLG,A9	GET LENGTH OF COMMON PART
	ABL	AP:355 
	EJECT
AP:292	EQU	*
* 
*  EXECUTION PATH FOR SYSTEMS WITH MMU OPTION 
* 
	LDR	A4,A5	SAVE 
	ANKL	A5,/FC00	GET 6 LEFTMOST BITS
	LDR	A6,A5	SAVE 
	SUR	A4,A5	COMPUTE PHYSICAL DISPLACEMENT
	EJECT
* 
*  STORE ADDRES(ES) TO PHYSICAL PAGE(S) HOLDING 
*  THE FIRST LOGICAL PAGE 
* 
	LDKL	A7,MMEND	GET END OF  MMU TABLE
	LDKL	A8,16	INIT MMU ENTRY POINTER
AP:295	EQU	*
	SUK	A7,2	DECREMENT MMU ENTRY ADDRESS 
	SUKL	A8,1	DECREMENT MMU ENTRY POINTER
	SUKL	A3,/400	DECREMENT PHYSICAL PAGE ADDRESS 
	RB(P)	AP:295 
	RF(Z)	AP:300	EVEN 4K-BYTES PAGES 
	LD	A3,SCTPSZ	GET PAGE SIZE 
	CWK	A3,/400	PAGE SIZE=1K?
	RF(E)	AP:300	YES 
* 
*  RESERV ONE EXTRA MMU ENTRY WHEN PAGE SIZE
*  IS NOT AN EVEN MULTIPLE OF 4K
* 
	SUK	A7,2 
	SUKL	A8,1
AP:300	EQU	*
	LD	A3,SCTNOP	ANY CORE RESIDENT SEGMENTS? 
	RF(NZ)	AP:302	YES! 
	LDR	A5,A1	GET ADDRESS TO END OF MEMORY 
	LDK	A4,0	RESET PAGE SIZE 
	RF	AP:310
AP:302	LDR	A3,A7	SAVE MMU ENTRY ADDRESS TO LOGICAL PAGE 
AP:305	EQU	*
	STR	A6,A3	STORE ADDRESS TO PHYSICAL PAGE 
	ADK	A3,2	INCREMENT MMU ENTRY ADDRESS 
	CWK	A3,MMEND	END OF MMU TABLE? 
	RF(E)	AP:310	YES!
	ADKL	A6,/400	INCREMENT PHYSICAL PAGE ADDRESS 
	RB	AP:305
AP:310	EQU	*
	LDR	A4,A4	ANY PHYSICAL DISPLACEMENT? 
	RF(NZ)	AP:315	YES! 
	SUKL	A5,/400	NEXT PHYSICAL PAGE ADDRESS
* 
AP:315	EQU	*
	SLL	A4,2	PHYSICAL DISPLACEMENT 
AP:325	EQU	*
* 
*  SAVE LOGICAL ADDRESS OF SAVE05 SEGMENT 
* 
	LDR	A2,A8	GET MMU ENTRY
	SLL	A2,12	MOVE TO 4 LEFTMOST BITS
	ANKL	A2,/F000	MMU ENTRY TO LOGICAL PAGE
	ST	A2,SCTLAP	SAVE
	ADR	A2,A4	ADD DISPLACEMENT 
	ST	A2,SAVE08,A13	SAVE
	LDR	A2,A8	GET MMU ENTRY FOR FIRST PAGE 
	ADR	A2,A2	BYTE DISPLACEMENT
	ADKL	A2,TTB:MT	COMPUTE DISPL. TO FIRST PAGE ENTRY
	ST	A2,SCTMMP	SAVE IN SYSTAB
* 
*  COMPUTE NUMBER OF PAGE ENTRIES 
* 
	LDKL	A2,16 
	SUR	A2,A8
	ST	A2,SCTNPE 
	RF	AP:335
AP:330	EQU	*
* 
*  THIS ENTRY IS ENTERED IF MMU OPTION IN SYSTEM BUT
*  THE APPLICATION LOADED WAS UNSEGMENTED (CORE RESIDENT) 
* 
	SUKL	A5,/400	INIT POINTER TO LAST PAGE 
	LDKL	A4,PAGSIZ	PHYSICAL PAGE SIZE
	LDKL	A7,MMEND	END OF MMU TABLE 
	LDKL	A8,16	MMU ENTRY POINTER 
	EJECT
AP:335	EQU	*
	LDR	A4,A4	ANY DISPLACEMENT?
	RF(NZ)	AP:337
	LDKL	A4,PAGSIZ 
AP:337	EQU	*
* 
* COMPUTE APPLICATION SAVE09 ADDRESS
* 
*  A1 - LAST PHYSICAL PAGE NUMBER 
*  A4 - DISPLACEMENT IN PAGE
*  A5 - PHYSICAL PAGE ADDRESS 
*  A7 - MMU ENTRY ADDRESS 
*  A8 - CURRENT MMU ENTRY 
* 
	LD	A2,COMLG,A9	COMLG OF CORE RESIDENT PART 
	ADK	A2,3	RESERV ONE EXTRA WORD 
	ANKL	A2,/FFFE	MAKE EVEN LENGTH 
	RF	AP:344
AP:340	EQU	*
*  RESERV ENTRIES IN MMU TABLE FOR PHYSICAL PAGE ADDRESSES  TO COMMON PA
* 
	SUR	A2,A4	AREA LEFT IN CURRENT PAGE
	LDKL	A4,PAGSIZ	PHYSICAL PAGE SIZE
	SUKL	A8,1	DECREMENT MMU ENTRY POINTER
	RF(NN)	AP:342
AP:341	EQU	*
	LDKL	A1,LMP7	INDICATE TABBE OVERFLOW!
	CALL	ERROR 
AP:342	EQU	*
				=2
	SUK	A7,2	DECREMENT MMU ENTRY ADDRESS 
	STR	A5,A7	STORE PAGE ADDRESS IN MMU
	SUKL	A5,/400	NEXT PAGE 
AP:344	EQU	*
	TNM	A2,A4	PROGRAM LENGTH > 32 KB?
	RF(NN)	AP:345	NO!
	CWR	A4,A2
	RF	AP:348
AP:345	EQU	*
	CWR	A2,A4
AP:348	EQU	*
	RB(G)	AP:340 
AP:350	EQU	*
	LDR	A2,A2
	RF(Z)	AP:351 
	SUKL	A8,1
	RB(N)	AP:341	TABBE OVERFLOW! 
	SUK	A7,2	NEXT TABBE ENTRY
	STR	A5,A7	STORE PAGE ADDRESS 
AP:351	EQU	*
	SUR	A4,A2	MODIFY DISPLACEMENT
	LDR	A2,A8	GET MMU ENTRY
	ADR	A8,A8	BYTE DISPLACEMENT
	ADKL	A8,TTB:MT	COMPUTE DISPL. TO APPL. START ENTRY 
	ST	A8,SCTMMC	SAVE IN SYSTAB
	SLL	A2,12	MOVE TO 4 LEFTMOST BITS
	LDR	A8,A2		
	ADR	A8,A4	COMPUTE LOGICAL ADDRESS
	ST	A8,SAVE07,A13	SAVE IN TEMPORARY AREA
	LDR*	A1,A7	GET ADDRESS TO PHYSICAL PAGE
	ANKL	A1,/C000	GREATER THAN 64K?
	RF(Z)	AP:353	NO! 
	LDKL	A1,0	UPPER LIMIT 64 KB
	RF	AP:354
AP:353	EQU	*
	LDR*	A1,A7	GET PHYSICAL ADDRESS
	SLL	A1,2 
	ADR	A1,A4	ADD DISPLACEMENT 
	LD	A2,SCTSFA	GET START OF FREE AREA
	TNM	A1,A2	ON SAME SIDE OF 32K-LIMIT
	RF(NN)	AP3532	YES! 
	CWR	A2,A1
	RF	AP3534
AP3532	CWR	A1,A2
AP3534	RF(G)	AP:354 
	LDKL	A1,LMP3 
	CALL	ERROR	MEMORY OVERFLOW 
AP:354	EQU	*
	ST	A1,SAVE01,A13	SAVE
	LD	A10,COMLG,A9	LOAD COMLG OF COMMON PART
	TL	TABBE	LOAD MMU REGISTERS
* 
*  READ AND RELOCATE CORE RESIDENT PART OF APPLICATION
* 
*  A8 - APPLICATION LOAD ADDRESS
*  A10 - LENGTH OF CORE RESIDENT PART 
* 
AP:355	EQU	*
	LDKL	A1,/FFFF	END OF FREE AREA	=2
	ST	A1,SCTEFA	STORE	=2
			=2 
	ST	A8,SCTLAC 
	CF	A14,LODCOM	LOAD CORE RESIDENT PART
	LD	A8,SAVE08,A13	GET LOGICAL ADDRESS TO FIRST PAGE 
* 
*  CHECK IF ASSEMBLER APPLICATION 
* 
	LD	A1,SCTOPT	GET OPTION WORD 
	ABL(N)	CONLOD	ASSEMBLER APPLICATION
	LD	A2,SAVE29,A13	GET NUMBER OF SEGMENTS
	CM	SAVE06,A13	CLEAR SEGMENT COUNTER	=2 
	ABL(Z)	CONLOD	NO SEGMENTS IN APPLICATION 
	ANK	A1,1	MMU IN SYSTEM?
	RF(Z)	AP:360	NO! 
	TS	MMDDIV,A13	SAVE MMU REGISTER CONTENTS 
AP:360	EQU	*
* 
*  READ AND RELOCATE THE SEGMENTS 
* 
*  A8 - LOGICAL ADDRESS OF SAVE05 SEGMENT 
*  A10 - SEGMENT LENGTH 
* 
	LD	A2,SCTLAC	GET LOGICAL ADDRESS TO APPLICATION
	ADKL	A2,BLKLEN+BLKLEN
	LD	A1,SAVE06,A13	GET SEGMENT COUNTER 
AP:365	EQU	*
	RF(Z)	AP:370 
	ADK	A2,BLKLEN	NEXT BLOCK 
	SUK	A1,1	DECREMENT BLOCK COUNTER 
	RB	AP:365
AP:370	EQU	*
* 
*  CHECK IF DISC PAGING 
* 
	LD	A1,SCTOPT	GET OPTION WORD 
	ANK	A1,2	DISC PAGING?
	RF(Z)	AP:376	NO! 
* 
*  CHECK IF CORE RESIDENT SEGMENT 
* 
	CALL	GETCON	GET SEGMENT TYPE 
*	LDR	A12,A1	GET MOST SIGNIFICANT PART	=REL 11
*	ANKL	A12,/FF	OF DISC ADDRESS	=REL 11
	SRL	A1,8	SEGMENT TYPE TO RIGHT BYTE	=1 
	CCK	A1,'RR'	CORE RESIDENT SEGMENT? 
	RF(E)	AP:376	YES: LOAD THIS SEGMENT! 
* 
*  BYPASS THIS SEGMENT AND CHECK NEXT 
* 
	LD	A1,SAVE06,A13	GET SEGMENT COUNTER 
	LD	A2,SAVE29,A13	GET TOTAL NUMBER OF SEGMENTS
	ADK	A1,1	INCREMENT 
	CWR	A1,A2	LAST SEGMENT?
	ABL(E)	CONLOD	YES! 
	ST	A1,SAVE06,A13	SAVE CURRENT SEGMENT NUMBER 
	RB	AP:360
AP:375	LDKL	A1,LMP2	DISC I/O ERROR
	CALL	ERROR 
	EJECT
AP:376	EQU	*
	ADK	A2,2	DISC SECTOR ADDRESS 
	CALL	GETCON	GET DISC SECTOR ADDRESS
	LDR	A11,A1	SAVE
	AD	A11,SCTADA+2	ADD LEAST SIGN. PART OF A.D.A.?
*	RF(O)	AP:377	OVERFLOW	=REL 11 
*	RF	AP:378	NOT OVERFLOW	=REL 11
*AP:377	ADKL	A12,1	INCR. M. S. P. OF DISC ADDRESS	=REL 11 
*	ANKL	A11,/7FFF	RESET OVERFLOW	=REL 11 
*AP:378	AD	A12,SCTADA	ADD M. S. P. OF A. D. A.	=REL 11
*	CWK	A12,255	OVERFLOW?	=REL 11 
*	RB(G)	AP:375	YES: ILLEGAL DISC ADDRESS!	=REL 11 
	ADK	A2,2	SEGMENT LENGTH
	CALL	GETCON	GET SEGMENT LENGTH 
	LDR	A10,A1	SAVE
	ADKL	A10,1 
	ANKL	A10,/FFFE	MAKE EVEN LENGTH
	ST	A8,SAVE07,A13 
	CF	A14,LODSEG	LOAD SEGMENT 
	LD	A1,SAVE06,A13	GET SEGMENT COUNTER 
	LD	A2,SAVE29,A13	GET TOTAL NUMBER OF SEGMENTS
	ADK	A1,1	INCREMENT SEGMENT COUNTER 
	CWR	A1,A2	ALL SEGMENTS LOADED? 
	RF(E)	CONLOD	YES!
	ST	A1,SAVE06,A13	STORE SEGMENT COUNTER 
	LD	A4,SCTPSZ	GET PAGE LENGTH 
	LD	A1,SCTOPT	GET OPTION WORD 
	ANK	A1,1	MMU IN SYSTEM?
	RF(NZ)	AP:379	YES! 
	ADR	A8,A4	COMPUTE ADDRESS TO NEXT PAGE 
	RB	AP:360
	EJECT
AP:379	EQU	*
	LDR	A1,A4	SAVE 
	ANKL	A4,/0C00	GET MODULO 4K DISCRIMINANT 
	RF(Z)	AP:380	NO DISCRIMINANT!
	ADR	A1,A8	COMPUTE LOGICAL ADDRESS TO NEXT PAGE 
	LDR	A4,A1	SAVE 
	ANKL	A4,/0C00	GET MODULO 4K DISCRIMINANT 
	ANKL	A1,/F000	LOGICAL ADDRESS TO NEXT PAGE 
	ANKL	A8,/F000	LOGICAL ADDRESS TO CURRENT PAGE
	SUR	A1,A8	COMPUTE PHYSICAL INCREMENT 
AP:380	EQU	*
	LD	A8,SCTLAP	GET LOGICAL PAGE ADDRESSE 
	ANKL	A8,/F000	SKIP DISPLACEMENT
	LDR	A2,A8	SAVE 
	ADR	A8,A4	COMPUTE LOGICAL ADDRESS TO NEXT PAGE 
	SRL	A2,12	MOVE TO 4 RIGHTMOST BITS 
	ADR	A2,A2	2*MMU ENTRY
	ADR	A2,A13 
	ADKL	A2,MMDDIV	MMU ENTRY ADDRESS 
	LDR	A3,A13 
	ADKL	A3,MMDDIV+32
	SRL	A1,2	MAP PHYSICAL ADDRESS ON MMU 
AP:385	EQU	*
	ADRS	A1,A2	LOGICAL ADDRESS TO NEXT PAGE
	ADK	A2,2	NEXT MMU ENTRY
	CWR	A2,A3
	RB(NE)	AP:385
	TL	MMDDIV,A13	LOAD MMU REGISTERS 
	RB	AP:360
	EJECT
**********************************************************
*                                                        *
*           LOAD CONFIGURATION PART OF SYSLOD            *
*           =================================            *
*                                                        *
*  ENTRY:  A9 - BUFFER ADDRESS                           *
*                                                        *
*  EXIT:                                                 *
*                                                        *
*  SUBROUTINES:  CASSIN,RDBLK,MOVBUF                     *
*                                                        *
**********************************************************
CONLOD	EQU	*
	LD	A1,SCTIPL	GET PROGRAM LOAD DEVICE 
	SUK	A1,/F0	CHECK DEVICE TYPE 
	RF(NN)	CONRAD	NOT CASSETTE 
	IFT	CFTEST+CASS=2
* 
*  PROGRAM LOAD DEVICE = CASSETTE 
* 
CON:30	EQU	*
	LDKL	A1,CON:40-2 
	SUKL	A1,COR:48 
	ADKL	A1,/5700
	ST	A1,COR:48	MODIFY INSTRUCTION
	LDKL	A1,/0100
	ST A1,COR:38	MODIFY
	LDR	A1,A9	START OF BUFFER
	ADKL	A1,BUFLEN	END OF BUFFER 
	ST	A1,SAVE08,A13	SAVE END OF BUFFER
	ST	A1,SAVE03,A13	SAVE
	CF	A14,RDBLK	READ ONE BLOCK
	CF	A14,RDBLK	READ NEXT BLOCK 
	LDR	A8,A9
	LDR	A4,A8	GET START OF BUFFER
	LDR	A1,A1	TAPEMARK?
	RF(Z)	TST:10	NO! 
	CF	A14,CASSIN	INIT CONFIGURATION CASSETTE
	CALL	CON:40
	RF	TST:10
CONEX	EQU	* 
* 
*  UNLOAD CASSETTE IF NO APPLICATION DATA ON SAME CASSETTE
* 
	CF	A14,RDBLK	READ NEXT BLOCK 
	LDR	A1,A1	APPLICATION DATA?
	RF(NZ)	CON:80	NO!
	LDK	A1,/D
	CF	A14,CHCRIO	SEARCH TAPEMARK REVERSE
	CF	A14,RDBLK	BYPASS TAPEMARK 
	RF	CON:90
CON:80	EQU	*
	LDK	A1,/F
	CF	A14,CHCRIO	UNLOAD CASSETTE
CON:90	EQU	*
	ABL	CONMOV 
	XIF
	IFT	CFTEST=1 
	EJECT
CONRAD	EQU	*
* 
*  LOAD CONFIGURATION DATA FROM DISC/FLEXIBLE DISC
* 
	CF	A14,GETFIL	GET CONFIGURATION FILE 
	LDR	A1,A9	GET START OF BUFFER
	ADKL	A1,BUFLEN-6	END OF BUFFER 
	ST	A1,SAVE08,A13	SAVE END OF BUFFER
	LDR	A1,A9	GET START OF BUFFER
	AD	A1,SAVCON	START OF SAVE BUFFER
	ST	A1,SAVE03,A13	SAVE	=2 
	LDKL	A10,0	RESET RECORD COUNTER
* 
*  READ ONE SECTOR FROM RANDOM ACCESS DEVICE
* 
	CALL	READC	READ SECTOR 
* 
*	TEST THE SYNTAX OF THE CONFIGURATION FILE 
* 
TST:10	CALL	T 
	CALL	CONRD 
	CALL	NN
	CALL	CONRD 
	CALL	TID 
	CALL	TEST
	CALL	AA
	CALL	CONRD 
	CALL	TCL 
	CALL	TEST
	CALL	AA
	CALL	CONRD 
	CALL	LEV 
	CALL	TEST
	CALL	NN1 
TST:20	CALL	CONRD 
	CALL	NN1 
	CALL	CONRD 
TST:30	LD	A5,SAVE13,A13	GET NUMBER OF TERMINAL DEV. CLASSES 
	CWK	A5,/3030	ZERO? 
	RF(E)	TST:40	YES!
	CALL	SUKASC
	CALL	TDCT
	CALL	TEST
	CALL	NN
	CALL	CONRD 
	CALL	LC
	CALL	TEST
	CALL	NNL 
	CALL	CONRD 
	RB	TST:30
TST:40	EQU	*
	CALL	NN1 
	CALL	CONRD 
TST:50	EQU	*
	LD	A5,SAVE13,A13	GET NUMBER OF SPECIAL DEV. CLASSES
	CWK	A5,/3030	ZERO? 
	RF(E)	TST:60	YES!
	CALL	SUKASC
	CALL	SDCS
	CALL	TEST
	CALL	NN
	CALL	CONRD 
	RB	TST:50
TST:60	EQU	*
	LCR	A5,A4	GET CHARACTER
TST:70	CCK	A5,'TT'	BLOCK TYPE T?
	RB(E)	TST:10	YES!
	LDKL	A3,/570C
	ST	A3,TST:70	MODIFY INSTRUCTION TO RF
	CCK	A5,'CC'	BLOCK TYPE C ? 
	RF(NE)	TST:80	NO!
	LDKL	A3,'CC' 
	ST	A3,T:10	MODIFY INSTRUCTION
	CALL	T 
	RB	TST:20
TST:80	EQU	*
	ADK	A4,1	INCREMENT BUFFER POINTER
	LCR	A5,A4	GET CHARACTER
	CCK	A5,';;'	END OF RECORD
	ABL(NE)	CONERR	NO! 
TST:85	EQU	*
	CALL	CONRD 
	RB	TST:85
COR:50	EQU	*
	LDK	A3,'S' 
	SC	A3,GET:25+1	MODIFY INSTRUCTION
	SC	A3,GET:60+1	MODIFY INSTRUCTION
	CF	A14,GETFIL
* 
*  UNLOCK FLEXIBLE DISC 
* 
	LD	A1,SCTIPL	GET LOAD DEVICE 
	SUK	A1,/F8	CHECK TYPE
	RF(N)	COR:60	NOT FLEXIBLE DISC 
	XIF
	IFT	CFTEST+FLDISC=2
	LD	A1,SCTOPT	GET OPTION WORD 
	ANK	A1,2	DISC PAGING?
	RF(NZ)	COR:60	YES; DON'T UNLOCK
	LDK	A1,/C	UNLOCK ORDER 
	EX	FRD:10	EXECUTE COMMAND
	RB(NA)	*-4	LOOP UNTIL ACCEPTED 
	EX	FRD:40	SENSE STATUS 
	RB(NA)	*-4	LOOP UNTIL ACCEPTED 
	XIF
	IFT	CFTEST=1 
COR:60	EQU	*
	EJECT
CONMOV	EQU	*
* 
*  MOVE CONFIGURATION DATA TO END OF SYSTEM AREA
* 
	LDR	A1,A9	GET START OF BUFFER
	AD	A1,SAVCON	COMPUTE END OF BUFFER 
CMOV10	LD	A3,SAVE03,A13	GET END OF CONFIGURATION DATA 
	LD	A2,SAVE01,A13	GET END OF SYSTEM AREA
	CM	-2,A2	MAKE SURE CONFIGURATION FILE
	SUK	A2,1	IS FOLLOWED BY X'00'
	SUR	A3,A1	LENGTH OF CONFIGURATION DATA 

	SUR	A2,A3	TO-ADDRESS 
* 
	ANKL	A2,/FFFE	MAKE EVEN ADDRESS
	CALL	MOVE
	ST	A2,SAVE01,A13	SAVE START OF CONFIGURATION DATA
	LDR	A1,A9	GET START OF FREE AREA 
	LDR	A12,A2	END OF FREE AREA
	SUR	A12,A1	SUBTRACT MONITOR END
	ST	A12,M:REL,A13	SAVE RELOCATION CONSTANT
	LD	A2,SAVE01,A13	GET START OF CONFF
* 
*  MOVE SYSLDA+SYSLDM+DWT-PROTOTYPES TO END OF FREE AREA
* 
MOPRO	SUK	A1,2
	SUK	A2,2 
	LDR*	A4,A1 
	STR	A4,A2
	CWR	A1,A13 
	RB(NE)	MOPRO 
	LDR	A1,A2	SAVE NEW LOCATION OF SYSLDA
	AD	A2,LDALEN,A2	BYPASS SYSLDA
	ABR	A2	CONTINUE EXECUTION IN SYSLDM
	EJECT
*************************************************************** 
*  SUROUTINES USED TO TEST THE SYNTAX OF THE CONFIGURATION FILE 
*************************************************************** 
	EJECT
CONRD	EQU	* 
* 
*  COMPUTE NUMBER OF CHARACTERS IN THIS RECORD
* 
	LD	A1,SAVE03,A13	GET CURRENT POINTER IN BUFFER 
	LDR	A2,A1	SAVE 
	LDK	A3,0	RESET CHARACTER COUNTER 
	LDR	A4,A8	START OF RECORD
COR:30	EQU	*
	LCR	A5,A4	GET CHARACTER
	CCK	A5,';;'	END OF RECORD? 
	RF(E)	COR:40	YES!
COR:35	EQU	*
	CWK	A3,RECLEN	MAXIMUM SIZE ACHIEVED? 
COR:38	EQU	*-2
	RF(E)	COR:40	YES!
	CW	A1,SAVE01,A13	MEMORY OVERFLOW?
	RF(E)	MEMOFL	YES!
	ADK	A1,1	INCREMENT BUFFER POINTER
	ADK	A3,1	INCREMENT CHARACTER COUNTER 
	ADK	A4,1	INCREMENT RECORD POINTER
	RB	COR:30	LOOP 
COR:40	EQU	*
	LC	A5,1,A4	GET NEXT CHARACTER
	CCK	A5,';;'	TWO SEMICOLONS?
	RF(NE)	COR:45	NO!
	CWK	A3,NCHTID	CHECK IF END OF RECORD 
	RB(E)	COR:35	NO: SEMICOLON CHARACTER IN RECORD 
COR:45	EQU	*
	ST	A1,SAVE03,A13	SAVE CURRENT DESTINATION
	LDR	A1,A8	START OF RECORD
	CALL	MOVE
COR:48	EQU	*
	ADKL	A10,1	INCREMENT RECORD COUNTER
	CW	A10,SAVE20,A13	LAST RECORD
	RB(E)	COR:50	YES!
	ADKL	A8,RECLEN+1	INCREMENT RECORD POINTER
	CW	A8,SAVE08,A13	END OF BUFFER 
	RF(NE)	COR:10	NO!
	CALL	READC	READ SECTOR 
COR:10	LDR	A4,A8	START OF RECORD
	RTN	A14
	XIF
	IFT	CFTEST+CASS=2
CON:40	EQU	*
	CF	A14,RDBLK	READ NEXT BLOCK 
	LDR	A1,A1	TAPEMARK?
	ABL(NZ)	CONEX	YES! 
	LDR	A8,A9
	LDR	A4,A8	GET START OF BUFFER
	RTN	A14
	XIF
	IFT	CFTEST=1 
MEMOFL	EQU	*
	LDKL	A1,LMP3	INDICATE MEMORY OVERFLOW
	CALL	ERROR 
	EJECT
READC	EQU	* 
	CF	A14,READS	READ SECTOR 
READS	EQU	*-2 
	LDR	A8,A9
	LDR	A4,A8	GET START OF BUFFER
	RTN	A14
T	EQU	* 
	LCR	A5,A4	GET CHARACTER
	CCK	A5,'TT'	BLOCK TYPE T?
T:10	EQU	*-2
	RF(NE)	CONERR
	ADK	A4,1	INCREMENT BUFFER POINTER
	LCR A5,A4	GET NEXT CHARACTER 
	CCK	A5,';;'	END OF RECORD? 
	RF(NE)	CONERR	NO!
	RTN	A14
	EJECT
NNL	EQU	* 
	LDK	A2,1 
	LDK	A3,3 
	RF	NN:10 
NN	EQU	*
	LDK	A2,0 
	LDK	A3,3 
	RF	NN:10 
NN1	EQU	* 
	LDK	A3,4 
NN:10	EQU	* 
	LCR	A5,A4	GET CHARACTER
	ADK	A4,1	INCREMENT BUFFER POINTER
	CCK	A5,/3939	NUMERIC CHARACTER > 9?
	RF(G)	CONERR	YES!
	SUK	A3,1 
	RF(Z)	NN:20
	CCK	A5,/3030	NUMERIC CHARACTER < 0?
	RF(L)	CONERR YES!
	RF(Z)	NN:15
	LDKL	A1,/3030
	RF	NN:16 
NN:15	LDKL	A1,/3131 
NN:16	ST	A1,NN:20+2	MODIFY
	SUK	A3,1 
	RF(Z)	NN:30
	SLL	A5,8 
	RB	NN:10 
NN:20	EQU	* 
	CCK	A5,/3131	NUMERIC CHARACTER < 1?
	RF(L)	CONERR	YES!
	SUK	A2,1 
	RF(NZ)	NN:50 
	LCR	A5,A4	GET NEXT CHARACTER 
	CCK	A5,'LL'	LINE L?
	RF(E)	NN:40	YES! 
	CCK	A5,'RR'	LINE R?
	RF(E)	NN:40	YES! 
	CCK	A5,'AA'	LINE A?
	RF(E)	NN:40	YES! 
	CCK	A5,'SS'	LINE S?
	RF(E)	NN:40	YES! 
	RF	CONERR
NN:40	EQU	* 
	ADK	A4,1	INCREMENT BUFFER POINTER
	RF	NN:50 
NN:30	EQU	* 
	ST	A5,SAVE13,A13	STORE NUMBER OF CLASSES 
NN:50	LCR	A5,A4	GET CHARACTER 
	CCK	A5,';;'	END OF RECORD? 
	RF(NE)	CONERR	NO!
	RTN	A14
	EJECT
AA	EQU	*
	LDK	A3,2 
AA:10	EQU	* 
	LCR	A5,A4	GET CHARACTER
	CCK	A5,/3030	ALPHA-NUMERIC CHARACTER <30?
	RF(L)	CONERR	YES!
	CCK	A5,/3939	ALPHA-NUMERIC CHARACTER > 39? 
	RF(NG)	AA:20	NO! 
	CCK	A5,/4141	ALPHA-NUMERIC CHARACTER < 41? 
	RF(L)	CONERR 
	CCK	A5,/5A5A	ALPHA-NUMERIC CHARACTER > 5A? 
	RF(G)	CONERR 
AA:20	EQU	* 
	ADK	A4,1	INCREMENT BUFFER POINTER
	SUK	A3,1 
	RB(NZ)	AA:10 
	LCR	A5,A4	GET NEXT CHARACTER 
	CCK	A5,';;'	END OF RECORD? 
	RF(NE)	CONERR	NO!
	RTN	A14
	EJECT
TID	EQU	* 
	LDKL	A2,SEQ1	SELECT SEQUENCE 
	LDK	A3,4	GET NUMBER OF CHARACTERS
	RTN	A14
TCL	EQU	* 
	LDKL	A2,SEQ2	SELECT SEQUENCE 
	LDK	A3,4	GET NUMBER OF CHARACTERS
	RTN	A14
LEV	EQU	* 
	LDKL	A2,SEQ3	SELECT SEQUENCE 
	LDK	A3,4	GET NUMBER OF CHARACTERS
	RTN	A14
	EJECT
TDCT	EQU	*
	LDKL	A2,SEQ4	SELECT SEQUENCE 
	LDK	A3,5	GET NUMBER OF CHARACTERS
	RTN	A14
LC	EQU	*
	LDKL	A2,SEQ5	SELECT SEQUENCE 
	LDK	A3,3	GET NUMBER OF CHARACTERS
	RTN	A14
SDCS	EQU	*
	LDKL	A2,SEQ6	SELECT SEQUENCE 
	LDK	A3,5	GET NUMBER OF CHARACTERS
	RTN	A14
	EJECT
TEST	EQU	*
	LCR	A5,A4	GET CHARACTER
	CCR	A5,A2
	RF(NE)	CONERR
	ADK	A4,1	INCREMENT BUFFER POINTER
	ADK	A2,1	INCREMENT SEQUENCE POINTER
	SUK	A3,1	MORE CHARACTERS IN THE SEQUENCE?
	RB(NZ)	TEST	YES! 
	RTN	A14
	EJECT
SUKASC	EQU	*
	CCK	A5,/3030	NUMBER OF NUMERIC CHARACTERS<10?
	RF(NE)	SUK:10	YES! 
	SUK	A5,/F6	N0! 
SUK:10	SUK	A5,1 
	ST	A5,SAVE13,A13	STORE NUMBER OF CLASSES 
	RTN	A14
CONERR	EQU	*
	LDKL	A1,LMP4	INDICATE FORMAT ERROR 
	CALL	ERROR 
	EJECT
* 
* 
**************************************************
*                                                *
*     SEQUENCES                                  *
*                                                *
**************************************************
* 
* 
* 
* 
SEQ1	EQU	*	TID= 
	DATA	'TI'
	DATA	'D='
SEQ2	EQU	*	TCL= 
	DATA	'TC'
	DATA	'L='
SEQ3	EQU	*	LEV= 
	DATA	'LE'
	DATA	'V='
SEQ4	EQU	*	TDC=T
	DATA	'TD'
	DATA	'C='
	DATA	'T0'
SEQ5	EQU	*	LC=
	DATA	'LC'
	DATA	'=0'
SEQ6	EQU	*	SDC=S
	DATA	'SD'
	DATA	'C='
	DATA	'S0'
	XIF
	IFT	CFTCAS+CASS=2
* 
*  PROGRAM LOAD DEVICE = CASSETTE 
* 
CON:30	EQU	*
	LDR	A1,A9	START OF BUFFER
	ADKL	A1,BUFLEN	END OF BUFFER 
	ST	A1,SAVE08,A13	SAVE END OF BUFFER
	ST	A1,SAVE03,A13	SAVE
	CF	A14,RDBLK	READ ONE BLOCK
	CF	A14,RDBLK	READ NEXT BLOCK 
	LDR	A1,A1	TAPEMARK?
	RF(Z)	CON:50	NO! 
	CF	A14,CASSIN	INIT CONFIGURATION CASSETTE
CON:40	EQU	*
	CF	A14,RDBLK	READ NEXT BLOCK 
	LDR	A1,A1	TAPEMARK?
	RF(NZ)	CONEX	YES!
CON:50	EQU	*
* 
*  COMPUTE NUMBER OF CHARACTERS IN THIS BLOCK 
* 
	LD	A1,SAVE03,A13	GET CURRENT POINTER IN BUFFER 
	LDR	A2,A1	SAVE 
	LDK	A3,0	RESET CHARACTER COUNTER 
	LDR	A4,A9	GET SAVE09 OF BUFFER 
CON:60	EQU	*
	LCR	A5,A4	GET CHARACTER IN BUFFER
	CCK	A5,';;'	CHECK IF SPACE 
	RF(E)	CON:70	NO MOORE CHARACTERS 
CON:65	EQU	*
	CWK	A3,CBLEN	END OF BUFFER?
	RF(E)	CON:75	YES!
	CW	A1,SAVE01,A13	MEMORY OVERFLOW?
	RF(E)	MEMOFL	YES!
	ADK	A1,1	INCREMENT DESTINATION POINTER 
	ADK	A3,1	INCREMENT CHARACTER COUNTER 
	ADK	A4,1	INCREMENT BUFFER POINTER
	RB	CON:60
CON:70	EQU	*
	LC	A5,1,A4	GET NEXT CHARACTER
	CCK	A5,';;'	TWO SEMI-COLONS? 
	RF(NE)	CON:75	NO!
	CWK	A3,NCHTID	CHECK IF END OF RECORD 
	RB(E)	CON:65	NO: SEMI-COLON CHARACTER IN RECORD
CON:75	EQU	*
	ST	A1,SAVE03,A13	SAVE CURRENT DESTINATION
	LDR	A1,A9	GET SAVE09 OF BUFFER 
	CALL	MOVE
	RB	CON:40
CONEX	EQU	* 
* 
*  UNLOAD CASSETTE IF NO APPLICATION DATA ON SAME CASSETTE
* 
	CF	A14,RDBLK	READ NEXT BLOCK 
	LDR	A1,A1	APPLICATION DATA?
	RF(NZ)	CON:80	NO!
	LDK	A1,/D
	CF	A14,CHCRIO	SEARCH TAPEMARK REVERSE
	CF	A14,RDBLK	BYPASS TAPEMARK 
	RF	CON:90
CON:80	EQU	*
	LDK	A1,/F
	CF	A14,CHCRIO	UNLOAD CASSETTE
CON:90	EQU	*
	ABL	CONMOV 
	XIF
	IFF	CFTEST=1 
MEMOFL	EQU	*
	LDKL	A1,LMP3	INDICATE MEMORY OVERFLOW
	CALL	ERROR 
	EJECT
CONRAD	EQU	*
* 
*  LOAD CONFIGURATION DATA FROM DISC/FLEXIBLE DISC
* 
	CF	A14,GETFIL	GET CONFIGURATION FILE 
	LDR	A1,A9	GET START OF BUFFER
	ADKL	A1,BUFLEN-6	END OF BUFFER 
	ST	A1,SAVE08,A13	SAVE END OF BUFFER
	LDR	A1,A9	GET START OF BUFFER
	AD	A1,SAVCON	START OF SAVE BUFFER
	ST	A1,SAVE03,A13	SAVE	=2 
	LDKL	A10,0	RESET RECORD COUNTER
COR:10	EQU	*
* 
*  READ ONE SECTOR FROM RANDOM ACCESS DEVICE
* 
	CF	A14,READS	READ SECTOR 
READS	EQU	*-2 
	LDR	A8,A9	GET START OF BUFFER
COR:20	EQU	*
* 
*  COMPUTE NUMBER OF CHARACTERS IN THIS RECORD
* 
	LD	A1,SAVE03,A13	GET CURRENT POINTER IN BUFFER 
	LDR	A2,A1	SAVE 
	LDK	A3,0	RESET CHARACTER COUNTER 
	LDR	A4,A8	START OF RECORD
COR:30	EQU	*
	LCR	A5,A4	GET CHARACTER
	CCK	A5,';;'	END OF RECORD? 
	RF(E)	COR:40	YES!
COR:35	EQU	*
	CWK	A3,RECLEN	MAXIMUM SIZE ACHIEVED? 
	RF(E)	COR:40	YES!
	CW	A1,SAVE01,A13	MEMORY OVERFLOW?
	RB(E)	MEMOFL	YES!
	ADK	A1,1	INCREMENT BUFFER POINTER
	ADK	A3,1	INCREMENT CHARACTER COUNTER 
	ADK	A4,1	INCREMENT RECORD POINTER
	RB	COR:30	LOOP 
COR:40	EQU	*
	LC	A5,1,A4	GET NEXT CHARACTER
	CCK	A5,';;'	TWO SEMICOLONS?
	RF(NE)	COR:45	NO!
	CWK	A3,NCHTID	CHECK IF END OF RECORD 
	RB(E)	COR:35	NO: SEMICOLON CHARACTER IN RECORD 
COR:45	EQU	*
	ST	A1,SAVE03,A13	SAVE CURRENT DESTINATION
	LDR	A1,A8	START OF RECORD
	CALL	MOVE
	ADKL	A10,1	INCREMENT RECORD COUNTER
	CW	A10,SAVE20,A13	LAST RECORD
	RF(E)	COR:50	YES!
	ADKL	A8,RECLEN+1	INCREMENT RECORD POINTER
	CW	A8,SAVE08,A13	END OF BUFFER 
	RB(E)	COR:10	NEXT SECTOR 
	RB	COR:20	NEXT RECORD
COR:50	EQU	*
	LDK	A3,'S' 
	SC	A3,GET:25+1	MODIFY INSTRUCTION
	SC	A3,GET:60+1	MODIFY INSTRUCTION
	CF	A14,GETFIL
* 
*  UNLOCK FLEXIBLE DISC 
* 
	LD	A1,SCTIPL	GET LOAD DEVICE 
	SUK	A1,/F8	CHECK TYPE
	RF(N)	COR:60	NOT FLEXIBLE DISC 
	XIF
	IFT	CFTFLD+FLDISC=2
	LD	A1,SCTOPT	GET OPTION WORD 
	ANK	A1,2	DISC PAGING?
	RF(NZ)	COR:60	YES; DON'T UNLOCK
	LDK	A1,/C	UNLOCK ORDER 
	EX	FRD:10	EXECUTE COMMAND
	RB(NA)	*-4	LOOP UNTIL ACCEPTED 
	EX	FRD:40	SENSE STATUS 
	RB(NA)	*-4	LOOP UNTIL ACCEPTED 
	XIF
	IFF	CFTEST=1 
COR:60	EQU	*
	EJECT
CONMOV	EQU	*
* 
*  MOVE CONFIGURATION DATA TO END OF SYSTEM AREA
* 
	LDR	A1,A9	GET START OF BUFFER
	AD	A1,SAVCON	COMPUTE END OF BUFFER 
CMOV10	LD	A3,SAVE03,A13	GET END OF CONFIGURATION DATA 
	LD	A2,SAVE01,A13	GET END OF SYSTEM AREA
	CM	-2,A2	MAKE SURE CONFIGURATION FILE
	SUK	A2,1	IS FOLLOWED BY X'00'
	SUR	A3,A1	LENGTH OF CONFIGURATION DATA 

	SUR	A2,A3	TO-ADDRESS 
* 
	ANKL	A2,/FFFE	MAKE EVEN ADDRESS
	CALL	MOVE
	ST	A2,SAVE01,A13	SAVE START OF CONFIGURATION DATA
	LDR	A1,A9	GET START OF FREE AREA 
	LDR	A12,A2	END OF FREE AREA
	SUR	A12,A1	SUBTRACT MONITOR END
	ST	A12,M:REL,A13	SAVE RELOCATION CONSTANT
	LD	A2,SAVE01,A13	GET START OF CONFF
* 
*  MOVE SYSLDA+SYSLDM+DWT-PROTOTYPES TO END OF FREE AREA
* 
MOPRO	SUK	A1,2
	SUK	A2,2 
	LDR*	A4,A1 
	STR	A4,A2
	CWR	A1,A13 
	RB(NE)	MOPRO 
	LDR	A1,A2	SAVE NEW LOCATION OF SYSLDA
	AD	A2,LDALEN,A2	BYPASS SYSLDA
	ABR	A2	CONTINUE EXECUTION IN SYSLDM
	XIF
	EJECT
************************************************************************
*  SUBROUTINES USED IN THE APPLICATION AND CONFIGURATION LOADING PHASE O
************************************************************************
******************************* 
*  SOPIN - READ SOP SWITCHES  * 
*  =========================  * 
*                             * 
*  ENTRY:                     * 
*                             * 
*  EXIT:  A1 - SOP INPUT      * 
*         BIT 6 - SWITCH 1    * 
*         BIT 15 - SWITCH 10  * 
*                             * 
*  WORK REGISTERS:  A1        * 
*                             * 
*  SUBROUTINES:               * 
*                             * 
******************************* 
SOPIN	EQU	* 
	CIO	A1,1,SOP 
	INR	A1,0,SOP 
	RB(NA)	*-2 
	RTN	A14
	IFT	CASS=1 
	EJECT
******************************************************* 
*        CASSIN - CASSETTE INITIATING ROUTINE         * 
*        ====================================         * 
*                                                     * 
*  REFERENCED IN:  SYSLOD -LOADING PART-              * 
*                                                     * 
*  ENTRY:                                             * 
*                                                     * 
*  EXIT:                                              * 
*                                                     * 
*  WORK REGISTERS:  A1,A3                             * 
*                                                     * 
*  SUBROUTINES:  SOPIN,CHCRIO                         * 
*                                                     * 
******************************************************* 
CASSIN	EQU	*
	LDK	A1,/F
	CF	A14,CHCRIO	UNLOAD CASSETTE
	LDKL	A3,LMP1+LMP2	INDICATE EXPECTED SWITCHES 
	OTR	A3,0,SOP 
CAS:10	EQU	*
	CF	A14,SOPIN	READ SOP
	ANKL	A1,/0300	ALLOWED SWITCHES?
	RB(Z)	CAS:10	NO! 
	LDKL	A3,LMP1	SWITCH ON LOAD LAMP 
	OTR	A3,0,SOP 
	SRL	A1,8	RIGHT ALIGN 
	ANK	A1,1	SELECT UNIT 
	CF	A14,CHCRIO	SELECT UNIT
	LDK	A1,LOCK
	CF	A14,CHCRIO	LOCK CASSETTE
	ANK	A3,1	CASSETTE OPERABLE?
	RB(NZ)	CAS:10	NO!
	LDK	A1,SBOT		
	CF	A14,CHCRIO	SEARCH BEGINNING OF TAPE 
	LDK	A1,STMF
	CF	A14,CHCRIO	SEARCH TAPEMARK FORWARD
	RTN	A14
	EJECT
********************************************* 
*  CHCRIO - CASSETTE I/O EXECUTING ROUTINE  * 
*  =======================================  * 
*                                           * 
*  REFERENCED IN:  CASSIN,SYSLOD            * 
*                                           * 
*  ENTRY:  A1 - I/O INSTRUCTION COMMAND     * 
*                                           * 
*  EXIT:                                    * 
*                                           * 
*  WORK REGISTERS:  A1,A3                   * 
*                                           * 
*  SUBROUTINES:                             * 
*                                           * 
********************************************* 
CHCRIO	EQU	*
	CIO	A1,1,CHCR
	SST	A3,CHCR
	RB(NA)	CHCRIO
	RTN	A14
	EJECT
**************************************************
*                                                *
*        RDBLK - READ ONE CASSETTE BLOCK         *
*        ===============================         *
*                                                *
*  REFERENCED IN:  SYSLOD                        *
*                                                *
*  ENTRY:  A9 - CASSETTE BUFFER POINTER          *
*                                                *
*  EXIT:  A2 - NUMBER OF CHARACTERS IN BLOCK     *
*                                                *
*  WORK REGISTERS: A1,A2,A3,A4,A5                   * 
*                                                *
*  SUBROUTINES:                                  *
**************************************************
RDBLK	EQU	* 
	LDK	A5,0 
RDB:10	EQU	*
	LDR	A3,A9	SAVE09 OF BUFFER 
	LDK	A2,0	RESET CHARACTER COUNTER 
	LDR	A4,A3	SAVE SAVE09 OF BUFFER
	ADKL	A3,CBLEN	END OF BUFFER
	LDK	A1,/A
	CIO	A1,1,CHCR	READ BLOCK 
	RF(NA)	RDERR3
RDB:20	EQU	*
	INR	A1,0,CHCR
	RF(NA)	RDB:30
	CWR	A4,A3	END OF BUFFER? 
	RF(E)	RDERR	YES! 
	SCR	A1,A4	STORE CHARACTER
	ADK	A2,1	INCREMENT CHARACTER COUNTER 
	ADK	A4,1	INCREMENT BUFFER POINTER
RDB:30	EQU	*
	SST	A1,CHCR		
	RB(NA)	RDB:20
	ANKL	A1,/FCFF	CHECK STATUS 
	LDR	A4,A1	SAVE STATUS
	RF(Z)	RDBEX	OK 
	SLC	A4,3	CHECK IF TAPEMARK 
	RF(N)	RDBEX	OK IF TAPEMARK 
RDERR	EQU	* 
* 
*  READ ERROR HAS OCCURRED: MAKE ANOTHER ATTEMPT TO READ
*  THE SAME BLOCK IF NOT 3 ATTEMPTS ALREADY HAS BEEN MADE 
* 
	ADK	A5,1	NEXT ATTEMPT
	CWK	A5,3	THIRD ATTEMPT?
	RF(E)	RDERR3	YES - GIVE UP!
	LDK	A1,/E	REVERSE ONE BLOCK
	CIO	A1,1,CHCR	EXECUTE ORDER
	RB(NA)	*-2	LOOP UNTIL ACCEPTED 
	RB	RDB:10
RDERR3	EQU	*
	LDKL	A1,LMP2 
	CALL	ERROR 
RDBEX	EQU	* 
	RTN	A14
	XIF
	IFT	DISC=1 
	EJECT
*********************************** 
*                                 * 
*  DUINIT - INITIALIZE DISC UNIT  * 
*  =============================  * 
*                                 * 
*  REFERENCED IN: SYSLOD,GETFIL   * 
*                                 * 
*  ENTRY: A1 - DEVICE ADDRESS     * 
*                                 * 
*  EXIT:                          * 
*                                 * 
*  WORK REGISTERS: A2,A3             *
*                                 * 
*  SUBROUTINES:                   * 
*                                 * 
*********************************** 

DUINIT	EQU	*
	LC	A2,SCTSFA+2	GET FORMAT
	ANK	A2,/FF 
	SUK	A2,2	SELECT FORMAT 
	RF(Z)	DUI:20	FORMAT A2 
	SUK	A2,1 
	RF(Z)	DUI:30	FORMAT A3 
	ABL	FDTERR	FORMAT ERROR
DUI:20	LDKL	A2,RDSEC2	GET SUBROUTINE ADDRESS
	EJECT
* 
*	INIT DISC COMMANDS VERSION A2 
* 
	ADS	A1,SEEK20
	ADS	A1,SEEK21
	ADS	A1,READ21
	ADS	A1,READ22

	RF	DUI:40
DUI:30	LDKL	A2,RDSEC3	GET SUBROUTINE ADDRESS
* 
*	INIT DISC COMMANDS VERSION A3 
* 
	LDKL	A3,DKBA3	BUFFER LENGTH VERSION A3 
	ST	A3,SAVCON 
	ADS	A1,SEEK30
	ADS	A1,SEEK31
	ADS	A1,READ30
	ADS	A1,READ31
* 
*  INIT SUBROUTINE ADDRESSES
* 
DUI:40	EQU	*		=2
	ST	A2,READ	READ PROGRAM
	ST	A2,READS	READ CONFIGURATION DATA
	ST	A2,READVL	READ VOLUME LABEL 
	ST	A2,READCF	READ CONFIGURATION DATA 
	RTN	A14
	EJECT
*********************************************** 
*                                             * 
*  RDSEC - READ ONE SECTOR FROM DISC          * 
*  =================================          * 
*                                             * 
*  REFERENCED IN: SYSLOD                      * 
*                                             * 
*  ENTRY:  A9 = BUFFER ADDRESS
*                                             * 
*         A11 - SECTOR NUMBER                 * 
*                                             * 
*  EXIT:                                      * 
*                                             * 
*   WORK REGISTERS:  A1,A2,A3,A4,A7 
*                                             * 
*  SUBROUTINES:  ERROR                        * 
*                                             * 
*********************************************** 
* 
	EJECT
* 
*	READ DISC SECTOR VERSION A2 
* 
RDSEC2	EQU	*
	LDK	A2,0 
	LDR	A1,A11	GET LOGICAL SECTOR NUMBER 
DIV200	EQU	*
	ADR	A2,A1
	SRL	A1,5 
	RB(NZ)	DIV200	MORE IN SERIE TO ADD 
	LDR	A1,A2
	ANKL	A1,/FFE0
	SRL	A2,5 
	SUR	A1,A2
	SUR	A1,A11 
	ADK	A1,31
	RF(P)	DIV210	NO CORRECTION OF RESULT 
	ADK	A2,1 
DIV210	EQU	*
	LDR	A2,A2	A2:=CYL NBR = LOG SEC NBR / 31 
	RF(Z)	DIV220	CYLINDER 0
	ADK	A2,1 
DIV220	EQU	*
	ADR	A2,A11	A2:=PHYS. SEC NBR BEFORE INTERLACING
* 
	LDR	A1,A2
	SRL	A1,5 
	CW	A1,CYLNBR 
	RF(E)	INT200	SAME CYLINDER NUMBER
	ST	A1,CYLNBR 
	SLL	A1,3 
	ORK	A1,2	SET BIT 14
	EJECT
* 
*	SEEK CYLINDER 
* 
SEEK20	CIO	A1,1,0 
	RB(NA)	SEEK20
* 
SEEK21	SST	A1,0 
	RB(NA)	SEEK21
* 
*	INTERLACING 
* 
INT200	EQU	*
	LDR	A1,A2
	ADR	A2,A2
	ADR	A2,A1	INTERLACING FACTOR 3 
	ANK	A2,/1F 
	LD	A1,CYLNBR	GET CYLINDER NUMBER 
	ANK	A1,1 
	RF(Z)	INT210	EVEN CYLINDER 
	ADK	A2,8 
INT210	EQU	*
	ANK	A2,/1F 
	SLL	A2,2	PHYSICAL SECTOR AND ORDER CODE
	ST	A2,SECNBR 
	EJECT
* 
*	READ SECTOR 
* 
	LDR	A1,A9	BUFFER ADDRESS 
READ20	LDKL	A4,MUXCC	NUMBER OF WORDS
WERIO2	WER	A4,/10	WRITE NUMBER OF WORDS 
	WER	A1,/11	WRITE BUFFER ADDRESS
READ21	CIO	A2,1,0	READ SECTOR 
	RB(NA)	READ21	LOOP UNTIL ACCEPTED
READ22	SST	A2,0	STATUS
	RB(NA)	READ22	LOOP UNTIL ACCEPTED
	ANK	A2,/1F	STATUS
	RB(NZ)	RDSEC2	LOOP UNTIL CORRECT READ
	ADKL	A11,1	INCREMENT SECTOR COUNTER
	RTN	A14
	EJECT
* 
*	READ DISC SECTOR VERSION A3 
* 
RDSEC3	EQU	*
	LDK	A2,0 
	LDR	A1,A11	GET LOGICAL SECTOR NUMBER 
	LDKL	A7,/1000
	LDKL	A4,/3000
DIV300	EQU	*
	SUR	A1,A4
	RF(N)	DIV310 
	ADR	A2,A7
	RB	DIV300
DIV310	EQU	*
	ADR	A1,A4	ADJUST DIVIDEND
	SRL	A4,4 
	SRL	A7,4 
	RB(NZ)	DIV300
	ADR	A2,A2
* 
	SUK	A1,1 
	ST	A1,SAVMEM 
	RF(NP)	CASE10	,XXXX  ,      , OR ,    XX,XX    , 
	ADK	A2,1	,      ,  XXXX, 
CASE10	EQU	*
	LDR	A4,A2
	SRL	A4,5 
	CW	A4,CYLNBR 
	RF(E)	INT300 
	ST	A4,CYLNBR	STORE NEW CYLINDER NUMBER 
	SLL	A4,3 
	ORK	A4,2	SET BIT 14
	EJECT
* 
*	SEEK CYLINDER 
* 
SEEK30	CIO	A4,1,0 
	RB(NA)	SEEK30
* 
SEEK31	SST	A4,0	GET STATUS
	RB(NA)	SEEK31
* 
*	INTERLACING 
* 
INT300	EQU	*
	LDR	A3,A2
	ADR	A2,A2
	ADR	A2,A3	INTERLACING FACTOR 3 
	ANK	A2,/1F 
	LD	A4,CYLNBR	GET CYLINDER NUMBER 
	ANK	A4,1 
	RF(Z)	INT310	EVEN CYLINDER NUMBER
	ADK	A2,8	SKEW FACTOR 180 DEG.
* 
INT310	EQU	*
	ANK	A2,/1F 
	SLL	A2,2	INTERLACED SECTOR NUMBER
	ST	A2,SECNBR	STORE PHYSICAL SECTOR NUMBER
	EJECT
* 
*	READ SECTOR 
* 
	LDR	A7,A9	BUFFER ADDRESS 
READ34	LDKL	A4,MXCCD3	NUMBER OF WORDS 
WERIO3	WER	A4,/10	WRITE NUMBER OF WORDS 
	WER	A7,/11	WRITE BUFFER ADDRESS
* 
READ30	CIO	A2,1,0	READ SECTOR 
	RB(NA)	READ30	LOOP UNTIL ACCEPTED
* 
READ31	SST	A2,0	GET STATUS
	RB(NA)	READ31	LOOP UNTIL ACCEPTED
	ANK	A2,/1F	STATUS
	RB(NZ)	RDSEC3	LOOP UNTIL CORRECT READ
	LDR	A2,A9	BUFFER ADDRESS 
	LDR	A1,A1
	RF(N)	RETURN	,XXXX  ,      , 
	RF(P)	READ33	,      ,  XXXX, 
	ADKL	A2,256	SOURCE POINTER 
	LDK	A4,64	NUMBER OF WORDS TO MOVE
READ32	EQU	*	,    XX,XX    ,
	LDR*	A1,A2 
	STR	A1,A7
	ADK	A2,2 
	ADK	A7,2 
	SUK	A4,1 
	RB(NZ)	READ32	CONTINUE MOVING
	LD	A1,SAVMEM 
	RF(P)	RETURN 
	LD	A2,SECNBR	PHYSICAL SECTOR NUMBER
	ADK	A2,/C	NEW SECTOR TO READ 
	ANK	A2,/7C 
	SUK	A1,1 
	RB	READ34
	EJECT
READ33	EQU	*
	ADK	A2,128	SOURCE POINTER
	LDK	A4,128	NUMBER OF WORDS TO MOVE 
	RB	READ32
RETURN	ADKL	A11,1	INCREMENT SECTOR NUMBER 
	RTN	A14
	XIF
	IFT	MFDISC=1 
	EJECT
********************************************************
*                                                      *
*  MDINIT - INITIALIZE MINI FIXED DISC UNIT            *
*  =======================================             *
*                                                      *
*  REFERENCED IN: SYSLOD,GETFIL                        *
*                                                      *
*  ENTRY:  A1 = DEVICE ADDRESS                         *
*                                                      *
*  EXIT:                                               *
*                                                      *
*  WORK REGISTERS:                                     *
*                                                      *
*  SUBROUTINES: ERROR                                  *
*                                                      *
********************************************************
MDINIT	EQU	*
* 
*	INIT MINI FIXED DISC COMMANDS 
* 
MDI:00	ADS	A1,SEEKM1
	ADS	A1,SEEKM2
	ADS	A1,READM2
	ADS	A1,READM3
	EJECT
* 
	LDKL	A2,MRDSEC	GET SUBROUTINE ADDRESS
	ST	A2,READ 
	ST	A2,READS
	ST	A2,READVL 
	ST	A2,READCF 
	RTN	A14
	EJECT
******************************************************
*                                                    *
*  MRDSEC - READ ONE SECTOR FROM MINI FIXED DISC     *
*  =============================================     *
*                                                    *
*  REFERENCED IN: SYSLOD                             *
*                                                    *
*  ENTRY:  A9 = BUFFER ADDRESS                       *
*          A11 = SECTOR NUMBER                       *
*                                                    *
*  EXIT:                                             *
*                                                    *
*  WORK REGISTERS:                                   *
*                                                    *
*  SUBROUTINES:                                      *
*                                                    *
***************************************************** 
MRDSEC	EQU	*
	LDK	A1,0	PREPARE FOR DIVISION
	LDR	A2,A11	GET LOGICAL SECTOR NUMBER 
	DVK	104	DIVIDE BY 104
	SLL	A2,2 
	ORK	A2,3	SET BIT 14 AND 15 
* 
*	A1=SECTOR NUMBER ON CYLINDER
*	A2=CYLINDER NUMBER
* 
	ST	A1,SECNBR	STORE SECTOR NUMBER 
	CW	A2,CYLNBR 
	RF(E)	INTM10	SAME CYLINDER NUMBER
	ST	A2,CYLNBR	STORE CYLINDER NUMBER 
	EJECT
* 
*	SEEK CYLINDER 
* 
SEEKM1	CIO	A2,1,0	SEEK COMMAND
	RB(NA)	SEEKM1	LOOP UNTIL ACCEPTED
* 
SEEKM2	SST	A2,0	GET STATUS
	RB(NA)	SEEKM2	WAIT UNTIL ACCEPTED
* 
*	INTERLACING 
* 
INTM10	EQU	*
	CWK	A1,52
	RF(L)	INTM20	SECTOR 0-51 
	SUK	A1,52	SECTOR 52-103
INTM20	EQU	*
	LDR	A2,A1
	SLL	A2,2	A2:=4*SECTOR NUMBER 
	LDK	A1,0	PREPARE FOR DIVISION
	DVK	52 
	ADR	A1,A2	A1:=INTERLACED SECTOR NUMBER 
* 
*	A1:=INTERLACED SECTOR NUMBER
* 
	LD	A2,CYLNBR	GET CYLINDER NUMBER 
	SRC	A2,3 
	RF(NN)	INTM30	EVEN CYLINDER NUMBER 
	SUK	A1,26	SKEW FACTOR 26 
	RF(NN)	INTM30
	ADK	A1,52
INTM30	EQU	*
	SLL	A1,2 
	LD	A2,SECNBR	GET SECTOR NUMBER BEFORE INTERLACING
	CWK	A2,52
	RF(L)	INTM40	HEAD NUMBER 0 
	ORKL	A1,/4000	HEAD NUMBER 1
INTM40	EQU	*
* 
*	READ SECTOR 
* 
READM1	EQU	*
	LDKL	A4,MUXCC	NUMBER OF WORDS
	LDR	A7,A9	BUFFER ADDRESS 
* 
WERIOM	WER	A4,8	WRITE NUMBER OF WORDS 
	WER	A7,9	WRITE BUFFER ADDRESS
* 
READM2	CIO	A1,1,0	READ SECTOR 
	RB(NA)	READM2	LOOP UNTIL ACCEPTED
* 
READM3	SST	A1,0	GET STATUS
	RB(NA)	READM3	LOOP UNTIL ACCEPTED
	ANK	A1,/1F	STATUS
	RB(NZ)	MRDSEC	LOOP UNTIL CORRECT READ
	ADKL	A11,1	INCREMENT SECTOR NUMBER 
	RTN	A14
	XIF
	IFT	FLDISC=1 
	EJECT
************************************************
*                                              *
*  FDINIT - INITIALIZE FLEXIBLE DISC           *
*  =================================           *
*                                              *
*  REFERENCED IN: SYSLOD,GETFIL                *
*                                              *
*  ENTRY:  A1 - DEVICE ADDRESS                 *
*                                              *
*  EXIT:                                       *
*                                              *
*  WORK REGISTERS:                             *
*                                              *
*  SUBROUTINES:                                *
*                                              *
************************************************
FDINIT	EQU	*
	LDKL	A2,FRDSEC	GET SUBROUTINE ADDRESS
	ST	A2,READ	STORE 
	ST	A2,READS
	ST	A2,READVL 
	ST	A2,READCF 
* 
*  INIT FLEXIBLE DISC COMMANDS
* 
	ORS	A1,FRD:10	MODIFY READ SECTOR ORDER 
	ANK	A1,8	PROGRAMMED CHANNEL
	RF(NZ)	FDI:10	YES! 
	LDKL	A1,FRD:40-2	NOT PROGRAMMED CHANNEL
	SUKL	A1,FRD:20 
	ADKL	A1,/5700
	ST	A1,FRD:20	MODIFY INR INSTRUCTION
FDI:10	EQU	*
	LDK	A1,/14	LOCK ORDER
	EX	FRD:10	EXECUTE ORDER
	RB(NA)	*-4	LOOP UNTIL ACCEPTED 
	SST	A1,FDCU	SENSE STATUS 
	RB(NA)	*-2 
	ANK	A1,1	FLEXIBLE DISC OPERABLE? 
	RB(NZ)	FDI:10	NO!
	RTN	A14
	EJECT
*********************************************************** 
*                                                         * 
*        FRDSEC - READ SECTOR FROM FLEXIBLE DISC          * 
*        =======================================          * 
*                                                         * 
*  REFERENCED IN:  SYSLOD                                 * 
*                                                         * 
*  ENTRY:  A9 - BUFFER ADDRESS                            * 
*         A11 - SECTOR NUMBER                             * 
*                                                         * 
*  EXIT:                                                  * 
*                                                         * 
*  WORK REGISTERS:  A1,A2,A3                              * 
*                                                         * 
*  SUBROUTINES:  ERROR                                    * 
*                                                         * 
*********************************************************** 
FRDSEC	EQU	*
	LDR	A1,A11	GET SECTOR NUMBER 
	SLL	A1,4 
	ORKL	A1,/4000
	LDKL	A2,MUXCC	LOAD 1:ST MUX WORD 
	LD	A3,MXBUF	LOAD 2:ND MUX WORD 
	WER	A2,FDIOP	WRITE 1:ST MUX WORD 
	WER	A3,FDIOP+1	WRITE 2:ND MUX WORD 
	LDR	A2,A3	BUFFER START ADDRESS 
	AD	A2,SAVCON	BUFFER END ADDRESS
FRD:10	CIO	A1,1,FDCU	START READ 
	RB(NA)	FRD:10	LOOP UNTIL ACCEPTED
FRD:20	INR	A1,0,FDCU	GET CHAR - MODIFIED IF MUX 
	RF(NA)	FRD:40	LOOP UNTIL ACCEPTED
	STR	A1,A3	STORE CHARACTER
	ADK	A3,2	INCREMENT BUFFER POINTER
	CWR	A3,A2
	RB(NE)	FRD:20
* 
FRD:25	CIO	A1,0,FDCU	STOP READ
	RB	FRD:20
FRD:40	SST	A1,FDCU	SENSE STATUS 
	RB(NA)	FRD:20	LOOP UNTIL ACCEPTED
	ANKL	A1,/4E15	FATAL ERROR? 
	RF(NZ)	FRD:50	YES! 
	ADKL	A11,1	INCREMENT SECTOR ADDRESS
	RF(NN)	FRD:45
	LDKL	A11,0	RESET LEAST SIGN. PART OF D.A.
	ADKL	A12,1	INCREMENT MOST SIGNIFICANT PART OF D.A. 
	RF(O)	FRD:50	DISC ADDRESS ERROR! 
FRD:45	EQU	*
	RTN	A14
FRD:50	LDKL	A1,LMP2 
	CALL	ERROR 
	XIF
	EJECT
*************************************************** 
*                                                 * 
*        GETFIL - GET CONFIGURATION FILE          * 
*        ===============================          * 
*                                                 * 
*  REFERENCED IN:  SYSLOD                         * 
*                                                 * 
*  ENTRY:  A9 - BUFFER ADDRESS                    * 
*                                                 * 
*  EXIT:  A11 - SECTOR ADDRESS TO CONF. FILE      * 
*                                                 * 
*  WORK REGISTERS:  A1,A2,A3,A4,A5,A6,A7,A8,A10  *
*                                                 * 
*  SUBROUTINES:  READVL,READCF                    * 
*                                                 * 
*************************************************** 
GETFIL	EQU	*
	LDKL	A11,0	VOLUME LABEL
	CF	A14,READVL	GET VOLUME LABEL 
READVL	EQU	*-2
	LD	A10,10,A9	GET VTOC BASE 
	LDR	A11,A10	SAVE 
	AD	A10,6,A9	LAST VTOC SECTOR 
	LD	A8,12,A9	GET VTOC RECORD LENGTH 
	ADKL	A11,1	FIRST FILE SECTOR IN VTOC 
GET:10	EQU	*
	CF	A14,READCF	READ SECTOR
READCF	EQU	*-2
	LDK	A7,QBLFAC	BLOCKING FACTOR
	LDR	A6,A9	GET START OF BUFFER
GET:20	EQU	*
	LDK	A5,/20	LOAD SPACE
	CCR	A5,A6	UNUSED FILE? 
	RF(E)	GET:50	YES!
	LDR	A4,A6	START OF RECORD
	LDK	A5,'S'	STANDARD FILE CHARACTER 
	CC	A5,27,A6	STANDARD FILE? 
	RF(NE)	GET:50	NO!
	LDK	A5,'$'	LEADING CHAR IN CONF. FILE
	CCR	A5,A4	CONFIGURATION FILE?
	RF(NE)	GET:50	NO!
GET:25	LDK	A3,'C'	THIS INSTRUCTION IS MODIFIED
	CCK	A3,'CC'	LOOKING FOR CONF. FILE?
	RF(NE)	GET:85	NO!
	ADK	A4,5	SIXTH CHARACTER 
	LDK	A5,':'	CHARACTER TO PRECEED NUMBER 
GET:30	CCR	A5,A4	CONFIGURATION FILE?
	RF(E)	GET:40	YES!
	SUK	A4,1	TRY NEXT CHARACTER
	CWR	A4,A6	FIRST IN NAME? 
	RF(E)	GET:50	YES!
	RB	GET:30
GET:40	EQU	*
* 
*  CHECK APPLICATION NUMBER 
* 
	LC	A5,1,A4	GET LEFT DIGIT
	SLL	A5,8	SHIFT TO LEFT BYTE
	LC	A5,2,A4	GET RIGHT DIGIT 
	CALL	CONVRT	CONVERT TO BINARY
	CW	A1,SCTANO	SAME AS APPLICATION NUMBER
	RF(NE)	GET:50
* 
*  CONFIGURATION FILE FOUND 
* 
	LD	A1,22,A6	LAST RECORD NUMBER 
	ST	A1,SAVE20,A13	SAVE
	LD	A11,18,A6	SECTOR ADDRESS
	RTN	A14
GET:50	EQU	*
	ADR	A6,A8	NEXT VTOC RECORD 
	ADK	A6,1	BYPASS STATUS CHARACTER 
	SUK	A7,1	MOORE RECORDS IN THIS SECTOR? 
	RB(P)	GET:20	YES!
	CWR	A11,A10	LAST VTOC SECTOR?
	RB(NE)	GET:10	NO!
GET:60	LDK	A3,'C'	THIS INSTRUCTION IS MODIFIED
	CCK	A3,'CC'	LOOKING FOR CONF. FILE?
	RF(NE)	GET:99	NO!
* 
*  CONFIGURATION FILE NOT FOUND - READ SOP AND SELECT 
*  LOAD MEDIUM FOR CONFIGURATION FILE 
* 
	LDK	A2,/78 
	OTR	A2,0,SOP	SWITCH ON SOP LAMPS 
GET:70	EQU	*
	CF	A14,SOPIN 
	ANKL	A1,/003C	ALLOWED SWITCH 
	RB(Z)	GET:70	NO! 
	LDKL	A2,LMP1 
	OTR	A2,0,SOP	SWITCH ON LOAD LAMP 
	SRN	A1,A2
	LD	A1,DEVTAB,A2	GET DEVICE ADDRESS 
	CWK	A2,5	DISC? 
	RF(G)	GET:80	YES!
	IFT	FLDISC=1 
	CF	A14,FDINIT	INIT FLEXIBLE DISC 
	RB	GETFIL
	XIF
	IFF	FLDISC=1 
	LDKL	A1,LMP9 
	CALL	ERROR	ILLEGAL MONITOR OPTION
	XIF
GET:80	EQU	*
	IFT	DISC=1 
	CF	A14,DUINIT	INIT DISC
	RB	GETFIL
	XIF
	IFF	DISC=1 
	LDKL	A1,LMP9 
	CALL	ERROR	ILLEGAL MONITOR OPTION
	XIF
GET:85	EQU	*
	CCK	A3,'SS'	LOOKING FOR $SWAPP?
	RF(NE)	GET:99	NO!
	LDK	A5,0	RESET CHARACTER COUNTER 
GET:90	LCR	A1,A4	GET CHAR IN FILENAME 
	CC	A1,SWPTAB,A5	CHECK IF PRESCIBED CHAR. 
	RB(NE)	GET:50	NO!
	ADK	A4,1	NEXT CHARACTER
	ADK	A5,1	INCREMENT CHARACTER COUNTER 
	CWK	A5,8	ALL CHARACTERS CHECKED? 
	RB(NE)	GET:90	NO!
* 
*  SWAPPABLE WORK BLOCK FILE FOUND - SAVE DISC ADDRESS
*  TO FILE AND TO NEXT SECTOR AFTER FILE
* 
	IM	SCTSWB	INDICATE SWB-FILE FOUND
	LD	A1,18,A6	GET BIT 16-31 OF D.A.
	LD	A2,16,A6	GET BIT 0-15 OF D.A. 
	ST	A1,SAVE25,A13	SAVE
	ST	A2,SAVE26,A13	SAVE
	LD	A3,SWPFEL,A6	GET BIT 16-31 OF LENGTH
	LD	A4,SWPFEL-2,A6	GET BIT 0-15 OF LENGTH 
	ADR	A4,A2	ADD MOST SIGNIFICANT PART
	ADR	A3,A1	ADD LEAST SIGNIFICANT PART 
	RF(O)	GET:92	OVERFLOW - ADD CARRY
	RF	GET:98
GET:92	ADK	A4,1	ADD CARRY 
	ANKL	A3,/7FFF	RESET OVERFLOW 
GET:98	ST	A3,SAVE27,A13	SAVE BIT 16-31 OF D.A.
	ST	A4,SAVE28,A13	SAVE BIT 0-15 OF D.A. 
GET:99	RTN	A14
	EJECT
***************************************************** 
*                                                   * 
*  LODCOM - LOAD CORE RESIDENT PART OF APPLICATION  * 
*  ===============================================  * 
*                                                   * 
*  LODSEG - LOAD ONE SEGMENT                        * 
*  =========================                        * 
*                                                   * 
*  ENTRY:  A8 - RELOCATION BASE                     * 
*         A10 - EFFECTIVE LENGTH                    * 
*                                                   * 
*  EXIT:                                            * 
*                                                   * 
*  WORK REGISTERS:  A1,A2,A3,A4,A7                  * 
*                                                   * 
*  SUBROUTINES:  MOVE,READ                          * 
*                                                   * 
***************************************************** 
LODCOM	EQU	*
	LDR	A3,A9	GET SAVE09 OF BUFFER 
	LDR	A2,A3	SAVE 
	LDKL	A7,240	NUMBER OF CODE WORDS 
LOD:10	EQU	*-2
	LDR	A10,A10	APP >32 KB?
	RF(NN)	LOD:20	NO!
	SUR	A10,A7	DEC. LENGTH 
	RF	LOD:50
LOD:20	EQU	*
	SUR	A10,A7	CHECK IF IN END OF OF SEGMENT 
	RF(NN)	LOD:50	NO YET!
	CWK	A7,256	128 WORDS/SECTOR? 
	RF(NE)	LOD:30	NO!
	ADR	A7,A10	COMPUTE NUMBER OF CODE WORDS
	LDKL	A10,0	INDICATE END OF SEGMENT 
	RF	LOD:52
LOD:30	EQU	*
	ADR	A7,A10	JUST MOVE SIGNIFICANT CHARACTERS! 
	LDKL	A10,0	INDICATE END OF SEGMENT 
LOD:50	EQU	*
	CWK	A7,256	128 WORDS/SECTOR? 
	RF(E)	LOD:52	YES!
	ADR	A2,A7	START OF RELOCATION BITS 
	CF	A14,REBUF	RELOCATE
LOD:52	EQU	*
	LDR	A1,A9	START OF CODE PART 
	LD	A4,SAVE12,A13	FIRST SECTOR/BLOCK? 
	RF(NZ)	LOD:55	NO!
	IM	SAVE12,A13	INDICATE NOT FIRST SECTOR/BLOCK
	ADK	A1,8	SKIP 4 WORDS IN FIRST SECTOR/BLOCK
	SUK	A7,8	DECREMENT NUMBER OF CHAR. TO MOVE 
	LD	A3,COMLG,A9	GET LENGTH
	SUK	A3,240	LENGTH=240? 
	RF(Z)	LOD:54	YES!
	ADKL	A10,0	SINGLE SECTOR/BLOCK APPLICATION?
	RF(Z)	LOD:55	YES!
LOD:54	ADKL	A10,8 
LOD:55	EQU	*
	LDR	A3,A7	NUMBER OF CHARACTERS TO MOVE 
	LD	A2,SAVE07,A13	GET TO-ADDRESS
	ADS	A3,SAVE07,A13	UPDATE MEMORY ADDRESS
	LD	A4,SCTOPT	GET OPTION WORD 
	ANK	A4,1	MMU IN SYSTEM?
	RF(Z)	LOD:60	NO! 
	MVSU	A3	MOVE TABLE FROM SYSTEM 
	RF	LOD:65
LOD:60	EQU	*
	CALL	MOVE
LOD:65	EQU	*
	LDR	A10,A10	END OF SEGMENT?
	RF(NZ)	LOD:70
	RTN	A14	EXIT 
LODSEG	EQU	*
	LDKL	A1,256	NUMBER OF WORDS/SECTOR 
	ST	A1,LOD:10	MODIFY INSTRUCTION
LOD:70	EQU	*
	CF	A14,READ
READ	EQU	*-2
	RB	LODCOM
	EJECT
************************************************* 
*                                               * 
*        REBUF - RELOCATE BUFFER ROUTINE        * 
*        ===============================        * 
*                                               * 
*  REFERENCED IN:  LODCOM/LODSEG                * 
*                                               * 
*  ENTRY:  A3 - SAVE09 OF BUFFER                 *
*          A2 - SAVE09 OF RELOCATION TABLE       *
*                                               * 
*  EXIT:                                        * 
*                                               * 
*  WORK REGISTERS:  A1,A4,A5,A6                 * 
*                                               * 
*  SUBROUTINES:                                 * 
*                                               * 
************************************************* 
REBUF	EQU	* 
	LDR	A4,A2	GET SAVE09 OPF RELOCATION TABLE
	SUK	A4,2 
REB:10	EQU	*
	ADK	A4,2	NEXT RELOCATION WORD
	LDK	A6,16	NUMBER OF RELOCATION BITS
	LDR*	A1,A4	GET RELOCATION WORD 
REB:20	EQU	*
	RF(NN)	REB:30	DON'T RELOCATE THIS WORD!
	LDR*	A5,A3	GET CODE WORD 
	ADR	A5,A8	RELOCATE 
	STR	A5,A3	STORE IT BACK
REB:30	EQU	*
	ADK	A3,2	NEXT CODE WORD
	CWR	A3,A2	END OF CODE WORD PART? 
	RF(E)	EXREL	YES! 
	SUK	A6,1	MOORE RELOCATION BITS?
	RB(Z)	REB:10	NO! 
	SLL	A1,1	NEXT RELOCATION BIT 
	RB	REB:20
EXREL	EQU	* 
	RTN	A14
	EJECT
***************************************** 
*  GETCON - GET CONTENT IN MEMORY WORD  * 
***************************************** 
* 
*  REFERENCED IN:  SEGGEN 
* 
*  ENTRY:  A2 - MEMORY ADDRESS
*          MMUOPT - MMU OPTION SWITCH (X) 
* 
*  EXIT:  A1 - CONTENT OF MEMORY ADDRESS
* 
*  WORK REGISTER: 
* 
*  SUBROUTINES: 
* 
GETCON	EQU	*
	LD	A1,SCTOPT	GET OPTION WORD 
	ANK	A1,1	MMU OPTION
	RF(Z)	GCON10	NO MMU
	ELR	A1,A2
	RF	GCON20
GCON10	EQU	*
	LDR*	A1,A2 
GCON20	EQU	*
	RTN	A14	RETURN 
	END	SYSLOD 

Full view