話したいファイルシステムやオペレーティングシステムはどれでも結構です。いいね!
ZXスペクトラムでは、LOAD
コマンドを初期化すると、システムがタイトなループになり、オーディオ入力ラインが読み取られます。
データの開始は一定のトーンで示され、その後に長い/短いパルスのシーケンスが続きます。短いパルスはバイナリ用0
で、長いパルスはバイナリ用です1
(https://en.wikipedia.org/ wiki / ZX_Spectrum_software)。緊密なロードループは、バイト(8ビット)がいっぱいになるまでビットを収集し、これをメモリに格納し、メモリポインタを増やし、ループバックしてさらに多くのビットをスキャンします。
通常、ローダーが最初に読み取るのは短い固定形式のヘッダーで、少なくとも予期されるバイト数を示し、ファイル名、ファイルタイプ、ロードアドレスなどの追加情報を示します。この短いヘッダーを読み取った後、プログラムはデータのメインバルクのロードを続行するか、ロードルーチンを終了してユーザーに適切なメッセージを表示するかを決定できます。
End-of-file状態は、予想どおりに多くのバイトを受信することで認識できます(固定数のバイト、ソフトウェアに組み込まれている、またはヘッダーに示されているような可変数)。ロードループが予期された周波数範囲のパルスを一定時間受信しなかった場合、エラーがスローされました。
この回答の背景
説明されている手順では、通常のオーディオテープからデータを読み込みます。したがって、オーディオ入力をスキャンする必要があります(標準のプラグでテープレコーダーに接続されています)。LOAD
コマンドは、技術的には同じであるopen
ファイル-それは、物理的に結び付けられています実際にファイルをロードします。これは、テープレコーダーがコンピューターによって制御されておらず、ファイルを(正常に)開くことはできないが、ロードすることができないためです。
「タイトループ」が言及されているのは、(1)CPU、Z80-A(メモリが提供されている場合)が非常に遅いためであり、3.5 MHzであり、(2)スペクトラムに内部クロックがないためです。つまり、すべてのTステート(命令時間)を正確にカウントする必要がありました。シングル。命令。そのループ内では、正確なビープタイミングを維持するためだけに使用します。
幸いなことに、その低いCPU速度には、1枚の紙のサイクル数を計算できるという明確な利点があり、したがって、実際にかかる時間も計算できます。
C
Linux に焦点を当てるためにこの質問を編集します。LinuxとWindowsの動作が異なるためです。そうでなければ、それは少し広すぎます。また、より高いレベルの言語は、システムのC APIを呼び出すか、Cにコンパイルして実行するため、「C」のレベルのままにすると、Least Common Denominatorに配置されます。