私は自分の愚かさとの戦いに負けているようです。
このサイトでは、CP/M のさまざまなバージョンでのシステム コールについて説明しています。
ただし、呼び出し 2 (C_WRITE、コンソール出力) を使用しようとすると、何も起こりません。
次のコードがあります。
ORG 100h
LD E,'a'
LD C,2
CALL 5
CALL 0
ここで記憶から引用します。タイプミスがある場合は、ファイルがコンパイルされ、開始する COM ファイルがあったため、オリジナルには含まれていないので安心してください。
行の意味は次のとおりだと思います。
- これがアドレス 100h にロードされることを確認してください (0h から FFh までがゼロ ページです)。
- システムコール 2 の E レジスタに ASCII 'a' をロードします。
- システムコール 2 の C レジスタに整数 2 をロードします。
- システム コールを作成します (システム コールへの JMP はゼロ ページのアドレス 5 にあります)。
- プログラムを終了します (終了コマンドはゼロ ページのアドレス 0 にあります)。
プログラムは問題なく起動および終了します。最後のコマンドを削除すると、コンピューターがハングします (これも予想どおりで、CALL 0 が機能することを示しています)。
ただし、ASCII 文字は出力されません。(ただし、余分な新しい行が出力されますが、システムがそれを行った可能性があります。)
CP/M プログラムに、システム コールが行うべきことを実行させるにはどうすればよいですか? 私は何を間違っていますか?
更新: 問題は、私が試したすべてのアセンブラーが特定の形式のソース ファイルを想定していたことです。このファイルは、Microsoft のマクロ アセンブラで動作しました。
.Z80
START: LD E,'a'
LD C,2
CALL 5
JP 0
asm.com (DR のアセンブラー) と m80.com (Microsoft のマクロ アセンブラー) は Intel 8080 ニーモニックを予期しており、明らかに異なる z80 ニーモニックを予期する必要があるときに通知する必要があると思います(私は推測しています)。
とにかく、asm.comを気にせずに画像自体を単に書くことを示唆しているので、それも正しいので、以下の答えを受け入れます。