« サンタ・ルチアを歌おう、、 | トップページ | E52のファームウエアを更新した »

2011年2月21日 (月)

SELNO.COM アセンブラでアセンブルしないでプログラムを作る

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
-----(おわり)-----

 久々にアセンブラ言語を思い出した日でした。

 


 

|

« サンタ・ルチアを歌おう、、 | トップページ | E52のファームウエアを更新した »

アプリケーション」カテゴリの記事

パソコン・インターネット」カテゴリの記事

プログラミング」カテゴリの記事

コメント

懐かしいですねぇ。
昔々シングルタスクの頃,autoexecなどのバッチで表示した番号を選択して,指定プログラムを走らせる簡易メニューで,まったく同じ手法を使っていました。
VZを使うようになる前は,ワープロやら表計算やらデータベースやら重いソフトもそれなりに使っていましたので。
アルファベットを返すバージョンも作りましたが,結局メニューはスカスカで。(笑)

投稿: めざら | 2011年2月26日 (土) 13時21分

HP200LXを使う方は皆さん、同じように工夫して使っていらっしゃいますよね。
私もアルファベットに対応したコードを返すようにしてみましたが、やはり、そんなに要らないことがわかっただけでした。

投稿: masa | 2011年2月26日 (土) 19時43分

コメントを書く



(ウェブ上には掲載しません)




トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/513620/50935348

この記事へのトラックバック一覧です: SELNO.COM アセンブラでアセンブルしないでプログラムを作る:

« サンタ・ルチアを歌おう、、 | トップページ | E52のファームウエアを更新した »