問題タブ [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.
assembly - ISR で Int 13h を呼び出す
リアル モードでのアセンブリによって、int 9h の ISR を作成しました。この ISR では、ハードディスクにデータを書き込むために INT 13h、AH=0x02 を呼び出します。ただし、データはハードディスクに書き込まれません。また、int 13h, ah=0x02 も機能しません (ハードディスクからデータを読み取る)。call int 13h の後、キャリー フラグはオンですが、AH と AL はゼロです。このコードを ISR から使用すると、うまくいきます。ISR の INT13h が機能しないのに、INT10h などの他の割り込みが正しく機能するのはなぜですか?
c++ - オペレーティングシステムの作成に関する質問
私が答えられることを望んでいたオペレーティングシステムの作成について、いくつかの非常に具体的な質問があります。
GRUBをブートローダーとして使用する場合、最小限のCカーネルをロードするためにどのくらいのアセンブリコードを記述する必要がありますか?
私のカーネルはCで書かれます、それは私がC ++で書いたコマンドラインシェルをロードします、それはAPI呼び出しをしません標準ライブラリ呼び出しだけをします、そうするためにC ++標準ライブラリ全体を書き直す必要がありますか?
ビデオ、キーボード、フロッピードライバをC ++で作成できますか?
GCCとG++は16ビットのリアルモードコードを出力しますか?
これをすべてWindowsでMingwを使用して作成できますか、それともLinuxで作成する必要がありますか?
ビデオメモリに直接書き込むには、リアルモードにする必要がありますか?
誰かが私の質問に答えることができれば私は非常に感謝します
x86 - SPIMに似たリアルモードx86シミュレーター?
原理的にはMIPS32シミュレーター「SPIM」に似たリアルモードx86シミュレーターを探しています。
理想的には、286プロテクトモードもサポートします(32ビットプロテクトモードはそれほど重要ではありません)。
誰もがそのような獣を知っていますか?
x86 - セグメント:オフセットアドレス指定スキームはどのように機能しますか?
Intel 8086 CPUの時代には、最大のレジスタは16ビットであり、誰もが65536バイトを超える線形メモリにアクセスする方法を探していましたが、CPUレジスタを拡張する代わりに、セグメント:オフセットアドレス指定を発明したことを読みました。スキームと私が理解している方法では、2つの16ビットレジスタを32ビットメモリアドレスに「グループ化」することができます。しかし、私が読んだ同じ場所では、CPUは1MBのメモリにしかアクセスできませんでした。それはどのように機能しますか?2 ^ 32は4,294,967,296に等しいので、わかりません。教えてください:)
assembly - リアルモードx86ASM:基本はどのように行われますか?
私は現在boot.s
、最初のLinuxカーネルのソースにあるファイルを読んでいます(0.01が実際に最初のパブリックリリースであると仮定しています)。
私はCとASMを知っていますが、後者は前者よりかなり少ないです。それでも、ソースファイルのコードを理解し、本質的に把握できるようです。
しかし、このファイルは私を混乱させました。これは、プロテクトモードではなくリアルモードであるためです。言うまでもなく、リアルモードで記述されたASMコードはこれまで見たことがありません。プロテクトモードは、私が生まれる前にx86 OSが実行されていた事実上のモードだったので、当然のことです。
これが私がよりよく理解したいルーチンです:
調べてみるoutb
と、コンピュータのポートにバイトを渡すために使用されていることがわかりました。このシナリオでは、最初の引数として「モーターの停止」バイトを渡し、2番目の引数としてフロッピードライブのポート番号を渡すというCのドキュメントに基づく推測を危険にさらします。
このインターフェイスはBIOSによって提供されていますか?またはフロッピードライブで直接?BIOSには、すべての基本的なデバイスの非常に基本的な操作のための質素な「ドライバー」があると思います。
これが私が困惑しているところです:のような数字#0x3f2
が薄い空気から引き出されているようです。それらは明らかにハードウェアのポート番号か何かです。このファイルにはそのような番号が散りばめられており、それらが何を指しているのか説明はありません。リアルモードから受信できるすべてのハードウェアポートと制御番号を示す包括的なリファレンスはどこにありますか?また、ファイルは、ハードコードされたメモリアドレスを使用して、起動プロセス全体でカーネルをメモリ内で移動させるようです。リアルモード中に上書きできるメモリアドレス範囲のガイドはどこにありますか?
また、BIOSと内部ハードウェア割り込みの衝突を回避するための割り込みの再プログラミングに関するLinusのコメントも読みました。私はうそをつくつもりはありません、それは私の頭の真上に行きました。
ヘルプは素晴らしいでしょう。あなたが疑問に思っている場合に備えて、Googleはこのトピックについてまばらに見えます。
c - MacOSX用の16ビットリアルモードCコンパイラ
Macで動作するCコンパイラを探していますが、808616ビットリアルモードのマシンコードにコンパイルする必要があります。
assembly - Linux ドライバーでリアルモードに切り替える方法
組み込みアプリケーションで使用している Intel ベースの SBC を持っています。Fintek Super I/O チップに接続されたデジタル IO (DIO) ポートがあります。このポートの出力ラインのビットを設定して、他のハードウェアを制御できるようにしたいと考えています。
幸いなことに、製造元の BIOS には、これを行うための機能が付属しています。
残念ながら、保護モードで 64 ビット Linux を実行しています。ユーザー空間プログラムから、または必要に応じてカーネルドライバーとして、その BIOS 割り込みを呼び出す方法はありますか?
代わりに、Fintek チップに直接レジスタを設定することもできますが、これには、チップのどのピンが DIO ヘッダーに接続されているかを正確に知る必要があり、もちろん、これはボードのリビジョンごとに異なります。
x86 - x86 リアル モードでの USB コントロール
私は生の x86 リアルモード USB アクセス プロジェクトに取り組んでいます。これには、カスタム ブートセクタ、第 2 段階のブートローダ、およびいくつかの簡単なハードウェア ドライバが含まれます。
最終的な目標は、起動し、USB インターフェイス経由でデータを送信し、USB インターフェイス経由でデータを受信し、結果の値を画面に出力する製品を提供することです。USBアクセス以外はすべて完了しました。
BIOS がオンボード USB へのアクセスを提供していないことを既に発見しました。私はosdevverからbrokenthornまで何十ものサイトを見てきました。USB 2.0仕様も調べました。
既存のオペレーティング システムを介さずに、x86 リアル モードで x86 アセンブリを使用して USB ルート ハブに直接アクセスすることに関する関連情報や有用な情報は、どこにもありません。
USB ルートハブに標準の IN/OUT ポートが設定されていませんか? また、存在する場合、ソフトウェアがハブに送信するデータとそのデータを送信する接続デバイスを指示できるようにする標準通信を指定するドキュメントは正確にはどこにありますか?
c - リアルモードasmのコンパイル(rootkit.arsenal)
私は本のルートキットアーセナルで提供されているtsr.asmコードのコンパイルに固執しています。XPマシンにopenwatcomをインストールしたところ、最初のasmリストが適切にコンパイルされました。
コンパイルすると、「複数の開始アドレスが見つかりました」というエラーがスローされます(Googleで何も見つかりません)。このコードがコンパイル可能であることを誰かが確認できますか?また、その方法は?
提案に感謝します。
assembly - この hvmloader.c ブートローダー コードは何をしますか?
xen のコードを読んで、以下のコードを見つけました。しかし、その意味がわかりません。idt
初期化するコードgdt
ですか?リアル モードからプロテクト モードにジャンプするコードですか。gdt
もしそうなら、との物理アドレスはidt
どこですか? Hvmloader.c :
ありがとう。