よろず情報局

 ここでは、アセンブラ、Cといった枠に囚われない、知ってると少し役に立つ(本当か?)情報を提供しようと思います。

[目次]

御意見、御感想、御希望等ありましたら何でもE-Mailでどうぞ

Tatsu's MSX Researchesトップに戻る


[アプリケーションを使いこなせ!]

ロングファイル名とうまく付き合おう(その1)

 Windows 95/98/NTで使ったディスクをMM(MOGUさん製作のファイル管理ソフト)で見るとリードオンリー、隠し(Hidden)ファイル、システムファイル、ボリュームネーム属性が付いた変なボリュームラベルがついていることがあります。
 いったいこれは何でしょう?
 実はこれが、Windows 95/98/NTで使われるロングファイル名の一部です。Windows 95/98/NTで使われるロングファイル名は、短いファイル名のエントリを組にして、その中にロングファイル名とショートファイル名を収めています。
 そのため、ディレクトリをソートしたり、エントリの並び替えを行う際は、リードオンリー、隠し(Hidden)ファイル、システムファイル、ボリュームネーム属性が付いたボリュームラベルとその次のファイルまでの並び順を崩してはいけません。

例)
FILE    .TXT 1234
 .txt        <VOL> _RHS ;ここから
A            <VOL> _RHS
VERYLO~1.TXT     1      ;ここまでの並び順を崩してはならない

 もし、崩した場合、Windows 95/98/NTでロングファイル名が消えてしまいます。
 という訳で、Windows 95/98/NTで使ったディスクにつく正体不明のボリュームラベルの正体でした。
 これの元ネタって昔TOMBOY誌のQ & Aで某庵親方が質問していたことだったりします。(^^)

MSX-DOS2標準出力の罠

 MSX-DOS2の標準出力はタブを出力しようとすると、勝手にタブをスペース8文字に置き換えて出力してくれます。
 MS-DOSやMSX-Cのリダイレクトエミュレーションでは、そのままタブを出力してくれるのですが。
 標準入出力を使ったフィルタプログラムなどで、テキストを整形する場合は、気をつけると良いでしょう。
 C言語のタブ幅は4文字と決めている私としては、正直言って、余計なお世話だと思うのですが、皆さんはいかがでしょうか?
 それにしても、MSX-DOS2のアスキー独自拡張は、今から見るとろくでも無いものが多いなと思うのは私だけでしょうか?

MSXでHTMLを見よう!

 フロントラインさんから委託販売されているEurolink3には、HTMLVIEWという、HTMLブラウザが収録されています。
 このソフトは、MSX-DOS1/DOS2上で動作するので、動作に際する機種依存性が低くなっています。
 これにより、とりあえずは、MSXでもHTMLを見ることができます。

 ただ、このソフトには、いくつかの問題点があります。
 ひとつは、解釈できるHTMLのタグがそう多くなく、解釈できないタグが出た場合に、タグの中身を表示するという問題です。
 HTMLをブラウズするプログラムでは、解釈できないタグは通常無かったものとするので、解釈できないタグがあっても、最低限文章は読めるようになっているのですが、タグの中身が出る場合、文章と関係無い文字列が表示され、文章が読みづらくなるという問題があります。
 2つ目は、インターフェイスの問題です。プログラムがMSX-DOS上で動作するにもかかわらず、ファイル指定がプログラム起動後にしかできない上、画面出力を恐らくBIOSで行っているので、DOS2でバックスクロールのできるテキストビューワーにパイプラインを利用して渡すこともできないなど、外部プログラムとの連携が不可能ということで、使い勝手が悪くなります。
 また、キー操作で表示の一時停止ができなかったり、ディスクを頻繁に読むので怖くてPAUSEキーが使えなかったりと、テキストを読むにも、やや使いづらい面はあります。
 また、日本製ではないので、日本語のHTMLを表示した際に、たまに画面が乱れるといった問題もあります。

 とはいえ、MSXでHTMLが読めるようになると、ソフトのドキュメントの表現力の向上や、他機種との交換性の向上といったメリットもあるので、今後に期待したいと思います。

