MSX-DOSで何かをするときは、DOSコマンド(*.COMファイル)を使う。
これはマシン語で書かれた実行形式のバイナリファイルで、テキストエディタでソースを書き、アセンブラを通し、リンカでつなげてできあがる。場合によっては、その前段階にコンパイラが加わる。
バイナリなので、コマンドの中身を見たり修正したり、というのは容易ではない。必要なら逆アセンブルし、エディタでソースを修正、再びアセンブラ、リンカ、と手順を踏む。
DOS上でシームレスに作業できるとはいえ、ちょっとした小物で調整しつつ動作確認、なんて時には少々鬱陶しい。間をすっ飛ばして、テキストエディタで書いて即実行させちゃおう、と企んだのがこのPTComになる。
冒頭の画像は、MSX-DOS2上で、コマンドの内容を表示させ、さらに実行させた状況のもの。コマンド自体が、すべて7bitコードのプレーンテキストで構成されているのがわかる。
内部構成、動作は、以下のようになる。
DOSコマンドは、100Hに読み込まれて100Hから実行される。PTComは100H..1FFHにプリローダが仕込んである。プログラム本体は、200H~にHEXデータ(2桁の16進数)の形で置かれる。
まずプリローダは、7E40H~にコンバータ(兼ローダ)を生成する。コンバータは200H~のHEXデータをバイナリ化し、100H~に転送する。最後に100Hにジャンプすることで、本来のプログラムの実行に移る。
DOSから呼び出された際の、A、BC、DE、HL、SP、スタックの内容、および80Hからの内容は保持される。内部でコンバータを生成するため、プログラムサイズはバイナリ換算で約15.5KBに制限される。
プログラム本体は、100Hから実行される通常のコマンドとして作成する。作りつつ、脳内アセンブルして、HEXデータを記述していく。いまどきMSXをいじる酔狂なら、それは容易なはず。
HEXデータ中に、改行および半角スペースは自由に含めてよい。データの終端記号はダブルスラッシュ「//」になる。コメント行の扱いはないが、ダブルスラッシュ以降は無視するので、そこに何を置いてあっても構わない。
HEXデータに、インテルHEXのような機能はない。単純に100HからのバイナリをHEX化して並べていく。HEXデータに、大文字小文字の区別はない。
稿末に掲げるのが、冒頭写真のptcomx.comの内容。コピペして、メモ帳などで保存し、MSXに持っていけば動作する。内容は、BDOSコールで「よくある文字列」を表示するだけのもの。
先頭の「2V~"S~……GGG!@~」の部分256文字がプリローダ。プログラムそのものなので、一字一句、位置も含めて変えてはいけない。
「110801……」で始まる部分がプログラム本体。動作例を示すため、無駄に改行やスペースや落書きを追加してある。
なお環境によっては、コピペの際にスペースや改行が付加されることがあるかもしれない。慎重に確認したい。
2V~"S~bk"P~`i"M~!e~"H~"^~6~#6###6!#68###60####68>!2@~2R~>02J~>>2U~>O2\~!@@))"D~|2L~/2g~2n~$"A~DM|2q~)|</2j~)%l"X~"Z~}2s~<<<2o~<<2K~<<<2u~<<2C~2O~<2a~<2b~<<<<<2c~</2t~====2d~>'/2m~==2k~2r~=2F~>2/2G~2]~>6/2W~2v~>~/2`~></`i+++wGGGGGGGGGGGGGGGGGGGGGGGGGGGGG!@~
110801 0e09 c30500
48656c6c6f205054436f6d20776F726C64 2 1 2
4//
PTCom 2018 by K-ichi's memo
(2018/10/8 一部差し替え)
0 件のコメント:
コメントを投稿
.