2019-03-28 23:49 — asano
カテゴリー:
先日ソースコードを発見した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, 工学社.
コメントを追加