80387 FPU状態保存の進化:ドキュメントエラー物語

2025-02-07

x87浮動小数点演算ユニット(FPU)の動作と状態保存メカニズム(FSTENV/FLDENVおよびFSAVE/FRSTOR命令)を調査中に、著者は、32ビット保護モードにおけるFPU状態に関する初期のIntelドキュメントとそれ以降の改訂版との間に矛盾を発見しました。初期の80387ドキュメントでは、32ビット保護モードのFPU状態から浮動小数点オペコードが省略されていましたが、更新されたドキュメントではそれが含まれていました。これにより、複数のサードパーティのリファレンスブックが長年にわたって時代遅れの情報を流布することになりました。この物語は、技術ドキュメントの進化と、技術文献におけるエラーが長期にわたって存在し続ける可能性を示しています。

続きを読む
ハードウェア ドキュメントエラー

C言語のファイル入出力における50年越しのバグ:レガシーミステリーを解き明かす

2024-12-26

DOSエミュレータの改良中に、開発者はファイル入出力において、一見些細なバグを発見しました。`echo`コマンドでファイルにテキストを追加したところ、予期せぬ結果になったのです。デバッグの結果、Cランタイムライブラリが読み書きの切り替えを処理する方法に欠陥があることが判明しました。この欠陥は、1970年代、さらにはそれ以前のUNIXシステムにまで遡ります。この記事では、初期のK&R Cから現代のC規格まで、歴史的文脈を深く掘り下げ、さまざまなUNIXバージョンとCコンパイラ間の実装の違いを探ります。根本原因は、初期のCライブラリがアップデートモードを処理する際の制限にあると特定され、異なるオペレーティングシステムとコンパイラがこれらの制限をどのように扱ったかという違いが明らかになります。著者は、現在でもポータブルなCコードでは、ファイルの読み書きを切り替える際に、明示的な`fseek`呼び出しが必要であると結論付けています。

続きを読む

DOS APPENDコマンド:古き良き時代と現代の架け橋

2024-12-20

DOS 2.11のソースコードを再構築する際に、著者は課題に直面しました。古いMASM 1.25アセンブラはディレクトリをサポートしておらず、ツリー構造を使用した現代的なファイル構成と衝突しました。単一のディレクトリを避けるために、著者は巧みにDOS APPENDコマンドを使用しました。APPENDはTSR(Terminate and Stay Resident)プログラムであり、ファイルオープンなどのシステムコールをインターセプトし、現在のディレクトリにファイルがない場合、事前に定義されたパスリストを検索します。これにより、MASM 1.25は階層構造内でファイルを見つけることができ、非互換性が解決され、特定のシナリオにおけるAPPENDの驚くべき有用性が強調されました。

続きを読む
開発