File: RXX1SY.PA of Tape: OS8/OS8-V40/v40-10
(Source file text) 

/RX01 (RX02) FLOPPY SYSTEM HANDLER
/
/
/
/
/
/
/
/
/COPYRIGHT  (C)  1980   BY DATAPLAN GMBH, LAUDA, BRD
/
/
/
/
/
/
/
/
/
/THE INFORMATION IN THIS DOCUMENT IS SUBJECT TO CHANGE WITHOUT NOTICE
/AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DATAPLAN GMBH.
/DATAPLAN GMBH ASSUMES NO RESPONSIBILITY FOR ANY ERRORS THAT MAY APPEAR
/IN THIS DOCUMENT.
/
/THE SOFTWARE DESCRIBED IN THIS DOCUMENT IS FURNISHED TO THE PURCHASER
/UNDER A LICENSE FOR USE ON A SINGLE COMPUTER SYSTEM AND CAN BE COPIED
/(WITH INCLUSION OF DATAPLAN'S COPYRIGHT NOTICE) ONLY FOR USE IN SUCH
/SYSTEM, EXCEPT AS MAY OTHERWISE BE PROVIDED IN WRITING BY DATAPLAN.
/
/DATAPLAN GMBH ASSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY
/OF ITS SOFTWARE ON EQUIPMENT THAT IS NOT SUPPLIED BY DATAPLAN.
/
/
/
/
/
/
/
/
/
/
/
/WVDM, ZUERICH, 1-JAN-80
/FLOPPY DISK HANDLER SYSTEM

/DEFINITIONS OF RX8/E IOT'S

RXSVER=	"M&77

DEVCOD=	750	/DEVICECODE

LCD=	6001+DEVCOD	/LOAD COMMAND REGISTER
XDR=	6002+DEVCOD	/TRANSFER DATA REGISTER
STR=	6003+DEVCOD	/SKIP ON TRANSFER REQUEST FLAG, CLEAR FLAG
SER=	6004+DEVCOD	/SKIP ON ERROR FLAG, CLEAR FLAG
SDN=	6005+DEVCOD	/SKIP ON DONE FLAG, CLEAR FLAG
INTR=	6006+DEVCOD	/INTERRUPT ENABLE/DISABLE
INIT=	6007+DEVCOD	/INITIALIZE CONTROLLER AND RECALIBRATE DRIVES


/NOTES ON THIS HANDLER:

/THIS HANDLER READS AND WRITES THE DISK IN "12-BIT" MODE, IN WHICH
/ONLY 6 BITS OF EVERY 8-BIT BYTE ARE USED. AN RX01 CARTRIDGE
/CONTAINS 494 OS/8 BLOCKS UNDER THIS METHOD

/TO MAXIMIZE SPEED ON THE DEVICE, THE HANDLER READS AND WRITES DATA
/ON A TRACK WITH A TWO-WAY INTERLEAVE - I.E. RECORDS 1-26 ON A TRACK
/ARE WRITTEN IN THE SEQUENCE:
/  1,3,5,7,9,11,13,15,17,19,21,23,25,2,4,6,8,10,12,14,16,18,20,22,24,26

/IN THIS WAY THE HANDLER CAN TRANSFER DATA AT A 5KHZ WORD RATE
/MAIN CHANGE FROM OLD RX01SY IS THAT THE NEXT DISK ADDRESS IS
/CALCULATED DURING THE DATA TARNSFER TO/FROM THE DISK TO ITS
/SECTOR BUFFER. THIS IS NEEDED FOR SLOW 8S !.
/ALSO THE CODE HAS BEEN MODIFIED SO THAT IT RUNS ON RX02'S
	*0		/ORIGIN FOR BUILD

	-1		/ONE ENTRY POINT
	DEVICE	RXX1	/"RXX1" IS THE GROUP NAME
	DEVICE	SYS	/"SYS" IS THE ENTRY POINT NAME
	4250		/DCB WORD - DEVICE TYPE 25, DIRECTORY DEVICE
	2007		/2000 MEANS SYS HANDLER,7 IS ENTRY POINT OFFSET
	0		/THIS WORD ALWAYS SEEMS TO BE 0
	DECIMAL
	76^26%4		/THE NUMBER OF OS8 BLOCKS ON THE DEVICE
	OCTAL

	BOOTST-BOOTND	/LENGTH OF THE BOOTSTRAP
	RELOC	2
BOOTST,
X7577,	7577
SECT,	1		/FIRST SECTOR, GETS UPDATED
FAKRET,	JMS	GET1	/GET SECOND HALF OF FIELD 1
	DCA	CDF10	/NEXT IS FIELD 0
	CDF 0
K1002,	TAD	X7577	/NICE BOOT STARTS AT 2!
	DCA	XR	/RESET AUTO FOR FIELD 0
	JMS	GET1
	JMS	GET1	/GET 2 HALFS OF FIELD 0
	TAD	UNIT
	DCA I	PUNIT	/TRANSFER UNIT TO SYS-HANDLER
	INIT		/SET FLAG
	JMS I	X7577	/HAHA
XR,	7600+BOOTND-BOOTST-1	/LOC 17
PUNIT,	S4UNIT		/UNIT LOC IN SYS-HANDLER=7623

GET1,	FAKRET		/FIRST RETURN
	TAD	K1002	/KILL 7000 FROM 'UNIT' AND SET 2 FOR READ
	TAD 	UNIT
	LCD
	CLA STL RTL
	TAD	SECT	/GOES 3,5,7. 1 WAS HARDWARE BOOT
	JMS	LOAD
	DCA	SECT	/KEEP FOR NEXT
	CLA IAC		/ALWAYS TRACK 1
	JMS	LOAD
HANGGG,	SDN
	JMP	LOAD+1
	SER
	SKP
	HLT
	SNA
	JMP I	GET1	/GO BACK IF FROM SILO LOOP
	CLA STL RTL	/GIVE READ SILO COMMAND
	LCD
CDF10,	CDF 10
	JMS	LOAD
	DCA I	XR
LP,	JMP	CDF10
BOOTND,
	RELOC
/HARDWARE BOOTSTRAP (MODIFIED, SEE RX01BT.PA)

	NOPUNCH
	*24
BOOT,	TAD	K3002	/MAKE 2000 OUT OF 7000, SET 2
	TAD	UNIT
	LCD
	CLA IAC
	JMS	LOAD	/SECTOR 1
	JMS	LOAD	/TRACK 1
	CLL RAL		/AC=2 FOR READ

START,
HANGGG,	SDN
	JMP	LOAD+1
	SER
	SNA
	SKP CLA
	JMP	GOODRD	/TO READ WITH AC=2
	TAD	UNIT	/ON ERROR
	CIA
	TAD	X6030
	DCA	UNIT	/FLIP UNIT
	JMP	BOOT	/AND TRY AGAIN,AGAIN,AGAIN...
GOODRD,	LCD
LP,	JMS	LOAD
K3002,	DCA	BOOTST	/FIRST ONLY USE AS CONSTANT
	ISZ	.-1
	JMP	LP

LOAD,	0
	STR
	JMP	HANGGG
	XDR
	JMP I	LOAD
UNIT,	7024		/CANONICAL LOCATIONS
X6030,	6030		/.

	ENPUNCH
	*200
	RELOC	7600
	ZBLOCK	7	/SYSTEM SPACE

/		COMMENTS:
/  LINK REMAINS 0 THROUGH THE MAIN PROCESSING LOOP
/  EXCEPT AS MANIPULATED BY DIVSUB AND AT END OF WRITE
/
/  OVERALL LOOP CONTROL THROUGH BC IS MILDLY ODD.
/  BC STARTS WITH COUNT OF THE # OF WORDS TO BE TRANSFERRED.
/  BC IS DECREMENTED 101 TIMES AT THE SILO CODE, AND INCREMENTED
/  1 TIME AFTER THE I/O OPERATION. 
/  A READ OPERATION STARTS AND FINISHES AT THE MIDDLE OF THE LOOP.
/  A WRITE OEPRATION STARTS AT THE TOP, AND FINISHES AT BOTTOM.
/  THUS, A 1 BLOCK READ INCREMENTS 1, -101, 1, -101 AND EXITS FROM MIDDLE.
/  AND, A 1 BLOCK WRITE INCREMENTS -101, 1, -101, 1 AND EXITS FROM BOTTOM.
/
/  DIVISION IS CARRIED OUT IN PARALLEL WITH I/O OPERATION BECAUSE OF
/  TIMING CONSIDERATIONS OF THE VT78.
/
/  THERE IS NO ERROR RETRY, NOT PARTICULARLY CRITICAL FOR A FLOPPY.

SYS,	RXSVER
	CLA STL RTL	/CLEAR AC AND SET = 2 FOR CDI
	RDF		/FETCH CALLER'S FIELD
	TAD	SCDF0	/MAKE CDF CIF TO HIS FIELD
	DCA	SRET	/FOR RETURN
	TAD I	SYS	/GET FUNCTION
	AND	S70	/KEEP BITS FOR CDF
	TAD	SCDF0	/ADDING IN CDF LITERAL
	DCA	BUFCDF	/CDF INSTRUCTION TO USER'S BUFFER
S36,	36
S33,	33		/KEEP S4UNIT AT SAME PLACE
	TAD I	SYS	/MAKE CONTROL COUNT
S4UNIT,	RAL		/7004 (7024 FOR UNIT #1) DOUBLES AS
			/LITERAL FOR READ-WRITE COMMAND
	AND	S7600	/MAKE CONTROL COUNT FOR TOTAL
	DCA	BC
	CML RTL		/FUNCTION CODE, 0=WRITE, 2=READ
	MQL		/KEEP IN MQ FOR 'OR' OPERATION
	ISZ	SYS
	TAD I	SYS	/FETCH BUFFER ADDRESS
	DCA	BUF
	ISZ	SYS
	TAD I	SYS	/OS8 BLOCK #
	CLL RTL		/TIMES 4 TO BE FLOPPY SECTOR #
	DCA	RECO
	ISZ	SYS	/ERROR EXIT FROM I/O CALL
	JMS	DIVSUB	/COMPUTE TRACK/SECTOR FOR FIRST I/O
	MQA		/READ OR WRITE START DIFFERENTLY
	SZA CLA		/SKIP ON WRITE
	JMP	STREAD	/GO TO READ
/
/  WRITE FALLS THRU.......
/
/ TOP OF MAIN PROCESSING LOOP
/
SETSLO,	JMS	LDCMD	/SET SILO TO LOAD-UNLOAD DEPENDING
	TAD	S7700	/SILO CONTROL COUNT 100 OCTAL
	DCA	FLPWC
BUFCDF,	HLT		/CDF TO USER'S BUFFER PLACED HERE
TRLOOP,	TAD I	BUF	/FETCH A WORD IN CASE WRITE
	STR		/WAIT
	JMP	.-1
	XDR		/AC TO SILO; OR; SILO TO AC
	DCA I	BUF	/PLACE A WORD IN CASE READ; WRITE REPLACES SAME.
	ISZ	BUF	/MOVE TO NEXT BUFFER LOCATION (MAY SKIP)
S70,	70		/THIS LITERAL WILL ACT AS NOP
	ISZ	FLPWC	/DONE WITH 100 OCTAL SILO OPERATION
	JMP	TRLOOP	/NO
SCDF0,	CDF 0		/ONLY HERE FOR CODE POSITIONING
	CLL STA		/CLEAR LINK
	TAD	S7700	/DECREMENT BY 101 AND SET LINK
	TAD	BC	/CLEARS LINK AGAIN WHEN NECESSARY
	SNA		/SKIP UNLESS READ DONE
	JMP	OKEX	/READ EXIT.
	DCA	BC	/ENDS UP -1 IF WRITE AND WRONG LINK
			/WHO CARES, IT'S THE END
/
/  MIDDLE OF MAIN PROCESSING LOOP
/
STREAD,	TAD	S4UNIT	/READ STARTS HERE
	JMS	LDCMD	/SET UP DO DO READ OR WRITE I/O
	TAD	SECTOR	/LOAD PRECOMPUTED SECTOR INFO
	STR
	JMP	.-1	/IN CASE NOT READY
	XDR
S7700,	7700		/CLEAR AC, CAN'T SKIP (XDR LEAVES AC ALONE)
	TAD	TRACK	/TRACK
	STR		/ILLEGAL 7700 ENTRY WILL HANG; THE FUNCTION
	JMP	.-1	/IS NOT SET UP (LDCMD)
	XDR
S7600,	7600		/CLEAR AC AGAIN
	ISZ	RECO	/MOVE TO NEXT FLOPPY SECTOR
	JMS	DIVSUB	/COMPUTE NEXT TRACK AND SECTOR DURING THIS I/O
	TAD	S36	/WAIT FOR I/O TO COMPLETE WITH READ ERROR
	JMS	LDCMD	/FAST AND RX02 COMPATIBLE
	ISZ	BC	/CHECK FOR WRITE EXIT
	JMP	SETSLO	/NO, BACK TO TOP
OKEX,	ISZ	SYS	/BUMP TO REGULAR EXIT
SRET,	HLT		/CDF CIF FOR USER'S CALLING FIELD
	JMP I	SYS	/GONE
/
/
/  DIVSUB	NEEDS AC AND LINK = 0
/
/  COMPUTES TRACK IN 'TRACK', SECTOR IN 'SECTOR', FROM # IN 'RECO'
/
/  REPEATED SUBTRACTS OF 13 DECIMAL LEAVE THE HIGH N-1 BITS OF
/  QUOTIENT IN TRACK, THE LOW BIT OF QUOTIENT IN LINK, AND THE
/  REMAINDER IN AC. THE INTERLEAVE IS ACCOMPLISHED BY SHIFTING
/  LOW QUOTIENT BIT INTO LOW REMAINDER BIT.
/
DIVSUB,	0
	DCA	TRACK	/INIT QUOTIENT FOR DIVIDE
	TAD	RECO	/RECORD # MASSAGED IN AC
DIVLP,	SNL		/LINK USAGE REVERSED FROM RICHIE'S CODE
	ISZ	TRACK	/ISZ EVERY OTHER TIME, ==DIVIDE BY 26
	TAD	SM15	/THE -13 DECIMAL
	SMA		/SKIP ON DONE
	JMP	DIVLP	/MORE
	RAL		/LINK USAGE REVERSED; INTERLEAVE!!
	TAD	S33	/ADD 33, MAKING SECTOR
	DCA	SECTOR
	JMP I	DIVSUB	/LEAVING LINK AND AC 0
/
/  LDCMD
/
FLPWC=.		/COUNTER IN ENTRY POINT FOR SILO LOOP ONLY
LDCMD,	0
	MQA		/OR IN READ/WRITE
	AND	S36	/BE SURE ONLY LEGAL BITS
	SDN		/WAIT
	JMP	.-1
	LCD		/COMMAND FROM AC, WHICH IS CLEARED
	SER		/SKIP IF ERROR (I/O ONLY)
	JMP I	LDCMD	/OK, RETURN
	CLL CML CLA RAR	/CONVENTIONAL ERROR RETURN 4000 IN AC
	JMP	SRET	/SET CDF AND EXIT
/
SM15,	-15
/
/  USE DATA BREAK LOCATIONS FOR TEMPORARIES
/
SECTOR=7750
TRACK=7751
RECO=7752
BUF=7753
BC=7754			/THESE MUST BE SLANTED!

	RELOC
	$-$-$