写磁盘扇区,写扇区数问题
Writing disk sector, numbers of sectors to write question
我正在尝试创建我自己的非常基本的 OS 并且我正在尝试弄清楚磁盘的写入和读取是如何工作的。
我使用 this website 作为参考。
如果每个磁道的扇区数是 17,为什么 AL 会上升到 128?
如果我将 AL 设置为 20,将 CL 设置为 1 并写入一个 (512 * 19) 字节的字符串,因为扇区 18 和 19 不存在,最后的 1024 字节会去哪里?
如果您要求写入 "N sectors starting with the sector at {cylinder, head, sector}" 并且您要求写入的扇区数在不同的轨道上;然后:
对于某些计算机上的某些设备; BIOS支持"multi-track",当你到达上一曲目结束时会自动切换到下一曲目
对于某些计算机上的某些设备; BIOS 不支持 "multi-track" 并且当您到达上一曲目的结尾时将 return 出错
请注意,该 BIOS 功能的其他(可能更好)参考资料(例如 http://www.ctyme.com/intr/rb-0608.htm )并未提及 128 个扇区的限制;并且很可能(在某些情况下)您可以写入 255 个扇区。
另请注意,有时对于软盘(尤其是对于不太常见的媒体格式 - 例如“1680 KiB”格式),BIOS 不知道磁道上有多少扇区(它只是将命令推送到软盘控制器并报告由软盘控制器 return 编辑的任何错误),因此不支持多轨。对于这些情况,我依稀记得 BIOS 数据区中某处的某种 "drive parameters table" 被软件(例如古老的 MS-DOS)篡改以更正 BIOS 使用的信息(使用来自 "BPB" 结构的值在软盘上)。
磁盘更改也没有 notification/indication/safeguard。这意味着如果用户弹出软盘并在驱动器中放入不同的软盘,您不会知道,并且您的软件会在不知道的情况下删除错误的软盘。
最后(由于最大尺寸限制)对于硬盘驱动器,在 1990 年代,旧函数被弃用并被一组较新的磁盘 IO 函数(使用 64 位 LBA 地址并且不使用CHS 寻址)称为 "int 0x13 extensions"。软盘不会发生这种情况;所以您最终需要针对不同类型的设备使用不同的代码(使用不同的功能)。
当然,BIOS 从来都不是真正的正式标准(更像是一群试图相互模仿的随机制造商);现在软盘和 BIOS 都死了(被 CD 和 U 盘取代,被 UEFI 取代);所以所有 "retro computing horror" 都可以(并且已经被很多人)遗忘;现在很难找到任何最新信息(例如 "BIOS bugs" 影响各种计算机的列表)。
我正在尝试创建我自己的非常基本的 OS 并且我正在尝试弄清楚磁盘的写入和读取是如何工作的。 我使用 this website 作为参考。
如果每个磁道的扇区数是 17,为什么 AL 会上升到 128? 如果我将 AL 设置为 20,将 CL 设置为 1 并写入一个 (512 * 19) 字节的字符串,因为扇区 18 和 19 不存在,最后的 1024 字节会去哪里?
如果您要求写入 "N sectors starting with the sector at {cylinder, head, sector}" 并且您要求写入的扇区数在不同的轨道上;然后:
对于某些计算机上的某些设备; BIOS支持"multi-track",当你到达上一曲目结束时会自动切换到下一曲目
对于某些计算机上的某些设备; BIOS 不支持 "multi-track" 并且当您到达上一曲目的结尾时将 return 出错
请注意,该 BIOS 功能的其他(可能更好)参考资料(例如 http://www.ctyme.com/intr/rb-0608.htm )并未提及 128 个扇区的限制;并且很可能(在某些情况下)您可以写入 255 个扇区。
另请注意,有时对于软盘(尤其是对于不太常见的媒体格式 - 例如“1680 KiB”格式),BIOS 不知道磁道上有多少扇区(它只是将命令推送到软盘控制器并报告由软盘控制器 return 编辑的任何错误),因此不支持多轨。对于这些情况,我依稀记得 BIOS 数据区中某处的某种 "drive parameters table" 被软件(例如古老的 MS-DOS)篡改以更正 BIOS 使用的信息(使用来自 "BPB" 结构的值在软盘上)。
磁盘更改也没有 notification/indication/safeguard。这意味着如果用户弹出软盘并在驱动器中放入不同的软盘,您不会知道,并且您的软件会在不知道的情况下删除错误的软盘。
最后(由于最大尺寸限制)对于硬盘驱动器,在 1990 年代,旧函数被弃用并被一组较新的磁盘 IO 函数(使用 64 位 LBA 地址并且不使用CHS 寻址)称为 "int 0x13 extensions"。软盘不会发生这种情况;所以您最终需要针对不同类型的设备使用不同的代码(使用不同的功能)。
当然,BIOS 从来都不是真正的正式标准(更像是一群试图相互模仿的随机制造商);现在软盘和 BIOS 都死了(被 CD 和 U 盘取代,被 UEFI 取代);所以所有 "retro computing horror" 都可以(并且已经被很多人)遗忘;现在很难找到任何最新信息(例如 "BIOS bugs" 影响各种计算机的列表)。