Newer
Older
ubixos / src / sys / include / drivers / fdc.h
@reddawg reddawg on 12 May 2002 1 KB FDC Changes
/**************************************************************************************
 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