📄 floppy.h
字号:
#ifndef _FLOPPY_H
#define _FLOPPY_H
#include "driver.h"
#include "drvreq.h"
/* IO ports */
#define FDC_DOR (0x3f2) /* Digital Output Register */
#define FDC_MSR (0x3f4) /* Main Status Register (input) */
#define FDC_DRS (0x3f4) /* Data Rate Select Register (output) */
#define FDC_DATA (0x3f5) /* Data Register */
#define FDC_DIR (0x3f7) /* Digital Input Register (input) */
#define FDC_CCR (0x3f7) /* Configuration Control Register (output) */
#define DG144_HEADS 2 /* heads per drive (1.44M) */
#define DG144_TRACKS 80 /* number of tracks (1.44M) */
#define DG144_SPT 18 /* sectors per track (1.44M) */
#define DG144_GAP3FMT 0x54 /* gap3 while formatting (1.44M) */
#define DG144_GAP3RW 0x1b /* gap3 while reading/writing (1.44M) */
#define NONE -1
#define SEEK 0
#define SEEK_SERVICED 1
#define RECALIBRATE 2
#define RECALIBRATE_SERVICED 3
#define READ 4
#define READ_SERVICED 5
#define WRITE 6
#define WRITE_SERVICED 7
#define OFF 0
#define ON 1
#define CMD_READ 0x46
#define CMD_WRITE 0x45
#define CMD_SEEK 0x0F
#define CMD_SENSEI 0x08
typedef struct
{
uint cyl;
uint head;
uint sec;
}chs;
class floppy : public disk_driver
{
private:
public:
int last_operation;
static __queue<fdreq> fdr_queue;
int st0,st1,st2,cyl,head,sec,secsz;
static int motor;
floppy(char *name,int type);
~floppy();
void sendbyte(byte val);
byte getbyte();
void get_phys_sec(uint LBA,chs &_chs);
void wait(int condition,int sensei);
int issue_rw_req();
void seek(byte cyl,byte head);
void set_drive_param();
void service(int opcode,uint start,uint num,void *buf,int *fin);
};
extern "C" void motoron();
extern "C" void motoroff();
void send_fst_req();
void floppy_handler();
int floppy_main(void *req);
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -