/**************************************************************************************
Copyright (c) 2002
The UbixOS Project
$Id$
**************************************************************************************/
#ifndef _FDC_H
#define _FDC_H
#include <ubixos/types.h>
typedef struct DrvGeom {
byte heads;
byte tracks;
byte spt;
} drvGeom;
#define fdcMsr (0x3f4)
#define fdcData (0x3f5)
#define fdcDir (0x3f7)
#define fdcCcr (0x3f7)
#define fdcDor (0x3f2)
#define fdcDrs (0x3f4)
#define cmdWrite (0xc5)
#define cmdRead (0xe6)
#define cmdSeek (0x0f)
#define cmdSensei (0x08)
#define cmdRecal (0x07)
#define cmdSpecify (0x03)
#define dg144Heads 2 /* heads per drive (1.44M) */
#define dg144Tracks 80
#define dg144Spt 18
#define dg144Gap3rw 0x1b
#define dg168Gap3rw 0x1c
void initFloppy();
void floppyIsr();
void floppyIsrhndlr();
void sendByte(int byte);
int getByte();
bool fdcRw(int block,byte *blockBuffer,bool read,unsigned long numSectors);
void block2Hts(int block,int *head,int *track,int *sector);
void motorOn(void);
void motorOff(void);
bool seek(int track);
bool waitFdc(bool sensei);
int getByte();
void sendByte(int byte);
void recalibrate(void);
void reset(void);
#endif