謎のツール

WizardOfPSG2004-06-27


プライベートで色々やってたことがひと段落ついた感じなので、ちょっと前からやってたMSX用の謎のツールの開発を再開しました。
…っていうか、別に謎ってわけではなくて、実は既にこっそり発表している、MSX-BASIC用SCC音色波形合成エディタ「S-cube」のバージョンアップ版を作っているのです。

一応コレでも使えるは使えるんですが、このご時世にMSX(1)用のBASICプログラムなんで、トロいしエラートラップは不完全だし、正直なところ15年前のベーマガ実用プログラム以下のデキなので(^^;)、前々から作り直そうと思っていたものなのでした。 で、次に作るときはターゲットはWindowsで…と思ってC++Builderまで買っていたものの、めんどくさくて放置プレイ状態。(w そんな折、(まだ正式オファーがあったわけではないので発表できませんが…企画ポシャりそうだし^^;)ひょんな事からもう一度MSX上で動くものが必要そう…だけど、今のまま発表するのはちょっとネェ…ということで、再度MSX上で作り直すことに。
ただ、MSX-BASICだと速度・メンテナンス・移植性に難がある為、現在の私の本職で使っているC言語で書き直すことに。 ただ、MSX上で動くCってどうなんだろ…というわけで調べてみたところ、実はいくつかMSXで動作するC言語があるらしい。 アスキーから昔出てた「MSX-C」が最も有名ですが、こいつはANSIではないし、作成したプログラムの配布にはライセンスが必要なんだとか。 そして何より、商品として売ってたものなので、今や入手不可! えーい、ダメだダメだ!! というわけで、ここで紹介されているフリーのものをいくつか試してみたところ、うちの環境で唯一動作したのが「HI-TECH C」のMSX-DOS(1)版だったので、それを使うことに。 前述のページにインストール方法が書いてありますが、はっきり云ってメンドクサイです。 なかなかマトモに動作しなくて、環境構築からして大変ですので、これから始めようと思う人(いるのか??)は覚悟しましょう。(^^;)
で、BASICソースをC言語に移植していくことに。 まずは、基本システムである波形計算プログラムから作っていくわけですが…コレが思い通りに動かない!! デバッガが無い(あるのかもしれませんが調べてない)ので、printfで計算した数値などを画面に表示して色々探ってると…基本的な原因がわかりました。 「float」と「int」で計算させた場合のキャストがうまくいってない!! 私は本職でC言語を常用しているとはいえ、作るプログラムの性質上、ほとんどintでしか数値を書きません。 しかし、こういうプログラムは最終出力値がintであろうとも、計算時はfloatにしておかないと非常に大味な計算になってしまい、予想と違うトンデモナイ波形が出てきたりする可能性があるのです。 で、例えばint数値a=1という値があって、(a/2)*32=16というのを期待していても、実際は0しか入ってなかったり。 で、こういう場合どうするかというと、(float)(a/2)*32ではダメで、何故か((float)a/2)*32でないと正しい値が出てこない。 んー、普段こういうプログラムは書かないんで、なんでそうなるのかさっぱりワカリマセン…(?_?) 最初にプログラムを書いた時点では、このへんはオートキャストで全てfloat変換されるのを期待してたんですが…世の中そんなにアマくない?? ていうか、C言語ってみんなこうなんでしょうか? それとも、HI-TECH C特有の方言なのか?? こんなところで詰まるとはまるっきり予想外でした。 というわけで、開発はかなーり時間かかってまして、一番簡単な矩形波は既に出来てるものの、他が相変わらず変な波形しか出力せず、本日いじってノコギリ波がなんとか形になってきたかなー、といった感じ。 それでも、終端処理が微妙におかしくて、2度目以降の波形の振幅が小さくなってるのを直さんとイカンなぁ、といった感じです。 すぐには発表できませんが、秋頃に発表できる…といいなぁ。 しかも、ネット上だけではなく(以下検閲削除!!)