2011-02-21(月)曇り/晴れ、風があって少し寒い
ここのところ、DOS(HP200LX)上でのバッチファイルを弄ったり、DOS上のソフトの使用法を調べたりと、DOSにかかり切りです。というのも、スケジュール管理の「タグスケ」とか、読みたい本や聞きたいCDなどの管理を行う「BOOK.BAT」通称ブック・マン(book manager)の改造、テストなどを行っているからです。
「タグスケ」については、「この辺」とか「この辺」
「BOOK.BAT」については「このあたりから」
バッチファイルを弄っているときに、小さい(10バイトくらい)けれどよく使うプログラムの事を思い出して、過去のメモを読んで懐かしく思い出しました。この、「SELNO.COM」(注1)の考え方と名称は、パソコン通信時代にFHPPCで活躍されていたYAFOさんの投稿から戴いたものです。
YAFOさんは、人間がアセンブルした10バイトほどの16進数データを「DEBUG」(注2)で、COMモジュールにしたものです。
注1:SELNO.COMは、キーボードからの数字1桁の入力を待って
入力された数字と同じエラーレベル数値をDOSシステムへ渡す
プログラムです。これを使って、バッチ内での処理を選択することが
できます。
私の作成した版は、上記BOOK.BATについてのサイトにある
SEL_TAG_BAT.ZIP の中にあります。
注2:DEBUGというのはDOS に入っているデバッガのソフトです。
DOS上で動かすプログラムのデバッグに使用できるものです。
私は、このYAFOさんのSELNO.COMの動作を1カ所変えたくて、マクロアセンブラとMS-DOSのマニュアルと首っ引きで、アセンブラで数ステップのプログラムを書きました。これをアセンブルする方法は、「GETKEY.COM」を作った方の情報を参考にしました。この方法もDEBUGを使う方法ですが、人間アセンブルしなくても済みます。
今でも、「GETKEY.COM」でWEB上をサーチすると出てきますが、今のところYAFOさんと同じ、16進数をCOM化する方法がヒットしてきました。
私が使わせて戴いた方法は、どこから見つけてきたのか、今となっては思い出しません。
このようなテクニックも、段々見かけなくなって行くのでしょうね。WEB上でも、同じ事をやりたいけどできなくて、質問を出しているサイトも見かけました。
ふと思いついたときに、自分でも見られるように、ここにも書いておこうと思います。
作成は、DOS上でDEBUGを使って行います。DEBUGの操作方法については説明しません。私はHP200LXの生DOSの上で行いました。
作成方法:
下記の------の間を SELNO.SRC という名前のファイルにし、どこかのディレクトリに入れます。そのディレクトリに移ってから、「DEBUG < SELNO.SRC」 と入力してアセンブルします。同じディレクトリ内に SELNO.COM が作られます。つまるところ、DEBUGをアセンブラとして使うわけですね。2行目~6行目の5ステップが、プログラムです。その他はDEBUGに対するコマンドです。
下の方の太字の「A]はプログラムの長さ(16進数)です。即ち、太字の5ステップを機械語にアセンブルしたときの長さです
----新SELNO.COM----------------------------
A 100
MOV AH,08
INT 21
SUB AL,30
MOV AH,4C
INT 21
N SELNO.COM
RCX
A
W
Q
--------------------------------------------
SELNO.COM の使い方は、上記注1に書いてあるSEL_TAG_BAT.ZIPの中のSEL_TAG.BATを例に見て下さい。
なお、下記のようにすれば、GETKEY.COMと同じ動きになるはずです。どこかで見て、作り方の参考にさせていただいたもののコーディングでは INT 16 を使っていましたが、私はINT 21(しかもAHレジスタに入れるパラメータは08)が好きです。
GETKEY.COMは、キーインされた文字のASCIIコードそのものを、エラーレベルとしてDOSに返します。
(GETKEYそのものでしたので、自分タイプに修正しました(2011-02-22)
----- GETKEY.COM としての動き用 -----
A 100
MOV AH,00 MOV AH,08
INT 16 INT 21
MOV AH,4C
INT 21
N GETKEY.COM
RCX
8
W
Q
-----(おわり)-----
久々にアセンブラ言語を思い出した日でした。
最近のコメント