/VTL4004

VTL Interpreter for 4004 Evaluation Board

Primary LanguageAssemblyMIT LicenseMIT

VTL4004

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 の基板)用です.

主な仕様(ver2.0)

項目 内容 備考
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

(参考) ver1.0の主な仕様(ver2.0との差分)

項目 内容 備考
配列 @(e) 未実装
GOSUB !=e 1段のみ
RETURN #=!
二項算術演算子 +-*/ %(剰余)は未実装
二項論理演算子 ^ 未実装
比較演算子 =<> #(not equal)は無し
システム変数(return address) !
システム変数(行番号) #
システム変数(乱数) ' 未実装

重要な未実装な機能

  • 行の編集(挿入,削除等)
    • 最初から行番号昇順のプログラムを入力することを前提にしています.

実装しようと思ったけどペンディング

  • 乗算の上位16bit

実験用ボードの仕様

rev.1.0

  • 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にマッピングしてアクセス.)
  • 通信ポート: 9600bps Software Serial UART (TTL level)

rev.2.1

  • Program Memory
    • RAM: HM624256(256k x 4bit SRAM)x 2個
      • 物理メモリ F00H〜FFDHの254byte x 256バンク (上記を論理メモリ 0000H〜FDFFHにマッピングしてアクセス.)

動画

Youtubeで関連動画を公開しています.

ブログ

関連する情報が書いてあるかも.

参考にした文献,サイト

VTL関連

4004関連開発事例

データシート

開発環境

更新履歴

  • 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チェックの強化('='のチェック)とバグ修正