我一直关注http://www.brokenthorn.com上的操作系统开发教程。现在我正在尝试使用以下代码设置BIOS参数块:
jmp loader
bpbName db "NubOS",0,0,0
bpbBytesPerSector: DW 512
bpbSectorsPerCluster: DB 1
bpbReservedSectors: DW 1
bpbNumberOfFATs: DB 2
bpbRootEntries: DW 224
bpbTotalSectors: DW 2880
bpbMedia: DB 0xF0
bpbSectorsPerFAT: DW 9
bpbSectorsPerTrack: DW 18
bpbHeadsPerCylinder: DW 2
bpbHiddenSectors: DD 0
bpbTotalSectorsBig: DD 0
bsDriveNumber: DB 0
bsUnused: DB 0
bsExtBootSignature: DB 0x29
bsSerialNumber: DD 0xa0a1a2a3
bsVolumeLabel: DB "MOS FLOPPY "
bsFileSystem: DB "FAT12 "
但是,当我尝试使用ImDisk driver虚拟软盘打开磁盘时,它表示需要格式化驱动器。我正在使用的代码是否正确?
答案 0 :(得分:2)
你错过了BPB之前的3字节跳转指令。每扇区字节数应相对于磁盘的起始位置偏移0x0b,而不是0x08。跳转将转到BPB之后的引导加载程序代码(如果跳转足够短,只需要两个字节,则后跟一个nop)。
如果机器永远不会从磁盘启动,你可以在前三个字节中放置任意值,但是传统上仍然需要跳转,这会转到打印类似This disk is not bootable
的代码片段。然后停止机器。
答案 1 :(得分:2)
尝试短线:该部门以jmp short loader
开头,然后是nop
,然后是bpbName
至bsFileSystem
,然后是{{ 1}}和所有代码,然后512字节扇区的最后2个字节为loader:
和0x55
。这两个必须分别处于抵消0xAA
和510
。
答案 2 :(得分:1)
您可以在此处找到装配中FAt12驱动程序的完整实现: Simple Operating System with Fat 12 Driver