CPCBASICの「CALL」コマンド
最近、私はAmstradCPCエミュレーターで遊んでいます。私は何年もBASICコードを書いていませんが、当時は実際にCPCを実際に使用していました。
とにかく、オンラインのドキュメントを見ると、CPCにはCALL任意のZ80マシンコードサブルーチンを実行するためのコマンドがあることがわかります。しかし、私はそれに関する多くのドキュメントを見つけるのに苦労しています。ほとんどのコマンドリストには、「これが何であるかわからない場合は、触れないでください」と書かれています。
CALLその後に、実行するマシンコードのアドレスが続きます。おそらく、単純なサブルーチンからの復帰命令により、完了したらBASICに戻ることができます。
そのため、BASICとマシンコード間でデータを渡す方法の問題が残ります。特に、CALLコマンドは開始アドレスの後に追加のパラメーターを受け入れるようですが、これらが実際に何をするかは文書化されていないようです。(残念ながら、結果をBASICに戻す方法はないようです。)
回答
呼び出しは、整数とポインターのみをパラメーターとして受け入れます。どちらも16ビット値です。パラメータはBASICスタックに配置されます。IXはそのスタックの一番上を指します。パラメータの数はAに入力されます。マシンコード操作では、パラメータのデータ型を把握する(または単に想定する)ことを含め、そこから取得する必要があります。
例については、例えばを参照してください。 http://www.cpcwiki.eu/index.php/Technical_information_about_Locomotive_BASIC; ただし、説明が少し紛らわしいことに注意してください。
ポインターを渡すときは、事実上参照によって渡すので、ポイントされている変数に値を返すことができることに注意してください。
いくつかの指針:
一部のHLLPOVからZ80アセンブリを実行するための優れた本は、常にOsborneのZ80アセンブリ言語サブルーチンです。
CPC固有のアドレスについては、CPCWIKIなどのCPC関連サイトを参照してください。
そして、一般的な8080の戻り命令はRET(C9h)です。
条件付きリターンは
RET xx、xxを条件として使用します。