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

⟦b4c52e377⟧

    Length: 55458 (0xd8a2)
    Notes: pts_type(SC)
    Names: »SYSLOD.SC«

Derivation

└─⟦110b7ed5e⟧ Bits:30009664 Philips computer tape "600106"
    └─⟦this⟧ »TOSSWORK/SYSLOD.SC« 
└─⟦1fa4b7c7b⟧ Bits:30009694 Philips computer tape "600410A"
    └─⟦this⟧ »MODMON/SYSLOD.SC« 
└─⟦38a30a456⟧ Bits:30009662 Philips computer tape "600104"
    └─⟦this⟧ »M:92OD/SYSLOD.SC« 
└─⟦470bcbfc6⟧ Bits:30009709 Philips computer tape "M_92LP"
    └─⟦this⟧ »M:92LP/SYSLOD.SC« 
└─⟦726a6c4ca⟧ Bits:30009685 Philips computer tape "600309"
    └─⟦this⟧ »M:PTB/SYSLOD.SC« 
└─⟦dab19bdd7⟧ Bits:30009677 Philips computer tape "600218"
    └─⟦this⟧ »M:261/SYSLOD.SC« 

PTS(SC)

	IDENT SYSLOD 	REL 9.2 79-12-19  870105040920 

			=1,LRN ONE SECTOR TOO GREAT
			REL 9.2 79-12-19 ST

	ENTRY	SYSLOD 
	ENTRY	SYSBAS 
	ENTRY	NUMSEG 
	ENTRY	PRGLG1 
*************************** 
*                         * 
*  ENTRIES AND EXTERNALS  * 
*                         * 
*************************** 
	EXTRN	CONVRT 
	EXTRN	LDALEN 
	EXTRN	FREQUE 
	EXTRN	INTLT1 
	EXTRN	PAGQUE 
	EXTRN	REL
	EXTRN	SCLASS 
	EXTRN	SCTADA 
	EXTRN	SCTANO 
	EXTRN	SCTBLK 
	EXTRN	SCTBUG 
	EXTRN	SCTCDT 
	EXTRN	SCTDCT 
	EXTRN	SCTDMC 
	EXTRN	SCTDMI 
	EXTRN	SCTDML 
	EXTRN	SCTDMT 
	EXTRN	SCTEFA 
	EXTRN	SCTLAC 
	EXTRN	SCTLAP 
	EXTRN	SCTMMC 
	EXTRN	SCTMMP 
	EXTRN	SCTMSZ 
	EXTRN	SCTNOS 
	EXTRN	SCTNOP 
	EXTRN	SCTNPE 
	EXTRN	SCTOPT 
	EXTRN	SCTPAG 
	EXTRN	SCTPLD 
	EXTRN	SCTPSZ 
	EXTRN	SCTSEG 
	EXTRN	SCTSFA 
	EXTRN	SCTSWB 
	EXTRN	SCTTTT 
	EXTRN	TCLASS 
	EXTRN	TTMJOB 
	EJECT
	EXTRN	M:REL	RELOCATION CONSTANT
	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	SAVE20 
	EXTRN	SAVE22 
	EXTRN	SAVE25 
	EXTRN	ERROR
	EXTRN	MMDDIV 
	EXTRN	TABBE
	EXTRN	MMEND
	EXTRN	MOVE 


* 
*	CONDITIONAL ASSEMBLY
*	TEST=1 GIVES TEST VERSION 
* 
TEST	EQU	0
	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	402	DISC/FLEXIBLE DISC BUFFER LENGTH 
