?? fdreg.h
字號:
/* * 該文件中含有一些軟盤控制器的一些定義。這些信息有多處來源,大多數取自Sanches 和Canton
* 編著的"IBM 微型計算機:程序員手冊"一書。 */#ifndef _FDREG_H // 該定義用來排除代碼中重復包含此頭文件。#define _FDREG_H
// 一些軟盤類型函數的原型說明。extern int ticks_to_floppy_on(unsigned int nr);extern void floppy_on(unsigned int nr);extern void floppy_off(unsigned int nr);extern void floppy_select(unsigned int nr);extern void floppy_deselect(unsigned int nr);
// 下面是有關軟盤控制器一些端口和符號的定義。/* 軟盤控制器(FDC)積存器端口。摘自S&C 書中約340 頁 */#define FD_STATUS 0x3f4 // 主狀態寄存器端口。#define FD_DATA 0x3f5 // 數據端口。#define FD_DOR 0x3f2 /* Digital Output Register */
// 數字輸出寄存器(也稱為數字控制寄存器)。#define FD_DIR 0x3f7 /* Digital Input Register (read) */
// 數字輸入寄存器。#define FD_DCR 0x3f7 /* Diskette Control Register (write)*/
// 數據傳輸率控制寄存器。/* 主狀態寄存器各比特位的含義 */#define STATUS_BUSYMASK 0x0F /* drive busy mask */
// 驅動器忙位(每位對應一個驅動器)。#define STATUS_BUSY 0x10 /* FDC busy */
// 軟盤控制器忙。#define STATUS_DMA 0x20 /* 0- DMA mode */
// 0 - 為DMA 數據傳輸模式,1 - 為非DMA 模式。#define STATUS_DIR 0x40 /* 0- cpu->fdc */
// 傳輸方向:0 - CPU -> fdc,1 - 相反。#define STATUS_READY 0x80 /* Data reg ready */
// 數據寄存器就緒位。/* 狀態字節0(ST0)各比特位的含義 */#define ST0_DS 0x03 /* drive select mask */
// 驅動器選擇號(發生中斷時驅動器號)。#define ST0_HA 0x04 /* Head (Address) */
// 磁頭號。#define ST0_NR 0x08 /* Not Ready */
// 磁盤驅動器未準備好。#define ST0_ECE 0x10 /* Equipment chech error */
// 設備檢測出錯(零磁道校準出錯)。#define ST0_SE 0x20 /* Seek end */
// 尋道或重新校正操作執行結束。#define ST0_INTR 0xC0 /* Interrupt code mask */
// 中斷代碼位(中斷原因),00 - 命令正常結束;
// 01 - 命令異常結束;10 - 命令無效;11 - FDD 就緒狀態改變。/* 狀態字節1(ST1)各比特位的含義 */#define ST1_MAM 0x01 /* Missing Address Mark */
// 未找到地址標志(ID AM)。#define ST1_WP 0x02 /* Write Protect */
// 寫保護。#define ST1_ND 0x04 /* No Data - unreadable */
// 未找到指定的扇區。#define ST1_OR 0x10 /* OverRun */
// 數據傳輸超時(DMA 控制器故障)。#define ST1_CRC 0x20 /* CRC error in data or addr */
// CRC 檢驗出錯。#define ST1_EOC 0x80 /* End Of Cylinder */
// 訪問超過一個磁道上的最大扇區號。/* 狀態字節2(ST2)各比特位的含義 */#define ST2_MAM 0x01 /* Missing Addess Mark (again) */
// 未找到數據地址標志。#define ST2_BC 0x02 /* Bad Cylinder */
// 磁道壞。#define ST2_SNS 0x04 /* Scan Not Satisfied */
// 檢索(掃描)條件不滿足。#define ST2_SEH 0x08 /* Scan Equal Hit */
// 檢索條件滿足。#define ST2_WC 0x10 /* Wrong Cylinder */
// 磁道(柱面)號不符。#define ST2_CRC 0x20 /* CRC error in data field */
// 數據場CRC 校驗錯。#define ST2_CM 0x40 /* Control Mark = deleted */
// 讀數據遇到刪除標志。/* 狀態字節3(ST3)各比特位的含義 */#define ST3_HA 0x04 /* Head (Address) */
// 磁頭號。#define ST3_TZ 0x10 /* Track Zero signal (1=track 0) */
// 零磁道信號。#define ST3_WP 0x40 /* Write Protect */
// 寫保護。/* 軟盤命令碼 */#define FD_RECALIBRATE 0x07 /* move to track 0 */
// 重新校正(磁頭退到零磁道)。#define FD_SEEK 0x0F /* seek track */
// 磁頭尋道。#define FD_READ 0xE6 /* read with MT, MFM, SKip deleted */
// 讀數據(MT 多磁道操作,MFM 格式,跳過刪除數據)。#define FD_WRITE 0xC5 /* write with MT, MFM */
// 寫數據(MT,MFM)。#define FD_SENSEI 0x08 /* Sense Interrupt Status */
// 檢測中斷狀態。#define FD_SPECIFY 0x03 /* specify HUT etc */
// 設定驅動器參數(步進速率、磁頭卸載時間等)。/* DMA 命令 */#define DMA_READ 0x46 // DMA 讀盤,DMA 方式字(送DMA 端口12,11)。#define DMA_WRITE 0x4A // DMA 寫盤,DMA 方式字。#endif
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -