SCOTT6 ;	SCOTT6/TXT
 	ORG	4200H		;OVERLAY BOOT AREA
 DERROR	EQU	6203H
 SELECT	EQU	62F2H
 ;  ROUTINE TO READ MULTIPLE SECTORS INTO RAM
 ;	 L = # OF SECTORS TO READ
 ;	DE = START TRACK/SECTOR
 ;	BC = LOAD ADDRESS
 ;	ZERO FLAG SET IF READ IS SUCCESSFUL
 DREAD	PUSH	HL		;SAVE LOOP COUNT
 READLP	CALL	READ2		;2 TRIES FOR SUCCESS
 	POP	HL
 	JP	NZ,DERROR	;DISK ERROR ROUTINE
 	INC	E		;NEXT SECTOR
 	LD	A,E		;PASS TO ACCUM.
 	SUB	0AH		;10 SECTORS ?
 	JR	NZ,NEXTGO	;MORE SECTORS
 	LD	E,A		;0 TO E
 	INC	D		;NEXT TRACK
 NEXTGO	DEC	L		;REDUCE IT
 	JR	NZ,DREAD	;READ SOME MORE
 	RET			;DONE
 READ2	PUSH	BC		;SAVE LOAD ADDRESS
 	CALL	READ1		;READ 1 MORE TIME
 	POP	HL		;LOAD ADDRESS
 	RET	Z		;GOOD AFTER 1 TRY
 	LD	B,H		;RESET LOAD ADDRESS
 	LD	C,L		;	INTO BC
 READ1	CALL	SELECT
 	LD	(37EEH),DE
 	LD	HL,37ECH	;COMMAND REGISTER
 	LD	(HL),1BH	;SEEK COMMAND
 	CALL	DSKSLO
 READBZ	CALL	SELECT
 	LD	A,(HL)
 	RRCA			;SHIFT BUSY BIT
 	JR	C,READBZ	;NOT FOUND YET
 	LD	(HL),88H	;READ SECTOR
 	PUSH	DE		;SAVE TRACK/SECTOR
 	LD	DE,37EFH	;DATA TRANSFER ADDRESS
 	CALL	DSKSLO
 	JR	RDTEST
 RDDONE	RRCA			;SHIFT COMMAND DONE BIT
 	JR	NC,READOK	;NOT SET = DONE
 RDTEST	LD	A,(HL)		;GET STATUS
 	BIT	1,A		;VALID DATA PRESENT ?
 	JR	Z,RDDONE	;IS READ DONE ?
 	LD	A,(DE)		;GET THE VALID BYTE
 	LD	(BC),A		;PUT INTO LOAD BUFFER
 	INC	BC		;POINT TO NEXT
 	JR	RDTEST		;ANY MORE DATA ?
 READOK	LD	A,(HL)		;GET STATUS/RESET LATCH
 	POP	DE		;RESTORE TRK/SEC
 	AND	9CH		;SET STATUS FLAGS
 	RET	Z		;READ OK
 	LD	(HL),0D0H	;FORCE INTERRUPT
 	RET			;Z FLAG IS RESET/ERROR
 ;  ROUTINE TO WRITE DISK SECTORS
 ;	 L = # OF SECTORS TO WRITE
 ;	DE = START TRACK/SECTOR
 ;	BC = DATA ADDRESS
 ;	ZERO FLAG SET IF WRITE IS SUCCESSFUL
 DWRITE	PUSH	HL		;SAVE LOOP COUNT
 ;  SEE SIMILAR REMARKS FOR READ SECTORS
 WRITEL	CALL	WRITE2
 	POP	HL
 	JP	NZ,DERROR	;DISK ERROR ROUTINE
 	DEC	L
 	RET	Z
 	PUSH	HL
 	INC	E
 	LD	A,E
 	SUB	0AH
 	JR	NZ,WRITEL
 	LD	E,A
 	INC	D
 	JR	WRITEL
 WRITE2	PUSH	BC
 	CALL	WRITE1
 	POP	HL
 	RET	Z
 	LD	B,H
 	LD	C,L
 WRITE1	CALL	SELECT
 	LD	(37EEH),DE
 	LD	HL,37ECH
 	LD	(HL),1BH	;SEEK COMMAND
 	CALL	DSKSLO
 WRITEZ	CALL	SELECT
 	LD	A,(HL)
 	RRCA
 	JR	C,WRITEZ
 	LD	A,0ABH		;WRITE AS DELETED DATA
 	LD	(HL),A		;PASS TO CONTROLLER
 	PUSH	DE
 	LD	DE,37EFH
 	CALL	DSKSLO
 	JR	WRITET
 WRITED	RRCA
 	JR	NC,WRITEO
 WRITET	LD	A,(HL)
 	BIT	1,A
 	JR	Z,WRITED
 	LD	A,(BC)
 	LD	(DE),A
 	INC	BC
 	JR	WRITET
 WRITEO	LD	A,(HL)
 	AND	0FCH		;SET STATUS FLAGS
 	POP	DE
 	RET	Z		;ZERO = GOOD WRITE
 	LD	(HL),0D0H	;FORCE INTERRUPT
 	RET			;FLAGS ARE SET
 RESTOR	CALL	SELECT
 	LD	A,0BH
 	LD	(37ECH),A
 	CALL	DSKSLO
 RESWT	CALL	SELECT
 	LD	A,(37ECH)
 	RRCA
 	JR	C,RESWT
 	XOR	A
 	RET
 DSKSLO	EX	(SP),HL
 	EX	(SP),HL
 	EX	(SP),HL
 	EX	(SP),HL
 	RET
 	END
T
 	LD	A,0BH
 	LD	(37ECH),A
 	CALL	DSKSLO
 RESWT	CALL	SELECT
 	LD	A,(37ECH)
 	RRCA
 	JR	C,RESWT
 	XOR	A
 	RET
 DSKSLO	EX	(SP),HL
 	EX	(SP),HL
 	EX	(SP),HL
 	EX	(SP),HL
L	SELECT
 	L