2017-08-17 6 views
2

私は幾分基本的なブートローダーを書いてきました。それはボッシュの桃のように機能します。しかし、私の実際のマシンでは、いくつかの命令がスクランブルされ、ブートローダーが失敗します。私は病気を診断しましたが、良い治療法はありません。 BIOS(UEFI互換モードでは)はBios Parameter Block(BPB)を探していて、見つからず(特定のバイトを上書きしてしまうため)、ブートローダを混乱させるようです。それを修正するために私の現在の方法は、しかし、これは良い解決策ではありませんBIOS(BPB)がブートローダの一部を上書きするのを止めるには?

resb 50 

で私のプログラムの最初の50バイト確保(ゼロ)で、私のアセンブリをオフに開始することです。ブートローダがわずか512バイトだと考えると、スペースの無駄です。それは無駄なスペースの約10%です!だから私の質問です:

ブートローダーの一部を上書きすることからBIOSを回避/停止/無効にする良い方法はありますか?私のブートローダから最大のバイト数を得る最も良い方法は何ですか?

+0

BIOSがコードを上書きしないようにブートローダの先頭にBPBを作成する必要があります。いくつかのBIOSは、ブートローダーの先頭で特定の指示が見つからない場合、ブートローダーのロードを拒否します(通常はJMPが最良の方法です)。いくつかのBIOSは、盲目的に書かれた内容といくつかのBIOSをチェックすることによって有効なBPBがあるかどうかを判断しようとするかもしれません。 –

+0

上記はUSBフロッピーエミュレーションを使用していることを前提としています。 USB HDDエミュレーションを使用している場合は、BPBは必要ありませんが、ブート可能とマークされたパーティションを持つ有効なパーティションテーブルが必要な場合があります。 –

+1

DOS 4.0 BPBは、この[SO Answer](https://stackoverflow.com/a/43787939/3857942)(NASMで書かれています)のコードの_Complete Example Int 13h Extension Checks_セクションにあります。この例では、1.44MBフロッピーBPBを作成します。 _BPB_にはJMPが含まれています。したがって 'boot:'ラベルから 'main' lableまでのすべてがBPB –

答えて

-2

リニアフレームバッファを使用し、バッファリングの表示開始アドレスを変更してみます。公開文書:vbe3.pdf from vesa dot org

+0

リニアフレームバッファはブートローダと何が関係しており、BIOSが0x07c00〜0x07e00のメモリアドレス範囲でBPBに対して何をするのですか? –

+0

@Dirk hmm、わかりません。私はすでに線形VGA表示モードを使用しています。アドレスを切り替える代わりにメモリ内に2番目のバッファを使用します(通常のVGAでは可能かどうかはわかりませんがVESAではありません)。そしてマイケルの権利は、これは最初の質問とはあまり関係がありません – travisjayday

関連する問題