VTL Interpreter for Intel 4004 Evaluation Board
This document is written mostly in Japanese. If necessary, please use a translation service such as DeepL (I recommend this) or Google.
自作の4004実験用ボードと,その上で動作するVTLインタプリタです. ソースコードのver1.0はhardware rev1.0基板(ブレッドボード)用で,もうメンテナンス終了です. ver2.0はhardware rev2.1( https://github.com/ryomuk/emu8080on4004 の基板)用です.
| 項目 | 内容 | 備考 |
|---|---|---|
| CPU | Intel 4004 | |
| サイズ | 約3.5KB | |
| 行番号 | 1〜32767 | |
| コメント | ;=0 STR | 偽の条件文で行末までスキップするのを利用 |
| 単純変数 | A-Z | a-zも書けるが大文字小文字を区別しない |
| 単純変数ビット数 | 16 | |
| 単純変数範囲 | -32768〜32767 | |
| 16進定数 | 0数値 | 0で始まる数値.例: 0ABC, 02000 |
| 配列 | @(e) | |
| 数値入力 | A=? | 入力文字列を評価して代入するので変数や数式も入力できる |
| 数値出力 | ?=e | |
| 数値出力16進2桁 | ?$=e | |
| 数値出力16進4桁 | ??=e | |
| 文字入力 | A=$ | |
| 文字出力 | $=e | |
| 文字列出力 | ?="STR" | |
| 改行 | ?="" | |
| 改行の阻止 | ; | |
| GOTO | #=e | |
| 高速GOTO | >=e | プログラムポインタへの直接代入 |
| GOSUB | !=e | 多段OK |
| RETURN | ] | |
| STOP | #=-1 | |
| IF | ;= | |
| LIST | 0 | |
| 式の優先順位 | 無() | 式は左から順に評価される |
| 二項算術演算子 | +-*/% | 加減乗除,剰余 |
| 二項論理演算子 | ^ | 排他的論理和 |
| 単項演算子 | - | |
| 比較演算子 | =<># | >は>=の意味(オリジナルのVTLと同じ) |
| システム変数(剰余) | % | 直前の除算(例:X/Y)の剰余.剰余だけ欲しいときはX%Y |
| システム変数(乱数) | ' | 0〜32767, 代入でseed変更.例: 0〜9までの乱数は'%10 |
| システム変数 | # | 実行中の行の先頭を示すプログラムポインタ.A=#で保存しておいて>=Aとすることで,行番号サーチをせずに直接ジャンプする |
| 実行 | #=1 |
| 項目 | 内容 | 備考 |
|---|---|---|
| 配列 | @(e) | 未実装 |
| GOSUB | !=e | 1段のみ |
| RETURN | #=! | |
| 二項算術演算子 | +-*/ | %(剰余)は未実装 |
| 二項論理演算子 | ^ | 未実装 |
| 比較演算子 | =<> | #(not equal)は無し |
| システム変数(return address) | ! | |
| システム変数(行番号) | # | |
| システム変数(乱数) | ' | 未実装 |
- 行の編集(挿入,削除等)
- 最初から行番号昇順のプログラムを入力することを前提にしています.
- 乗算の上位16bit
- CPU: Intel 4004
- Clock: 740kHz
- DATA RAM: 4002-1 x 2 + 4002-2 x 2 (計320bit x 4)
- Program Memory
- ROM: AT28C64B (8k x 8bit EEPROM)
- 000H〜EFFHの3.75KB利用可能
- RAM: HM6268(4k x 4bit SRAM)x 2個
- 物理メモリ F00H〜FFDHの254byte x 16バンク (上記を論理メモリ 000H〜FDFHにマッピングしてアクセス.)
- ROM: AT28C64B (8k x 8bit EEPROM)
- 通信ポート: 9600bps Software Serial UART (TTL level)
- Program Memory
- RAM: HM624256(256k x 4bit SRAM)x 2個
- 物理メモリ F00H〜FFDHの254byte x 256バンク (上記を論理メモリ 0000H〜FDFFHにマッピングしてアクセス.)
- RAM: HM624256(256k x 4bit SRAM)x 2個
Youtubeで関連動画を公開しています.
関連する情報が書いてあるかも.
- MITS_Altair_680_Very_Tiny_Language_VTL-2_Manual.PDF
- 白石孝次「マイクロBASICインタプリタの製作」, 月刊ASCII, 1978年2月(エンサイクロペディアASCII vol.1収録)
- Jun's Homepage VTL系言語の歴史
- Intel 4004 50th Anniversary Project
- https://github.com/jim11662418/4004-SBC
- https://www.cpushack.com/mcs-4-test-boards-for-sale
- https://github.com/novi/4004MainBoard
- 2023/3/11: 初版公開
- 2023/3/12: 入力時にCRを無視してLFだけ受け付けていたのをCRorLFでENTERに変更
- 2024/3/10: ver2.0公開
- 2024/3/11: ver2.0修正(unsignedの比較を実装, -32768がprintできないバグを修正)
- 2024/3/13: ver2.0修正,乱数と配列を実装.
- 2024/3/14: src/ver2.0にサンプルプログラム"イスカンダルのトーフ屋ゲーム"を追加
- 2024/3/15: 多段サブルーチン実装,比較演算子'#'(not equal)追加,二項演算子'%'(剰余)追加,行番号変数'#'削除
- 2024/3/16: 実行中の行の先頭を示すシステム変数(#)と,INDEXの直接代入'>='を導入これにより高速ジャンプを実現.
- 2024/3/16: 0除算のエラー処理にバグがあったので修正.
- 2024/3/16: src/ver2.0にサンプルプログラム trek.vtl を追加
- 2024/3/17: 疑似乱数生成アルゴリズムを変更.二項演算子^(排他的論理和)追加.
- 2024/3/18: Syntax errorチェックの強化('='のチェック)とバグ修正