MSX-Magazine1991年5月プログラムサービス収録DMOVE2.COM

 MSX-Magazine1991年5月プログラムサービス収録のDMOVE2.COMは、ディレクトリ順番整理に役立ちますが、実はこれ、MSX-DOS1でも動きます。ただ、ディスク中ではサブディレクトリの中に入っているので、どうやって取り出すかが問題になります。MSX-DOS2やMS-DOS等が動くマシンがあればよいのですが、そうでない時は、MSX-Magazine1991年5月プログラムサービスのディスクをDISKCOPYし、モニタやデバッガ等でサブディレクトリのディレクトリ情報をルートディレクトリに転写し、他のディスクにコピーして使うというような荒業が考えられます。しかし、この方法は一歩間違うとディスクの情報をごっそり失う恐れがあるほど危険なので、ディスクの情報を良く知っている人以外は行わないようにしてください。私は一切責任をとりません。
 他には、一旦MSX-Magazine1991年5月プログラムサービスのディスクをDISKCOPYし、そのディスクに対し、フリーソフトのDOS1用疑似階層ディレクトリ再現システムを使うなんていう手も考えられます。

MSXべーしっ君プラス ディスク版を作れ?

 MSXべーしっ君プラス(無印でも良いような気がする)はページ1のROMを SUPER-Xのスーパーセーブでセーブし、セーブしたファイルをMSXディスク通信3月号のSET40.COM でロードするとROM抜きでもMSXべーしっ君プラスの機能が使えるのでスロットが1つ空きます。と書いたところでここで登場した3つのアイテムを全て持ってるという人は何人居るのでしょうか?
 他にも、NGD#4収録のBCTOCOMを使うなんていう手もあります。詳しくはマニュアルを見るとして、この手をとった場合、1つのファイルでDOSからMSXべーしっ君プラスをセットアップできるので、便利です。
 まだ、方法があったりして。

画像ローダー BLS.COMの裏技

 画像ローダー BLS.COMはファイラー付きで多くの画像形式に対応している重宝するソフトですが、ファイラーで Mキーを押すとカーソルの指すファイルのコピー・ムーブが出来ます。非公式なので、表示などはやや不親切ですが、一応機能します。ひょっとすると、どこぞのディスクツールと同等以上のファイル管理機能があるかもしれません。これで、ファイル管理機能が洗練されてテキストビューアが強化されたら下手なファイル管理ソフトは不要ではないかという妄想を抱かせてくれます。うーん、凄い。

音楽ソフトPerformer OPXの裏技

 Performer OPXはOPXファイルをDOS上でグラフィカルに楽しめる(笑)ソフトウェアですが、Graph キーやマウスの右ボタンを押すことでカーソルを向く目玉が出たり消えたりします。ぜんぜん意味もないし、ありがちなものですが色々と操作するときには丁度良い(?)アクセントになります(?)。

テキストエディタV&Z2の落とし穴

この話はTAKERUで売ってるバージョンでの話ですが、(今の最新バージョンでは直ってるかも知れない)コマンドラインなどからファイル名の拡張子を除く部分が8文字のファイルを読み込ませようとすると読み込まれないので、その場合はファイラーを使うと正しくオープンできます。
更に、このバグはXMARKにも存在するようです。

テキストエディタV&Z2の落とし穴再び

これは、A to Cさんに教えてもらった情報です。
TAKERU版のV&Z2のV.COMは150Kbytesを超えるファイルをセーブするとテンポラリファイルの順番が狂ったファイルができる。
例えば3つのテンポラリA,B,Cを作成したとして本来A-B-Cの順でセーブされる筈がB-A-Cの順でセーブされる。
このバグの対処法は、Bottom jumpしてからファイルをセーブする。これを忘れると悲惨な事になる。
Z.COMでの動作は未確認。
この場を借りて、情報を提供して下さったA to Cさんにお礼を申し上げます。

漢字BASICと単漢字変換のROM

