1

私は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ドライバを使用してディスクを開こうとすると、ドライブをフォーマットする必要があると表示されます。使用しているコードは正しいですか?

4

3 に答える 3

2

BPBの前に3バイトのジャンプ命令がありません。セクターあたりのバイト数は、0x08ではなく、ディスクの先頭に対してオフセット0x0bにある必要があります。ジャンプは、BPBの後にあるブートローダーコードに移動します(ジャンプが2バイトしか必要としないほど短い場合は、その後にnopが続きます)。

マシンがディスクから起動されない場合は、最初の3バイトに任意の値を入れることができますが、とにかくジャンプするのが伝統的です。ジャンプは、のようなものを出力しThis disk is not bootableてマシンを停止するコードに移動します。

于 2012-05-04T23:16:20.443 に答える
2

短いジャンプを試してください。セクターは、で始まりjmp short loadernop次に、、そしてすべてbpbNameのコード、そして512バイトのセクターの最後の2バイトがとになります。これらの2つは、それぞれオフセットとにある必要があります。bsFileSystemloader:0x550xAA510511

于 2012-05-05T19:22:16.950 に答える
1

FAt12ドライバーの完全な実装は、ここのアセンブリにあります:Fat12ドライバーを備えた シンプルなオペレーティングシステム

于 2013-01-04T14:59:39.427 に答える