fMSX-MG2 (fMSX2.1 for NetBSD/hpcmips) dr005 2000/05/25 ●fMSX について Marat Fayzullin 氏 (fms@cs.umd.edu) 作の西 X 、いやもとい、 MSX エミュレー タです。^^; 元の Unix/X 版ソースは公開されていますし、機種依存な部分が分離されていて移 植しやすいため、Unix 系をはじめ、 MS-DOS、 Windows、 OS/2、 Amiga、 MacOS 、BeOS 等の、様々なプラットフォームに移植されています。また、近年では Java 版なんていうのも存在してるみたいです。 fMSX についての詳しい情報は、 fMSX の配布元でもある、 fMSX ホームページ、 http://www.komkon.org/fms/fMSX/ に行ってみられるとよいかと思います。 ●で、これなに ...という fMSX を、 NetBSD/hpcmips で使えるようにしたものです(以後 fMSX-MGII と表記します)。 「ま、いちおう fMSX 、動いてるんだね」といった程度になら動くんじゃないか ...などと思います。 ちなみにですが、最近では hpcmips でも X が動くようになってきていて、 「UNIX 版 fMSXがそのまま使える」 といった日が来るのも近いみたいです。 まぁでもしかし、ローエンドとハイエンドで住み分けできそうな感じです。X 入れ るだけの余裕がある方は本家 UNIX 版を、そうでない方は fMSX-MGII を使うといい でしょう。 ●固有の特長・制限事項など とか書いていますが、実は制限事項だらけだったりします。^^; fMSX には、 -DNARROW を付けてコンパイルすることで、 512 pix な画面を無理矢 理 256 pix サイズに収めて表示するという機能があります。 fMSX-MGII では、 -DNARROW を付けずにコンパイルすることで、512 pix 幅の画面 モード時に、512x212 な画面をそのまま表示させることができます(もちろん、従 来通りの -DNARROW を使うこともできます)。 ディスプレイのアスペクト比の関係で、横長な表示にはなってしまいますが、 SCREEN7 を多用するソフト(アドベンチャーゲームとか)でも、まぁだいたいまと もな表示を拝むことができますです。 現在のところ hpcfbio 版でしか機能しませんが、ジョイスティックを使用する際 (-joy 1)、 -afire オプションを一緒に設定してあげると、トリガー 1 が連射モ ードになります。 元の fMSX は、 海外向けに出されていた MSX を真似るようになっておりまして 、キーマップが日本国内向けの MSX とは若干異なります(101 キーボードのよう になっています)。 fMSX-MGII では、国内向け MSX と同じキーマップになるよう、はじめから変更が 加えてありますので、 106 系なキーボード使っていてもそれほど違和感無く、パ チパチできるようになっています。 NetBSD/hpcmips 専用の(結構それなりに動作する) fMSX を作るのが、「私の真 の目的」なのですが、当初は MGL2 を使用したモノを作り、それで動作の塩梅等を 見ていたりしていました。という絡みで、現在でも MGL2 を使用した版が一緒に入 っておりますです。 というわけでして MGL2 版を使用すれば、 他のマシン・OS (例えば NetBSD/i386 とか)でもいちおう、動かしてみることが可能だったりしてます。 #しかし fMSX の Unix/X 版もあることですし...使ってみてもあまり意味無いでし #ょう。 MGL2 ではいまところ、「直接個別なキー状態を読む」という事はできないようで す。そこで、 fMSX-MGII、MGL2 版では「苦し紛れの、バータリーが支配する方策 」^^; として、 F6 を押すことでキーマップの一部が切り替わり、その状態から CTRL+hoge なキーを押すことで、いくつかの特殊キーを押せるようにしています 。また、 F7 を押すことで「キーロックモード」に入り、SHIFT などのキーを「押 したまま」の状態にできるようにしてます。 てな感じでして、そうとう使いにくい事が予想される ^^; のですが、こういう機 能を使うことで、まーまーいちおう、いろんなキーを打てるようにしてあります。 こういうの使ってどーにかしのいでくださいまし...です。^^;; #「どーゆーふうにキーを打てばいいのか」については、後ろの方をご参照くださ #い。 それからこれまた現在のところ、この fMSX は 8bit カラーなマシン(MC-R500 等 )でしか動作確認できていません(MGL2 版なら、2bit とかでもいちおう動かす事で きますけど)。 16BIT DEPTH 対応なコードも入れてはいるのですが、これでうまく動作するものか どうか、当方確認できてませんのでよーわかりませんです(報告求む)。^^; あとそれから...音はまだ出せませんし、それなりに速いマシンでないと遅くてイ ライラするやも...です。 ^^;; ...と、こんなところでしょうか。 #やっぱり制限事項だらけだった... (-_-; ●インストールのしかた ※ hpcfbio 版を make される場合には、2000/05/05 以降の kernel source から  構築した kernel が必要です(でないと正常に動作しません)。 fMSX-MGII のアーカイブを、適当な場所に展開します。 tar zxtvf fmsx-mg2-dr005.tgz -C ./src/ あとは、 fMSX-MGII のソースに付いてきた Makefile を使って make すれば OK です。 Makefile には 以下のものが用意されています。 Makefile.hpcmips.hpcfbio NetBSD/hpcmips 用 Makefile.hpcmips.mgl2 NetBSD/hpcmips(MGL2) 用 Makefile.i386x.mgl2 NetBSD/i386 MGL2 用(Linux、 FreeBSD 等をお使いの方は、これを元 にしてどーにかしてください) Makefile にはいくつか細かいコンパイルの指定ができるようになっています。 これについては各々の Makefile に説明が書かれてますから、それを参照して適 当に書き直してから使ってください。 MGL2 版を make される際、 画面にディザ処理がかかって欲しい場合(2bpp のみ 表示可能なマシンで、なるべく多色表示させたい時とか)には、 UnixMGL2.c の STK_NATIVE な部分を STK_GENERIC_FULLCOLOR に変更するといいでしょう。 ●起動時のオプションについて オプションについては fMSX とほぼ一緒です。ここでは、新たに追加されたオプシ ョンについての説明だけ書きます。ここに説明の書いてないオプションの意味・機 能等については、 fMSX のドキュメントを読むか、 "-help" オプションを付けて 立ち上げ、ヘルプを見てください。 以下のオプション(特に X に関するモノ)は、 fMSX-MGII では指定自体はできる ものの、まったく機能いたしませんです。 -saver -nosaver -scale fMSX-MGII で新設されたオプションには、以下のものがあります。 -vdpwait VDP Wait な機能を使う(デフォルト) -novdpwait VDP Wait な機能を使わない -afire 連射モードの設定(デフォルト 0) -noafire -afire 0 を指定したのと同じ意味 VDP Wait を使うと、 CPU <-> VRAM 間のデータ転送に関する VDP command で、実 物の MSX みたく、CPU にウエイトをかけるようになります。 (ただし完璧なエミュレートとはいえないので、一部のソフトが正常に動かなくな る場合もあります。その際には novdpwait を使って OFF にしてください) 連射モードは、 ジョイスティックを使用する(-joy 1)際の、トリガーボタン 1 の 連射スピードを設定します。 の単位は、エミュレータ内での vsync 回数で す(実機ですと NTSC 仕様のモノで 1/60 秒、PAL 仕様のモノで 1/50 秒となりま す)。また を 0 にすると、連射モード OFF となります。 それから、 "-help" で出てくるキーバインドの説明は、 hpcfbio 版に沿っていて 、MGL2 版とはまったく異なっています。ご注意してくだされ、です。^^; ●キーボードについて(hpcfbio 版) fMSX-MGII のコントロールに使われる特殊キー、 MSX 固有のキーについては以下 のように対応しています。 F6 ..... STOP/BREAK F7 ..... HOME/CLS CTRL+F7 ..... ディスクイメージの切替え(一基目) CTRL+F8 ..... ディスクイメージの切替え(二基目) F9 ..... 内蔵 debugger F10 ..... fMSX-MGII の終了 PageUp ..... INS PageDown ..... DEL 全角/半角 ..... SELECT ひらがな/カタカナ ..... かな 変換 ..... GRAPH また、以下のキーは、 joystick 、 mouse の トリガボタンとして機能します。 ALT ..... TRIGGER BUTTON 1 NFER ..... TRIGGER BUTTON 2 その他のキーについては、(106 系なキーボードをお使いでしたら)たぶんキート ップに表記されてるモノが、そのまま打てるだろうと思いますです。 #どこか違う、または使いずらいようでしたら、ソース中のキーバインドテーブル #を適当に書き直してください。^^; ●キーボードについて(MGL2 版) fMSX-MGII のコントロールに使われる特殊キーについては以下のとおりです。 F6 ...... キーマップの切替え(後述) F7 ...... キーロックモードの切替え(後述) F8 ...... ディスクイメージの切替え(一基目) F9 ...... 〃 (二基目) F10 ...... fMSX-MGII の終了 また、 PageUp PageDown には、 以下の MSX なキーが割り当てられています。 PageUp ...... KANA PageDown ...... DEL fMSX-MGII では F6 を押すことで、一部キーマップが切り替わりまして(再度 F6 を押すと元に戻ります)、その状態で CTRL+hoge なキーを押す事で、いくつかの 特殊なキーや、マウスボタンなどを押すことができます。 キーバインドは以下のとおりです。 CTRL + A ...... CTRL CTRL + B ...... SPACE CTRL + C ...... CTRL + STOP (BREAK) CTRL + D ...... DEL CTRL + G ...... GRAPH CTRL + K ...... HOME CTRL + L ...... CLS CTRL + R ...... INS CTRL + V ...... STOP CTRL + X ...... SELECT CTRL + Z ...... SHIFT CTRL + Q ...... MOUSE BUTTON 1 CTRL + W ...... MOUSE BUTTON 2 また、 F7 を押すことで、「キーロックモード」に入ります。この間に押された特 殊キーは、「押しっぱなし」の状態になり、再度 F7 を押すまでは離されません。 ※  ただし、マウスボタンについてはやや挙動が異なります。マウスボタンはキーロ  ックモード時に、トグルスイッチのような働き方をします。つまり一度ボタンを  押したら、押したボタンを元に戻す(離す)には、再度同じボタンを押すか、  F7 を押してキーロックを解除する必要があります。  ボタンプレスを多用するソフト(お絵書きソフトなど)で、この機能、使ってや  ってください。^^;; というわけで、たとえば「MSX の F10 キーを押したい」という場合には、 F6 を 押し、キーマップを切替えてから、 1. F7 (lock) 2. CTRL+Z (shift) 3. F5 (F5) 4. F7 (unlock) という操作を行う必要があります。 また、「SHIFT + かなキーで、ローマ字入力したい」という場合は、以下のように 操作しましょう。 1. F7 2. CTRL+Z 3. PageUp 4. F7 5. ローマ字かな入力をする... 6. PageUp(入力し終わったら) で、 MSX を使う際によくありがちな操作であるところの、「CTRL 立ち上げ」は以 下のようにするといいです。 1. fMSX-MGII を起動させたら、すかさず F6 、 F7 、 CTRL+A を押 す。 2. 立ち上がったら、 F6 、 F7 を押す(解除)。 ※「SHIFT 立ち上げ」の時には、 CTRL+A が CTRL+Z になるだけです。 あと、「GRAPH 文字を入力したい」という場合は、以下のようにします。 1. F7 2. CTRL+G 3. 任意のキーを押していく(特殊なキー以外、lock はかかりませ ん。) 4. F7 (入力し終わったら) と、いくつか使用例を示しましたが、こんな感じで使ってくださいましです。 #使いにくいですけど、とりあえずはこれでご勘弁ください。^^; #あ、ちなみにですけど、遅いマシン(例えば MC-R500 くらいの機種)でしたら、 # F7 を押さなくても、色んなキーコンビネーション、結構素直に打てたりするみ #たいです(処理スピードの遅さが幸いしてる)。 ●既知の問題、および TODO...など(FAQ も兼ねてるかも) ■ MGL2 版固有の問題 ・キー反応が悪いです。 同じキーを素早く、連続して打ち込もうとしたりすると、二文字目以降のキーが うまく入らなかったりします。これについては、ワンテンポ間をおいてから再度 打ち込むと、うまく入るようです。 また、カーソル類を動かそうとしてカーソルキーを押したのに、全然反応が無い  、なんてな事もあります。こういう時は、何か別の差障りなさそうなキーを打ち  込み、それから再度カーソルキーを押す、とかいう方法を取ると、うまく入るよ  うです。 それから、 F6、 F7 キーには、「内部のキー用キューを flush し、 MSX のキ ーマップを reset する」という副作用があります。ですので、一度こういうキ ーを押してから、再度キー入力する...といった方法でも回避できると思います 。どうにもならなくなったら、この手もひとつ試してみてください。 #すみません...とりあえずはこれでしのいでください.... #キーイベント&キーマップの処理に問題があるのはわかっているんですけど... ・キー入力をしていると、たまに意図しない文字が入力される事があります。 ええとこれは、現在の fMSX-MGII の構造上、仕方無い問題だったりしますです (キー反応に関する問題も、少なからずこれに関係しています)。 直接キー入力が取れるようになったら、たぶん直ると思います。キー反応の問題  についても解決されるでしょう。 ・F6 、 F7 の機能って、いつになったら廃止されますか? 直接キー入力が取れるようになったら、たぶん廃止されると思うです。これらの 機能はそれまでの「つなぎ」ですから。 #んーしかし joystick 、 mouse 、連射機能とかのサポートのために、 F6 な機 #能は今後も残すかもしんないです。あと hpcmips ではキーが足りないマシンも #ありますし。 ・ゲームしてて、自機を斜めに動かせません。どして? ・弾を発射しつつ、自機を移動できません。なして? そういう操作って、ふつう、カーソルキーを二つ同時に押したり、カーソルキー を押しつつショットキー押したりするワケなんですけども、現状の fMSX-MG2 で は「複数同時キー押し」を判定するのは困難なので、いまのところそういう操作 をするのは無理です(何かの拍子で、たまにできることもありますけど...)。 これまた...なんですけど、直接キー入力が取れるようになったら、そういう操 作、できるようになると思います。 ・ESC が打てません。 ・(BASIC とかだと問題無いのですけど)ソフトを使っていて、 RETURN キーが押せ ないことがあります。 ESC は CTRL+[ にて代用してください。 また、 F6 を押してキーマップを切り替えると、ESC キーにて、直接打てます。 RETURN キーも同様です。  ■ MGL2 、 hpcfbio 版に共通する問題 ・/dev/ttyE0 や、 /dev/wsmouse0 が開けないようなんですけど...  あーすいません。通常 /dev/ttyE0、 /dev/wsmouse0 の owner.group 、  permission は root.wheel、 600 となってますので、開けなくて当然です。^^;  permission を変えてみたり、 fmsx を適当に suid してから使ってください。 #いくらかリスクあるやもしれません。そこらへんは事前に承知、納得した上で  #よろしく。 ・非 NARROW モードで使っていて、512 pix 時に、たまにゴミが表示される事があ ります(特にスクロール時)。 まだ原因わかってませんが、 fMSX の VDP エミュレート方面が怪しいみたいな 気がします。気のせいかもしれませんが...  あと、 screen mode 変更時に、ゴミが残ったりもしますが、「これは仕様です  」だったりしてます。^^;  # いずれ直すんだろうとは思うです。 ・遅いです わーすみませーん。こればっかりはにんともかんとも... ^^; 速いマシンに替えていただく ^^;; か、以下の方法を試してみてくださいです。 多少は速くなると思います。 hpcmips の場合は、 MGL2 版ではなく、 hpcfbio 版を使う(描画速度が 向上しますし、キー入力がまともになるので、ある意味おやくそく、です )。 -DDEBUG を付けずに make する。 -uperiod -vperiod -sync オプションを使い、チューニングする。 (メモリに余裕あるのなら)最適化レベルを上げて make しなおす。 (貴方がとってもデキる、エライヒトならば)Z80.c とかを mips なアセ ンブラコードで書き直す(もちろん、手作業最適化バリバリで)。 #自分でも呆れてしまうほどの、とんでもなく速いのができたら、是非 #使わせてくださいおねがいします。^^;;; ・音が出ません。 NetBSD/hpcmips 自体、サウンド関係のサポートがまだ正式には入っていません 。サポートが入ったらそれを使って、音を出せるようにしたい...とは思ってい ます。 ・512 pix の、横長な表示、なんとかなりませんか? 将来的には、1 scan line 飛ばしな表示をすることで、縦サイズ二倍な表示もで きるようにしたいです(従来通りの横長表示も残します)。 ・mouse が使いにくいです。  うう...とりあえずはこれで我慢してください。^^;  んーと、しかしボタンの使いにくさはアレなんですけども、mouse の動きに関す  る使いにくさは大元の fMSX でもそー変わりません。本家でもだいたいこんな具  合です。^^;;  #ええ、ええ、そうですとも。言い訳です(笑) ●配付等について このソフトはフリーソフトです。 fMSX の配付条件に従った上で、改変・再配布す ることができます。 元の fMSX のソースについては、著作権は Marat Fayzullin 氏にあります。 hpcmips 、 MGL2 対応のコードの大部分は、 fMSX のソースや、MGL2 、 NetBSD/hpcmips の成果物(hpcmips 版 MGL2 のソース等)で構成されています。 ですので、私が著作権を主張できる部分は、ほとんど無いです。^^; とはいえ、作 ってしまった以上、どーにも著作権を放棄したりする事はできませんので、 fMSX-MG2 なソースについては、私が著作権を持つことにします。ごめんなさい。 #まぁ、 MGL2 は BSD ライセンスなので、明示さえすればあとは好きにしていいは #ずなんですけども... まぁ心情的にちょっと... というわけでして、私が特になんだかんだ言うことはないんですけども、配布条件 として、 fMSX が持っている配布条件に従うことにしましたので、そちらの方を守 って、配付・再配布等をしてください(配布条件については、 fMSX のドキュメン トに書いてありますので、そちらを参照してください)。 fMSX-MGII は基本的に fMSX 原作者である、 Marat さんとは無関係ですので、 fMSX-MGII に関する質問・要望を Marat さんに送るのはやめてください。^^; ●参考にしたもの fMSX のソース freeMSX のソース MGL2 のソース MSX2 テクニカルハンドブック(アスキー出版局) MSX2+ パワフル活用法(アスキー出版局) MSX テクニカルガイドブック第四版(ASCAT) MSX2/2+ 早わかり小事典(日本文芸社) ●謝辞 fMSX という、素晴らしい MSX エミュレータを作り上げ、またソースを公開してく ださっている、 Marat さんに感謝いたしますです。これが無ければまずどーにも ならなかったハズですから。 #忙しい中、fMSX-MGII の公開・配付についてもご快諾いただきました。 #それもあわせて感謝感謝です。:) また、 NetBSD/hpcmips 、および MGL2 の開発に関わっている方々に、感謝いたし ますです。 fMSX もそうですけど、 MGL2 (などのソース)も無かったら、やっぱ りどーにもならなかったハズです。多謝多謝。 あと、 Mac 界では最強の MSX エミュレータ、 freeMSX 作者の Root 氏に感謝で す。freeMSX のソースはとても参考になります(あと、お言葉に甘えて、コードの 一部、いただいちゃいました)。:) ●連絡先 fk200329@fsinet.or.jp やないひろゆき Hiroyuki Yanai web page: http://www.fsinet.or.jp/~yanyan/