MSX Cafe
最適化の心 ここにあり
MSX Cafe
普通に使っていてはまず気付かないことについて書かれています(笑)。
MAiN Project Team's Web
メニューに戻る

 MSXの名古屋地区のイベントについては、MAiN Project Team's Webを参照しましょう。

MSX《略》 Micro-Soft X 《家庭用8ビットパソコンの統一規格》
フレッシュ ジーニアス英和辞典 3版(大修館書店)より。


ははは、あなたは物好きですねぇ(笑)。
えっ、私? もちろん物好きですよ(笑)。


C言語の限界に挑め?

MSX-Cでは、BASICより高速なプログラムを組むことができます。私の持っているMSX turbo Rでは、オールC言語で次のような芸当が出来ました。

BIOSのサポートする速度で、PCM再生を行う
 あえてBIOSを使わずにオールC言語で再生するのがミソ(笑)。
最大192行の4倍角(縦横2倍)漢字文字列の高速スクロール
 ハードウェアスクロール・パレット操作・最適化済み描画処理の融合技。3行までの文字列がリアルタイムかつスムーズにスクロールし、スクロールアウトするごとに違う文字列に置き換わる。これを実現するには、マシン語を使いこなせるだけでは実現できないはずである。

 で、そこまで極限を極めてどうするのでしょう?(笑)

MSX-JEとSRAM

 MSX-JEという物はなかなかのくせ者でして、SRAMが正常でないと漢字変換時に暴走してしまいます。このようなことに関しての対策としては、あらかじめフリーウエアのツールでSRAMをバックアップしておきましょう。私は内蔵ワープロの起動の前には必ずSRAMの内容をリストアしています。(といってもこのごろは内蔵ワープロを使っていませんが。)
 電池の入れ替えも忘れないようにしましょう。


Panasonic製 FS-A1GT のSRAMDISK

 皆さんいろいろな使用方法をしてるみたいですが、使い方がわかりにくい人がいるかもしれません。SRAMDISKは次のような利用法があります。
1)ROMDISKのAUTOEXEC.BATとREBOOT.BATで満足できない場合
 ROMDISKに書き込まれているこの2つのバッチファイルは、個人の環境が変化したときに書き換えることができません。しかし、このことを回避するために、ROMDISKに書かれているバッチファイルはSRAMDISKに同名のファイルがないかどうか確かめ、もしあれば実行します。したがって、SRAMDISKに起動用のファイルを作れば擬似的にROMDISKのファイルを書き換えたことになるのです。
2)MSX-Viewで標準使用するプリンタドライバの保存
などなど、電源を切っても保存が利くので便利です。
 ただ、容量が少ないのであまり奇抜なものは入れようとしないように(笑)。


turbo RのPCMとBASICの微妙な関係

 turbo RのBASICにはPCM録再拡張命令がありますが、これはCPUの動作モードがR800 DRAMモードでないと15.75KHzでは再生できません。ここまではBIOSの仕様ということで理解できます。ですが、ここでBASICのINTERVAL命令を使ったプログラムにPCM再生命令を加えると・・・あらふしぎ、15.75KHzのPCMが雑音だらけになってしまいました。実際のところ確認をしないままPCMのレートを落として対処したことがありますが、他に問題になりそうな部分も無いようです。turbo RのPCM録再BIOSがデリケートなことをあらわしているのでしょうか?
 きっと毒電波が・・・むぎゅ(笑)。


MSX-C Ver 1.2のバッファリング

 MSX-C Ver 1.2には、高速化のためにバッファリングという概念があって、プログラマはこの事を知っていないと原因不明のバグと戦うことになります。このような例としては、「文字が表示されないのに入力待ちになっている」ことや、「プリンターが正しく制御できない」などということが起こります。とくに後者の場合、stdprnで出力するものと、BIOSなどを使用して文字を出力するものを同時に使用すると、さらにややこしくなってしまいます。バッファリングを禁止しておくか、バッファのフラッシュを忘れずにするか、しっかり決めておくといいかもしれません。
 ほらそこ、カメラのフラッシュたいても意味がないって(笑)。
 どうせならマグネシウム燃やそうね(笑)。


MSX-C Ver 1.2の仕様上の注意

 「姓名占いwith相性占い」というプログラムを作っていてわかったことなのですが、これに添付されている標準ライブラリがとんでもない仕様だったのです。
 問題があるのはalloc()関数(高水準メモリ管理関数)で、これを多用するプログラムを書いた場合、使用可能メモリが見る見るうちに減っていきます(^^;。そして、挙げ句の果てにはシステムワークエリアが破壊されて・・・。
 これは、alloc()で確保したメモリをfree()で解放し、次に前回確保したメモリより容量を多くとろうとすると、解放できない方法でメモリを確保してしまうのです。しかも、このalloc()はfopen()などでも使用されているため、ファイルのオープン・クローズが多い時、alloc()を使ってないはずなのにメモリ不足により異常が出てしまいます(^^;。前述の「姓名占いwith相性占い」では、一人を占うのに平均15回のオープン・クローズを行うので、見事にワークエリアが破壊されます。
 マニュアルに「注意」としてalloc()の説明に書いてあるだけに、バグが仕様としか言えません。いやぁ、参りますねぇ。

 ・・・と書いたまではいいのですが、もしかしたら私のバグが埋もれているせいだったりして?(笑)


MSX-Cで作ったプログラムはどれぐらい高速か?

 MSXでプログラムをするに当たって、標準的なプログラム環境は、BASICとアセンブラ。そこから見れば異端といえそうなC言語なのですが、使いようによってはなかなかのものです。さすがにアセンブラにはかないませんが、BASICとは比べ物になりません。速さではアセンブラ、簡単さではBASICですが、結構簡単で結構な速度が出るC言語もなかなかいいものです。標準的なマシン(MSX2やturbo Rでもメモリに余裕がない)ではコンパイルしながら食事ができるのもいとをかし(汗)。
 ちなみに私はturbo Rに拡張RAMを積んで使ってますので、カップラーメンにお湯を入れにいくと既にコンパイルが終わっています(笑)。

たわごと山ほど

MSXの熱転写プリンターで印字したものは強い

 私の家には、MSX用プリンターFS-PC1で印字した表札があります(透明粘着フィルムに印字しただけの物なんですが)。実は印字面が外側に出ていまして、一度も取り替えないまますでに6年以上が経過しています。私がこのフィルムを貼ってから周りの家もワープロ派が多くなったみたいですが、印字面が風雨にさらされているところは無いようです。貼った当時は私も知識がなかったのですけど、風雨に直接さらされても文字が消えないなんて、MSXの熱転写プリンターは強いですね。
 ・・・でも、いつまで耐えるんだろ、ちょっと恐くなってきたぞ(笑)。


なぜまだMSX?

 PC9821As2があり、自作のAT互換機もあってWindows上の開発をしたい今日この頃ですが、いかんせん取っつきにくいのが現状です。せっかくVisual C++買ったのに(^^;。
 私の頭は結構固いようで、Windows時代にまだ対応しきれないのです。それで、ついついMSXでプログラムを・・・(笑)。
 ただ、一つ言えてるのは本当にプログラムがしやすいという事です。Windowsプログラムが簡単だったら既にそっちにうつってますがな(^^;。

MAiN Home Pageへ
Emuのホームページに戻る


emu@mud.biglobe.ne.jp