Operating system Bochs不支持AH=42h on INT 13h on disk引导选项

Operating system Bochs不支持AH=42h on INT 13h on disk引导选项,operating-system,bootloader,bios,bochs,Operating System,Bootloader,Bios,Bochs,嗨,我正在做Bochs上LBA寻址的引导加载程序 当在AH=42h的情况下执行int 13h时,终端显示以下信息 00017480939i[BIOS ] int13_diskette: unsupported AH=42 00017481022i[XGUI ] charmap update. Font is 9 x 16 Next at t=17481022 int 13h指令前的寄存器如下: <bochs:3> reg CPU0: rax: 00000000_00004200

嗨,我正在做Bochs上LBA寻址的引导加载程序

当在AH=42h的情况下执行int 13h时,终端显示以下信息

00017480939i[BIOS  ] int13_diskette: unsupported AH=42
00017481022i[XGUI  ] charmap update. Font is 9 x 16
Next at t=17481022
int 13h指令前的寄存器如下:

<bochs:3> reg
CPU0:
rax: 00000000_00004200 rcx: 00000000_00090001
rdx: 00000000_00000000 rbx: 00000000_00008000
rsp: 00000000_00007be8 rbp: 00000000_00000000
rsi: 00000000_000e7be8 rdi: 00000000_00007fe0
r8 : 00000000_00000000 r9 : 00000000_00000000
r10: 00000000_00000000 r11: 00000000_00000000
r12: 00000000_00000000 r13: 00000000_00000000
r14: 00000000_00000000 r15: 00000000_00000000
rip: 00000000_00007d94
eflags 0x00000202: id vip vif ac vm rf nt IOPL=0 of df IF tf sf zf af pf cf
<bochs:4> sreg
es:0x0000, dh=0x00009300, dl=0x0000ffff, valid=1
        Data segment, base=0x00000000, limit=0x0000ffff, Read/Write, Accessed
cs:0x0000, dh=0x00009300, dl=0x0000ffff, valid=1
        Data segment, base=0x00000000, limit=0x0000ffff, Read/Write, Accessed
ss:0x0000, dh=0x00009300, dl=0x0000ffff, valid=7
        Data segment, base=0x00000000, limit=0x0000ffff, Read/Write, Accessed
ds:0x0000, dh=0x00009300, dl=0x0000ffff, valid=1
        Data segment, base=0x00000000, limit=0x0000ffff, Read/Write, Accessed
fs:0x0000, dh=0x00009300, dl=0x0000ffff, valid=1
        Data segment, base=0x00000000, limit=0x0000ffff, Read/Write, Accessed
gs:0x0000, dh=0x00009300, dl=0x0000ffff, valid=1
        Data segment, base=0x00000000, limit=0x0000ffff, Read/Write, Accessed
ldtr:0x0000, dh=0x00008200, dl=0x0000ffff, valid=1
tr:0x0000, dh=0x00008b00, dl=0x0000ffff, valid=1
gdtr:base=0x00000000000f9a37, limit=0x30
idtr:base=0x0000000000000000, limit=0x3ff
boot: disk
floppy_bootsig_check: disabled=0
# no floppya
# no floppyb
ata0: enabled=1, ioaddr1=0x1f0, ioaddr2=0x3f0, irq=14
ata0-master: type=disk, path="Boot.img", mode=flat, cylinders=0, heads=0, spt=0, model="Generic 1234", biosdetect=auto, translation=auto
ata0-slave: type=none
我的平台是Ubuntu18.4,Bochs2.6.9,以下是我的配置选项:

./configure --enable-plugins --enable-debugger --enable-disasm --enable-readline --enable-cpu-level=6 --enable-smp --enable-x86-64 --enable-avx --enable-a20-pin --enable-fast-function-calls --enable-all-optimizations --enable-x86-debugger --enable-alignment-check --enable-sb16
现在我的问题是如何为BIOS启用AH=42h选项


谢谢

大多数真实计算机和Bochs支持大多数/更大设备(硬盘驱动器、CD/DVD等)的“int 0x13扩展”,但不支持软盘

int 13h指令前的寄存器如下:

<bochs:3> reg
CPU0:
rax: 00000000_00004200 rcx: 00000000_00090001
rdx: 00000000_00000000 rbx: 00000000_00008000
rsp: 00000000_00007be8 rbp: 00000000_00000000
rsi: 00000000_000e7be8 rdi: 00000000_00007fe0
r8 : 00000000_00000000 r9 : 00000000_00000000
r10: 00000000_00000000 r11: 00000000_00000000
r12: 00000000_00000000 r13: 00000000_00000000
r14: 00000000_00000000 r15: 00000000_00000000
rip: 00000000_00007d94
eflags 0x00000202: id vip vif ac vm rf nt IOPL=0 of df IF tf sf zf af pf cf
<bochs:4> sreg
es:0x0000, dh=0x00009300, dl=0x0000ffff, valid=1
        Data segment, base=0x00000000, limit=0x0000ffff, Read/Write, Accessed
cs:0x0000, dh=0x00009300, dl=0x0000ffff, valid=1
        Data segment, base=0x00000000, limit=0x0000ffff, Read/Write, Accessed
ss:0x0000, dh=0x00009300, dl=0x0000ffff, valid=7
        Data segment, base=0x00000000, limit=0x0000ffff, Read/Write, Accessed
ds:0x0000, dh=0x00009300, dl=0x0000ffff, valid=1
        Data segment, base=0x00000000, limit=0x0000ffff, Read/Write, Accessed
fs:0x0000, dh=0x00009300, dl=0x0000ffff, valid=1
        Data segment, base=0x00000000, limit=0x0000ffff, Read/Write, Accessed
gs:0x0000, dh=0x00009300, dl=0x0000ffff, valid=1
        Data segment, base=0x00000000, limit=0x0000ffff, Read/Write, Accessed
ldtr:0x0000, dh=0x00008200, dl=0x0000ffff, valid=1
tr:0x0000, dh=0x00008b00, dl=0x0000ffff, valid=1
gdtr:base=0x00000000000f9a37, limit=0x30
idtr:base=0x0000000000000000, limit=0x3ff
boot: disk
floppy_bootsig_check: disabled=0
# no floppya
# no floppyb
ata0: enabled=1, ioaddr1=0x1f0, ioaddr2=0x3f0, irq=14
ata0-master: type=disk, path="Boot.img", mode=flat, cylinders=0, heads=0, spt=0, model="Generic 1234", biosdetect=auto, translation=auto
ata0-slave: type=none
rdx:00000000_00000000

这意味着“
DL
=驱动器号=0x00=第一张软盘”

现在我的问题是如何为BIOS启用AH=42h选项

如果您打算使用“int 0x13扩展名”访问第一张软盘;然后不要(您希望编写自己的“LBA->CHS”例程,将“引导后插入”软盘的几何结构考虑在内)

如果您打算访问从中启动的硬盘,那么在启动加载程序启动的早期,您希望将传递给启动加载程序的值存储在
DL
(“启动加载程序来自的设备号”)中,以便您可以将其加载回
DL
,以便以后进行磁盘读/写。请注意,此值可能不是0x80(例如,任何类型的引导管理器决定在第二个硬盘驱动器上引导操作系统),并且(对于分区硬盘),引导加载程序还希望存储有关它来自的分区的信息(因此它可以执行“LBA=分区中的块+分区第一个扇区的LBA”和限制检查)