RECLEN	EQU	9	CONFIGURATION FILE RECORD LENGTH 
FDCU	EQU	/09	FLEXIBLE DISC CU ADDRESS 
FDIOP	EQU	FDCU+FDCU	MUX ADDRESS 
MUXCC	EQU	/80CD	1:ST MUX WORD 
QBLFAC	EQU	9	BLOCKING FACTOR
* 
*  DATA AREA DEFINITION 
* 
SYSBAS	EQU	*
MXBUF	DATA	0	DISC/FLEXIBLE DISC BUFFER ADDRESS
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
******************************************************
*                                                    *
*          APPLICATION LOAD PART OF SYSLOD           *
*          ===============================           *
*                                                    *
*  ENTRY:  A1 - APPLICATION DISC ADDRESS             *
*          A2 - PROGRAM LOAD DEVICE                  *
*          A3 - APPLICATION NUMBER                   *
*          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,SCTADA	SAVE APPLICATION DISC ADDRESS 
	ST	A2,SCTPLD	SAVE PROGRAM LOAD DEVICE
	ST	A3,SCTANO	APPLICATION NUMBER
	ST	A9,SCTSFA	SAVE SAVE09 OF FREE AREA
	IFT	TEST=1 
	LDKL	A14,SYSBAS
	LDR	A13,P
	ADKL	A13,10
	LD	A1,SCTBUG 
	ABR(NZ)	A1 
	XIF
	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 
* 
*  GET APPLICATION DISC ADDRESS 
* 
	LD	A11,SCTADA
* 
*  INIT POINTER TO READ BUFFER. INIT DEVICE ADDRESS FOR READ-ROUTINE
	LD	A9,SCTSFA	POINTER TO READ BUFFER
	LDR	A3,A9	SAVE 
	LD	A2,SCTPLD	GET PROGRAM LOAD DEVICE 
	LDR	A1,A2	SAVE 
* 
*  CHECK PROGRAM LOAD MEDIUM
* 
	ANK	A2,/C0	CHECK IF CASSETTE 
	RF(P)	AP:210	YES!
	ADKL	A3,BUFLEN+8	NEW START OF FREE AREA
	ST	A3,SCTSFA 
	ST	A9,MXBUF	FLEXIBLE DISC/DISC BUFFER ADDRESS
	ADKL	A9,2	SKIP CYLINDER ID 
	LDR	A2,A1	GET PROGRAM LOAD DEVICE
	SRC	A2,1	CHECK BIT 15
	RF(N)	AP:220	FLEXIBLE DISC 
	RF	AP:230	DISC 
AP:210	EQU	*
* 
*  PROGRAM LOAD DEVICE = CASSETTE 
* 
	ADKL	A3,CBLEN	NEW START OF FREE AREA 
	ST	A3,SCTSFA	SAVE
	LDKL	A1,RDBLK	GET SUBROUTINE ADDRESS 
	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
	EJECT
AP:220	EQU	*
* 
*  PROGRAM LOAD DEVICE = FLEXIBLE DISC
* 
* 
*  MODIFY SCTPLD: /F8 - DRIVE 1, /F9 - DRIVE 2
* 
	ANK	A2,8 
	SRL	A2,3 
	ORK 	A2,/F8
	ST	A2,SCTPLD 
* 
*  INIT FLEXIBLE DISC 
* 
	CF	A14,FDINIT
* 
*  READ FIRST SECTOR FROM FLEXIBLE DISC 
* 
	CF	A14,FRDSEC
	RF	AP:235
	EJECT
AP:230	EQU	*
* 
*  PROGRAM LOAD DEVICE = DISC 
* 
* 
*  MODIFY SCTPLD: /F0 - CARTRIDGE DISC, /F1 - FIX DISC
* 
	ANK	A2,/10 
	SRL	A2,4 
	XRK	A2,1 
	ORK	A2,/F0 
	ST	A2,SCTPLD 
* 
*  INITIALIZE DISC COMMANDS 
* 
	CF	A14,DUINIT
* 
*  READ FIRST SECTOR FROM DISC
* 
	CF	A14,RDSEC 
	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,2,A9	GET TOTAL NUMBER OF SECTORS 
	AD*	A6,SCTADA
	ST	A6,SAVE11,A13	SAVE LAST SECTOR NUMBER 
	LD	A6,COMLG,A9	GET LENGTH OF COMMON PART 
	ST	A6,SAVE04,A13	SAVE
	LD	A3,PRGLG1+8,A9	GET PROGRAM TYPE 
	CWK	A3,'CR'	CREDIT APPLICATION?
	RF(NE)	AP2350	NO!
	LD	A3,PAGLG+8,A9	PHYSICAL PAGE SIZE
	ST	A3,SCTPSZ	SAVE
