MSX-DOS2 FCS 03 79

From Z80 Machines Wiki
Jump to: navigation, search

3.79出口ルーチンの定義(63H)

パラメータ:C = 63H(_DEFAB)

DE =打ち切り出口ルーチンのアドレス

ルーチンを未定義にするには0000H

結果:A = 0(エラーを生成しません)


この機能は、MSX-DOS環境でロケーション00005hを介して呼び出された場合にのみ利用可能です。ディスクBASIC環境から0F37Dhの位置で呼び出すことはできません。

もしレジスタDEがゼロであれば、以前に定義された中止ルーチンは未定義になり、そうでなければ新しいものが定義される。一時プログラムが位置0000hへの直接ジャンプ以外の何らかの理由で終了しようとしているときはいつでも、中止ルーチンがシステムによって呼び出されます。 MSX-DOS 2用に作成されたプログラムは、0000hの場所にジャンプするのではなく、「エラーコードで終了する」関数呼び出し(関数061h)で終了するはずです。

ユーザアボートルーチンは、ユーザスタックをアクティブにした状態で、IX、IY、および代替レジスタを、関数呼び出しが行われたときと同じように、TPA全体がページインされた状態で設定して入力されます。レジスターAはレジスターBの2次エラー・コードで、ルーチンが「RET」を実行すると、レジスターAおよびBに戻される値は、「join」機能によって戻されるエラー・コードとして保管され、通常は次のように出力されます。コマンドインタプリタ別の方法として、ルーチンは戻るのではなく一時プログラム内のウォームスタートコードにジャンプすることができます。システムは関数呼び出しを受け付けることができる完全に安定した状態になります。

これが終了の理由である場合、レジスターAでルーチンに渡される1次エラー・コードは、プログラム自体が「エラー・コードで終了する」機能に渡したコードになります(これはゼロの場合もあります)。 Ctrl-CまたはCtrl-STOPが検出された場合( ".CTRLC"または ".STOP"エラー)、ディスクエラーが中止された場合( ".ABORT"エラー)、またはエラーが発生した場合にもこのルーチンが呼び出されます。 MSX-DOS関数呼び出しを通じてアクセスされている標準入力または出力チャネルの1つが01h ... 0Bh( ".INERR"または ".OUTERR")を呼び出します。

エラー ".ABORT"、 "。INERR"、 "。OUTERR"は、他のエラーの結果としてシステムによって生成されます。たとえば、「。ABORT」は「.NRDY」エラーから発生したり、「。INERR」は「.EOF」エラーから発生することがあります。これらの場合、元のエラーコード( ".NRDY"または ".EOF")が2次エラーコードとしてレジスタBの中止ルーチンに渡されます。他のすべてのエラーでは2次エラーコードはなく、レジスタBはゼロになります。

中止ルーチンが単純なリターンではなく「POP HL:RET」(またはそれと同等のもの)を実行すると、エラーが発生したMSX-DOS呼び出しまたはBIOS呼び出しの直後の命令に制御が渡されます。これは、ディスクエラーが発生したときに現在のMSX-DOS呼び出しを中止するオプションを許可するために、ディスクエラーハンドラルーチン(機能64hを参照)と組み合わせて使用​​すると便利です。