/************************************************************************************** Copyright (c) 2002 The UbixOS Project All rights reserved. Redistribution and use in source and binary forms, with or without modification, are prohibited. $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); bool writeBlock(int block,byte *blockBuffer, unsigned long numSectors); bool readBlock(int block,byte *blockBuffer, unsigned long numSectors); #endif