昨天把磁盘的结构搞清楚了,今天正式就搞清楚软盘的细解。
3.5 英寸软盘是旧时代的产物了,只能采用 CHS 方式寻址:
; ======================================================================================== ; 3.5英寸软盘的 CHS 参数: ; 80个柱面,柱面编号 0 ~ 79; ; 2个磁头,磁头编号 0、1; ; 每个磁道有 18 个扇区,每个磁道上扇区编号 1 ~ 18; ; 每个扇区可存放 512 字节的数据。 ; ****************************************************************************************
系统 BIOS 提供了对磁盘读写操作的相关中断:
; ======================================================================================== ; int 13h(直接磁盘服务)功能表 ; ---------------------------------------------------------------------------------------- ; 1、磁盘系统复位 ; 入口参数:AH = 00H ; DL = 驱动器号:00H~7FH 为软盘,80H~0FFH 为硬盘 ; 出口参数:CF = 0 —— 操作成功,AH = 00H; ; 否则,AH = 状态代码,参见功能号 01H 中的说明 ; ---------------------------------------------------------------------------------------- ; 2、读、写扇区 ; 入口参数:AH = 功能号:02H 读扇区、03H 写扇区 ; AL = 待操作的扇区个数 ; CH = 柱面号,CL = 起始扇区号 ; DH = 磁头号,DL = 驱动器号:00H ~ 7FH 为软盘,80H ~ 0FFH 为硬盘 ; ES : BX = 存放数据的缓冲区地址 ; 出口参数:CF = 0 —— 操作成功,AH = 00H,AL = 实际操作的扇区个数; ; 否则,AH = 状态代码,其定义如下: ; 00H — 无错 ; 01H — 非法命令 ; 02H — 地址目标未发现 ; 03H — 磁盘写保护(软盘) ; 04H — 扇区未发现 ; 05H — 复位失败(硬盘) ; 06H — 软盘取出(软盘) ; 07H — 错误的参数表(硬盘) ; 08H — DMA(Direct Memory Access)越界(软盘) ; 09H — DMA 超过 64K 界限 ; 0AH — 错误的扇区标志(硬盘) ; 0BH — 错误的磁道标志(硬盘) ; 0CH — 介质类型未发现(软盘) ; 0DH — 格式化时非法扇区号(硬盘) ; 0EH — 控制数据地址目标被发现(硬盘) ; 0FH — DMA 仲裁越界(硬盘) ; 10H — 不正确的 CRC(Cyclic Redundancy Check code) ; 或 ECC(Error Checking & Correcting code)编码 ; 11H — ECC 校正数据错(硬盘) ; 20H — 控制器失败 ; 40H — 查找失败 ; 80H — 磁盘超时(未响应) ; AAH — 驱动器未准备好(硬盘) ; BBH — 未定义的错误(硬盘) ; CCH — 写错误(硬盘) ; E0H — 状态寄存器错(硬盘) ; FFH — 检测操作失败(硬盘) ; ****************************************************************************************
好了,准备工作都完成了,现在可以直接读写3.5英寸软盘了。老规矩,代码直接贴出来:
; ReadSectors.nas
时间: 2024-10-20 19:28:45