私はMSXエミュレータfMSX98/ATを利用する時に偶然見つけたのですが、漢字BASICと単漢字変換のROMはMSXの規格レベル(1,2,2+,Tr)に関係なく動作します。さらに、日本版でなく、海外版のROMでも動作します。海外版のROMの場合はローマ字かな変換が出来ませんでした。ただ、半角カナが入力出来るので、海外版ROMユーザーがカナまじりのBASICリストを打ち込む場合は一時的に漢字モードにして打ち込む事が考えられます。エミュレータで仕方なく海外版のROMを使うユーザーはお試しあれ。

落ちないFDC-ROMを落とすには

SUPER-X等で、まともにディスクに落とそうとするとディスクアクセスランプがつきっぱなしになり、ディスクに落とせないようなFDC-ROMがあります。(例えば、FS-A1WSXの内蔵ディスクのFDC-ROM)その様な場合、一回FDC-ROMの内容をVRAMに落とします。(SUPER-Xの場合スロット#4)そこで、一回リセットしてから先程FDC-ROMの内容を転送した部分のVRAMの内容をセーブすると、FDC-ROMの内容を無事に落とす事が出来ます。リセットしてもVRAMの内容がクリアされないから出来る技と言えるでしょう。結構応用範囲は広そうです。
単に、ディスクに落とせないようなFDC-ROMを落とすだけなら、最近のfMSX98にはKSAVER(つじかわ氏(BXC04611@nifty.ne.jp)作)があるので、それを使うと速いんですけどね。

CP/MエミュレータのMSX関連活用法

MSX-DOSはある程度まで、CP/Mと互換性があるので、CP/Mで使えるソフトを、MSX-DOSで使うという事も多いと思います。(特にTurbo-Rを持ってない人で)MS-DOSマシンを持っている人は、CP/Mエミュレータでこういったソフトを使うのも良いのではないかと思います。例えば、PMextはある程度のCPU速度と、ハードディスクや、RAMディスクがあれば、なまじMSX/2/2+ネイティブ+フロッピーベースで動かすよりも早く動くので、パフォーマンスの向上に役立ちます。また、Cコンパイラなどをこういった環境で動かして、クロス開発するのも良いと思います。実際、MSX-DOS(1) TOOLSのM80,L80はエミュレータ上でも完全に動作するので、アセンブラでプログラムする人には、もってこいです。
肝心のCP/Mエミュレータですが、私の記憶が確かなら、IIJのAnonymous FTPやベクターのホームページにあります。最近の環境なら、MSX/2/2+以上のトータルパフォーマンスは楽に出るので、一度お試しあれ。
ちなみに、Z_EMというCP/Mエミュレータを使うとあのHI-TECH Cを動かすこともできたりします。

バッチファイルに関して

バッチファイルのEOFの位置ですが、
dir /w
[EOF]
と書くより、
dir /w[EOF]
と書いた方が、わずかですが、ディスクアクセスの回数が減って快適になります。(MSX-DOS1では効果がある。MSX-DOS2ではバッファがあるから案外変わらないかも)ちょっとした事ですが、効果はあると思うので、一度お試しあれ。

多けりゃいいってもんじゃない

 MSX-DOS2では、BUFFERS命令を使うことで、DOSが内部で使うディスクバッファの量を調節することができ、バージョンによって異なりますが、19ないし、20まで、増やすことができます。
 ディスクバッファを増やすことで、ディスクアクセスが軽減されて、快適にソフトを利用することができますが、ディスクバッファを増やしすぎると、正常動作しないソフトがあるようです。
 たとえば、MMから、子プロセスを立ち上げた際や、SOLiD Cを立ち上げる際等に、*** Not enough memoryエラーが出て、起動できない場合がこのケースにあたります。
 また、プログラムが正常動作しない場合もこのケースも考えられますので、BUFFERSを余り多くとりすぎるのも考え物のようです。

MAGS.COMによるMSXパレットデータ→MAGフォーマットのパレットデータ変換について

 MSXで作成された画像を16色で使われているMAGフォーマットに変換する際にMERON氏作のMAGセーバーMAGS.COMを利用することが多いと思います。
 この場合に、他機種でMAGフォーマットに変換された画像を見ると色が暗くなることがありますが、これはMAGS.COMのパレットデータの変換によるものと思われます。
 変換が必要となる理由は、MSXのパレットデータがRGB各3ビットに対してMAGフォーマットではRGB各8ビットであり、直接パレットデータを代入するとMAGフォーマット画像としては明るさが暗くなるためです。
 MAGS.COMによる変換後のデータを見て推測するに、MAGS.COMでは次の式を利用しているようです。
 (MSXパレット輝度)*2*16+15

[プログラミングで差を付けろ!]

大容量ディスクにインストールできるソフトを作る上で

 MEGA-SCSIやATA-IDEインターフェイスの普及でMSXでもHDDやMMO,Zipといった高速・大容量の記憶媒体を使える環境が手に入るようになりました。
 このような環境では、サブディレクトリを作って、そこにプログラムをインストールして実行することが多くなります。
 また、そうでなくても、似非RAMのような記憶媒体が存在すると、フロッピーディスクはAドライブとは限らなくなってきました。
 こうした環境において、プログラムが入っているフロッピーディスクドライブがAドライブだと決め打ちしているプログラムでは、カレントドライブがAドライブで無い場合、プログラムが必要とするファイルが見つからず、正常動作しなくなります。
 また、ディレクトリについても、プログラム実行時のディレクトリはルートディレクトリとは限らないので、ディレクトリ名を絶対指定しているソフトでは、同じ理由で正常動作しなくなる可能性があります。

 これらのことを考えると、プログラム本体のファイル以外にファイルを必要とするプログラムでは、ファイル名を指定する際に、ドライブ名を指定しない(カレントドライブを指定する)ことと、サブディレクトリを利用する際は、上の階層のディレクトリはユーザーの環境によって変化するので、相対指定で指定する事(Webページを作る時も同じですね)が必要となります。

MSXのプリンタについて

 MSXのプリンタの制御コマンドはだいたいNM系と同じようです。これを利用すると、Windowsのプリンタ出力をファイルに落として、落としたファイルの内容をMSXとMSX用プリンタで印字するといったことができます。金をけちりたい人にはもってこいでしょう。ただ、横の印字位置はプリンタ出力プログラムで加工して調節する必要があります。(FS-PC1の場合)また、2バイト文字の特殊記号は異なるので、そこだけはプリンタフォントは使わないようにしなければなりません。非漢字プリンタだったら、全部プリンタフォントを使わないようにすると何とかなると思います。48ドットプリンタの場合はプリンタフォント以外は24ドット(180DPI)になるので、逆にプリンタフォントをいかに活用するかがカギです。ちなみに、プログラムを凝った物にする事で色々な事ができるので、余力のある人は試してみましょう。(例えば、漢字横書きモードの指令を漢字縦書きモードに変更して縦書きのできないアメリカンなワープロで縦書きを実現するとか)

FS-PC1で48ドットビットイメージ印字!

なんと、というか、やはりと言うか、FS-PC1には48ドットビットイメージ印字のコマンドがあります。方法は、ESC+G+nnnnの後に、イメージデータをnnnn*6バイト送ることで、48ドットビットイメージ印字ができます。1カラムは、6バイトで、構成され、データの順序は、他のビットイメージ印字の場合と同じです。試しに、このBASICコマンドで、実験してみましょう。


10 print chr$(27);"G0001";string$(6,128)
20 print chr$(27);"J0001";string$(3,128)
10行による縦に並ぶ6つの点の方が、20行による縦に並ぶ3つの点より、小さくなっているはずです。
これにより、プリンタ本来の性能を引き出したきめの細かい印刷が可能になります。あとは、皆さんの制御プログラム次第です。

PMarcの作り出すアーカイブの構造について

以前、私がPMarcの作り出すアーカイブはMS-DOSのLHAで見られると言いましたが、実は、見る事ができる場合もあるが(ここで勘違いした)見る事ができないと思った方が良いでしょう。そこで、MS-DOS上でPMarcの作り出すアーカイブのリストを見る為に作ったプログラムの制作時の解析の結果から割り出したPMarcの作り出すアーカイブの構造について書きます。なにかの参考になれば幸いです。
PMarcの作り出すアーカイブの構造はLHAの作り出すアーカイブのヘッダレベル1のアーカイブの構造に似ています。このあとは、オフセット:意味の形式で書きます。
---ここから---
0:このバイトが00Hのときは、アーカイブの終わりを示し、この後のデータは意味がなくなります。(この辺はCP/Mの仕様です)そうでない場合は、メモを含めたヘッダの長さになります。
1:アーカイブヘッダチェック用のチェックサム
2-6:形式名の文字5個が入ります。pm2形式の時は"-pm2-"、pm0形式の時は"-pm0-"となります。
7-10:圧縮後のサイズが80系CPUの形式(低位バイトが先、高位バイトが後)で入ります。
11-14:オリジナルのサイズが80系CPUの形式で入ります。
15-16:ファイルの作成時刻が80系CPUの形式で入ります。bit15-11には時が,bit10-5には分が,bit4-0には秒/2が入ります。
17-18:ファイルの作成日が80系CPUの形式で入ります。bit15-9には年が(西暦−1980)の形式で,bit8-5には月が,bit4-0には日が入ります。
19-20:不明
21:次のバイト以降のファイル名の長さが入ります。なお、ファイル名は、拡張子が無くてもピリオドを含みます。
22-(22+21バイト目が示す数):オリジナルファイルのファイル名が入ります。
(22+21バイト目が示す数+1)-(22+21バイト目が示す数+2):CRCの値が80系CPUの形式で入ります。このCRCはオリジナルファイルの物ですので、圧縮の有無に関わらず、同じ内容のファイルでは同じ値になります。
(22+21バイト目が示す数+3):メモが入ります。メモが無い場合、即アーカイブの内容になります。
(22+21バイト目が示す数+3+メモの字数):実際のアーカイブの内容で、圧縮されていない場合はオリジナルファイルのデータがそのまま、圧縮されている場合は、圧縮されたデータが入ります。-pm2-で圧縮されたファイルの解凍法を私は知らないので、知っている人は教えてくれると幸いです。
ファイルの内容が終わると、次のファイルのヘッダがでて、最初のバイトが00Hになるまで、続きます。アーカイブ操作プログラムなどでは役に立つと思います。

無効システムコール

MSX-DOSで無効なシステムコールを実行した場合は、「Aレジスタに00Hがセットされる以外は何も行なわない」とMSX-DOS TOOLS(DOS2 TOOLSではない!)のマニュアルにありますが、実は、Bレジスタには0が入るようになっているようです。(A1ST+MSX-DOS V1.03で確認)
この性質を使う例としてはMSXのバージョンチェックが挙げられます。

MSX-DOS1のファイルオープン・作成の仕様

MSX-DOS1のファイルオープン、作成ファンクションはFCBのレコードサイズを128に強制的に設定してしまうようです。その為、他のファンクションの前に、レコードサイズを一度だけ設定しなければいけません。

MSX-DOS2の標準入出力

MSX-DOS2ではコンソール入出力のシステムコールはI/Oリダイレクションの影響を受けます。しかし、これでは、エラーメッセージのように確実に画面に出力を行いたくても、画面に出力を行なうことができません。
そこで、MSX-DOS2では、あらかじめオープン済みのファイルハンドル(オープンしなくても他のシステムコールに渡せる)が用意されています。
オープン済みのファイルハンドルにはこの様なものがあります。
番号:入力/出力先:機能
0:標準入力(stdin):コンソールから入力を行います。I/Oリダイレクションの影響を受けます。
1:標準出力(stdout):コンソールに出力します。I/Oリダイレクションの影響を受けます。
2:標準エラー出力(stderr):I/Oリダイレクションの影響を受けずに必ず画面に出力します。
3:標準補助入出力(stdaux):補助入力/出力装置に入出力を行います。
4:標準プリンタ出力(stdprn):プリンタ出力を行います。
これらのファイルハンドルを使うことで、必ず画面に文字列を出力できたり、各種デバイスをファイル同様に扱うことができます。