━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ X-BASIC と(ほぼ)互換なBASICインタプリタ ぺけ-BASIC ver.0.02 for X680x0 中谷 秀洋 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ぺけ-BASICは、X680x0 上で動く、X-BASIC ver.2 と互換なBA SICインタプリタです。一部未サポートの機能があるので、「完全互換」で はありませんが、X-BASIC用のプログラムのほとんど全てが無変更のま ま動きます。 実行するBASICのプログラムを先に中間言語に変換してから実行するの で、本家X-BASIC比で平均4倍程度の高速化が望めます。これにより、 X-BASIC(特に 10MHz 機上)ではほぼ不可能だった、多くのスプライト を扱うようなゲームなどをインタプリタ上で製作出来ることが期待されます。 またもちろん、外部関数とのインターフェースもX-BASICと互換とな っていますので、これまで製作されてきた外部関数もそのまま使用出来ます。 そして、本家X-BASICに装備されていない、いくつかの機能が拡張さ れています。プログラムを作る上で、きっと役に立つだろうと思います。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 目次 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1. 準備 1.1 本ソフトウェアの概要 1.2 ファイル構成 1.3 必要なもの 1.4 インストール 2. マニュアル 2.1 実行方法 2.2 本家X-BASICとの相違点 2.3 コンフィグファイル 2.4 外部関数 2.5 BASICプログラム 2.6 拡張機能 3. リファレンス 3.1 コマンド 3.2 ステートメント 3.3 変数 3.4 関数 3.5 式 3.6 エラーとワーニング 3.7 その他 4. 終わりに 4.1 おはなし 4.2 謝辞 4.3 使用許諾 4.4 連絡先 A. 付録 A.1 主なエラー・ワーニングメッセージとその対処方法 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1. 準備 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.1 本ソフトウェアの概要 X-BASICとは、X680x0 本体を買えば付属して来るシャープ純正のBA SIC言語であることは説明不要でしょう。ぺけ-BASICは、そのX-BA SIC ver.2 と言語上互換なBASICインタプリタです。 ただし、ぺけ-BASICはBASICプログラムを実行する機能を持って いるだけです。ダイレクトモードや、スクリーンエディタは装備していません。 ゆえに、プログラムの入力には、エディタかX-BASICを利用しなくては なりません。 それ以外の点では、特に実行速度の面で、本家X-BASICに優る使用感 が得られるものと思います。 1.2 ファイル構成 このアーカイブには以下のファイルが含まれています。 xb.doc このドキュメント xb.r ぺけ-BASIC本体 xb.cnf コンフィグファイル例 xbfnc.doc 付属の外部関数についてのドキュメント dosfnc.fnc 外部関数のファイル iocsfnc.fnc 〃 lzhfnc.fnc 〃 raster.fnc 〃 spdef.fnc 〃 SAMPLE\ サンプルプログラムの収められている ディレクトリ BFD\ おまけの差分 xb.r や外部関数のソースは別のアーカイブで配布されています。 1.3 必要なもの X680x0 本体はもちろん必要です。ぺけ-BASICの開発は、X68000 初代 機上で行われましたが、X68030, X68/040turbo, REDZONE 等の上でも動作する ことが確認されています。 必要なメモリは、実行されるBASICプログラムによって変化しますが、 ぺけ-BASICの仕様により、一般に本家X-BASICより多くのメモリを 消費すると思われます。フリーエリアのサイズは、常に大きめに指定して下さ い ( 2.3 コンフィグファイル )。 X-BASIC上で作成されたBASICプログラムのほとんどは、X-BA SIC付属の外部関数を利用しているでしょうから、通常の使用にはX-BA SIC一式が必要です。また、本ドキュメントではBASICの文法にまでは 触れませんので、X-BASICのマニュアルも要ります。 ぺけ-BASIC本体の実行に最低限必要なドライバは FLOAT?.X だけです。 後は、使用する外部関数によって必要とされるドライバ類( OPMDRV3, ZMUSIC, CARDDRV 等)を組み込んでおいて下さい。 1.4 インストール すでにX-BASICを使用されている方は、そのX-BASICのあるディ レクトリにこのアーカイブに含まれている xb.r と xb.cnf、そして外部関数 をコピーして下さい。 そうでない場合、ぺけ-BASIC用のディレクトリを作って、X-BASI Cに付属の外部関数と一緒に、 xb.r と xb.cnf をそのディレクトリにコピー して下さい。当然、このディレクトリにパスを通しておいた方が良いでしょう。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2. マニュアル ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.1 実行方法 エディタやX-BASICなどを使って作成した、カレントディレクトリに あるBASICプログラム peke.bas を実行するにはコマンドラインから、 xb peke.bas と入力します。拡張子 .bas は省略可能です。 プログラムの実行が終了するか、実行中に CTRL+C を押すと、コマンドライ ンに帰ってきます。 ぺけ-BASICへのオプションの指定は、BASICプログラム名の前で 行って下さい。 現在、オプションとして以下のものが指定出来ます。 -c [名前] : コンフィグファイル名を指定します。無指定の場合に は、xb.cnf, basic.cnf の順に xb.r のあるディレク トリから探します。 -f [数値] : BASICプログラムの実行に使用するフリーエリア の大きさをキロバイト単位で指定します。コンフィグ ファイルでの指定より優先されます。 -e [文字] : 拡張機能のON/OFFを、アルファベットで指定し ます。大文字でON、小文字でOFFにすることが出 来ます。文字と各機能の対応は次節「2.3 コンフィグ ファイル」を御覧下さい。コンフィグファイルの指定 より優先されます。 例えば、 xb -f512 -eaL peke.bas と起動すると、フリーエリアを 512 KB 取り、拡張機能の「 A : b_argc, b_argv() を使用出来る」がコンフィグファイルの設定に依らず無効、「 L : goto の飛び先にラベルを使用出来る」が有効となります。 また拡張機能として、BASICプログラム名の後ろにプログラムに渡す引 き数列を記述することが出来ます ( 3.3 変数 )。 コマンドラインに何も指定しないで xb.r を実行すると、簡単なヘルプメッ セージが表示されます。 2.2 本家X-BASICとの相違点 最も大きな違いは、ぺけ-BASICがBASICプログラムを編集する機 能を持っていないことです。そのため、プログラムの入力・修正にはエディタ やX-BASICを利用して頂かなくてはなりません。 それを補うため、エラーをタグファイルとして書き出し、エディタに渡すと いう機能を装備しています。詳しくは次節「2.3 コンフィグファイル」を御覧 下さい。 また、本家X-BASICにない、いくつかの拡張機能を装備しています。 もちろん、それで互換性の損なわれることの無いように、各の拡張機能ごとに 使用するかどうか選べるようになっています。詳しくは「2.6 拡張機能」と、 そこで指し示す節を御覧下さい。 その他に大きな違いはほとんどないと言えます。「 gosub を使っていない X-BASICのプログラムは、まず間違いなく動く」と思ってもらって良い でしょう。 細かい違いを箇条書きの形で以下に列記します。各の詳細は、[ ] で示され る節を御覧下さい。 ・ .cnf の BEEP, CAPS, WIDTH は無視される [ 2.3 ] ・ 空行を許す [ 2.5 ] ・ 行番号の有無を自動判別 [ 2.5 ] ・ BASICのテキストの最後に &h1a がなくても良い [ 2.5 ] ・ コマンドがない [ 3.1 ] ・ ? = print 以外の省略形は使えない [ 3.2 ] ・ gosub に未対応 [ 3.2 ] ・ using のフォーマットの指定に文字列定数しか使えない [ 3.2 ] ・ 文字列の長さが 255 文字に固定 [ 3.3 ] ・ 配列の次元の上限が10次元 [ 3.3 ] ・ オーバーフローチェックがない [ 3.5 ] ・ ワーニングが出る [ 3.6 ] ・ エラーの位置の表示は(行番号の有無に関わらず)行数 [ 3.6 ] ・ 実行されない位置にある記述についてもエラーを発行する [ 3.6 ] ・ 一部のコントロールコードは未サポート [ 3.7 ] 2.3 コンフィグファイル コンフィグファイルは、ぺけ-BASICの動作環境を記述するためのもの で、テキストファイルの形で書かれています。これは本家の basic.cnf に相 当します。 ぺけ-BASICは、コマンドラインで特に指定されていなければ、xb.r が あるディレクトリから、xb.cnf, basic.cnf の順にコンフィグファイルを探し て読み込みます。 ぺけ-BASICで拡張されたコンフィグファイルの命令を使いたい場合は xb.cnf を、X-BASICとコンフィグファイルを共有したい場合は xb.cnf を削除して basic.cnf を、とそれぞれ使い分けて下さい。 それ以外のファイルをコンフィグファイルに使用する場合、ぺけ-BASI Cの起動時にオプションで、 xb -c peke.cnf peke.bas ^^^^^^^^^^^ と指定します。 xb.cnf は例えば次のような構成になっています。 FREE = 128 WIDTH = 96 BEEP = ON CAPS = OFF FKEY = ON WARN = ON *TAG = xb.err *ED = ED.X SINIT = ALWAYS NEVER *EXTEND = ACDEIL FUNC = AUDIO FUNC = GRAPH : FUNC = STICK FUNC = DOSFNC : FUNC = SPDEF *FUNC = APIC : *FUNC = XSPRITE これに見る通り、 命令 = 引き数列 というX-BASICと全く同じ形式で記述することになっています。 また、行の先頭に *(アスタリスク)を置くと注釈と見なされます(本家非 互換)。 命令には、X-BASICでサポートされている FREE, WIDTH, BEEP, CAPS, FUNC と、ぺけ-BASIC独自の SINIT, WARN, ED, TAG, FKEY, EXTENDがあ ります。 それでは、個々の命令について説明します。 ・FREE BASICプログラムで使用するフリーエリアの大きさをキロバイト単位で 設定します。 省略した場合、128 (KB) となります。 ・WIDTH,BEEP,CAPS X-BASICで使用していたコンフィグファイルがそのまま読み込めるよ う、これらの命令が存在していてもエラーにはなりません。しかし、これらの 命令は無視されます。 ・FUNC 組み込む外部関数をファイル名から拡張子 .FNC を略した形で指定します。 1命令につき指定出来る外部関数は1つなので、指定する外部関数の個数だ けの FUNC 命令を書く必要があります。 ・SINIT プログラム実行終了時に画面を初期化するかどうかを設定する、ぺけ-BA SIC独自の命令です。 第1引き数で「 console,screen,width で画面モードを操作している」時、 第2引き数でそうでない時、それぞれ初期化するかどうかを、ALWAYS, NEVER, ASK のいずれかで指定します。各の意味は以下の通りです。 ALWAYS = 常に初期化する NEVER = 常に初期化しない ASK = 初期化するかどうか尋ねる ASK を指定すると、プログラム終了時に画面を初期化するかどうか尋ねてき ますので、y か n で答えて下さい。 指定を省略した場合、SINIT = ALWAYS NEVER となります。 ・WARN ワーニング(3.6 参照)を出力するかどうかを ON, OFF で設定します。 ON でワーニングを出力し、OFF で抑えます。 省略した場合、WARN = ON となります。 ・ED BASICプログラムにエラーがあった時に起動するエディタ名を設定しま す。 省略した場合、エディタを起動しません。 ・TAG BASICプログラムにエラーがあった時に書き出すタグファイル名を設定 します。 省略した場合にはタグファイルを書き出しませんが、ED = が指定されてい たら自動的に xb.err という名前で書き出します。 ・FKEY ファンクションキーをX-BASIC互換に書き替えるかどうかを ON, OFF, AUTO で設定します。それぞれ、 ON = ファンクションキーを書き替えます OFF = ファンクションキーを書き替えません AUTO = input, linput, inkey$, inkey$(0), key があれば、 ファンクションキーを書き替えます 省略した場合、FKEY= ON となります。 短いプログラムを走らせる時にまで、いちいちファンクションキーを書き替 えるのは、無駄ですし見栄えも悪いです。ところが、上に挙げた命令はファン クションキーがX-BASIC互換でないと都合の悪いことが起きることも考 えられるので、こういった指定が出来るようになっています。 ・EXTEND 拡張機能( 2.6 参照)を使用するかどうかを、各機能ごとにアルファベッ ト1文字で設定します。 アルファベットと拡張機能との対応は以下の通りです。 A : b_argc, b_argv() を使用出来る C : CTRL+C を無効にする D : func で定義する関数の引き数に配列を使用出来る E : 配列の定義時に、非定数の添え字の最大値を使用出来る I : 関数呼び出し時に、変数や配列を初期化しない L : goto の飛び先にラベルを使用出来る 例えば EXTEND = AL などと設定することで、指定の拡張機能を有効にする ことが出来ます。 2.4 外部関数 外部関数とのインターフェースはX-BASICと同等に作られていますの で、X-BASIC用に製作された外部関数がそのまま使用出来ます。ただし、 X-BASICのワークエリアをいじったりパッチを当てたりするような特殊 な外部関数は動くはずないので、注意して下さい。 2.5 BASICプログラム 基本的に、X-BASICでプログラムをSAVEして出来る、テキストフ ァイルの形になっていれば構いません。普通にSAVEした行番号付きのプロ グラムと、SAVE@した行番号なしのプログラムの2種類がありますが、ぺ け-BASICは行番号の有無を自動的に判別しますので、どちらも区別する ことなく実行出来ます。 またX-BASICでは、そのBASICプログラムのファイルに空行があ ったり、テキストの末尾に EOF (&h1a) が無かったら、読み込み時にエラーに なっていましたが、ぺけ-BASICではどちらも許します。 デフォルトの状態では、CTRL+C で基本的にいつでもプログラムの実行を止 めることが出来ますが、拡張機能により、CTRL+C を無効にすることも出来ま す。 EXTEND = C でこの拡張機能が有効となります。 完成したプログラムを CTRL+C で止められたくない時に使用すると良いと思 います。 2.6 拡張機能 ぺけ-BASICは、本家X-BASICにない、以下の拡張機能を装備して います。 ・ CTRL+C を無効にする [ 2.5 ] ・ goto の飛び先にラベルを使用出来る [ 3.2 ] ・ b_argc, b_argv() を使用出来る [ 3.3 ] ・ 配列の定義時に、非定数の添え字の最大値を使用出来る [ 3.3 ] ・ 関数呼び出し時に、変数や配列を初期化しない [ 3.3 ] ・ func で定義する関数の引き数に配列を使用出来る [ 3.4 ] これらはみな、コンフィグファイルのEXTEND、あるいはコマンドライ ンからオプション -e を使って、使用するかどうか選択出来るようになってい ます。 各機能の詳細は [ ] によって指し示される節を、拡張機能を有効にする方 法については、「2.1 実行方法」「2.4 コンフィグファイル」を御覧下さい。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 3. リファレンス ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ BASICプログラムの文法は、基本的に本家X-BASICと同じです。 従って、大筋はX-BASICのマニュアルを参照して頂くことにして、ここ ではX-BASICとぺけ-BASICの違いについて記述することとします。 3.1 コマンド 前述の通り、ぺけ-BASICはダイレクトモードを実装していないので、 コマンドの類は一切サポートされてません。save も load も list も run も ありません。 3.2 ステートメント gosub を除く、X-BASICの全てのステートメントがサポートされてい ます。各ステートメントの仕様もX-BASICと全く同様です。ただし、 print using のフォーマットの指定("#### : & &" といったもの)には文字 列定数しか使えません。 また、X-BASICでは w.= width などといった、いくつかの省略形が使 えましたが、ぺけ-BASICで使用出来るのは ? = print だけです。 拡張機能として、goto の飛び先の指定に、以下の2通りのラベルを使用す ることが出来ます。 goto *X680x0 → *X680x0 goto "SHARP X680x0" → label "SHARP X680x0" EXTEND = L で有効となります。 3.3 変数 int, float, char, str それぞれの型について、普通変数・配列ともに使え ます。もちろん、AUTO 変数として定義することも出来ます。X-BASICに あったシステム変数 csrlin, date$, day$, errno, free, inkey$, inkey$(0), pos, time$ も全てサポートしています。 したがって、X-BASICと全く同様の感覚で使うことが出来ますが、2 つの注意点があります。 1つは、配列の次元の上限が10次元であることです。本家ではおそらくメ モリの許す限り無制限だと思います。でも、11次元以上の配列が必要になる という心配はほとんどないでしょう。 もう1つ、X-BASICの仕様では、文字列変数の長さは str s[64] とい った形で変数定義の時に指定出来ますが、ぺけ-BASICではそういった指 定があっても無視され、255 文字に固定となっています。これは高速化と省力 化のためです。 X-BASICからプログラムを持ってくる時には何の支障もありませんが、 問題はぺけ-BASICで作ったプログラムをX-BASIC上で動かしたり、 BAStoCでコンパイルする時に謎の挙動不審の原因になってしまうかもし れないことです。 文字列変数の定義をする時は、極力文字列の長さも指定するようして下さい。 それから、以下の2つの理由でワーニングが発行されることになっています。 ・ dim を使わないで配列を定義する。 ・定義していない(int 型の)変数に代入する。 拡張機能として、 ・ コマンドラインの引き数を b_argc, b_argv() で参照出来る ・ 配列を定義する時、添え字の最大値に定数でない式を使用出来る ・ 関数を呼び出す時、変数や配列を初期化しない といったことが可能です。以下にそれぞれ解説します。 ・ コマンドラインの引き数を b_argc, b_argv() で参照出来る 今までBAStoC する時にのみ使用出来た、b_argc, b_argv() をインタ プリタのうちから使用出来ます。 EXTEND = A で有効となります。 b_argc : 実行プログラム名も含む引き数の個数 b_argv() : 引き数列 となっています。具体的に、peke.bas が F:\ にあるものとする時、 xb peke.bas Personal Workstation X680x0 として起動すると、 b_argc = 4 b_argv(0) = "F:\peke.bas" b_argv(1) = "Personal" b_argv(2) = "Workstation" b_argv(3) = "X680x0" がそれぞれ設定されます。 ・ 配列を定義する時、添え字の最大値に定数でない式を使用出来る 配列の要素数を定義する時、変数などを使用した定数でない式を使用するこ とが出来ます。ただし、関数の中だけです。global な配列には、従来通り定 数しか使えません。 EXTEND = D で有効となります。 ・ 関数を呼び出す時、変数や配列を初期化しない デフォルトでは、変数や配列は、プログラム実行時や、関数を呼び出される ごとに 0 で初期化されますが、それを初期化しないよう出来ます。初期化さ れる必要の無い配列を持つ関数が頻繁に呼び出されている場合、実行速度を稼 ぐことが出来るでしょう。 EXTEND = I で有効となります。 3.4 関数 外部関数については、2.4 外部関数 を御覧下さい。 X-BASICにあった標準関数は全てサポートしています。 func 〜 endfunc によりBASICプログラム内で定義する関数も、変わら ず使うことが出来ます。再帰呼び出しももちろん可能です。 拡張機能として、func 〜 endfunc で定義する関数の引き数として、配列を 渡すことが出来ます。 EXTEND = E で有効となります。 func [関数名]( …, [配列名]( {S1}, {S2}, …) {;型}, …) という形式で記述します。S1,S2,... は添え字の最大値です。引き数とする 配列の次元だけ並べます。省略することも出来ます。 添え字の最大値を記述した場合、指定の添え字の最大値でない配列を引き数 とすることは出来ません。 省略した場合、引き数とする配列の添え字の最大値はいくつでもかまいませ ん。その時、関数内のその配列の添え字の最大値は、呼びだし側の添え字の最 大値に一致します。 3.5 式 int, float, char, str それぞれの型について、定数表現も含めて、X-B ASICと同様の演算子を用いた式の記述が出来ます。 ただし、オーバーフローのチェックは行っておりません( char a=255:a=a+1 とすると、エラーにならずに a=0 となる)。 3.6 エラーとワーニング エラーが発生すると、ぺけ-BASICはエラーの内容と、それがBASI Cプログラムの違反によるものなら、その位置を表示して、実行を中断します。 その際、終了コードとして 1 を返します。 エラーの位置は、行番号の有無に関わらず、行数で報告されます。 また、BASICプログラムを中間言語に変換中、致命的ではない違反があ れば、ぺけ-BASICはそれをワーニングとして報告し、エラーの時と同様 に内容と位置を表示します。ただし中間言語への変換は中断せず、変換終了後 に、ワーニングの発生した旨を告げ、プログラムを実行するかどうかの確認を 求めます。ワーニングに構わず実行するなら 'y' を、そうでないなら 'n' を 押して下さい。 ワーニングはプログラムの実行には支障ないので、その発行を抑えることも 出来ます(2.3 コンフィグファイル)。 各のエラーやワーニングのメッセージについての詳細は、A.1 主なエラー・ ワーニングメッセージとその対処方法 を参照して下さい。 コンフィグファイルにてタグファイル名の指定があれば、エラーとワーニン グをタグファイルに書き出します。さらに、エディタ名の指定があれば、エデ ィタを起動してそのタグファイルを渡します。 X-BASICでは、明らかな文法違反でも、そこが実行されない限りエラ ーにはなりませんでしたが、ぺけ-BASICは一度プログラム全体を中間言 語に変換する関係から、実行されない位置にあっても文法エラーを発行します。 3.7 その他 X-BASICではテキストの情報を保存しているそうですが、スクリーン エディタの類を備えていないぺけ-BASICではそこまでサポートしていま せんし、今後もサポートする予定はありません。 基本的には支障はありませんが、保存したテキスト情報を使って実現してい ると思われる一部のコントロールコードを、ぺけ-BASIC上ではサポート していません。具体的には、下の12個のコントロールコードがぺけ-BAS ICでサポートされているものです。 &h07 :ビープ音を鳴らす &h09 :水平タブ &h0a :ラインフィード &h0b :カーソルをホーム位置に移動 &h0c :テキスト画面消去 &h0d :キャリッジリターン &h1a :カーソル以降のテキストを消去 &h1b :エスケープコード &h1c :カーソルを右に移動 &h1d :カーソルを左に移動 &h1e :カーソルを上に移動 &h1f :カーソルを下に移動 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 4. 終わりに ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 4.1 おはなし 十数年前の家電屋では、コンピュータはただ電源が入れてあるだけの状態で 並べてありました。デモソフトなんて洒落た物どころか、まだ「パソコン」と いう呼び名すら無かった頃のお話です。  そのコーナーは人影もまばら、というより人のいることの方が珍しいくらい でした。  コンピュータ達は、IPL やらマシン語モニタやらといった一部の例外を除い て、皆一様に「BASIC」を扱える状態になっていました。電源を入れたら 必ず「BASIC」の画面が出ることになっていたんですね。今ではそんなパ ソコンどこにも売ってませんけど。  そういうコンピュータ達を見た、そういうコンピュータ達しか知らなかった、 そして「BASIC」しか使えなかった当時のマイコン少年が、「BASIC」 がコンピュータの常態である、と思ったとしても無理からぬことでしょう。  そのマイコン少年は、後にマシン語を学ぶ過程で、実は「BASIC」もプ ログラムの一つだ、ということを初めて知ることになります。これは、例える なら事物の根本がわかってしまったような、そういう驚きを感じさせたもので した。  そして、この時、「俺もいつかBASICを作ったろう」と強く強く思うの です……  あれからもう十年以上も経ってしまってたんですね。 4.2 謝辞 まずやはり、ぺけ-BASICのオリジナルでもある、今となっては永遠に これ以上バージョンアップしないであろうX-BASICとその著作者 SHARP/ Hudson に最大限の感謝の念を贈ります…… ぺけ-BASICは以下のツールを用いて製作されました。また、Oh!X や電脳倶楽部の記事、XC付属のマニュアルも随分参考にさせて頂きました。 併せてお礼申し上げます。 μEmacs v3.10 J1.43 HAS v3.09 HLK v2.27 cvr HCV v0.09 DB v2.10 DIS v2.01β また、ぺけ-BASICは以下の方々の御協力無しにはここまで来れません でした。 柴田さんには、ぺけ-BASICを使って、素晴らしいプログラムが動くこ とを教えて頂きました。 柴原さんは X68030 や 040 turbo での動作チェックや速度計測を行って下 さいました。 島崎さんはぐちゃぐちゃのソースを読んでコードの最適化に挑んで下さり、 またプログラムの技術的なアドバイスも頂きました。 出葉さんにはぺけ-BASICの仕様について幾つかの御意見を頂きました。 深沢さんは ver.0.01 の公開に至っても見逃していたバグを見つけて下さい ました。 村重さんは、実はX-BASICについてトンと知らないアセンブラプログ ラマな中谷の盲点を突くようなプログラムを書いて、ぺけ-BASICをいぢ めて下さいました。また、数式解釈の部分でアドバイスも頂きました。 山下さんはうっかり者の中谷が文字通りうっかり気がついてなかったところ を指摘して下さいました。 そして、電脳倶楽部編集部のかまださんにも大変お世話になりました。かま ださんの、ぺけ-BASICが本家X-BASICに取って代わる存在になるべ きだとの一言がなかったら、ぺけ-BASICは今より程度の低いものになっ ていたでしょう。 月並みな言葉ですが、皆さん、本当にありがとうございました。 4.3 使用許諾 ぺけ-BASICはフリーウェアです。したがってその著作権は、オリジナ ルのX-BASICの著作権に抵触しない部分については、作者の中谷秀洋に あるものとします。 その使用については、個人の趣味で使用するのはもちろん、営利目的で使用 する分も含めて、無償かつ全くの自由です。中谷秀洋に許可を求める必要もあ りません。 ただし、ぺけ-BASICを使用したために大なり小なりの不利益を受けた としても、作者は一切の責任を負いません。また、ぺけ-BASIC自体をお 金などの代償を取って売る、などといった行為は禁止します。 配布については、BBSへの転載などは自由とします。特に作者への連絡の 義務など設けませんが、連絡して下さると嬉しいです。 改造についても、やはり自由に行って下さって構いません。ただし、改造し た ぺけ-BASICを再配布する場合には、改造内容を明記したドキュメント を必ず添付して下さい。 4.4 連絡先 意見・要望・バグなどありましたら、下記宛てまで御連絡下さい。 ・電子メールの宛先 現在残念ながら、広く一般から送れる、個人で自由に使用出来るメールアド レスを持っていません。すいません。 でんでんNET に加入なさっている方は DEN1608(AKSTN.) 宛てでお願いしま す。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ A. 付録 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ A.1 主なエラー・ワーニングメッセージとその対処方法 以下は、よく出るであろうエラーのメッセージとその対処方法です。 ・メモリを確保出来ませんでした = メモリを増設するか、不要な常駐物などを解除して下さい。 ・フリーエリアが足りませんです = コンフィグの FREE= の値を大きくするか、コマンドラインからフリー エリアを大きめに指定して下さい。 ・コンフィグの書き方が変である = 2.3 コンフィグ を読んで、コンフィグファイルにおかしな記述がない か確かめて下さい。 ・エディタを起動出来ません = エディタの名前の指定が間違っているか、メモリが足りません。 ・変な式だな = 式の記述が間違っているものと思われます。原因が特定しにくい場合は、 式を細かく分解して、いくつもの行に分散させてみると良いでしょう。 ・文法エラー = 明らかな記述ミスがある時に出ます。 ・二重に宣言するなんて = 変数・配列の名前がすでに使われています。別の名前を使いましょう。 ・そいつは未宣言の変数だろう = 未宣言変数の参照は出来ません。打ち込み間違いでなければ、ちゃんと 定義してやらなければなりません。 ・未宣言の関数か配列でないかい = 同じく未宣言の関数を呼び出したり、配列を参照したりは出来ません。 ・文字列へアクセスするポインタの値がまずいです = ポインタの値が負の数か、255 を越えています。 ・ネスト構造が閉じていませんね = for, if, repeat, switch, while などのネストが閉じていないのにプ ログラムが終了したり、関数が閉じたりしています。それぞれに対応するステ ートメント等で、ちゃんと閉じて下さい。 ・関数の引き数が多いみたいだが ・関数の中に変な引き数があるな = 引き数の指定が間違っています。該当する関数のマニュアルをお読み下 さい。 ・配列の添え字が大きすぎます ・配列の添え字が負の数のようですね = 配列の添え字が定義した値より大きかったり、負の数だと駄目です。 ・配列の添え字の個数が少ないんです ・配列の添え字の個数が多いんです = 配列の添え字の個数が定義した次元通りではありません。 ・配列は10次元までしか扱えないんですゴメンナサイ = ぺけ-BASICの仕様で、配列の次元の上限は 10 となっています。 ・そのステートメントは未サポートだ = ぺけ-BASICでは goto, gosub, lprint は未サポートです。 ・ぺけBにバグ有り = 中間言語への変換に失敗していると思われます。もしこのメッセージが 出たら中谷までお知らせ下さい。 以下は、ワーニングのメッセージです。 ・未宣言変数を int 型に割り振ります = X-BASICでは int 型の変数は宣言する必要はありませんでしたが、 ぺけ-BASICでは使用する全ての変数は宣言しなければなりません。宣言 していない変数があれば、このワーニングが発行されます。 ・dim 無しで配列宣言しましたね = X-BASICでは、dim が無くともC風に配列の宣言が出来ましたが、 ぺけ-BASICでは必ず dim を使って配列の宣言をしてもらいます。dim が なければ、このワーニングが発行されます。 ・行番号がここだけないです ・先頭が数字だとややこしいですよ = ぺけ-BASICは、入力されたBASICプログラムの行番号の有無 を、先頭行で判断します。 行番号有りと判断した場合、先頭が数字でない行があると、前者のワーニン グが発行されます。 行番号無しと判断した場合、先頭が数字の行、例えば char a(7) = { 0,1,2,3 4,5,6,7 } といったプログラムがあれば、後者のワーニングが発行されます。こういう プログラムはX-BASICでは読み込むことが出来ないので、先頭に + など をつけておくほうが良いでしょう。 ・input系, key があるので、ファンクションキーを本家互換に書き替えた方 がいいです = コンフィグにて FKEY= OFF と設定してある時、プログラムにファンク ションキー等の内容がX-BASIC互換でないと動作に支障の出得る命令が あったら、このワーニングが発行されます。コンフィグを書き直すか、「なん とかなるだろう」と割り切って実行して下さい。 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 奥 付 け ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 日 付: 平成 7 年 6 月 16 日 平成 8 年 12 月 8 日 ( 住所など調整 ) 文 責: 中谷 秀洋 (なかたに しゅうよう) でんでんネット DEN1608 ( AKSTN. ) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━