AP2350	LD	A5,SCTMSZ	GET NUMBER OF PHYSICAL PAGES
	LD	A1,SCTOPT	GET OPTION WORD 
	ANK	A1,1	MMU IN SYSTEM?
	RF(Z)	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 4K-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 CREDIT APPLICATION
* 
	LD	A2,PRGLG1+8,A9
	CWK	A2,'CR'
	ABL(NE)	AP:330	NOT CREDIT! 
	LD	A2,NUMSEG+8,A9	NUMBER OF RESIDENT SEGMENTS
	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 CREDIT APPLICATION
* 
	LD	A2,PRGLG1+8,A9
	CWK	A2,'CR'
	RF(NE)	AP:275	NOT CREDIT 
	LD	A2,NUMSEG+8,A9	NUMBER OF SEGMENTS 
	RF(Z)	AP:275	NO SEGMENTS!
	EJECT
AP:245	EQU	*
* 
*  COMMON EXECUTION PATH
* 
	ST	A2,SCTNOS	SAVE NUMBER OF SEGMENTS 
	LD	A4,SCTOPT	GET OPTION WORD 
	ANK	A4,2	DISC PAGING?
	RF(Z)	AP:260	NO! 
	LD	A4,SCTPLD	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	*
	ADK	A6,6	NEXT SEGMENT BLOCK
	LDR*	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	*
	SUK	A2,1	MOORE SEGMENTS? 
	RB(NZ)	AP:250	YES! 
	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
AP:265	EQU	*
	SUR	A5,A3	DECREMENT PHYSICAL MEMORY ADDRESS
	SUK	A2,1	DECREMENT NUMBER OF PAGES 
	RB(P)	AP:265 
	ST	A5,SAVE22,A13	SAVE PHYS.ADDRESS TO FIRST SEGMENT
AP:270	EQU	*
	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	*
	LDR	A8,A5
	LD	A10,COMLG,A9	GET LENGTH OF COMMON PART
	ADKL	A10,3	RESERV ONE EXTRA WORD 
	ANKL	A10,/FFFE 
	SUR	A8,A10	COMPUTE LOAD-ADDRESS
	LD	A1,SCTSFA	GET START OF FREE AREA
	TNM	A1,A8
	RF(NN)	AP:280
	CWR	A1,A8
	RF	AP:285
AP:280	CWR	A8,A1
AP:285	RF(G)	AP:290 
	LDKL	A1,LMP3 
	CALL	ERROR	MEMORY OVERFLOW!
AP:290	EQU	*
	ST	A8,SAVE07,A13	SAVE APPLLICATION LOAD-ADDRESS
	ST	A8,SAVE01,A13	SAVE APPLICATION LOAD-ADDRESS 
	LDR	A12,A8	RELOCATION BASE 
	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 
* 
*  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 
	SUK	A2,17	INDEX RELATIVE TTAB ENTRY
	ADR	A2,A2	BYTE DISPLACEMENT
	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	*
	SUK	A1,1	DECREMENT PAGE POINTER
	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
	SUKL	A8,17 
	ADR	A8,A8	BYTE DISPLACEMENT
	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	A12,A8	LOAD RELOCATION BASE
	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 
*  A12 - RELOCATION BASE
* 
AP:355	EQU	*
	LD	A1,SCTEFA	GET END OF FREE AREA
	SUK	A1,1	MODIFY
	ST	A1,SCTEFA	STORE 
	ST	A8,SCTLAC 
	CF	A14,LODCOM	LOAD CORE RESIDENT PART
	LD	A8,SAVE08,A13	GET LOGICAL ADDRESS TO FIRST PAGE 
