上位メモリから起動して「OK.」と表示するだけのプログラムで、 HUPAIR準拠表示の判別を行うコードの動作テスト用です。
Human68kの非公開機能を使って上位メモリにロードさせます。
そのためのフラグをHLKXの-g2
オプションで設定するので、
リンカとしてHLKXを使う必要があります。
RAMDISKなど上位メモリを使用するドライバは組み込まずに起動し、
HUPAIRに対応したシェルなどからentryceilを実行します
(スーパーバイザモードで動作するシェルの場合はメインメモリ実装量を11MB以下にしておきます)。
子プロセスのメモリブロック範囲外を参照する判別コードの場合、
未実装メモリを参照してバスエラーが発生します。
DOS _GETENV
で環境変数名が長すぎる場合に、スタック上に確保されたバッファの範囲外に
書き込んでしまう挙動(Human68k v3.02)を検証します。
なにかコマンドライン引数を指定すると、DOS _SETENV
で環境変数名と設定する文字列が
長すぎる場合の同様の挙動を検証します。
DOSコール内部のサブルーチンにあるrts
命令で読み込まれるリターンアドレスの部分を、
用意した乗っ取りルーチンのアドレスで上書きさせることで、リターンする代わりに
そのルーチンを呼び出すように細工しています。
Warning
プログラムが終了しないためリセットする必要があります。
コピーバックのディスクキャッシュなどはあらかじめ解除してください。
実験用に用意したシステムでのみ実行してください。
※普段使っているシステムでは実行しないこと!
プログラムを起動すると確認プロンプトが表示されるので、
yes
と入力してリターンキーで確定すると実行されます。
エスケープシーケンスESC [6n
(DSR = Device Status Report)
を表示した際にキーバッファに入力されたデータを読み取って表示します。
Human68Kの標準ではESC [{pl};{pc}R
(CPR = Cursor Position Report)
が入力されますが、FEPによっては対応していません。
コマンドライン引数で指定した例外を発生させ、例外処理を呼び出します。
-p
オプションを指定すると、スタックに例外発生時と同じデータを積んでから
例外処理ハンドラにジャンプすることにより、擬似的に例外を発生させます。
この機能はMPUが68000でなければ使えません。
コマンドライン引数で例外を指定します。
- illegal ... 不当命令
- aline ... A系列未実装命令
- trap#0 ...
trap #0
- spurious ... スプリアス割り込み(※
-p
専用です)
拡張外字処理を有効にして常駐終了します。常駐解除はできません。
フォントは文字コード(内部形式)を16進数で表記したものを動的に生成します。
16ドットフォントのみ対応しています(12ドットフォント、24ドットはすべて〿になります)。
あらかじめ、IOCS.XまたはHIOCS PLUS version 1.10+16.20以降を組み込んでおく必要があります。
- ROM IOCSは拡張外字処理に対応していないので使用できません。
- HIOCS.X、HIOCS PLUSの上記バージョン未満は
IOCS _FNTADR
に不具合があり暴走します。 - HIOCS PLUSのスイッチは
-u0
を指定してください(既定値なので変更していなければそのままで構いません)。
「ファイルを別名で実行するR形式実行ファイル」を作成します (作成にはシェルのリダイレクト機能を用います)。
execas 実行ファイル名 > 新ファイル名.r
実行ファイルは(通常であればカレントディレクトリと)環境変数path
からの検索が行われ、
絶対パス名に正規化されて新ファイルに埋め込まれます。
指定する実行ファイルはHUPAIRに対応している必要があります。
作成されたファイルを実行すると、作成時に指定された実行ファイルをロードし、 そのプロセスのPSP内に新ファイルのパス名とファイル名を上書きしてから実行します。
たとえばexecas C:\dir\gzip.x > D:\folder\gunzip.r
として作成されたgunzip.rを実行すると、
gunzip.rから実行されたC:\dir\gzip.x
からは自分自身がD:\folder\gunzip.r
というファイル名であるかのように見えます。
コマンドライン引数で指定したファイル名(省略時は*.*
)をDOS _FILES
の拡張モードで検索し、
結果を表示します。
コマンドライン引数で指定したディレクトリが存在するかどうかを、DOS _NAMESTS
とDOS _FILES
で調べます。
ディレクトリ名の末尾にパスデリミタがあるかどうかでDOSコールの引数と返り値のチェック方法を変えることで、
パス名文字列を加工せずに判定しています。