File: MOD43.PA of Tape: Various/System-Tapes/s5
(Source file text) 

/OS/8 NON-SYSTEM HANDLER FOR MOD 43

	/SYSTEM INDUSTRIES, INC.
	/535 DEL REY AVENUE
	/SUNNYVALE, CALIFORNIA  94086

/THIS HANDLER WILL SUPPORT TWO
/SERIES 43 DISK DRIVE ON PORT 0 & 1
/OF A 3040 DISK CONTROLLER
/DSK0, 1, 4, AND 5 RESIDE ON THE
/FIXED PLATTERS
/DSK2, 3, 6, AND 7 ARE ON THE
/REMOVABLE PLATTERS
/RAL 6/74

DCODE=50			/CONTROLLER DEVICE CODE

DSDD=10^DCODE+6001
DLCR=10^DCODE+6002
DCSR=10^DCODE+6004
DSDE=10^DCODE+6011
DLSR=10^DCODE+6012
DSRR=10^DCODE+6013
DLTR=10^DCODE+6014
DWCA=10^DCODE+6017

DOFF=146
UNIT0=0
UNIT1=1
PLATTER=2000

TEMP=DKTR1

BSW=7002
/HEADER BLOCK
*0
-10				/10 (8) DEVICES

DEVICE SIDK;	DEVICE DSK0;	4410;	DK0+0-200;	ZBLOCK 2
DEVICE SIDK;	DEVICE DSK1;	4410;	DK0+1-200;	ZBLOCK 2
DEVICE SIDK;	DEVICE DSK2;	4410;	DK0+2-200;	ZBLOCK 2
DEVICE SIDK;	DEVICE DSK3;	4410;	DK0+3-200;	ZBLOCK 2
DEVICE SIDK;	DEVICE DSK4;	4410;	DK0+4-200;	ZBLOCK 2
DEVICE SIDK;	DEVICE DSK5;	4410;	DK0+5-200;	ZBLOCK 2
DEVICE SIDK;	DEVICE DSK6;	4410;	DK0+6-200;	ZBLOCK 2
DEVICE SIDK;	DEVICE DSK7;	4410;	DK0+7-200;	ZBLOCK 2

EJECT

*200
DKHLP,	DLCR		/SET CONTROLLER BREAK FIELD
	DCSR		/CLEAR STATUS
	JMS DKTR1	/GET POINTER
DKTR1,	0		//ALSO USED AS TEMP BUFF
	TAD DKTR1
	TAD (DKWCT-DKTR1
	DWCA
	CLA CLL
	TAD (DLTR
	DCA DKIOU	/SET UP FOR READ
	TAD DKWD1
	SPA
	ISZ DKIOU	/CHANGE TO WRITE
	BSW
	AND (7000	/GET DATA BUFFER FIELD
	DCA TEMP
DKST2,	HLT		/GET CONTROL TABLE ENTRY
	DCA DKWCT+3
	TAD DKWCT+3
	RTL ; RAL
	AND (10
	TAD TEMP
	DLCR
	CLA CLL
	TAD DKWCT+2
	AND (17
	DLSR		/OUTPUT SECTOR ADDRESS
	CLL CLA
	TAD DKWCT+2
	AND M20
	RTR;RTR
	TAD DKWCT+3
DKIOU,	HLT		/OUTPUT TRACK ADDRESS AND PORT NUMBER
	CLL CLA
	DSDD
	JMP .-1		/WAIT FOR DISK TO FINISH
	KSF		/CK FOR CTRL/C
	JMP DCTL1
	KRS
	TAD (-203
	SNA CLA
	JMP DKCDI	/EXIT TO SYSTEM
DCTL1,	DSDE		/WAS THERE A DISK ERROR?
	JMP DKOUT-2	/NO, GO EXIT
	ISZ DKERCT
	JMP DKHLP
	CLL CML
	JMP DKOUT-1	/AVOID EXIT FIXER
M20,	-20
P2000,	2000
EJECT
/THIS IS REAL ENTRY CHAIN
DK0,	0
	ISZ DKNO
	ISZ DKNO
	ISZ DKNO
	ISZ DKNO
	ISZ DKNO
	ISZ DKNO
	ISZ DKNO



DK7600,	7600		/CLEAN OUT POTENTIALLY MESSY AC
	TAD DKNO
	CIA
	TAD (TAD DK0+7
	DCA DKST1
	TAD DKST1
	TAD (DKOFFS-DK0
	DCA DKST2
	TAD DKST1
	TAD P2000
	DCA DKOUT	/SET UP ENTRY RESTORE
	DCA DKNO
DKST1,	HLT		/GET CALLER ADDRESS
	DCA DKE		/PUT IT IN A CANONICAL LOCATION
	RDF		/FIND OUT CALLER'S FIELD
	TAD DKCDI
	DCA DKOUT+2	/FIX UP EXIT FOR FIELD CHANGING
	TAD I DKE
	DCA DKWD1
	ISZ DKE
	TAD I DKE
	DCA DKWCT+1	/SAVE CORE ADDRESS
	ISZ DKE
	TAD I DKE
	DCA DKWCT+2	/PICK UP ALL THE ARGUMENTS
	ISZ DKE		/PARTIALLY FIX THE EXIT

/STILL MORE INITIALIZATION TO DO
EJECT
	TAD DKWD1
	CLL RAL
	AND DK7600
	SNA		/IS WORD COUNT = 0?
	JMP DKOUT-2	/YES, TAKE NORMAL EXIT
	DCA DKWCT	/GENERATE WORD COUNT FOR DATA X-FER
	TAD M20
	DCA DKERCT
	JMP DKHLP	/GO DO REAL WORK
	ISZ DKE		/EXIT CONTROL - NORMAL EXIT
	TAD (ISZ DKNO
DKOUT,	HLT		/RESET ENTRY ISZ
	CLA RAR
	HLT		/CHANGE BACK TO CALLERS FIELD
	JMP I DKE	/EXIT

DKCDI,	CDF CIF 0
	JMP I DK7600
EJECT
DKE,	0
DKERCT,	0
DKNO,	0
DKWD1,	0
DKWCT,	0
	0
	0
	0

/EQUATION FOR DKOFFS IS:
/	TRACK OFFSET+PLATTER BIT*2000+UNIT BIT
/	PLATTER BIT IS 1 FOR REMOVABLE PLATTER, 0 FOR FIXED
/	UNIT BIT IS 0 FOR UNIT 0, 1 FOR UNIT 1


DKOFFS,	UNIT0			/DSK0
	UNIT0+DOFF		/DSK1

	UNIT0+PLATTER		/DSK2
	UNIT0+PLATTER+DOFF	/DSK3

	UNIT1			/DSK4
	UNIT1+DOFF		/DSK5

	UNIT1+PLATTER		/DSK6
	UNIT1+PLATTER+DOFF	/DSK7


	$$$$