問題タブ [real-mode]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
video - 43回線以上の標準BIOSInt10hビデオモードはありますか?
OSがロードされる前にリアルモードで実行されるコードを書いています。私のプログラムの一部はビデオディスプレイへの情報のダンプを含み、標準の80x25テキストモードはそれをカットしていません。
Windowsや他のOSの多くのバージョンは、カーネルパニックを示したときに、より大きなテキストモード(43行)に問題なく切り替えることができるようです。より大きなテキストモードは長い間使用されてきたので、少なくとも1つの標準モードがあると思います。
ここにBIOSビデオモードのかなり大きなリストがあります:
http://www.columbia.edu/~em36/wpdos/videomodes.txt
残念ながら、同じモード番号はチップセット間で意味が大きく異なるようです。
昔々、VESABIOSと呼ばれるものを使用してデバイスに依存しない方法でSuperVGAグラフィックモードにアクセスしたことを覚えているようですが、ロードする必要のあるDOSTSRが関係していることも覚えているようです。これはオプションではありません。 DOSが実行されていないため、ここにあります。
VMware ESXiの仮想ビデオアダプタなど、さまざまなハードウェアで動作するモードを探しています。モードを変更するコードもコンパクトである必要があるので、単純なInt10hでそれができることを期待していました。
何か案は?WindowsとVMwareのカーネルパニックはどのようにそれを行いますか?
assembly - fasm (MS-DOS) で 0xF000FFFE (コンピューターの種類) のメモリにアクセスする
問題は、BIOS メモリから「コンピューター」タイプを取得する必要があることです。私はfasmでそのようにできることを知っています(私のプログラムとすべてのセグメントは16ビットです):
しかし、それはゼロを返し、正しくありません。turbo c++ 3.1 の同等のコードのためです。
(コード生成設定で) LARGE モデルを使用している場合、自分のコンピューターの正しい「タイプ」を返します。それで、 fasm でそれを修正する方法は?(たとえば、masm には .model ディレクティブがあることは知っていますが、fasm にはそのようなものはありません)。助けてください...
assembly - 現在のモードがリアルまたはビッグリアルモードであることを知る方法は?
リアル モードまたはビッグ リアル モードでのみ動作するシステムから API を呼び出すとします。私の API は、現在のシステム モードを表示することになっています。では、現在のモードがリアル モードかビッグ リアル モードかをどのように知ることができますか?
ノート:
- ビッグ リアル モードでは、プロテクト モードの有効化ビット
CR0
が無効になっているため、チェックしても違いはありません。 - A20 アドレス ラインが有効になっていても、それがビッグ リアル モードであることを意味するわけではありません。
assembly - i386 リアル モード - フロッピーからの読み込み
私は x86 リアル モード コーディングに取り組んでおり、ここでいくつかのサンプル コードを見つけました: http://www.nondot.org/sabre/os/files/Booting/nasmBoot.txt
その記事の 3 番目の例では、リアル モードで BIOS 呼び出しを使用してフロッピーのいくつかのセクタをメモリにロードし、それらにジャンプします。シンプルなブートローダーです。2 番目のセクターから 5 セクターをロードします。2 番目のセクター (最初のセクターの 512 バイトの後) には、テキストを出力するための命令がいくつかあります。
さて、コンパイルしてバイナリを試してみましたが、テキストが出力されません。この機能不全を再現して、それを修正する方法を教えてもらえますか?
あなたの助けに感謝し、私の質問の陳腐さをお詫びします. (しかし、どこで問題が発生したのかわかりません)。
assembly - i386 リアルモード。メモリからのデータのロードに関するいくつかの問題
私はちょうどマシンレベルの x86 コーディングに近づいているので、私の質問の些細なことを許してください。次のコードは、単純なブートローダーを意図しています。フロッピー ディスクの一部のセクタをメモリにダンプし、ロードされたコードにジャンプします。コメントで説明されているように、ロードされたコードで、メモリ変数から読み取ろうとしましたが、成功しませんでした。
なぜうまくいかないのか理解できません。どんな助けにも感謝します。
assembly - dosbox でプロテクト モードに切り替えるアセンブリ プログラムを実行できますか?
私たちは、386 プロセッサをリアル モードからプロテクト モードに切り替えてからリアル モードに戻すアセンブリ プログラムを研究しています。プログラムは TASM を使用してコンパイルされます。
このプログラムはいくつかの特権操作を実行する必要があり、リアル モードで起動する必要があるため、DOS から実行する必要があります。このために、フロッピー ディスクを持参して、大学のコンピュータで DOS を起動できるようにするように言われました。
代わりに Dosbox を使用できないかと考えています。しかし、プロテクト モードとリアル モードでI386 を忠実にエミュレートする必要があり、それができるかどうかはわかりません。
assembly - TASM の div に関する問題
div に少し問題があります。この問題について助けが必要です。TASM でアプリケーションを持っています。一連の数字で 3 の倍数を見つけなければなりません。問題は、div を実行するとプログラムがフリーズしてしまうことです。理由がわかりません。
私のコードは次のとおりです。
x86 - 物理アドレスから論理アドレスを計算 (x86)
私の知る限り、物理アドレスは、セグメント アドレス (16 ビット) を左に 4 回シフトし、16 ビットのオフセット アドレスを加えることによって計算されます。私の質問は、セグメント: オフセット アドレス値の 2 つの異なるセットが同じ結果を与える場合はどうなるかということです。200A:B608 および 2138:A328 の場合
200A0
+B608
2B6A8
と
21380
+A328
2B6A8
どちらも同じ結果になります!!
さて、それは、それらが同じ物理アドレスを指しているということですか (そうであれば、どのように?)、
または、物理アドレスが上記の方法で計算されることを意図していないかどうか?
または、有効な場合、物理アドレスからセグメント:オフセットアドレスを取得するにはどうすればよいですか (それは可能ですか?)
operating-system - リアル モードからプロテクト モードに切り替える前に、割り込みを無効にする必要があるのはなぜですか?
多くの oses (および一部のブートローダー) で、cli
リアル モードからプロテクト モードに切り替える前に、すべて割り込み ( ) を無効にするのを見ました。なぜそれをする必要があるのですか?
assembly - このリアル モード コードの問題点
リアルモードで実行され、画面にメッセージを出力するコードがあります。実行環境として Dosbox 0.7 を使用しています。以下はコードです。
私はこのコードをうまく組み立てることができますが、これを実行すると、そこにハングアップし、Linuxターミナルにメッセージが表示されます
こんな感じで組み立てています
このメッセージを Google で検索してみたところ、DOSBox のバージョンに問題がある可能性があることがわかりました。
ここで何が問題なのか誰か教えてもらえますか??