美文网首页
BIOS 中断描述(2)

BIOS 中断描述(2)

作者: 飞鱼会飞 | 来源:发表于2022-09-30 18:28 被阅读0次

    3. 中断服务: 12H 报告内存大小

    报告系统中连续 1K 内存块的数量(最多 640k)。

    • 输入:无
    • 输出:
      1. AX = 内存大小(最多640k)

    AX 中返回的值与存储在内存位置 0:0413h 中的值相同,该值在上电测试期间被初始化。

    这是整个系统可用的内存量。这不是用户程序可用的内存量。使用INT 21h、功能48h来确定用户程序可用的内存量。

    要确定高于1024K地址范围的内存量,请使用INT 15h、服务88h。

    4. 中断服务: 13H 磁盘IO服务,软盘和硬盘

    4.1 服务号:0 复位硬盘/软盘系统

    复位硬盘或者软盘控制器和驱动器,强制复位读写磁头。

    • 输入:
      1. AH = 00h
      2. DL = 驱动器号
    • 输出:
      1. AH = 操作状态
      2. CF = 如果错误则设置,否则清除

    如果DL大于等于80h,则软盘控制器复位,然后硬盘控制器复位。 这种情况下AH中返回的状态是硬盘的状态; 要获取软盘控制器的状态,请检查内存地址 0:441H。

    如果磁盘BIOS例程报告错误,请使用此服务复位软盘和/或硬盘控制器并重试该操作。

    只有当 DL 中的值小于或等于系统上的最后一个硬盘时,才会执行硬盘复位。 即DL的低7位应小于等于硬盘的个数。

    对于 AT、XT-286 和 PC convertible,BIOS在等待中断之前对软盘(类型 = 01h)和硬盘(类型 = 00h)执行int 15h、服务90h(设备忙碌)。 在完成执行时,执行int 15h,服务 91h(中断完成)。 此外,需要启动软盘马达的软盘操作将调用int 15h,服务90h(设备忙碌),其类型等于“软盘驱动器马达启动”(类型 = FDH)。 这允许系统在驱动马达等待加速时执行另一项任务。

    4.2 服务号:1 获取磁盘系统状态

    返回最近的硬盘或软盘操作的状态信息。

    • 输入:
      1. AH = 01h
      2. DL = 驱动器号
    • 输出:
      1. AH = 操作状态
      2. CF = 如果错误则设置,否则清除

    操作状态 (AH)

    AH Meaning
    ffh 检测操作失败(硬盘)
    e0h 状态错误(硬盘)
    cch 写错误(硬盘)
    bbh 未定义错误(硬盘)
    80h 驱动器未就绪
    40h 查找失败
    20h 控制器故障
    11h ECC 校正的数据错误(硬盘)
    10h CRC 或 ECC 数据错误
    0fh DMA 仲裁超出范围(硬盘)
    0eh 检测到控制数据地址标记(硬盘)
    0dh 格式化时非法扇区号(硬盘)
    0ch 媒体类型未发现(软盘)
    0bh 错误的磁道标志(硬盘)
    0ah 错误的扇区标志(硬盘)
    09h DMA超过64K界限
    08h DMA越界
    07h 驱动器参数活动失败(硬盘)
    06h 软盘取出(软盘)
    05h 复位失败(硬盘)
    04h 扇区未发现
    03h 磁盘写保护
    02h 地址目标未发现
    01h 非法命令
    00h 无错

    最近的软盘操作状态是在 0:441h。 最近的硬盘操作状态是在0:474h。

    对于 AT、XT-286 和 PC Convertible,BIOS在等待中断之前为软盘(类型 = 01h)和硬盘(类型 = 00h)执行INT 15h、服务90h (设备忙碌)。 在完成时执行INT 15h,服务91h(中断完成)。 此外,需要启动软盘马达的软盘操作将调用INT 15h,服务 90(设备忙碌),类型等于“软盘驱动器马达启动”(类型 = FDh)。 这允许系统在驱动马达等待加速时执行另一项任务。

    4.3 服务号:2 读取扇区到内存

    将硬盘或软盘上的一个或多个扇区读入内存。

    • 输入:
      1. AH = 02h
      2. AL = 要读取的扇区数
      3. CH = 柱面号(10 位值,高2位在CL中)
      4. CL = 开始扇区号
      5. DH = 磁头号
      6. DL = 驱动器号
      7. ES:BX = 内存缓冲区地址
    • 输出:
      1. AH = 磁盘操作状态
      2. AL = 读取的扇区数
      3. CF = 如果错误则设置,其他清除

    从磁盘读取从指定位置(磁头、柱面和磁道)开始的指定数量的扇区到从 ES:BX 开始的缓冲区中。

    DL 中的值小于80H指定软盘;大于80H的值指定硬盘。 例如,0表示第一张软盘,而 80H表示第一张硬盘。

    柱面编号是十位数量(0 到 1023)。 它的最高有效两位在CL的第7位和第6位;其余八位在CH中。起始扇区号适用CL的低位部分(低6位)。

    AL(读取的扇区数)中返回的值可能不会给出正确的扇区数,即使没有发生错误。 使用进位标志和 AH(状态标志)的结果来确定操作的状态。

    对于软盘,写入的扇区必须在同一柱面和同一侧,而硬盘一次最多可以写入 128 个扇区。

    如果在读取扇区时遇到错误,请使用服务 0 重置驱动器并重试该操作。 建议在发出错误信号之前至少重试 3 次,因为错误可能是由于软盘马达没有达到最高速度造成的。

    由于 DMA 通道的架构,如果内存中用于扇区的缓冲区与 64k 页边界重叠,则会发生错误。 64k 页面边界是以下内存之一(10000h、20000h、30000h 等)。 确保缓冲区的任何部分都没有落在这样的边界上。 如果是,则创建一个新缓冲区或在边界之后启动缓冲区。

    如果返回错误 11h,则数据正常,但BIOS报告已使用ECC纠错算法进行了更正。 如果信息被写回,错误可能不会再次发生。

    该服务与 DOS int 25h(读取绝对扇区)的不同之处在于 DOS int 25h 可用于逻辑设备 RAM 磁盘、伯努利驱动器等)。 它更加灵活。 int 25h 也适用于线性地址,而此服务适用于 3 个坐标来寻址磁盘位置。 int 25h 没有上面提到的 DMA 问题,一次操作可以读取的扇区数没有限制。 此外,int 25h 将自己进行所有错误重试尝试。 应使用 int 25h 代替此服务以获得绝对扇区控制。 可能需要使用此服务而不是 int 25h 的程序包括分区控制器、系统软件和磁盘缓存软件。

    对于 AT、XT-286 和 PC Convertible,BIOS在等待中断之前为软盘(类型 = 01h)和硬盘(类型 = 00h)执行INT 15h、服务90h (设备忙碌)。 在完成时执行INT 15h,服务91h(中断完成)。 此外,需要启动软盘马达的软盘操作将调用INT 15h,服务 90(设备忙碌),类型等于“软盘驱动器马达启动”(类型 = FDh)。 这允许系统在驱动马达等待加速时执行另一项任务。

    4.4 服务号:3 从内存写到扇区

    将内存中的一个或多个扇区写入硬盘或软盘。

    • 输入:
      1. AH = 03h
      2. AL = 要写入的扇区数量
      3. CH = 柱面号(10位值, CL中的高2位)
      4. CL = 开始扇区号
      5. DH = 磁头号
      6. DL = 驱动器号
      7. ES:BX = 内存缓冲区地址
    • 输出:
      1. AH = 操作状态码
      2. AL = 已写入的扇区数量
      3. CF = 如果错误则设置,其他清除

    将指定数量的扇区从 ES:BX 的缓冲区写入磁盘上的指定位置(磁头、柱面和磁道)。

    DL中的值小于80H指定软盘;大于80H的值指定固定磁盘。例如,0表示第一张软盘,而 80H表示第一个硬盘。

    柱面编号是十位数量(0到1023)。 它的最高有效两位在CL的第7位和第6位;其余八位在CH中。 起始扇区号适用CL的低位部分(低6位)。

    AL(读取的扇区数)中返回的值可能不会给出正确的扇区数,即使没有发生错误。 使用进位标志和 AH(状态标志)的结果来确定操作的状态。

    对于软盘而言,读取的扇区必须在同一柱面和同一侧,而硬盘一次最多可以读取 128 个扇区。

    如果在读取扇区时遇到错误,请使用服务 0 重置驱动器并重试该操作。 建议在发出错误信号之前至少重试 3 次,因为错误可能是由于软盘马达没有达到最高速度造成的。

    由于 DMA 通道的架构,如果内存中用于扇区的缓冲区与 64k 页边界重叠,则会发生错误。 64k 页面边界是以下内存之一(10000h、20000h、30000h 等)。 确保缓冲区的任何部分都没有落在这样的边界上。 如果是,则创建一个新缓冲区或在边界之后开始缓冲区。

    该服务与DOS int 26H(写入绝对扇区)的不同之处在于DOS int 26h可用于逻辑设备(RAM 磁盘、伯努利驱动器等)。它更加灵活。int 26h也适用于线性地址,而此服务适用于3个坐标来寻址磁盘位置。int 26h 没有上面提到的DMA问题,单次操作可以写入的扇区数没有限制。此外,int 26h 将自己进行所有的错误重试尝试。应使用int 26h代替此服务以获得绝对扇区控制。 可能需要使用此服务而不是int 26h的程序包括分区表修改器、系统软件和磁盘缓存软件。

    对于 AT、XT-286 和 PC Convertible,BIOS在等待中断之前为软盘(类型 = 01h)和硬盘(类型 = 00h)执行INT 15h、服务90h (设备忙碌)。 在完成时执行INT 15h,服务91h(中断完成)。 此外,需要启动软盘马达的软盘操作将调用INT 15h,服务 90(设备忙碌),类型等于“软盘驱动器马达启动”(类型 = FDh)。 这允许系统在驱动马达等待加速时执行另一项任务。

    4.5 服务号:4 校验扇区

    验证一个或多个硬盘或软盘扇区。

    • 输入:
      1. AH = 04h
      2. AL = 校验的扇区数量
      3. CH = 柱面号(10位值,CL中的高2位)
      4. CL = 开始扇区号
      5. DH = 磁头号
      6. DL = 驱动器号
      7. ES:BX = 内存缓冲区地址
    • 输出:
      1. AH = 操作状态值
      2. AL = 校验的扇区数量
      3. CF = 如果错误则设置,其他清除

    验证从磁盘上指定位置(磁头、柱面和磁道)开始的指定扇区数。 验证过程包括检查是否可以找到和读取扇区(检查地址字段)以及循环冗余校验 (CRC) 是否正确。 此操作不需要存储区。

    DL中的值小于80H指定软盘;大于80H的值指定固定磁盘。例如,0表示第一张软盘,而 80H表示第一个硬盘。

    柱面编号是十位数量(0到1023)。 它的最高有效两位在CL的第7位和第6位;其余八位在CH中。 起始扇区号适用CL的低位部分(低6位)。

    AL(读取的扇区数)中返回的值可能不会给出正确的扇区数,即使没有发生错误。 使用进位标志和 AH(状态标志)的结果来确定操作的状态。

    对于软盘,验证的扇区必须全部位于同一柱面和同一侧,而硬盘驱动器一次最多可以验证 255 个扇区。

    如果在验证扇区时遇到错误,请使用服务 0 重置驱动器并重试该操作。 建议在发出错误信号之前至少重试 3 次,因为错误可能是由于软盘马达没有达到最高速度造成的。

    对于 AT、XT-286 和 PC Convertible,BIOS在等待中断之前为软盘(类型 = 01h)和硬盘(类型 = 00h)执行INT 15h、服务90h (设备忙碌)。 在完成时执行INT 15h,服务91h(中断完成)。 此外,需要启动软盘马达的软盘操作将调用INT 15h,服务 90(设备忙碌),类型等于“软盘驱动器马达启动”(类型 = FDh)。 这允许系统在驱动马达等待加速时执行另一项任务。

    4.6 服务号:5 格式化磁道

    使用扇区地址和大小信息初始化指定柱面上的每个扇区。

    • 输入:
      1. AH = 04h
      2. AL = 要格式化(软盘)或交错 (XT) 的扇区数
      3. CH = 柱面号(10位值,CL中的高2位)
      4. DH = 磁头号
      5. DL = 驱动器号
      6. ES:BX = 指向地址字段列表的指针
    • 输出:
      1. AH = 操作状态码
      2. CF = 如果错误则设置,其他清除

    DL 中小于 80h 的值指定软盘; 从 80h 到 87h 的值指定硬盘。

    柱面编号是十位数量(0到1023)。 它的最高有效两位在CL的第7位和第6位;其余八位在CH中。 起始扇区号适用CL的低位部分(低6位)。

    如果遇到错误,请使用服务0h重置驱动器并重试操作。

    对于 AT、XT-286 和 PC Convertible,BIOS在等待中断之前为软盘(类型 = 01h)和硬盘(类型 = 00h)执行INT 15h、服务90h (设备忙碌)。 在完成时执行INT 15h,服务91h(中断完成)。 此外,需要启动软盘马达的软盘操作将调用INT 15h,服务 90(设备忙碌),类型等于“软盘驱动器马达启动”(类型 = FDh)。 这允许系统在驱动马达等待加速时执行另一项任务。

    “交错”是将逻辑上连续的扇区放在物理上不连续的位置的过程,以提高磁盘性能。 下面概述了根据介质类型(硬盘或软盘)和机器类型更改交错因子的不同方法。

    指向地址字段列表 (ES:BX) 的指针根据格式化过程将发生在哪种机器和磁盘类型(硬盘或软盘)上而有所不同。 此外,对于不同的机器和磁盘类型,交织因子的指定也不同。 以下是不同类型机器和磁盘的格式。

    ES:BX 指向要格式化的磁道上每个扇区的地址标记列表。 每个地址标记由4个字节组成。因此,要格式化9扇区磁道,列表必须由36个字节(4 * 9)组成。组成地址标记的4个字节定义如下:

    Byte 1 : 柱面号(C)
    Byte 2 : 磁头号(H)
    Byte 3 : 扇区号(R), 或记录号
    Byte 4 : 扇区尺寸(N)
    0 : 128 bytes每扇区
    1 : 256 bytes每扇区
    2 : 512 bytes每扇区
    3 : 1024 bytes每扇区

    标准 MS-DOS 软盘被格式化为每扇区 512 字节 (n = 2) 并且没有交错。 因此,标准 MS-DOS 九扇区磁道的地址字段列表如下所示

    C H R N    C H R N    C H R N ... C H R N
    0 1 1 2    0 1 2 2    0 1 3 2     0 1 9 2
    

    在格式化软盘之前,如果驱动器支持的软盘类型不止一种,您需要调用服务71h(设置格式的DASD类型)或服务18h(设置格式的媒体类型)。如果不调用这些服务,服务05h 将使用磁盘驱动器支持的最大磁盘类型格式化磁盘。不支持服务17h(设置格式的 DASD类型)或服务18h(设置格式的媒体类型)的旧机器可能必须直接修改软盘驱动器参数表。 该表由int 1eh指向。如果对软盘参数表进行了修改,请确保恢复原始值。

    XT 使用 AL 寄存器来指定交错因子。 XT 不需要指针 ES:BX。

    这些机器使用一个地址表(由 ES:BX 指向),类似于软盘模式中使用的地址表,但具有视觉变化。缓冲区的长度必须为512字节。 前2 *(每个磁道的扇区)字节包含磁道上每个扇区的信息。 对于每个扇区,表中有 2 个字节。 这 2 个字节定义如下:
    Byte 1 : 扇区格式状态(F)
    00h : 好扇区
    80h : 坏扇区
    Byte 2 : 扇区号(N)

    例如,下表用于格式化硬盘的磁道,每个磁道有17个扇区,交错因子为3。

    db    00h, 01h, 00h, 07h, 00h, 0Dh, 00h, 02h, 00h, 08h, 00h, 0Eh
    db    00h, 03h, 00h, 09h, 00h, 0Fh, 00h, 04h, 00h, 0Ah, 00h, 10h
    db    00h, 05h, 00h, 0Bh, 00h, 11h, 00h, 06h, 00h, 0Ch
    

    4.7 服务号:6 格式化磁道并设置坏扇区标志(硬盘)

    使用扇区地址和大小信息初始化指定柱面上的每个扇区。 还通过在ID字段中设置坏扇区标志将轨道上的扇区标记为不可用(坏)。只有XT可以使用此服务。

    • 输入:
      1. AH = 06h
      2. AL = 交错值
      3. CH = 柱面号(10位值,CL中的高2位)
      4. DH = 磁头号
      5. DL = 驱动器号
    • 输出:
      1. AH = 操作状态值
      2. CF = 如果错误则设置,其他清除

    该服务将销毁磁盘上所有以前的内容。

    柱面编号是一个十位的数量(0到1023)。它的最高有效两位在CL的第7位和第6位;其余八位在CH中。

    如果遇到错误,请使用服务0h重置驱动器并重试操作。

    4.8 服务号:7 格式化磁盘从柱面开始(硬盘)

    用扇区地址和大小信息初始化指定柱面和所有后续柱面上的每个扇区。只有XT可以使用此服务。

    • 输入:
      1. AH = 07h
      2. AL = 交错值
      3. CH = 柱面号(10位值,CL中的高2位)
      4. DL = 驱动器号
    • 输出:
      1. AH = 操作状态值
      2. CF = 如果错误则设置,其他清除

    该服务将销毁磁盘上所有以前的内容。

    柱面编号是一个十位的数量(0到1023)。它的最高有效两位在CL的第7位和第6位;其余八位在CH中。

    如果遇到错误,请使用服务0h重置驱动器并重试操作。

    4.9 服务号:8 获取当前驱动器参数(硬盘)

    报告磁盘驱动器参数,例如磁头数、磁道数和每个磁道的扇区数。

    • 输入:
      1. AH = 08h
      2. DL = 驱动器号
    • 输出:
      1. CH = 柱面的最大值(10 位值;CL中的高2位)
      2. CL = 扇区最大值
      3. DH = 磁头的最大值
      4. 对于硬盘:
        1. AH = 操作状态值
        2. DL = 硬盘数量
        3. CF = 如果错误则设置,其他清除
      5. 对于软盘:
        1. AX = 0
        2. BL = 位7到4 = 0
          位3到0 – CMOS 中的有效驱动器类型
        3. BH = 0
        4. DL = 软盘数量
        5. ES:DI = 指向11字节软盘驱动器参数表的指针

    此服务适用于 84 年 1 月 10 日之后的 PC Convertibles、XT-286s 和 ATs 上的软盘。 所有机器都支持该服务的硬盘模式。

    DL中的值小于80H指定软盘;大于80H的值指定固定磁盘。例如,0表示第一张软盘,而 80H表示第一个硬盘。

    柱面编号是一个十位的数量(0到1023)。它的最高有效两位在CL的第7位和第6位;其余八位在CH中。起始扇区号适用CL的低位部分(低 6 位)。

    如果驱动器是硬盘并且有错误,则将设置进位标志。如果驱动器号无效,AH将等于7。如果没有硬盘驱动器或未安装硬盘驱动器适配器,则AH将等于1。

    如果驱动器是软盘并且出现错误,则:

    如果驱动器类型已知但 1) CMOS无效,不存在,2) 电池已放电,或 3) CMOS校验和无效,则所有寄存器将包含有效信息,但BL将为0。

    如果驱动器类型未知或未安装请求的驱动器,则 BX、CX、DH、ES 和DI都将为0。DL将包含软盘驱动器的数量。

    CMOS 中的有效软盘驱动器类型

    BL (bits 3-0) 含义
    00h 未知驱动器类型
    01h 360K, 5.25英寸, 40轨
    02h 1.2M, 5.25英寸, 80轨
    03h 720K, 3.5英寸, 80轨

    对于 AT、XT-286 和 PC Convertible,BIOS在等待中断之前为软盘(类型 = 01h)和硬盘(类型 = 00h)执行INT 15h、服务90h (设备忙碌)。 在完成时执行INT 15h,服务91h(中断完成)。 此外,需要启动软盘马达的软盘操作将调用INT 15h,服务 90(设备忙碌),类型等于“软盘驱动器马达启动”(类型 = FDh)。 这允许系统在驱动马达等待加速时执行另一项任务。

    4.10 服务号:9 初始化硬盘表(硬盘)

    使用参数表初始化固定磁盘。

    • 输入:
      1. AH = 09h
      2. DL = 驱动器号 (必须设置第7位)
    • 输出:
      1. AH = 操作状态值
      2. CF = 如果错误则设置,其他清除

    此服务的行为取决于执行它的机器类型:

    XT

    如果驱动器编号是合法值 (80h <= DL <= 87h),则驱动器0和1 都被初始化。INT 41h实际上指向四个表。用于驱动器编号的表由硬盘驱动器适配器上的开关设置确定。如果驱动器0的初始化失败,则不会尝试驱动器1的初始化。

    AT and XT-286

    如果DL为80h,则驱动器0通过INT 41h初始化。如果DL为81h,则驱动器1通过INT 46h初始化。

    如果遇到错误,请使用服务0h重置驱动器并重试操作

    对于 AT、XT-286 和 PC Convertible,BIOS在等待中断之前为软盘(类型 = 01h)和固定磁盘(类型 = 00h)执行INT 15h、服务 90h (设备忙碌)。INT 15h,服务 91h(中断完成),在完成时执行。

    4.11 服务号:10 读长扇区

    从硬盘将一个或多个长扇区读入内存。长扇区是一个信息扇区加上代表该扇区的ECC代码的4个字节。此服务只能在硬盘上执行。

    • 输入:
      1. AH = 0ah
      2. AL = 要读取的扇区数量(1-127)
      3. CH = 柱面号(10位值A,CL中的高2位)
      4. CL = 开始扇区号
      5. DH = 磁头号
      6. DL = 驱动器号
      7. ES:BX = 内存缓冲区地址
    • 输出:
      1. AH = 操作状态值
      2. AL = 读取的扇区数量
      3. CF = 如果错误则设置,其他清除

    该服务将从硬盘的指定位置(磁头、柱面和磁道)开始的指定数量的长扇区读取到从ES:BX开始的缓冲区中。

    此服务仅用于诊断。有关读取扇区命令的更通用版本,请参阅服务 02h,它读取软盘和硬盘的扇区。另请参阅INT 25h(DOS),它允许从任何类型的块设备读取绝对扇区。

    柱面编号是一个十位的数量(0到1023)。它的最高有效两位在CL的第7位和第6位;其余八位在CH中。起始扇区号适用CL的低位部分(低 6 位)。

    AL(读取的扇区数)中返回的值可能不会给出正确的扇区数,即使没有发生读取错误。 使用进位标志和 AH(状态标志)的结果来确定操作的状态。

    要读取的扇区数(AL)最多可以是 127 个扇区。

    如果在读取扇区时遇到错误,请使用服务0h重置驱动器并重试该操作。建议在发出错误信号之前至少重试3次,因为错误可能是由于软盘马达没有达到最高速度造成的。

    由于DMA通道的架构,如果内存中用于扇区的缓冲区与64K页边界重叠,则会发生错误。64K页面边界是一个内存位置,它是以下之一(10000h、20000h、30000h 等)。确保缓冲区的任何部分都不会落在此边界上。如果是,则创建一个新缓冲区或在边界之后启动缓冲区。

    如果返回错误 11h,则数据良好,但BIOS报告已通过ECC纠错算法进行了纠正。如果信息被写回,错误可能不会再次发生。

    对于 AT、XT-286 和 PC Convertible,BIOS在等待中断之前为软盘(类型 = 01h)和固定磁盘(类型 = 00h)执行INT 15h、服务 90h (设备忙碌)。INT 15h,服务 91h(中断完成),在完成时执行。

    4.12 服务号:11 写长扇区

    将一个或多个长扇区从内存写入硬盘。长扇区是一个信息扇区加上代表该扇区的ECC代码的4个字节。此服务只能在硬盘上执行。

    • 输入:
      1. AH = 0bh
      2. AL = 要写入的扇区数量(1-127)
      3. CH = 柱面号(10位值,CL中的高2位)
      4. CL = 开始扇区号
      5. DH = 磁头号
      6. DL = 驱动器号
      7. ES:BX = 内存缓冲区地址
    • 输出:
      1. AH = 操作状态码B
      2. AL = 写入的扇区数量
      3. CF = 如果错误则设置,其他清除

    将内存缓冲区中的信息写入从指定位置(磁头、柱面和磁道)开始的扇区

    此服务仅用于诊断。有关更通用的版本,请参阅服务 03h,它为软盘和硬盘写入扇区。另请参阅INT 26h(DOS),它允许从任何类型的块设备写入绝对扇区。

    柱面编号是一个十位的数量(0到1023)。它的最高有效两位在CL的第7位和第6位;其余八位在CH中。起始扇区号适用CL的低位部分(低 6 位)。

    AL(写入的扇区数)中返回的值可能不会给出正确的扇区数,即使没有发生写入错误。使用进位标志和AH(状态标志)的结果来确定操作的状态。

    要写入的扇区数(AL)最多可以是 127 个扇区。

    如果在写入扇区时遇到错误,请使用服务0h重置驱动器并重试该操作。建议在发出错误信号之前至少重试3次,因为错误可能是由于软盘马达没有达到最高速度造成的。

    由于DMA通道的架构,如果内存中用于扇区的缓冲区与64K页边界重叠,则会发生错误。64K页面边界是一个内存位置,它是以下之一(10000h、20000h、30000h 等)。确保缓冲区的任何部分都不会落在此边界上。如果是,则创建一个新缓冲区或在边界之后启动缓冲区。

    对于 AT、XT-286 和 PC Convertible,BIOS在等待中断之前为软盘(类型 = 01h)和固定磁盘(类型 = 00h)执行INT 15h、服务 90h (设备忙碌)。INT 15h,服务 91h(中断完成),在完成时C执行。

    4.13 服务号:12 查找柱面

    将读/写磁头定位在硬盘的指定柱面上。 此服务只能在硬盘上执行。

    • 输入:
      1. AH = 0ch
      2. CH = 柱面号(10位值,CL中的高2位)
      3. DH = 磁头号
      4. DL = 驱动器号(必须设置第 7 位)
    • 输出:
      1. AH = 操作状态值
      2. CF = 如果错误则设置,其他清除

    柱面编号是十位数量(0到1023)。 它的最高有效两位在CL的第7位和第6位;其余八位在CH中。 起始扇区号适用CL的低位部分(低6位)。

    如果遇到错误,请使用服务0h重置驱动器并重试操作。

    即使不需要磁头号值,您也必须提供一个合法的值——否则将不会执行查找并返回错误。

    对于 AT、XT-286 和 PC Convertible,BIOS在等待中断之前为软盘(类型 = 01h)和固定磁盘(类型 = 00h)执行INT 15h、服务 90h (设备忙碌)。INT 15h,服务 91h(中断完成),在完成时执行。

    4.14 服务号:13 硬盘复位

    重置硬盘控制器和驱动器,强制重新校准读/写磁头。 此服务只能在硬盘上执行。

    • 输入:
      1. AH = 0dh
      2. DL = 驱动器号(必须设置第 7 位)
    • 输出:
      1. AH = 操作状态值
      2. CF = 如果错误则设置,其他清除

    有关此服务的更通用版本,请参阅服务 00h。

    仅当 DL 中的值小于或等于系统上的最后一个硬盘时,才会执行硬盘重置。 即DL的低7位应小于等于硬盘的个数。

    对于 AT、XT-286 和 PC Convertible,BIOS在等待中断之前为软盘(类型 = 01h)和固定磁盘(类型 = 00h)执行INT 15h、服务 90h (设备忙碌)。INT 15h,服务 91h(中断完成),在完成时执行。

    4.15 服务号:14, 15 用于诊断保留

    4.16 服务号:16 测试硬盘是否就绪

    测试以查看硬盘驱动器是否准备就绪。 此服务只能在硬盘上执行。

    • 输入:
      1. AH = 10h
      2. DL = 驱动器号(必须设置第 7 位)
    • 输出:
      1. AH = 操作状态值
      2. CF = 如果错误则设置,其他清除

    如果硬盘驱动器准备好,则 AH 为 0 并且CF标志清零。

    对于 AT、XT-286 和 PC Convertible,BIOS在等待中断之前为软盘(类型 = 01h)和固定磁盘(类型 = 00h)执行INT 15h、服务 90h (设备忙碌)。INT 15h,服务 91h(中断完成),在完成时执行。

    4.17 服务号:17 重新校准驱动器

    此服务重新校准指定的硬盘以重置寻道速度。 此服务只能在硬盘上执行。

    • 输入:
      1. AH = 11h
      2. DL = 驱动器号(必须设置第 7 位)
    • 输出:
      1. AH = 操作状态值
      2. CF = 如果错误则设置,其他清除

    该服务由服务 00h和服务0Dh调用。因此调用这些服务中的任何一个都将完成与调用服务11h相同的操作。

    该服务向硬盘控制器发送RECALIBRATE命令,使控制器默认为其原始状态,并将读/写臂置于磁道0。

    如果遇到错误,请使用服务0h重置驱动器并重试操作。

    对于 AT、XT-286 和 PC Convertible,BIOS在等待中断之前为软盘(类型 = 01h)和固定磁盘(类型 = 00h)执行INT 15h、服务 90h (设备忙碌)。INT 15h,服务 91h(中断完成),在完成时执行。

    4.18 服务号:18, 19, 20 用于诊断保留

    4.19 服务号:21 读取磁盘类型

    返回与驱动器关联的接口类型以及驱动器包含的扇区数。 可用于确定软盘驱动器是否支持检测软盘更换。

    • 输入:
      1. AH = 15h
      2. DL = 驱动器号(必须设置第 7 位)
    • 输出:
      1. CF = 如果错误则设置,其他清除
      2. AH = 磁盘类型,如果出现错误,则是操作状态码
      3. CX:DX = 如果没有错误并且AH<>0, 则为4字节的整数值表示扇区数

    此服务不适用于 86 年 1 月 10 日之前的 PC、PCjrs 和 XT。

    此服务允许您确定驱动器是否支持更改线路状态服务(服务 16h)。更改线路状态服务通知系统自上次访问后软盘是否已更改。

    使用服务17h(Set DASD Type)设置类型。

    磁盘类型

    AH Meaning
    00h 驱动器不存在
    01h 软盘, 不允许更换
    02h 软盘, 允许更换
    03h 硬盘

    对于 AT、XT-286 和 PC Convertible,BIOS在等待中断之前为软盘(类型 = 01h) 和硬盘(类型 = 00h) 执行INT 15h、服务90h (设备忙碌)。 INT 15h,服务91h(中断完成),在完成时执行。 此外,需要启动软盘马达的软盘操作将调用INT 15h,服务 90(设备忙),类型等于“软盘驱动器马达启动”(类型 = FDh)。 这允许系统在驱动马达等待加速时执行另一项任务。

    4.20 服务号:22 读取磁盘状态

    此服务报告自上次访问磁盘后是否已更改软盘(磁盘驱动器门已打开)。 此服务只能在软盘上执行。

    • 输入:
      1. AH = 16h
      2. DL = 驱动器号(必须设置第7位)
    • 输出:
      1. CF = 如果错误则设置,其他清除
      2. AH = 磁盘状态

    此服务不适用于 86 年 1 月 10 日之前的 PC、PCjrs 和 XT。

    使用服务 15h 确定驱动器是否支持change line检测。

    如果进位标志置位且AH为01h或80h,则发生错误。 如果AH为 06h,进位标志将被设置,但这并不表示错误; 相反,它表示“软盘更换”信号处于活动状态(如下所示)。

    软盘更换状态

    AH Meaning
    00h “软盘更换”信号未激活
    01h 无效的软盘参数 (ERROR)
    06h “软盘更换”信号激活
    80h 驱动器未准备好(错误)

    对于 AT、XT-286 和 PC Convertible,BIOS在等待中断之前为软盘(类型 = 01h) 和硬盘(类型 = 00h) 执行INT 15h、服务90h (设备忙碌)。 INT 15h,服务91h(中断完成),在完成时执行。 此外,需要启动软盘马达的软盘操作将调用INT 15h,服务 90(设备忙),类型等于“软盘驱动器马达启动”(类型 = FDh)。 这允许系统在驱动马达等待加速时执行另一项任务。

    4.21 服务号:23 设置格式化磁盘类型

    此服务为特定类型的驱动器设置软盘类型,以便正确格式化磁盘。 此服务只能在软盘上执行。

    • 输入:
      1. AH = 17h
      2. AL = 软盘/驱动器组合
      3. DL = 驱动器号(必须设置第7位)
    • 输出:
      1. CF = 如果错误则设置,其他清除
      2. AH = 操作状态值(参考服务01h)

    软盘/驱动器组合

    AL 含义
    01h 360K 驱动器中的 320/360K 软盘
    02h 1.2M 驱动器中的 360K 软盘
    03h 1.2M 驱动器中的 1.2M 软盘
    04h 720K 驱动器中的 720K 软盘

    此服务不适用于 86 年 1 月 10 日之前的 PC、PCjrs 和 XT。

    04h 的软盘/驱动器组合值对于85年6月10日之前的AT无效。

    对于 AT、XT-286 和 PC Convertible,BIOS在等待中断之前为软盘(类型 = 01h) 和硬盘(类型 = 00h) 执行INT 15h、服务90h (设备忙碌)。 INT 15h,服务91h(中断完成),在完成时执行。 此外,需要启动软盘马达的软盘操作将调用INT 15h,服务 90(设备忙),类型等于“软盘驱动器马达启动”(类型 = FDh)。 这允许系统在驱动马达等待加速时执行另一项任务。

    4.22 服务号:24 设置格式化磁盘媒体类型

    此服务返回指定软盘驱动器的软盘驱动器参数表 (DDPT)。 此服务只能在软盘上执行。

    • 输入:
      1. AH = 18h
      2. CH = 磁道数(10 位值;CL 中的高 2 位)
      3. CL = 每个轨道的扇区数
      4. DL = 驱动器号(位 7 必须清除)
    • 输出:
      1. CF = 如果错误则设置,其他清除
      2. AH = 操作状态值(参考服务01h)
      3. ES:DI = 指向 11 字节软盘驱动器参数表的指针

    此服务不适用于86年1月10日之前的PC、PCjrs、XT和85年11月15日之前的AT。

    支持此服务的机器在调用服务05h(格式化轨道)之前调用它。

    对于每种支持的媒体类型,都有一个软盘驱动器参数表 (DDPT)。

    如果更改状态行处于活动状态(即发生磁盘更改),此服务首先尝试停用更改状态行(通过正确识别新软盘)。 如果无法这样做,服务将返回错误。 因此,如果驱动器中没有软盘,则会返回错误。

    对于 AT、XT-286 和 PC Convertible,BIOS在等待中断之前为软盘(类型 = 01h) 和硬盘(类型 = 00h) 执行INT 15h、服务90h (设备忙碌)。 INT 15h,服务91h(中断完成),在完成时执行。 此外,需要启动软盘马达的软盘操作将调用INT 15h,服务 90(设备忙),类型等于“软盘驱动器马达启动”(类型 = FDh)。 这允许系统在驱动马达等待加速时执行另一项任务。

    相关文章

      网友评论

          本文标题:BIOS 中断描述(2)

          本文链接:https://www.haomeiwen.com/subject/ozcrartx.html