カテゴリー
先日ソースコードを発見したMC68000用のTiny BASIC、せっかく発見したのでコードを整理してみようと思っています。
まずは手始めに予約語リストをまとめてみました。
| 中間コード | 予約語 | 機能 | 備考 |
|---|---|---|---|
| 0x80 | LIST | ダイレクトコマンド | |
| 0x81 | LOAD | ダイレクトコマンド | |
| 0x82 | NEXT | ||
| 0x83 | RUN | ダイレクトコマンド | |
| 0x84 | SAVE | ダイレクトコマンド | |
| 0x85 | LIMIT | ダイレクトコマンド | |
| 0x86 | SYSTEM | システム(モニタ)に戻る | ダイレクトコマンド |
| 0x87 | BYE | システム(モニタ)に戻る | ダイレクトコマンド SYSTEMと同じ |
| 0x88 | NEW | ダイレクトコマンド | |
| 0x89 | LET | ||
| 0x8A | INPUT | ||
| 0x8B | GOTO | 行番号のほかラベルも使用可 | |
| 0x8C | GOSUB | 行番号のほかラベルも使用可 | |
| 0x8D | RETURN | ||
| 0x8E | REM | ||
| 0x8F | FOR | ||
| 0x90 | IF | ||
| 0x91 | |||
| 0x92 | POKE | メモリにバイト書き込み | |
| 0x93 | STOP | ||
| 0x94 | CALL | アドレスを指定して機械語ルーチンを呼び出す | |
| 0x95 | PUSH | スタックに値を積む | |
| 0x96 | POP | スタックから変数に値を取り出す | |
| 0x97 | SWAP | 2つの変数の値を交換 | |
| 0x98 | WPOKE | メモリにワード書き込み | |
| 0x99 | LPOKE | メモリにロングワード書き込み | |
| 0x9A | CLEAR | ||
| 0x9B | PEEK | メモリから1バイト読み込み | 関数 |
| 0x9C | RND | 乱数 | 関数 |
| 0x9D | ABS | 絶対値 | 関数 |
| 0x9E | SIZE | 関数 | |
| 0x9F | SQR | 平方根(整数) | 関数 |
| 0xA0 | INKEY | 関数 | |
| 0xA1 | VARPTR | 変数(A~Z)の格納アドレス | 関数 |
| 0xA2 | LEVEL | 関数 | |
| 0xA3 | WPEEK | メモリから1ワード読み込み | 関数 |
| 0xA4 | LPEEK | メモリから1ロングワード読み込み | 関数 |
| 0xA5 | NOT | 論理否定 | 関数 |
| 0xA6 | SGN | 符号(-1,0,1) | 関数 |
| 0xA7 | TO | FOR文の終値 | |
| 0xA8 | STEP | FOR文の増分 | |
| 0xA9 | AND | 論理積 | 2項演算子 |
| 0xAA | OR | 論理和 | 2項演算子 |
| 0xAB | XOR | 排他的論理和 | 2項演算子 |
| 0xAC | EOR | 排他的論理和 | 2項演算子 XORに同じ(MC68000アセンブラに合わせた) |
| 0xAD | >= | 2項演算子 | |
| 0xAE | <> | 2項演算子 | |
| 0xAF | > | 2項演算子 | |
| 0xB0 | = | 2項演算子 | |
| 0xB1 | <= | 2項演算子 | |
| 0xB2 | < | 2項演算子 | |
| 0xB3 | HEX | ||
| 0xB4 | MOD | 剰余 | 2項演算子 |
| 0xB5 | THEN | 行番号のほかラベルも使用可 | |
| 0xB6 | ELSE | 行番号のほかラベルも使用可 | |
| 0xB7 | CHR | ||
| 0xB8 | READ | ||
| 0xB9 | DATA | 定数だけでなく式も書ける READ時に評価される |
|
| 0xBA | RESTORE | 行番号のほかラベルも使用可 | |
| 0xBB | FACT | 階乗(n!) | 関数 |
| 0xBC | INP | 未実装 | |
| 0xBD | OUT | 未実装 | |
| 0xBE | TRON | 実行中の行番号を表示するようにする | |
| 0xBF | TROFF | 実行中の行番号を表示しないようにする | |
| 0xC0 | SPC | ||
| 0xC1 | PULL | スタックボトムから取り出してFIFOとして使えるようにするつもりだったが未実装 | |
| 0xC2 | LPRINT | 未実装 |
何かMicrosoft BASICを髣髴とさせるものが多いのは、私がN BASICのユーザだったからです。それとPC-9801シリーズを持っていた友人への対抗心もありました。
順序が一部変なところがあるのは省略形の優先順位のためです。例えば「PRINT」は「PRIN.」「PRI.」「PR.」「P.」と略すことが可能ですが、「P.」だと「PRINT」なのか「POKE」なのかわかりません。そのような場合はこのテーブルの順序で優先順位が決まるので、使用頻度の高いほうが優先されるように入れ替えています。
1文字の演算子などはリストに無い(中間コードがない)ものもあります。それらはそのままアスキーコードで格納されます。
まだ未確認の部分も多いのでわかり次第追記予定です。
参考文献・関連図書
ゴードン・ブランドリー「Tiny BASIC」,『DDJ 68000プログラミングツールブック』pp.67-98, 工学社.
コメントを追加