Date : Fri, 20 May 1988 17:26:40 ECT
From : DBRAATAN%NORUNIT.BITNET@CORNELLC.CCS.CORNELL.EDU
Subject: Faster floppy drives
Higher floppy step rates.
Many modern floppy drives work at higher step rates than the
Western Digital (or compatible) Floppy Disc Controllers (FDCs)
may be programmed for. The highest step rate (FDC at 1 MHz)
is 6 ms per step. It is a pity that the controller cannot achive
the maximum drive performance. I think I have a solution to
the problem. It works for the WD 2797 controller and 3 1/2 inch
drive in my Bondwell-2 computer. I guess it will work for other
software compatible controllers also (1771, 1773, 2793, etc).
It IS possible to step the drive faster than the data sheet for
the controller says. Just use this Z80 program:
;-----------------------------------------------------------
;On entry:
; C: Destination track number
; B: Current track number
;
LD A,B
OUT (FTRK),A ;Update track register in FDC
LD A,C
SUB B ;Calculate distance from current to new track
JR Z,NOJOB ;We are at the right track, exit
LD C,58h ;FDC command: Step in
JR NC,INWARD ;Step inwards
NEG ;Get positive number of steps
LD C,78h ;FDC command: Step out
INWARD: LD B,A ;Use B as step counter (counts down)
NXTSTP: LD A,C
OUT (FCOMM),A ;Issue step command to FDC
LD HL,TIME ;Time between steps
CALL LPAUSE ;Wait until the floppy is ready for next step
CALL IMMINT ;Interrupt FDC
DJNZ NXTSTP ;Do next step
NOJOB: ;Continue processing...
; **** SUBROUTINES: ****
;----------------------------------------------
; Subroutine IMMINT
; Issues immediate interrupt command to
; Floppy Disc Controller.
;
IMMINT: LD A,0D8h ;FDC command: Immediate interrupt
OUT (FCOMM),A
CALL SDELAY ;Short delay
LD A,0D0h ;FDC command: Reset interrupt
OUT (FCOMM),A
WREADY: IN A,(FCOMM) ;Wait until the FDC is ready for next command...
BIT 0,A
JR NZ,WREADY
RET
;----------------------------------------------
; Subroutine SDELAY
; This short delay is needed because the FDC registers
; do not update instantly. The CALL - RET sequence is
; a part of the delay. The delay is calculated for a
; 4 Mhz Z80 CPU.
SDELAY: PUSH IX
POP IX
PUSH IX
POP IX
RET
;----------------------------------------------
; Subroutine LPAUSE
; General delay routine. Use your own or...
LPAUSE: DEC HL
INC IX
DEC IX
LD A,H
OR L
JR NZ,LPAUSE
RET
;------------------------------------------------
Final notes:
My Bondwell uses a TIME = 216 constant. The fastest stepping
rate you normally get with the FDC is something like TIME = 900.
FCOMM is the I/O address to the FDC command/status register.
FTRK is the I/O address to the FDC track register.
This program must, of course, be inserted into your BIOS.
I hope this may be of some use to some of you. The algorithm
may be used on 8080 computers also, of course. Maybe the
IBM PC also can do this. I dont know that. Please try it
out.
There may be errors in this note.
Write EMAIL to me if you have questions or remarks.
Dag Henrik Braatane
DBRAATAN@NORUNIT.BITNET