我最近一直在研究一些用于软驱的bootstrap代码.我的目标是修改程序,以便它使用我的USB闪存驱动器.现在我看到INT 13H功能如何与软盘设备一起使用,但我想我的问题是,与USB驱动器的通信将如何不同?
例如,这是一个软盘代码片段(GNU汇编程序):
movb $0x00,%dl /* select 1st floppy */ /* later */ movw sec,%cx /* get sector number */ movw head,%dx /* get head number */ movw $0x0201,%ax /* read 1 sector */ int $0x13现在我已经读过将0x80移动到%dl将选择BIOS中的第一个HDD.在我的特定BIOS中,我可以更改驱动器顺序,其中包括USB驱动器.我很确定这会依赖于BIOS,但我认为BIOS中列出的顺序可能与我进入%dl的值相对应.我需要追踪一些文档......
我真的不熟悉使用块设备,有人能指出我开始学习更多的好地方吗?
谢谢!
1> Mike Gonta..:简单的答案是,如果BIOS可以从USB闪存驱动器启动,则可以使用用于软盘/硬盘驱动器访问的相同BIOS功能.
令人高兴的答案是,一种简单的技术允许相同的引导扇区代码访问USB闪存驱动器上的软盘映像,无论它是使用软盘模拟还是硬盘驱动器模拟引导的.如果dl = 80h(硬盘仿真)
获取驱动器参数
int 13h,ah = 8
返回:
ch =最大扇区号(与每个磁道的扇区数相同)
dh =最大磁头数(只需加1即可获得磁头数)此返回的信息描述了仿真设备的几何形状(如果dl = 0则为标准软盘几何 - 每个磁道18个扇区和2个磁头).这可用于计算所需的气缸盖扇区信息:
READ SECTOR(S)
int 13h,ah = 2和
WRITE SECTOR(S)
int 13h,ah = 3见拉尔夫布朗的中断名单 - int 13h
在这里看我的帖子:USB Booting Secrets