99BASIC TOP 99BASICの特徴

99 BASIC は、1980 年代の MS-DOS 時代の BASIC を、Windows 上に忠実に再現した BASIC インタプリタです。 特に、NEC の PC-98 シリーズの N88-BASIC(86) と、 MSX-BASIC とに強く影響され、両 BASIC を足して 2 で割った様な雰囲気をかもし出しています。

この BASIC の主たるターゲットは、往年の BASIC を使ってきたかたがたと、投稿プログラム雑誌へ自作ゲームを投稿しようとする かたがたです。

99 BASIC の特長
けっこう速い 実行速度を重要視して作られています。まぁ、N88-BASIC(86) ほどのスピードには 達成できませんでしたが、画面モードによっては、他のフリーウェアの Windows 用 N88 類似 BASIC の 10 倍以上の 速度は軽く出ますので、ほぼ実用的な速度になってるのではないかと思います。
また、この BASIC は、実行中であっても、他の処理をあまり重くしません。 他の処理の速度をあまり重くしないように、 十分考慮されています。
ダイレクトモード ダイレクトモードが使えます。
前時代のBASICが、プログラミングを覚えようとしている人にとても優しかったのは、 ダイレクトモードがあったからです。 1行くらいで入力したプログラムが、リターンキーを押すとともに実行され、 すぐに結果が目の前に現れる、そんな気軽さが無くてはBASICの魅力は半減です。
昔はよく、BASICを電卓替わりに使ったものでした。
独立な画面 テキスト画面とグラフィック画面は、独立しています。見た目には1つのウインドウですが、テキスト文字を表示すると グラフィックが消されてしまうなんてことはありません。改行したって、テキスト画面がスクロールするだけで、 グラフィックは じっとしています。そう、昔の PC9800 シリーズの画面の様に。 グラフィック、テキスト、キャラクタ、スプライト、4つの画面が1つのウインドウに重なっていて、しかもみんな独立。
ちらつかない画面 昔の BASIC プログラムでは、描画途中の画面がCRTに表示されてしまうため、画面を2画面使って、裏画面で画面作成をして、 表画面に切り替えることで画面のちらつきを抑える……などというテクニックがよく使われていました。 ところが、99 BASIC では、画面制御をソフトウェアでエミュレーションしているために、 CRTに表示するタイミングを指定することができるので、描画途中の画面を表示させなくすることができる様になりました。 そのため、シューティングゲームであっても、まったくちらつきの無い美しい画面表示が行えます。
N88 類似性 かなりクセの強い BASIC なので、「N88-BASIC(86) 互換」は標榜していませんが、 現在 Windows 95/98/NT で動く BASIC の中でも最高レベルの互換性というか...移植性なのではないでしょうか。 命令ひとつひとつの文法が、いくぶん異なるので、N88-BASIC(86) のプログラムを そのまま LOAD してきて実行するという様なことは出来ませんが、N88-BASIC(86) の ほとんどの機能を 99 BASIC も装備しているので、少しの改造をすれば、動作させることができます。 特に、演算子やその優先順位、変数の取り扱い方法、基本的な BASIC の命令については、ほぼ N88-BASIC(86) に互換になっています。
キャラジェネ MSXはゲームの作りやすいマシンでした。 なぜかというと、文字にグラフィックの絵を当てはめられるので、グラフィカルなゲームが 文字を表示するだけで作れたからです。99Basicが、こんな美味しい画面モードを 見逃すわけありません。
そうそう、シャープのX1にもありましたね、PCGという機能が。これは、その機能をするものです。
スプライト MSXはゲームの作りやすいマシンでした。なぜかというと、スプライトがあったからでした。 スプライトは、座標を指定するだけで、画面の中を自由に動き回るグラフィックキャラクタです。 99Basicが、こんな美味しい画面モードを見逃すわけありません。
MSXは、スプライトが表示できて衝突判定できるだけでしたが、さらに上ゆくマシンも過去には有りました。 覚えておいででしょうか、ソードのM5。スプライトが自動的に移動するのです。 あの感動は今でも忘れられません。そう、99Basicも自動移動に対応しました。
カラーパレット このBASIC は、256 色しか扱えません。でも、カラーパレット機能があるので、 1670 万色中の 256 色を選ぶことができます。 パレット機能は、画面のフェードイン・フェードアウトには最適です。 画面がフェードインするだけで、なんとなくかっこいいプログラムに感じてしまうものです。
ビットマップ 256 色までなら、BMP 画像ファイルを読み込んで表示する機能が付いています。 また、画面に表示されている画像を、ビットマップファイルとして保存することもできます。
サウンド 以下のサウンド演奏ができます。すべてバックグラウンド処理なので、演奏しながらプログラムの実行も並行して行われます。
  ・MIDI ファイルの演奏……MUSIC 命令
  ・Wave ファイルの演奏……MUSIC 命令
  ・ミュージックマクロ言語(MML)で書かれた楽譜の演奏(GM音源対応、メロディ9トラック+リズム1トラック)……PLAY 命令
  ・周波数と音の長さを指定した、音の発生……SOUND 命令
  ・メモリ上に置かれた Wave 波形の再生……SOUND 命令