* 
*  CHECK IF CREDIT APPLICATION
* 
	LD	A2,SCTLAC	START OF APPLICATION
	ADKL	A2,PRGLG1	SECOND WORD IN SEGMENTT TABLE 
	CALL	GETCON	GET CONTENT
	CWK	A1,'CR'	CREDIT?
	RF(NE)	CONLOD	NOT CREDIT!
	LD	A1,SCTNOS	NUMBER OF SEGMENTS
	RF(Z)	CONLOD	NO SEGMENTS!
	SUR	A12,A12	 RELOCATION BASE = ZERO FOR SEGMENTS 
	LD	A1,SCTOPT	GET OPTION WORD 
	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 
*  A12 - RELOCATION BASE
* 
	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 
	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,SCTNOS	GET TOTAL NUMBER OF SEGMENTS
	ADK	A1,1	INCREMENT 
	CWR	A1,A2	LAST SEGMENT?
	RF(E)	CONLOD	YES!
	ST	A1,SAVE06,A13	SAVE CURRENT SEGMENT NUMBER 
	RB	AP:360
	EJECT
AP:376	EQU	*
	ADK	A2,2	DISC SECTOR ADDRESS 
	CALL	GETCON	GET DISC SECTOR ADDRESS
	LDR	A11,A1	SAVE
	AD	A11,SCTADA	ADD START ADDRESS #79-01-03
AP:378	EQU	*
	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,SCTNOS	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,SCTPLD	GET PROGRAM LOAD DEVICE 
	SUK	A1,/F0	CHECK DEVICE TYPE 
	RF(NN)	CONRAD	NOT CASSETTE 
* 
*  PROGRAM LOAD DEVICE = CASSETTE 
* 
CON:30	EQU	*
	LDR	A1,A9	START OF BUFFER
	ADKL	A1,CBLEN
	ST	A1,SAVE03,A13	SAVE POINTER TO END OF BUFFER 
	ST	A1,SAVE08,A13 
	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
MEMOFL	EQU	*
	LDKL	A1,LMP3	INDICATE MEMORY OVERFLOW
	CALL	ERROR 
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 
	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-2	END OF BUFFER 
	ST	A1,SAVE08,A13	SAVE END OF BUFFER
	ADK	A1,8	START OF SAVE BUFFER	=2 
	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 RECORD 
	RB	COR:20	NEXT SECTOR
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,SCTPLD	GET LOAD DEVICE 
	SUK	A1,/F8	CHECK TYPE
	RF(N)	COR:60	NOT FLEXIBLE DISC 
	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 
COR:60	EQU	*
	EJECT
CONMOV	EQU	*
* 
*  MOVE CONFIGURATION DATA TO END OF SYSTEM AREA
* 
	LD	A1,SAVE08,A13	GET SAVE09 OF CONFIGURATION DATA
	LD	A3,SCTPLD	GET PROGRAM LOAD DEVICE 
	SUK	A3,/F0	CASSETTE? 
	RF(N)	CMOV10	YES!
	ADK	A1,8	START OF SAVE 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
************************************************************************
*  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
	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
	EJECT
*********************************** 
*                                 * 
*  DUINIT - INITIALIZE DISC UNIT  * 
*  =============================  * 
*                                 * 
*  REFERENCED IN: SYSLOD,GETFIL   * 
*                                 * 
*  ENTRY: A1 - DEVICE ADDRESS     * 
*                                 * 
*  EXIT:                          * 
*                                 * 
*  WORK REGISTERS: A2             * 
*                                 * 
*  SUBROUTINES:                   * 
*                                 * 
*********************************** 
DUINIT	EQU	*
* 
*  INIT SUBROUTINE ADDRESSES
* 
	LDKL	A2,RDSEC	GET SUBROUTINE ADDRESS 
	ST	A2,READ	READ PROGRAM
	ST	A2,READS	READ CONFIGURATION DATA
	ST	A2,READVL	READ VOLUME LABEL 
	ST	A2,READCF	READ CONFIGURATION DATA 
