FAT 12 Implementation

♀尐吖头ヾ 提交于 2020-02-23 04:08:29

问题


I have been following the Operating System development tutorial on http://www.brokenthorn.com. Right now I'm trying to setup the BIOS parameter block with this code:

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   "

However, when I try to open the disk using the ImDisk driver for virtual floppies, it says that the drive needs to be formatted. Is the code I'm using correct?


回答1:


Try a short jump: the sector begins with jmp short loader, followed by nop, then go bpbName through bsFileSystem, then loader: and all your code and then the last 2 bytes of the 512-byte sector being 0x55 and 0xAA. These two must be at offsets 510 and 511 respectively.




回答2:


You're missing the 3-byte jump instruction before the BPB. The bytes-per-sector word should be at offset 0x0b relative to the beginning of the disk, not at 0x08. The jump will go to the bootloader code which is after the BPB (and if the jump is short enough that it only requires two bytes, it's followed by a nop).

If a machine will never be booted from the disk, you can put any arbitrary values in those first three bytes, but it's traditional to have a jump anyway, that goes to a piece of code that prints something like This disk is not bootable and then halts the machine.




回答3:


You can find a complete implementation of a FAt12 driver in assembly here: Simple Operating System with Fat 12 Driver.



来源:https://stackoverflow.com/questions/10457120/fat-12-implementation

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!