PLAY 命令での MML は、テンポ・音量・繰り返し・条件分岐・パンポット・クレシェンドデクレシェンド・ 和音・移調・マクロなど、音楽演奏に必要な多くの機能を備えています。 出力する機器を指定した場合には、外部接続の MIDI 機器を、この PLAY 命令で操作することが可能です。 ただし、エクスクルシブデータの転送には対応していません。
ジョイスティック もともとゲーム作成向けに作られた BASIC なので、この BASIC はジョイスティック対応です。 アナログジョイスティックの状態が取得できますし、 ジョイスティックの方向の情報だけを簡単に扱う STICK 関数や、 トリガの情報だけを簡単に取得する STRIG 関数もあります。 もちろん、キーボードの入力をジョイスティックに見立てて、テンキーや方向キー、スペースキーなどのキーボード操作で、 ジョイスティック的な動作をさせることもできます。
ファイル操作 N88-BASIC(86)などの前時代の BASIC でサポートされていた全てのファイル操作が装備されています。 基本的には、シーケンシャルアクセス、ランダムアクセスの2通りの方法なのですが、 シーケンシャルアクセスでは、読書両用にオープンすることができますし、 C言語の fread()、fwrite()、fseek() の各関数に相当する命令も用意されています。 ランダムアクセスファイルでは、MKI$、MKS$、MKD$、CVI、CVS、CVD の各関数もきちんと用意されてますし、 レコード長だって可変です。レコード長を1バイトにしてしまって、完全なランダムアクセスをすることもできます。
ディレクトリ操作も、充実しています。ディレクトリエントリを取得する関数、カレントディレクトリを変更したり、 作成したりする命令、パス名を、ドライブ名(コンピュータ名)・ディレクトリ名・ファイル名・拡張子に分割する命令、 リンク(ショートカット)が指す先を返す関数など、本格的なファイル操作アプリケーションにも対応できる機能がそろっています。
もちろん、LAN 対応です。
RS-232C RS-232C(Commポート)での通信ができます。N88-BASIC(86)でやっていた様な方法で、 Comm ポートをファイルの様にオープンして、Comm ポートに対して、読み書きする仕組みです。 割込や信号線制御も装備され、きめ細かく効率の良い通信処理が行えます。
プリンタ LPRINT 命令や画面のハードコピー、LLIST 命令などの機能があります。
割り込み ただでさえBASICは遅いのです。割込が無ければ、余計な条件判断が増えて、さらに遅くなってしまいます。 やはりBASICを美しく実行するために割込は欠かせません。どんな割込があるのかというと....
    ON INTERVAL GOSUB
    ON STOP GOSUB
    ON SPRITE GOSUB
    ON MOUSE GOSUB
と、とりあえず4つ挙げてみましたが、まだ他にもっとあります。
機械語 このBASICにはメモリマップがあります。このアドレスからこのアドレスまでは変数エリア、 ここから先はテキストVRAMなどというように。なぜメモリマップまで存在するのかというと、 答えはひとつ、マシン語ルーチンを使うためです。USR 関数があるのです。 ちょっとプログラム作法に面倒な点もありますが、ネイティブ 32 bit のマシン語ルーチンが組めます。 エミュレーションではありません。もちろん POKE 命令や PEEK 関数も使えます。 ついでに言えば、Windows 95/98 ならば、OUT 命令や INP 関数も使えます。
DLL ダイナミックリンクライブラリを使用するための命令も用意されています。99 Basic の機能だけでは実現不可能な事も、 DLLを使えば、ある程度可能です。またウインドウメッセージの送受信もできます。
リストプロテクト SAVE したプログラムには、リストプロテクトがかけられます。 プロテクトされたファイルは、LIST 命令によるプログラムの表示や修正ができなくなり、 作ったプログラムの秘密保持が可能です。アドベンチャーゲームやシミュレーションゲームなどでは、 リストが見えてしまったのでは、ゲームの秘密が分かってしまってつまらないので、そういう場合にも利用して下さい。
スピコン スピードコントローラが付いています。
プログラムを作っている途中では、けっこう便利な機能です。 動作の様子が見たいから、ゆっくり実行して欲しい時などに。
逆に、自分のマシンが遅いならスピコンを速くなるほうへ調節してしまうと、 少しはサクサク動くんではないでしょうか。

