BIOS INT13h AH=42h 带 BOCHS

BIOS INT13h AH=42h with BOCHS

我的引导加载程序代码有问题。我尝试使用 INT 13h AH=42h: "Extended Read Sectors From Drive" 3.0 (EDD-3.0) 版本的 BIOS 功能和 BOCHS 将我的内核代码从硬盘映像复制到 0x100000 以上的内存位置 real mode.

当我使用 INT13 AH=41h BX=55AAh 函数检查是否支持 EDD-3.0 时,我得到了肯定的结果。我正在使用 BOCHS 2.6.8.

Disk Address Packet:
db  0x1C    ; size of packet (I tried 18h as well)
db  0x00    ; reserved
db  0x04    ; # blocks to transfer
db  0x00    ; reserved
dw  0xFFFF  ; offset
dw  0xFFFF  ; segment
dq  0x1     ; starting absolute block number (LBA)
dq  0x100000; 64-bit flat target address

我用这个DAP。 BOCHS 所做的是从磁盘复制 4 个块到 FFFF:FFFF mod 100000h = FFEFh。我究竟做错了什么? 我使用 Ralf Brown 的中断列表 (http://www.ctyme.com/intr/rb-0708.htm) 作为参考。

旧的 BIOS 根本不支持 "extended disk bios" 功能。

后来的 BIOS 不支持最新 BIOS 版本所具有的所有功能。

我敢肯定,即使是一些现代 BIOS 也不支持 "flat target addresses",而只支持 segment:offset 地址 - 而您的结构中的 segment:offset 字段是 0xFFFF:0xFFFF。

这样的 BIOS 将识别地址 0xFFFF:0xFFFF 然后。

可能BOCHS模拟器中的BIOS就是这种

顺便说一句:如果 ES 寄存器与控制包中给定的段不一致,我的计算机功能将无法正常工作!

其他一些可能不适用于某些 BIOS 的东西是偏移部分的溢出(读取 N 字节到地址 A:B 以便 (B+N)>0x10000)以及访问 0x100000 以上的内存( (0x10*A+B+N)>0x100000).