/* Bewitch ver.0.06 func */ /* (c) Beer/Won-wan 2002.5.6 */ BeWitchの現状 1。概要 CPUのエミュレータではありません。 あくまでBeのプログラムとして動作するので細かい点は違います。 witch関数(BIOS)を介さずにハードを操作しているものは絶対に動きません。 アセンブラも同様です。危険です。 2。仕組み 簡単に言うと、 bewitchが確保したmemoryを使って、 libwitchをリンクしたappricationを実行させ、 memoryの変化をbewitchが周期的に監視しbeのwindow上に表示する という方式を使っています。 これだと、あんまり細かい操作ができないので将来変更すると思いますが。。。 3。速度等 普通のアプリケーションとして動くのでwonderswanより数桁速いです。(あたりまえ) sys_waitかsys_get_tick_countでタイミングを取っている場合は違和感無いでしょう。 ただ、実際に画面上の表示が更新されるのは0.1sec毎ですので、 リアルタイムゲームはぎこちない動きになります。 また、一定速度で動いているわけではありません。 。。。。と思っていたのですが、疑似VBLANK更新方法に問題があるようで、 CPU速度にかなり影響を受けるようです。 処理が追い付かないという問題では無いので速度可変にしてみました。 key、tick_count、cursorが影響を受けます。(注意: sys_waitは変化しません) ついでに、soundとserial処理をオン/オフできるようにしました。 無理矢理カラー化したので余計遅くなってしまいました。 4。ファイル操作 witch独特の動作はしません。 Beで普通にファイル操作しているのと同様に動くはずです。 5。割込み、プロセス関係等 今の所、実装予定はありません。 6。IndirectLibrary とりあえず使えません。 soundIL等標準の物については検討中。 7。その他 Beで使える関数を使ってデバッグに役立てて下さい。 printfやbeep等普通の関数はwonderwitchに関係無く使えます。 この場合bewitchの画面上に表示されるのではなく、 bewitchを起動したterminalに表示されるので邪魔になりません。 8。実装状況 適当にごまかしてるのもあります。 一部、wonderwitchよりもマニュアルの仕様に忠実な/理想的な(?)関数も在ります。 comm関係は、現在serialport1固定です。 エラー処理、送信タイムアウト処理、キャンセル処理はしてません。 disp関係は、大体こんなもんじゃないでしょうか。 key関係は、現在固定キーですが、変更できるようにする予定です。 sound関係は、BIOSはnoise,voice以外動作します。soundILは使用できません。 system関係は、疑似VBLANK(1/75sec)を発生させ、どうしても必要な sys_waitとsys_get_tick_countだけ近似値を返すように実装しています。 text関係は、少し違う動作をするものが多いです。モードは日本語2です。 ユーザフォントを設定することはできません。 timer関係は、全く手を付けていません。 カラーモードはあまりテストしてません。(おかしいかもしれません) 1024キャラ対応しました。 9。実装関数 comm (現在serialport1を使用します) comm_open comm_close comm_send_char comm_receive_char comm_receive_with_timeout comm_send_string comm_send_block comm_receive_block comm_set_timeout (送信タイムアウト処理してません) comm_set_baudrate comm_get_baudrate comm_set_cansel_key (キャンセル処理してません) comm_get_cansel_key comm_xmodem dummy disp lcd_set_interrupt_line dummy lcd_get_display_line dummy display_control display_status font_set_monodata font_set_colordata font_get_data font_set_color font_get_color screen_set_char screen_get_char screen_get_char1 screen_fill_char screen_fill_attr sprite_set_range sprite_set_char sprite_get_char sprite_set_location sprite_get_location sprite_set_char_location sprite_get_char_location sprite_set_data screen_set_scroll screen_get_scroll screen2_set_window screen2_get_window sprite_set_window sprite_get_window palette_set_color palette_get_color lcd_set_color lcd_get_color lcd_set_segments lcd_get_segments lcd_set_sleep lcd_get_sleep screen_set_vram dummy sprite_set_vram dummy key key_press_check key_hit_check key_wait key_set_repeat key_get_repeat key_hit_check_with_repeat libwwc wwc_set_color_mode wwc_get_color_mode wwc_palette_set_color wwc_palette_get_color wwc_font_set_colordata wwc_font_get_colordata wwc_get_hardarch wwc_clear_font dummy wwc_sys_get_ownerinfo dummy sound sound_set_voice_volume (voiceモードは無視されます) sound_get_voice_volume (voiceモードは無視されます) sound_init sound_set_channel (noise,voiceモードは無視されます) sound_get_channel sound_set_output (出力は変わりません) sound_get_output sound_set_wave sound_set_pitch sound_get_pitch sound_set_volume sound_get_volume sound_set_sweep sound_get_sweep sound_set_noise (現在noiseモードにはなりません) sound_get_noise system sys_wait (現在、強制的にn/75sec停止します) sys_get_tick_count text (display-modeは日本語2固定です) text_reset_ank_font dummy text_screen_init text_window_init text_set_mode text_get_mode text_put_char text_put_string text_put_substring text_put_numeric text_store_numeric text_fill_char text_set_palette text_get_palette text_set_ank_font dummy text_set_sjis_font dummy text_get_fontdata text_set_screen text_get_screen cursor_display cursor_status cursor_set_location cursor_get_location cursor_set_type cursor_get_type text_printf dummy timer rtc_set_datetime dummy rtc_get_datetime dummy rtc_set_datetime_struct dummy rtc_get_datetime_struct dummy rtc_enable_alarm dummy rtc_disable_alarm dummy timer_enable dummy timer_disable dummy timer_get_count dummy