* 
*  INIT DISC COMMANDS 
* 
	ADS	A1,RDS:10
	ADS	A1,RDS:20
	ADS	A1,RDS:60
	ADS	A1,RDS:70
	RTN	A14
	EJECT
*********************************************** 
*                                             * 
*  RDSEC - READ ONE SECTOR FROM DISC          * 
*  =================================          * 
*                                             * 
*  REFERENCED IN: SYSLOD                      * 
*                                             * 
*  ENTRY:  A9 - BUFFER ADDRESS + 2            * 
*                                             * 
*         A11 - SECTOR NUMBER                 * 
*                                             * 
*  EXIT:                                      * 
*                                             * 
*   WORK REGISTERS:  A1,A2                    * 
*                                             * 
*  SUBROUTINES:  ERROR                        * 
*                                             * 
*********************************************** 
RDSEC	EQU	* 
* 
*  DERIVE CYLINDER NUMBER FROM SECTOR NUMBER
* 
	LDR	A1,A11	GET SECTOR NUMBER 
	SRL	A1,5	CYLINDER NUMBER IN BITS 4-12
	SLL	A1,3 
	ORK	A1,2	SET BIT 14
* 
*  SEEK CYLINDER
* 
RDS:10	CIO	A1,1,0	SEEK COMMAND
	RB(NA)	*-2	LOOP UNTIL ACCEPTED 
* 
*  CHECK STATUS 
* 
RDS:20	SST	A1,0	SENSE STATUS
	RB(NA)	RDS:20	LOOP UNTIL ACCEPTED
* 
*  COMPUTE PHYSICAL SECTOR NUMBER 
* 
RDS:30	LDR	A2,A11	GET SECTOR NUMBER 
	ANK	A2,/10	GET BIT 11
	LDR	A1,A11	GET SECTOR NUMBER 
	SLL	A1,1 
	ADR	A1,A11 
	ANK	A1,/F
	ADR	A1,A2
	SLL	A1,2 
* 
*  INIT MUX WORDS 
* 
	LDKL	A2,MUXCC	LOAD FIRST MUX WORD
RDS:40	WER	A2,/10	WRITE 
	LD	A2,MXBUF	LOAD SECOND MUX WORD 
RDS:50	WER	A2,/10+1	WRITE 
RDS:60	CIO	A1,1,0	READ SECTOR 
	RB(NA)	RDS:60	LOOP UNTIL ACCEPTED
RDS:70	SST	A1,0	GET STATUS
	RB(NA)	RDS:70	LOOP UNTIL ACCEPTED
	ANK	A1,/1F	GET 5 RIGHTMOST BITS
	RB(NZ)	RDS:30	LOOP UNTIL CORRECT READ
	ADKL	A11,1	INCREMENT SECTOR COUNTER
	RTN	A14
	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,/0511	NOT PROGRAMMED CHANNEL 
	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,5 
	ORKL	A1,/C000
	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 
	ADKL	A3,BUFLEN	BUFFER END
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,A2	STORE CHARACTER
	ADK	A2,2	INCREMENT BUFFER POINTER
	CWR	A2,A3	END OF BUFFER? 
	RB(NE)	FRD:20	NO!
FRD:30	CIO	A1,0,FDCU	STOP READING 
	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
	RTN	A14
FRD:50	LDKL	A1,LMP2 
	CALL	ERROR 
	EJECT
*************************************************** 
*                                                 * 
*        GETFIL - GET CONFIGURATION FILE          * 
*        ===============================          * 
*                                                 * 
*  REFERENCED IN:  SYSLOD                         * 
*                                                 * 
*  ENTRY:  A9 - BUFFER ADDRESS + 2                * 
*                                                 * 
*  EXIT:  A11 - SECTOR ADDRESS TO CONF. FILE      * 
*                                                 * 
*  WORK REGISTERS:  A1,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 
* 
	LDKL	A2,/01F8
	OTR	A2,0,SOP	SWITCH ON SOP LAMPS 
