MSX VIEWer開発裏話 ~ MSX VIEWerができるまで~ | |
もくじ MSX VIEWer開発裏話(01) MSX VIEWer開発裏話(02) MSX VIEWer開発裏話(03) MSX VIEWer開発裏話(04) MSX VIEWer開発裏話(05) MSX VIEWer開発裏話(06) MSX VIEWer開発裏話(07) MSX VIEWer開発裏話(08) 戻る |
記述内容はすべて当時のものです。 MSX VIEWer開発裏話(01) 04/29/2004 07:26:44 PM MSXパソコンで保存したプログラムリストをWindows上で閲覧するソフトとして現在開発中(β版公開中)の「MSX VIEWer」の情報を書いていきます。 プログラムのダウンロードなどは、こちらです。 開発の動機 Internet Explorerの埋め込みフォントという技術を使用して、MSXのプログラムリストをMSXのフォントで表示させる例を見かけました。 これを見て、これを応用すれば、従来のMSXプログラム表示ソフトでは難しかった、半角ひらがなやグラフィック文字(半角の漢字や罫線文字など)も再現できるかな、と思ったのが開発の始まりでした。 つづく。 MSX VIEWer開発裏話(02) 04/30/2004 11:53:20 PM そこで、とりあえずMSX PLAYer(MSXのエミュレータ)上で、画面にすべての文字を表示させる次のようなプログラムを書いて、その結果を絵としてファイルに落としてみました。 10 SCREEN 5:COLOR 1,15,15:CLS 20 OPEN "grp:" AS #1 30 FOR Y=0 TO 13:FOR X=0 TO 15 40 PRESET(X*8,Y*8) 50 PRINT #1,CHR$(32+Y*16+X) 60 NEXT X,Y 70 BSAVE "msxfont.sc5",0,&H69FF,S こうして作ったMSXフォント見本がこれです。 つづく MSX VIEWer開発裏話(03) 05/13/2004 06:20:53 PM MSXのフォントを元に、1文字ずつ手作業でTrueTypeTMフォント化していきました。(変換ツールがなかったので) もともとTrueTypeTMフォントではないMSXのフォントを無理やりTrueTypeTMフォント化しているので、やや無理があるのですが、なるべく元と同じデザインになるように作ってみました。 グラフィック文字は普通の文字とは別のフォントとして作りました。 このフォントをWindowsにインストールして表示させてみました。 そうすると結構リアルに(実機に近い感じで)表示できることが分かりました。 アスキーセーブされたプログラムリストなら、Windowsに付属のワードパッドなどで読み込んで、このフォントを指定するだけで実機のような見た目で表示できます。 普通に(中間形式で)セーブされたプログラムリストを復元するアプリケーションとこのフォントを組み合わせれば、MSXのプログラムリストをWindows上でリアルに再現できるのではないかと思いました。 半角ひらがなやグラフィック文字まで忠実に再現できるリストビューアはまだ無いようだったので、やってみる価値はあると思ったのです。 こうしてMSX VIEWerの開発がはじまりました。 つづく。 トラックバック 時間ねえ~ [ GIGAMIX NEWS HEADLINEから ] ここ最近会社の仕事が忙しく、こっちを更新する時間がなかなか取れません。そんな今こ...続きを読む 受信 07/07/2004 01:15:39 PM MSX VIEWer開発裏話(04) 05/23/2004 12:24:48 AM プログラムを作るにあたって、どのプラットフォームや開発ツールを使うか、ということになるわけですが、現時点で私が選択可能だったのは、 ・Delphi ・Visual C++ ・Java などでしたが、今回は開発や配布の手間を考えてDelphiを使ってWindowsネイティブアプリケーションとすることにしました。 Visual C++は手元にあるのがバージョン4.0とずいぶん古いものであること、MFC(Visual C++で開発する上で使うことになるマイクロソフト製クラスライブラリ)の知識があまり無いので開発の負荷が大きいのでパス。 Javaはアプレット(ウェブブラウザの中で実行)ではローカルファイルへのアクセスに難があること、MS vs Sunの一連の争いのおかげで、作ったプログラムの互換性にも神経質にならざるを得ないこと、またアプリケーション(単体で実行)の場合、Visual Basicで作ったソフト同様、配布の負担(=ランタイムライブラリを配布しておかなければならない)が大きいことからパス。 Delphiの場合、ランタイムライブラリがなくても単体で実行できる実行ファイルを作成できるので配布やインストールが楽なのがいいところです。逆に、ランタイムライブラリにあたるものを全部実行ファイルに埋め込む形になるので、実行ファイルが巨大になるのがデメリットですが、これはメリットと表裏一体です。 というわけで、Delphi(言語としてはObject Pascal)での開発が始まりました。 つづく。 MSX VIEWer開発裏話(05) 05/31/2004 01:03:56 AM いよいよ、MSX BASICのプログラムを表示する、という機能を実装していくわけですが、MSX VIEWerの開発を考え始めたときからリッチエディットコントロール(RTF(リッチテキストフォーマット)ファイルを表示するためのソフトウェア部品、Delphiに付いてくる)を使うことは決めていましたので、考えるべきはいかにして中間コードからRTFに起こすか、ということでした。当初は、 中間コード(バイナリ)をデコードしてテキストにする ↓ それをRTFファイルに出力する ↓ そのRTFファイルをウィンドウに表示する という手順を考えていました。 MSX BASICではプログラムを中間コード形式だけでなく、テキストファイルとして保存すること(アスキーセーブという)もできます。これに相当する機能、つまりRTFとして画面に表示した内容をテキストファイルとしても出力する機能も付けることにしました。 この機能(アスキーセーブ相当機能)は、はじめはメニュー等からその機能が呼び出されるたびに、画面(リッチエディットコントロール)から内容を1文字ずつ読み出してファイルに出力するようにしていました。 このときはまだ、リッチエディットコントロール内の編集を可能にしていましたので、編集した後の内容をアスキーセーブすることで、BASICプログラムエディタのような機能もあわせ持っていたことになります。 しかし、ここで大きな問題が発生しました。 つづく。 MSX VIEWer開発裏話(06) 06/26/2004 06:55:25 PM 当初、MSX VIEWerでは開いたファイルをリッチエディットコントロール(修飾情報を含む文書を表示するためのソフトウェア部品)に読み込み、保存するときはリッチエディットコントロールの中身を読み出してファイルに書き込む仕様になっていました。 しかし、この実装だとMSX VIEWerでプログラムを保存すると、半角カタカナや半角ひらがな、グラフィック文字など、7ビットASCIIの範囲から外れた文字が化けてしまうのです。 この現象はWindows98では起こらず、Windows2000やXPなど、NT系のOSでのみ起こります。私はいまだにメインPC(=MSX VIEWerの開発機でもある)でWindows98を使っているため、最初この現象に気づいていませんでした。 調べてみるとNT系のOSであっても、ファイルから読み込む時点では文字は化けておらず(バイナリファイルとして1バイトずつ読み込んでいるので当たり前なんですが)、リッチエディットコントロールにセットした時点で化けてしまうことがわかりました。 そこで、ファイルを読み込んだときに、内容をリッチエディットコントロールに送るのではなく、先に一時ファイルにアスキーセーブしておき、それを読み込んでRTFファイルに変換し、そのRTFファイルをリッチエディットコントロールに送るように変更しました。ユーザーがアスキーセーブの操作をしたときは、先に作っておいた一時ファイルをコピーするだけにしました。 これにより、読み込んだ後にユーザーが内容を変更して、保存してもそれを反映させることができなくなってしまいました。そのため、思い切って編集機能をなくし(=入力不可にし)読み込み専用のソフトにすることにしました。 これで、とりあえず文字化け問題は解決(というか回避)できたのですが、新たなる問題が明らかとなりました。 つづく。 MSX VIEWer開発裏話(07) 08/07/2004 10:32:52 PM 文字化けも解決し、喜んでいたところ、新たな問題が発生しました。 「半角の小さな「ュ」が表示できない」 という指摘がβ版のテストをしてくださっていた方から寄せられたのです。 私の開発環境では再現しなかったので原因がわからなかったのですが、その後、Windows2000やXPなど、いわゆるNT系のOSでのみ起こることが分かりました。私が、開発環境で(いまだに)使用しているWindows98では起こらないのです。 NT系のOSは内部の文字コードとしてUnicodeを使用していることは知っていたのでその辺を調べてみたところ、やはりUnicodeでは半角の小さな「ュ」にあたるコードが特殊な意味を持つらしく、表示できないということが分かりました。 この現象はMSX VIEWer以外でも、Windows付属のワードパッドでは起こり、Microsoft Wordでは起こりません。MSX VIEWerはWindowsに付いているリッチエディットコントロールを部品として使っているため、ワードパッドとほぼ同じ動作になるのだと思います。 いろいろ試してみたのですが、結局回避策が見つからなかったので、 「半角の小さな「ュ」を見つけたら他の(表示できる)コードに変換する」 というかなり反則っぽい手を使うことにしました。 これに合わせて、MSX VIEWerに同梱しているMSX風フォントにも空いているコードのところに「ュ」のパターンを入れることにしました。 とりあえず、この方法でバージョン1のリリースを目指すことにしました。 つづく。 MSX VIEWer開発裏話(08) 10/31/2004 09:18:57 PM 「半角の小さな「ュ」を見つけたら他の(表示できる)コードに変換する」 という反則っぽい方法を実装し、2004年の5月20日にバージョン1.0を正式に公開しました。 これまでのβ版は自前のサイトで配布していましたが、正式版公開に合わせてベクターのライブラリに登録し、ここからダウンロードできるようにしました。 なんとか、完成にこぎつけたMSX VIEWerですが、正式版公開後もユーザーの皆さんからいくつかの要望が寄せられ、私自身も新たな機能の追加を考えるようになりました。 要望としては、
1.はDelphi(Object Pascal)で書かれたMSX VIEWerのソース直すことで対応できるなずなのですが、画面表示は手で直せても、もともとDelphiの中で定義されているシステムメッセージ(”ファイルが見つかりません”とか)まで英語に変えるにはどうも英語版Delphiでコンパイルしなおす必要があるらしいのですが、私は英語版Delphi6を持っていないのでできません。そのため、ソースを公開して(すでにMSX VIEWerはソースコード付きで配布しています)英語版Delphi6を持っている人にコンパイルしてもらえないかと思っています。ソースコード中の日本語文字列の英語化くらいは私が行うつもりです。 2.は英語圏(や他の言語圏)MSXのフォントを作ることで可能かと思われたのですが、英語圏MSXでは日本のMSXでは使われていないキャラクタコード7Fhにも文字があるらしいのです。 この7Fhと言うコードは7ビットASCIIの最後のコードであり、穿孔テープ時代の名残で、制御コードの中で唯一00h~2Fh以外の領域に置かれているDEL(削除)をあらわす制御コードです。穿孔テープはデータ(空けた穴)を消すことができないため、全部の穴をあける(7つの穴を全部空ける→7ビットすべてが1→7Fh)ことでそのデータが消されたことを示したのです。よって、通常はこのコードには表示できる文字はない(日本向けMSXではそうなっている)ので、MSX VIEWerでは小さい半角の「ュ」をこの7Fhに変換していました。 ところが、英語圏MSXにはこの7Fhにも文字があるため、この方法が使えません。そこで次期バージョンでは、「ュ」を別のコードに変換するだけでなく、さらに別のフォントにも変換することにしました。 MSX VIEWerではグラフィック文字を表示するため普通の文字用とグラフィック文字用に2つのフォントを持っており、グラフィック文字用のフォントは文字数が少なく、空き領域が多くあるため、グラフィック文字用のフォントに「ュ」を逃がせるようにしようと考えています。 機能追加としては
改良したいと思っていたのですが新たに単体のソフトとして開発・配布するのは負担が大きいので、同じMSX関係のソフトで、しかもビューアを名乗っているMSX VIEWerに統合してしまおうと思っています。 上記の一部は次期バージョンのβ版にすでに取り込んでいます。 試用して意見をいただけるとうれしいです。 MSX VIEWer開発裏話はとりあえず、今回で終わりです。ありがとうございました。 ←戻る | ↑ページの先頭に戻る |