ワンべぇ: WONBE, WonderWitch BASIC Environment 暫定マニュアル Ver 0.01 2000年11月6日 株式会社ピーデー 川俣 晶 Copyright 2000 (c) by Pie Dey Co.Ltd. ●これは何か?  ワンべぇは、WonderWitch上で使用できる小型BASICインタプリタです。  WonderWitch上ですべての機能が稼働し、シリアルケーブル経由で接続された一般の通信ソフトで操作します。デバッグ済みのプログラムを実行する場合は、シリアルケーブルも通信ソフトも必要ありません。  WonderWitchのテキスト画面を扱う最小限度のステートメント(cls,locate,print)と、最小限度のボタン入力機能(wait,scan)を持ち、簡易なミニゲームが書けます。  動作テスト用にWin32上で動くバイナリーもありますが、これは、BASIC本体の動作確認用と割り切ってください。 ●必要なもの ・開発時  WonderWitchのカートリッジとシリアルケーブル。38400bpsの無手順通信が可能な通信ソフトを持つパソコン等。 ・実行時  ワンべぇと実行したプログラムを入れてあるWonderWitchのカートリッジのみ ●準備 ・TransMagicなどでワンべぇ(fonbe.fx)をWonderWitchに転送します。 ・TransMagicなどの接続を切り、通信ソフトから38400bpsの無手順通信を開始します ・WonderWitch上でワンべぇを実行します ・エントランスメニュー画面でY2を押します ・通信ソフトに、ワンべぇの名前が表示され、"*Ready"と出ます ・これで準備完了です ・print "hello!"リターンと打ってWonderWitchの画面を見てください。文字が出ていれば正常です。 ●開発済みプログラムの実行 ・WonderWitch上でワンべぇを実行します ・エントランスメニュー画面で実行したいファイルを選んでAボタンを押します ●開発環境の概要  通常の行番号ベースのエディタが使えます。  行番号に引き続いて1行を入力してリターンを押すと、プログラムに記録されます。  行番号だけを入力してリターンを押すとその行は削除されます。  行番号無しで命令を入力すると即座に実行されます。  編集はバックスペースによる1文字削除しか使えません。通信ソフトからホスト上のエディタにCOPY&PASTEして、エディタ上で編集してから、通信ソフトに貼り付けてワンべぇに送ると便利です。ただし、フロー制御が無いので、複数行まとめて貼り付けると文字落ちが生じます。張り付けは1行単位で行ってください。プログラムはホスト上で編集してあらかじめTransMagicなどで送信しておくのも有効な手段です。  現状では2Kバイト以上のプログラムを作成してもsaveコマンドで保存できません。listコマンドを実行してから通信ソフト上でCOPY&PASTEしてホスト上に保存してください。  実行中は、STARTボタンを押すといつでも対話モードに戻れます。その後、contステートメントで実行を継続できます。  中間言語に翻訳してから処理するため、中間言語に翻訳できない場合は、入力直後にエラーが出ます。 ●言語の概要  ごく軽いBASIC言語です。  昔あったTiny BASICに近い構文を持っています。  データ型は、符号付き16bit整数だけです。  定数は、-32768〜32767の10進数か、0x0000〜0xffffの16進数で記述できます。  変数は、グローバル変数として、A〜Zのアルファベット大文字1文字のものが26個あります。  ローカル変数として、a〜zのアルファベット子文字1文字のものが26個あります。ローカル変数はgosubステートメントを実行したときに新しい領域が割り当てられ、returnステートメントを実行したときにgosubする前の領域が戻ってきます。  配列変数は@(インデックス)という形式の1次元配列だけが使用できます。使用可能なサイズは、プログラム記憶領域(48Kバイト)の残りサイズに等しくなります。インデックスは0から始まります。(例: for i=0 to 9:print @(i):next)  演算子の優先順位はありません。(1+2*3は9になります)  計算順序は、括弧()を使って明示的にコントロールしてください。  オーバーフロー、アンダーフローのチェックはありません。溢れは無視されます。ただしゼロ除算はエラーになります。  ステートメントなどのキーワードはすべてアルファベット小文字で入力します。大文字を使っても小文字になります。 ● ステートメント一覧 変数 = 式  式を計算して変数に代入します。letキーワードはサポートしていません。 例: a=b+c if 式 then ステートメント列  式が0でなければステートメント列を実行します。0なら次の行から実行を継続します。elseはありません。 例: if (a=0) and (b=1) then goto 200 print [文字列|式|chr(式)][,|;]...  WonderWitchのテキスト画面の現在のカーソル位置から文字を表示します。  式の前後に空白文字が入ることはありません。  chr(式)は、式の値を文字コードと見なして表示します。  制御コードは扱いませんので、WonderWitchのキャラクタージェネレータにあるすべての文字が表示できます。  区切り文字の;は何もしません。,はタブストップ位置までカーソルを進めます。  print文の最後は;または,で終わった場合は改行しません。 例: print "計算結果=",chr(34);1+2;chr(34) locate 式,式  WonderWitchのテキスト画面の現在のカーソル位置を設定します。引数はx,yの順番です。 例: locate 10,10 cls  WonderWitchのテキスト画面を消去します。 例: cls goto 式  式の行番号に飛びます。計算型goto文が可能です。つまり、goto A*100とすると、Aが1のきは100行目に。2のときは200行目に飛びます。 例: goto 100 gosub 式  スタックに現在位置とローカル変数を積んで、式の行番号に飛びます。gotoと同じく計算型gosubが可能です。  スタックはforと合わせて8レベルまでです。 例: gosub 100 return  gosubがスタックに積んだ情報を取り出して、そこに処理を戻す。ローカル変数も戻る。 例: return for 変数=式 to 式 for 変数=式 to 式 step 式  変数の値を変化させながらnextまで繰り返します。  終了値は厳密であることに注意が必要です。for i=1 to 2 step 2:nextは、無限ループになります。なぜなら変数iは永遠に2にならないからです。このような仕様にしておかないと、終了値を超えたら終わるという判定だと、ループの終値が32767のときに機能しないためです。 例: for i=0 to 10 step 2 next  forステートメントの位置に戻って動作を繰り返します。forステートメントで示した条件が満たされた場合は、nextの次に動作が進みます。nextの後に変数名を書くとエラーになります。 例: next end  プログラムの実行を終了します。 break  その位置で一時的に実行を中断します。contステートメントで実行を継続できます。 rem 文字列 '文字列  コメントを記述します。後ろに:を置いてステートメントを続けることはできません。 例: rem これはテストプログラムです。 例: 'この式が座標を計算します new  メモリ上のプログラムを消去します。 list [行番号][-][行番号]  指定範囲の行番号のプログラムをリストします。すべて省略すると全行をリストします。 run run 式 run 文字列  プログラムを実行します。それに先だって変数やスタックがクリアされます。  runはメモリ上のプログラムを先頭から。run 式は、式の行番号から。run 文字列は文字列のファイルを読み込んでそれを実行します。 例: run 例: run 100 例: run "test.wb" cont  breakステートメントやSTARTボタンによるブレークによって停止した位置から実行を再開します。 save 文字列  文字列をファイル名としてメモリ上のプログラムを保存します。保存されるのは内部表現ではなくテキスト形式です。  現在はWonderWitchのファイルシステムの制約上、2Kバイトを超えるファイルを保存できません。listコマンドで端末にリストを送ってそれをCOPY&PASTEして保存してください。 例: save "hello.wb" load 文字列  文字列をファイル名としてファイルからプログラムを読み込みます。読み込むのはテキスト形式で、改行はCRLFとLFのどちらでも可です。中間言語に翻訳できない行がある場合はそこで読み込みが中断されます。プログラムの実行中に使用した場合は実行は中断されます。 例: load "hello.wb" merge 文字列  メモリ上のプログラムにファイル上のプログラムを混ぜ合わせます。同じ行番号の行は読み込まれる方が優先されます。中間言語に翻訳できない行がある場合はそこで読み込みが中断されます。プログラムの実行中に使用した場合は実行は中断されます。 例: load "merge.wb" randomize 式  乱数の初期値を指定します。これを使わないと必ず同じ順序で乱数が発生します。引数には、システム変数tickを指定すると最適です。 例: randomize tick exit  ワンべぇを抜けてOSに戻ります。 debug [文字列|式|chr(式)][,|;]...  printステートメントと同等ですが、WonderWitchの画面ではなく、シリアルポートに送ります。単体で実行する場合には使えないデバッグ専用の機能です。 waitvb 式  式の回数だけVBLANKを待ちます。待っている間はSTARTボタンによるブレークを受け付けなくなるので、指定できる値は750までと制限されています。750を超える値を指定するとエラーになります。 例: waitvb 75 files  カレントディレクトリのファイル一覧をシリアルポートに送ります。単体で実行する場合には使えないデバッグ専用の機能です。 ● 2項演算子  + - * / < > = <= >= <> and or xor ● 単項演算子  - not ● 関数 rnd(式)  0から式-1までの範囲の乱数を返します。 abs(式)  式の絶対値を返します。 ● システム変数 (読み出しのみ) scan  WonderSwanのボタンの状態を調べ、1個の整数値として返します。SCAN_で始まるシステム変数とandを取ることで、どのボタンが押されているかどうか判定できます。STARTボタンは実行中断になるので、これは扱えません。 wait  WonderSwanのボタンが押されるまで待ち、その状態を1個の整数値として返します。SCAN_で始まるシステム変数とandを取ることで、どのボタンが押されたか判定できます。STARTボタンは実行中断になるので、これは扱えません。 scan_a scan_b scan_x1 scan_x2 scan_x3 scan_x4 scan_y1 scan_y2 scan_y3 scan_y4  それぞれのボタンのマスク値を示す定数を返します。  Aボタンが押されているかどうかを調べるには、下記の例のように記述します。 例: if scan and scna_a then print "Aボタンが押さている" tick  システムタイマーのtickを返します。ただし、本来のtick値は符号無し32bit整数であり、ここで得られるのは16bit符号あり整数であることに注意が必要です。はみ出たbitは捨てられます。 ● ファイル保存時の拡張子  一応、ワンべぇのソースフィルは、".wb"で終わるファイル名にしておいて下さい。現在エントランスメニューには全ファイルが見えていますが、".wb"で終わるファイル名だけに限定しようかと考えています。 ● 配布規則  現バージョンは品質が不明のテスト版です。  ですので、以下のように扱ってください。  (正規版でどうするかは未定です) ・転載  未完成品ですので、Internetやパソコン通信などへの転載は不可です。必ずhttp://www.piedey.co.jp/のサイトから入手するようにしてください。 ・雑誌掲載等  ご相談下さい。 ・商業利用  ご相談下さい。 ・自作ソフトの実行手段としてのワンべぇの添付  自作ソフトを配布するためにwonbe.fxを一緒に渡すことを許可します。アーカイブへの同梱、CD-Rメディアなどへの焼き込み、通信ケーブルによる転送、どれも可です。ただし、ワンべぇの動作に関しては何も保証はできませんので、リスクは自分で負ってください。利用にあたっては、ロイヤリティなどはありませんので、報告も送金も必要ありません。 ● 問い合わせ先 株式会社ピーデー http://www.piedey.co.jp/ 川俣 晶 autumn@piedey.co.jp 以上