【こんな用途に向きます】

電卓替わりに使う。
ちょっとグラフを書いてみる。
投稿ゲームを作る。
簡単なファイルコンバータを作る。
プログラミングをお勉強する。
昔を懐かしむ。

【こんな用途には向かないと思います】

大きなプログラムを書いてみる。
商業用アプリケーションを作る。
プログラミングをお勉強する。


プログラミングのお勉強は、向き不向きの両方に書いてありますが、これには理由があります。
このBASICは、プログラムの楽しさやプログラムというものの概念を知るには、最適です。 でもこれは、前時代のBASICなのです。現代には通用しません。 プログラムの楽しさや、 プログラムの概念などが分かったら、さっさとC++言語とか構造化プログラミング言語に 移行した方が身のためです。特に将来プログラマを目指すなら。ただし、将来マイコンとか 組込制御系みたいにハード寄りの事をやろうというなら、このBASICに依存しちゃって 大丈夫かもしれません。
【キーワード一覧】

ABS, AKCNV$, AND, APPEND, AS, ASC, ATN, AUTO, BEEP, BIN$, BLOAD, BSAVE, CALL, CDBL, CHAIN, CHDIR, CHILD, CHR$, CHRGEN$, CINT, CIRCLE, CLEAR, CLIPBD$, CLIPBD, CLOSE, CLS, CMD, COLOR, COMM, COMMAND$, CONSOLE, CONT, COPY, COS, CSNG, CVD, CVI, CVS, DATA, DATE$, DEFDBL, DEFFN, DEFINT, DEFSNG, DEFSTR, DEFUSR, DELETE, DIM, DRAW, DSKF, EDIT, ELSE, END, ENVIRON$, EOF, EQV, ERASE, ERL, ERR, ERROR, EXEC, EXP, FIELD, FILES, FIX, FN, FOR, FORMULA$, FORMULA, FRAC, FRE, FREAD, FSEEK, FSPLIT, FWRITE, GET, GLOAD, GOSUB, GOTO, GSAVE, HEX$, IF, IME, IMP, INKEY$, INP, INPUT$, INPUT, INSTR, INT, INTERVAL, INVALIDATE, JOYSTICK, KACNV$, KEY, KILL, KINSTR, KLEN, KMID$, KNJ$, KNJ, LEFT$, LEN, LET, LINE, LINK$, LIST, LLIST, LOAD, LOC, LOCATE, LOF, LOG, LPRINT, LSET, MEMORY, MERGE, MESSAGE, MID$, MKD$, MKDIR, MKI$, MKS$, MOD, MOUSE, MUSIC, NAME, NEW, NEXT, NOT, OCT$, OFF, ON, OPEN, OR, OUT, OUTPUT, PAGE, PAINT, PALETTE, PAUSE, PEEK, PLAY, POINT, POKE, PRESET, PRINT, PSET, PUT, RANDOMIZE, READ, REM, RENUM, RESTORE, RESUME, RETURN, RIGHT$, RMDIR, RND, RSET, RUN, SAVE, SCREEN, SCRN$, SCROLL, SCROLLBAR, SEARCH, SET, SGN, SIN, SJIS$, SOUND, SPACE$, SPRITE$, SPRITE, SQR, STEP, STICK, STOP, STR$, STRIG, STRING$, SWAP, SYSCHK, SYSTEM, TAN, TCPIP, THEN, TIME$, TIME, TO, UDPIP, UNICODE$, UNISTR$, USING, USR, VAL, VARPTR, WAIT, WEND, WHILE, WIDTH, WINDOW, WRITE, XLOC, XOR, XPOS, YLOC, YPOS

(打消線の付いているキーワードは、将来のための予約キーワードで、現在は機能しません。)