.Page;++;;		Read;; Read will read a sector from Drive/Side/Track/Sector, doing offtrack; stepping if neccessary to find the data.  It will also verify the; checksum found if commanded to do so.;; REGISTERS;  IN;	All =	Any value;  OUT;	All =	Destroyed;; CALLS;	Seek	Seeks to Drive/Track/Side;	RdAdr	Read address header field;	Read16	Reads data and checksum;	VfyCkSum	Verifies checksum that was read;	BadAddr	Handles all errors during read;++ReadBf	.Equ *				; Read w/o checksum verify entry point	Lda	#0FF	Bne	Read01Read	.Equ *	Lda	#00Read01	Sta	RwCsmFlg			; Save in global flag	Jsr	Seek			; Seek to track, zero error cnts, init retryRead1	Jsr	RdAdr			; Find Sector	Bcs	Read3			; Error, go and check it	Jsr	Read16			; Read the sector	Bcs	Read3	Ldx	RwCsmFlg			; Fetch the checksum flag	Bne	Read4			; If <> 0 then ignore checksum verify	Jsr	VfyCkSum			; Verify the checksum	Bcc	Read4			; If carry clear, then all is fine	Inc	CSError			; Increment the checksum error counterRead3	Jsr	BadAddr			; Find out what went wrong ( ccC = 1)	Bcc	Read1			; Try once more	Lda	#SErrRd			; No goog, signal read errorRead4	Rts.Page;++;		BadAddr;--;; REGISTERS;  IN;	All =	Any value;  OUT;	All =	Destroyed;	Carry =	Retry status (=Clear, don't retry; =Set, please retry);; CALLS;	Recalbrt	Recalibrate the drive;	SeekAlt	Seek to Track/Side;--.PageBadAddr	.Equ *				; Entry point of BadAddr (ccC =1)	Dec	RetryCnt			; If we've tried enough times to find data	Beq	BadAddr2	Clc	Lda	RaStrt			; Or we can't find start bitslip	Adc	RaTrk			; Or we're on the wrong trk	Beq	BadGood			; Try again	Cmp	RecalCnt			; if >= recalibration count then abort	Beq	BadBad			; ccC = 1 when A = memory	Cmp	RtyFlg			; See if new RaStrt or RaTrk error	Beq	BadGood			; If equal then no change from last time	Sta	RtyFlg			; a change -- save new error count	Bne	BadAddr4			; Recalibrate head locationBadAddrd2	Dec	RecalCnt	Beq	BadBad			; abort upon timeout (ccC still = 1)BadAddr4	Jsr	Recalbrt			; But don't bother with spd errors at this time	Jsr	SeekAlt			; And get back to where we were on target track	Lda	MaxRetry			; Pick up fresh maximum number of retrys count	Sta	RetryCnt			; and refresh the counterBadGood	Clc				; We're trying again mate!BadBad	Rts