GET:70	EQU	*
	CF	A14,SOPIN 
	ANKL	A1,/00FC	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!
	CF	A14,FDINIT	INIT FLEXIBLE DISC 
	RB	GETFIL
GET:80	EQU	*
	CF	A14,DUINIT	INIT DISC
	RB	GETFIL
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 SECTOR ADDRESS ON DISC
* 
	LD	A1,18,A6	GET FILE EXTENT BASE 
	ST	A1,SCTSWB	SAVE IN SYSTAB
	LD	A3,SWPFEL,A6	GET LENGTH IN SECTORS
	ADR	A3,A1	LAST SECTOR IN SWAPP-FILE
	ST	A3,SAVE25,A13	SAVE
GET:99	RTN	A14
	EJECT
***************************************************** 
*                                                   * 
*  LODCOM - LOAD CORE RESIDENT PART OF APPLICATION  * 
*  ===============================================  * 
*                                                   * 
*  LODSEG - LOAD ONE SEGMENT                        * 
*  =========================                        * 
*                                                   * 
*  ENTRY:  A8 - SEGMENT ADDRESS                     * 
*         A10 - EFFECTIVE LENGTH                    * 
*         A12 - RELOCATION BASE                     * 
*                                                   * 
*  EXIT:                                            * 
*                                                   * 
*  WORK REGISTERS:  A1,A2,A3,A4,A7                  * 
*                                                   * 
*  SUBROUTINES:  MOVE,READ                          * 
*                                                   * 
***************************************************** 
LODCOM	EQU	*
	LDR	A3,A9	GET SAVE09 OF BUFFER 
	LDR	A2,A3	SAVE 
	LD	A7,SCTPLD	GET PROGRAM LOAD DEVICE 
	ANK	A7,/FE	SKIP UNIT SELECTOR BIT
	SUK	A7,/F0	CASSTTE?
	RF(N)	LOD:20	YES!
	LDKL	A7,376	NUMBER OF CODE WORDS 
LOD:10	EQU	*-2
	RF	LOD:30
LOD:20	EQU	*
	LDKL	A7,240	NUMBER OF CODE WORDS 
LOD:30	EQU	*
	LDR	A10,A10	APP >32 KB?
	RF(NN)	LOD:40	NO!
	SUR	A10,A7	DEC. LENGTH 
	RF	LOD:50
LOD:40	EQU	*
	SUR	A10,A7	CHECK IF IN END OF OF SEGMENT 
	RF(NN)	LOD:50	NO YET!
	CWK	A7,240	CASSETTE? 
	RF(E)	LOD:45	YES!
	CWK	A7,400	200 WORDS/SECTOR? 
	RF(E)	LOD:42	YES!
	ADR	A2,A7	START OF RELOCATION TABLE
	CF	A14,REBUF	RELOCATE CODE 
LOD:42	EQU	*
	ADR	A7,A10	COMPUTE NUMBER OF CODE WORDS
	LDKL	A10,0	INDICATE END OF SEGMENT 
	RF	LOD:52
LOD:45	EQU	*
	ADR	A7,A10	JUST MOVE SIGNIFICANT CHARACTERS! 
	LDKL	A10,0	INDICATE END OF SEGMENT 
LOD:50	EQU	*
	CWK	A7,400	200 WORDS/SECTOR? 
	RF(E)	LOD:52	YES!
	ADR	A2,A7	START OF RELOCATION BITS 
	CWK	A7,240	APPLICATION<ONE CASSETTE BLOCK? 
	RF(NL)	LOD:51	NO 
	LD	A4,SAVE12,A13	FIRST CASSETTE BLOCK
	RF(NZ)	LOD:51	NO 
	ADK	A2,8	START OF RELOCATION BITS
LOD:51	EQU	*
	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
	CWK	A10,0	COMMON PART <= ONE SECTOR/BLOCK? 
	RF(E)	LOD:55	YES 
	SUK	A7,8	DECR. NUMBER OF CHAR. TO MOVE 
	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,400	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,A12	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