WonX
〜 WonderWitch on X 〜
あなたは
人目のお客様です.
mmap() を実装しました!(2002/2/4)
カラー対応しました!(2001/1/3)
WonX は,WonderWitch 用のプログラムを X アプリケーションとしてコンパイルする
ための,ライブラリです.
WonderWitch 用のプログラムを,FreeBSD や Linux 上で動かすための,
エミュレータのようなものです.(正しくは,互換ライブラリと言うべきかな?)
以下の特徴があります.
- C言語レベルで互換なので,WonderWitch 用のプログラムをUNIX上で
そのままコンパイルできる.(-lwonx でコンパイルする)
- UNIX上でデバッガを使用してデバッグできるようになる.(強力!)
- キャラクタデータやパレットデータのダンプ機能がある.
- 不正な引数の値や,パレットやキャラクタを初期化しないで使用するなどを
厳しくチェックし,エラーを出力する(ようにする).厳しくエラーチェックする.
- 使用できない機能(関数は用意してあるが,まだ実装してなかったり,
実装が困難だったりして,中身が空のもの)はたくさんある.
徐々に追加していくつもり.
- ゲームの画面写真が簡単に撮れる.(デジカメで撮ったり,画像取り込み用の
プログラムを使ったりする必要が無くなる) これはわりとべんり.
- エミュレータでなくライブラリであり,ソースコード公開しているので,
自由にカスタマイズが可能.
- 描画速度は遅いが,デバッグ目的のためなので,速度を速くすることは
あまり考えていない.(それよりも上記のデバッグ性を優先する)
- WonderWitch 用のプログラムを,X上で楽しむためのものではない.
あくまでデバッグ目的のもの.(そういうポリシーで開発を進める)
以下のものにはまだ対応してません.したがって,例えばサウンド関連の
関数を呼び出しても,何も起こりません.(空の関数になっている)
- サウンド
- 割り込みのINT0, INT2, INT4(INT1, INT3, INT5,6,7はサポート済み)
バグ情報やアドバイスがあれば,坂井弘亮まで,どんどんメールください.
また,リリース版ができるまでは,アップデートは頻繁に行い,
随時公開していきます.
- Wonx-a01 のダウンロード(2000/9/26)
- Wonx-a02 のダウンロード(2000/9/27)
- テキスト表示関連の関数を実行したときに,(あいかわらず文字は表示されないが)
せめてターミナルに文字列を出力するようにした.
- スクリーン2のウインドウ機能を実装した.
(未テストです.だれか動作情報をください)
- Wonx-a03 のダウンロード(2000/9/28)
- screen2_set_window()の表示範囲を修正.(詳細は添付の HISTORY ファイル参照)
- スプライトの有効/無効を実装した.
- LCDカラーマップ,パレット,キャラクター,スプライトのデータダンプ機能を
実装.(README参照.F1〜F4キーで,ダンプを出力する)
- 関数呼び出し時の表示メッセージを改良.
- Wonx-a04 のダウンロード(2000/9/30)
- XDisplay.c 内の表示ルーチンを改良し,描画を多少高速にした.
- WWLCDPanel のデータの格納方法を変更した.
(2ピクセルで1バイトだったのを,1ピクセルで1バイトを割り当てる
ようにした)
(高速化のためだが,将来のカラー対応(241色?)のことも考えた)
- WonxDisplay_Sync() を追加.get 系の関数内での無駄な描画を減らした.
- スプライトウインドウ機能を実装.(未テストです.だれか動作情報をください)
- 時刻関連の関数を実装.(timer.c)
- スプライトの優先順位を修正.(「番号が若いもののほうが優先」に修正した)
- Wonx-a05 のダウンロード(2000/10/3)
- XDisplay_DrawLCDWindow() を修正.無駄な計算をループ外に出した.
- WWDisplay_DrawScreen() を修正.無駄な計算をループ外に出した.
- ホットスポットを調べたら,Xの描画部
分(XDisplay.c の XDisplay_DrawLCDWindow()のループ部分)がホットスポットに
なっていたので,ピクセルごとに配列を作って,描画速度を上げた.
- Wonx-a06 のダウンロード(2000/10/4)
- WWDisplay_DrawScreen() のアルゴリズムを大幅に修正.
たいして高速にならなかった.X サーバの描画がホットスポットになっていると
思われるので,描画量を減らす努力が必要.
- Wonx-a07 のダウンロード(2000/10/5)
- WWLCDPanel にビットマップデータを2枚持たせ,一度描画したビットマップは
描画しないように修正.Xサーバの負荷を減らした.
(WWLCDPanel関連と,XDisplay.c の XDisplay_DrawLCDWindow() を改良)
(XDisplay.c の XDisplay_DrawLCDWindow() には,無駄な malloc() があるので,
そのうち改良が必要)
- wonx-a05 と wonx-a06 の WWDisplay.c (WWDisplay_DrawScreen()) の
両方を試した結果,wonx-a05 のほうが高速だったので,wonx-a05 のほうを
使用することにした.
- Wonx-b01 のダウンロード(2000/10/9)
- テキスト表示機能の追加.(0〜127のASCII文字のみで,漢字は未対応)
- Wonx クラスを作成し,すべてのリソースを Wonx クラスで管理するように変更.
(Wonx.x WonxP.h 参照)
- p を押して画面の表示/非表示を切替えたときに,LCDパネルの再描画を行うように
改良.
- コンパイルオプションに -Wall を追加.
- disp.c で重複した処理をしている関数の処理部分をまとめた.
- Wonx-b02 のダウンロード(2000/11/3)
- 割り込み処理の追加.タイマ割り込みサポート.
(UNIXTimer, WWInterrupt, WWTimer, WonxSystem 追加)
- 割り込みサポートに合わせて,互換関数を UNIXTimer_Pause(),
UNIXTimer_Unpause()でくくった.
- UNIXTimer, WWTimer, WonxSystem のコールバック関数などは,
割り込み特有のバグが無いか細かくチェックする必要がある.
(コールバック関数中で割り込みの設定が変わってしまったり,
コールバック関数からコールバック関数が呼ばれたりすることは
ないかどうかチェックする必要がある)
- Wonx-b03 のダウンロード(2000/11/13)
- ヘッダファイルを独自に作成.Wonx のみでコンパイル可能になった.
- libwonx.a のリンク時に Error() 関数がぶつかる可能性があるので,
Wonx_Error() に変更した.
- bios_exit() を追加.
- sprite_set_char, sprite_get_char で,パレット番号が8を引いた値で
指定されていないバグを修正.
- disp.c の font_set_monodata(), font_set_colordata(), font_get_data(),
screen_set_char(), screen_get_char(), sprite_set_data() の引数を
void * から適切な型に変更.
- サンプルプログラムと SpeedMac を添付した.
- ドキュメントを追加した.
- Wonx-b04 のダウンロード(2000/11/18)
- UNIXTimer.c で,コールバック関数が呼ばれるたびにコールバック関数を
設定しなおすように修正.
(UNIXTimer_ON() 中に signal() を追加)
(IRIX ではコール毎にコールバック関数がクリアされてしまうことへの対処)
- ualarm() は BSD 依存なので,alarm() を使用するように修正.
- UNIXTimer クラスのインターバル時間の設定の単位をマイクロ秒からミリ秒に
変更.
- シリアル通信をサポート.(WonxSerialPort, WWSerialPort, comm.c 参照)
- key.c 中の printf() で,戻り値の表示の際に関数名が表示されていなかったのを
修正.
- Wonx-b05 のダウンロード(2000/11/23)
- シリアル通信で,標準入力からの入力の \n は \r に変換して渡すように
comm.c の comm_input() を修正.([WitchFan 00462] のメール参照)
- 画面外へのテキスト文字の表示時に,エラー終了するのでなく,
ワーニングを出して続行するように WWText_PutCharacter() を修正.
(ワンべぇへの対応)
- wonx_include/types.h に #define _WONX_ を追加.(WONX依存にしたい部分を
ソース中でくくりたいときのため)
- WonX-1.0 のダウンロード(2000/11/23)
- 正式名称を Wonx から WonX に変更.
- MANUAL ファイルを追加.
- OMAKE.jpn に文章追加.
- WonX-1.1 のダウンロード(2000/12/28)
- _asm_*() のダミー関数を追加.
- FP_OFF(), FP_SEG() を,WonderWitch での割り込み設定時のコールバック関数の
設定方法にあわせて,適切に変更.(wwterm に合わせた)
- UNIXTimer.c:UNIXTimer_Unpause() で,
((unix_timer->pause == 1) && (unix_timer->interrupt_in_pause == 0))
だったときに unix_timer->pause--; されないバグを修正.
(ポーズ中に割り込みがかからなかった場合に,アンポーズされていなかった
ため,タイマ割り込みが正常に動作していなかった.したがって,VBLANK
割り込みなど,割り込み全般が正常に動作していなかった)
- シリアル受信割り込み,キーボード割り込み追加.(wwterm に対応,動作確認済)
- comm_send_string(), text_put_string(), text_put_substring() 実行時の
出力メッセージを修正.
- カーソル表示機能を実装.(WWCursor クラス追加)(点滅はしない.表示のみ)
- palette_get_color() 内で,WWPalette_GetMappedColors() の実行時に透明色が
-1として返されることを考慮していなかったために,palette_get_color() の
戻り値がおかしな値になっていたバグを修正.
- キャラクタカラーパレット,LCDカラーパレットの初期値を,WonderWitch での
初期値と一致させた.
- サンプルとして,wwterm-b05 を追加.(Makefile に wwterm ターゲットを追加)
- WonX-2.0 のダウンロード(2001/1/3)
- WonX-2.1 のダウンロード(2001/1/13)
qkcはこちら
(漢字・改行コードの変換に UNIX 版の qkc(qkcc100.zip)が必要です)
- WonX-2.2 のダウンロード(2002/2/4)
(F10キーの役割が変わったので注意してください.詳しくは README 参照)
現在は坂井が一人で製作していますが,ひとりでは細かい点の整合性
(初期化しなかった場合の動作の違いなど.WonderWitch と WonX では
微妙に異なっていると思う)を追いきれないのが現状です.
とくにマニュアルに書いてない部分に関しては,WonderWitch ではどのように
動作するのか,ひとりではチェックしきれません.
情報をお待ち(ていうか期待)しています.
また,テストもなかなか手がまわりません.ゲームなどでまとまったテストを
したいのですが,WonderWitch 関連はソースコード配布しているソフトウエアが
少ないため,テスト題材がなかなか手に入りません.
「動いた」「動かなかった」
「この関数は使えた」「この関数はバグがある」というような情報でも
結構ですので,情報をお持ちのかたは,連絡ください.
ご意見,ご要望なども歓迎します.どしどしお寄せください.
(ただし,返事を書くとは限らないし,要望を反映するとも限りませんので
その点はご容赦ください)
WonX の正しい使いかた
その1: grep と組み合わせる
WonX はデバッグ情報をすべて標準出力に出力します.
これらの情報は,grep で引っかけやすいように,すべて,なんらかの
文字列を入れてあります.(例: 関数呼出はすべて call という文字列で始まる)
これらの出力を grep で拾うか捨てるかして,デバッグします.
たとえば,WonX を使用して,SpeedMac をコンパイルして,smac という
UNIX 用の実行形式を作成したとすれば,
> smac | grep call | grep palette_set_color > smac.log
のようにして実行すれば,palette_set_color() 関数の呼出だけのログを取ることが
できます.また,
> smac | grep "character\[0\]" > smac.log
のようにして起動して,起動後に F3 を押すことにより,0 番のキャラクターの
ビットマップデータを得ることができます.
(grep しないと,0 〜 511 までの全部のキャラクタデータが出力されてしまう)
このように,grep を巧みに使ってデバッグを進めます.
その2: WonX でなんでもやろうとしない
WonX はあくまでデバッグ支援用のライブラリ集であり,これだけで開発が
行えるものではありません.実装していない関数も,いっぱいあります.
しかし,UNIXの強力なデバッグ環境が使用できるのと,デバッグ用情報を
出力してくれるので,開発の初期段階でのデバッグには,非常に有効です.
だから,はじめのうちは WonX を使ってプログラミング&デバッグして,あるていど
仕上ってきたら WonderWitch に移してチューニングしていくのがいいでしょう.
はじめから WonderWitch で書いて,いざ動かそうとしたら動かなくて,
それから WonX のほうでデバッグしようとしても,
プログラムが WonX では実装していない関数を使用している場合には,
面倒なことになるかもしれません.
つまり,プログラムの立ち上げ時には WonX 使って書いて
(WonX で実装していないような関数を使用する部分については後回しにして,
とりあえず WonX で動くものを作成する),
立ち上がった後には WonderWitch でチューニングしていけばいいと思います.
注意してほしいのは,WonX で最後の最後まで開発していこうとしないことです.
その3: ソースを改造する
作者は,「自分で改造する」ということも,WonXの使いかたのひとつであると
考えているので,「改造しやすさ」ということもサポートの範疇であると
思っています.やりたいことができない場合には,ソースを直接改造しましょう.
(ライセンスはGPLなので,改造は自由です)
有益な修正ならば,改良点を作者までプットバックしましょう.
できるだけ改造しやすいように,ソース自体もシンプルな構成にしてあります.
画面描画まわりは,もっとも手を入れるだろう可能性が高いので,
高速性よりもわかりやすさを重視して書いてあります.
この方針は,今後もおそらく変わりません.
(たとえば,画面描画まわりは,変更された部分だけ描画するようにすれば
劇的に速くなると思われるが,それによってソースが難解になるようならば,
読みやすさのほうを優先する)
メールは kozos(アットマーク)kozos.jp まで