chakokuのブログ(rev4)

テック・コミック・ごくまれにチャリ

マイコンとかTinyBasicとかStarTrekゲームとかVTL

マイコン == マイコンピュータ 時代のノスタルジア*1。。電大版TinyBasicやStarTrekGameが懐かしい。。
ところで、インタープリタはどこまでコンパクトにできるのだろうか。ちょっと調べるとVTL(Very Tiny Language)というミニマムな言語があるのを知った。VTLが提供するのはプログラミングに必要な最低限の仕様のみであり、ミニマムな言語仕様をなんとか使いこなしてプログラミングするという、今の高水準言語全盛の時代に完全に逆行した変態なプログラミング言語なのである。この言語仕様にはシビレました(だったらいっそうのこと、マシン語使え??そうですけど。。RISCアセンブラでプログラミングしようとすると、パイプラインの先読みキャッシュのクリアとかウエイトとか必要のはずで。。人力で組んでもまともに走るのかどうか。。)。
遊びでVTLを実装してみたいと思う。StarTrekを動かせる程度の仕様にはしたい。それをできればお茶目な8ピンARMのNXP810上で走らせたいが。。乗るのかどうか。。(ちょっと実装してみたが簡単に膨張してしまい、アセンブラ等で超絶チューニングしない限り無理)

一番やっかいなのは数式のパージングと思うが、ここはRPN表記(逆ポーランド表記)で代用すれば力技で書き下して実装できそうな気がする。。あとは、、中間言語方式にするか、あるいは、毎回ソースを解釈(インタープリット)するか。。速度より省メモリを優先するなら、都度解釈の実装になるだろう。CPU性能は余っているので、リソース優先が妥当かと。

世の中、ディープラーニングだ、スマートスピーカだ、フィンテックだと言われてるけど、あまり興味が湧かない(文書生成等ができるリカレントネットワークは別ですが。。あれは学習アルゴリズムが難しすぎて)
何十年も前の話題を掘り下げるのは完全に後ろを向いてる気がするが。。こんなマイナーなネタが自分を惹き付けるのだからしょうがない。。プログラミング言語(オレオレ言語)の処理系を作るとソフトウエアに魂を入れてるような気になる。。

■式の評価
push/popで構文木を作る必要あり。RPNを作ってもいいとは思うが

■追記
VTLとは代入を中心としたプログラミングモデルと理解した。式の演算も代入なら、入出力も代入、条件分岐も行を表すシステム変数への代入。
式の演算は左からの結合のみで、+-*/の結合則はなし。*/が優先されることはなく、左から単純に計算されるようである。またエラー処理はなくて、どうにかこうにか処理を続けるらしい。この割り切りが素晴らしい。ある意味、プログラム言語の使いやすさよりも省コードこそが正義というポリシィなのだ。ポリシィが正しいかどうかは言語が使われる条件や使う人によって決まるので、ポリシィに納得する人がVTLを使えばいいのだと思う。
自分はどうか?と言われると、、、ミニマム言語で比べるなら、VTLよりはForthの方が好みだ。演算がRPNで表現されるスタックマシンモデルだから言語仕様も分かりやすい。

■追記
ミニマム言語を本気で作るなら、アセンブリ言語でTVLを組む根性でやるべきでは?とも思えた。根拠はないけど。。それぐらいのリソース条件が厳しい中で初めて存在価値が出てくる言語だから。。そんなにリソース厳しかったらクロスコンパイルしろよ?それはそうだ。。だったらなぜマイコンの上で動くインタープリタがある?? 開発環境が無い条件下でマイコンの動作を変えたいから。あるいは、、マイコン+αでお手軽にプログラミングがしたいから? TVLが活きた時代はクロス環境がなく、コンパイラもFreeではなかった(そもそもその時代(6800とか8080とか)C言語があったのかどうか、CはVAXやPDP上で動いていた??)。今TVLの価値とは?? うーん。。手作りの楽しさ??Cコンパイラに頼ってTVLを作って、それに意味ある??

■追記
最初からARMのマシン語でVTLを実装するのは敷居が高すぎるので、、Pythonでサンプル実装して、それをCで焼きなおしてLPC810に入れてみて、次にアセンブラに置き換える。。こんな感じか。しかし、、道は長く途中で絶対に飽きる気がする。。でももし最後まで行けたら、素のARMコアと周辺IOを触れるので結構勉強になるかとは思う。というわけで、、省コスト・省コード(インタプリタ側)こそ正義!のポリシィでやっつけ仕様でVTLをPythonで組んでみよう。
というわけで、、Pythonでミニマム&&場当たり実装版(VTL2のサンプルがエラーなく動くレベル)を作ってLPC810に移植してみることに(VTL–2 for the Altair 680記載のサンプルコード)。課題は、(作る速度VS飽きる速度)でどちらが早いか

■ご参考URL
VTL(Very Tiny Language)の作成
http://middleriver.chagasi.com/electronics/vtl.html
VTL2言語仕様書
http://www.altair680kit.com/manuals/Altair_680-VTL-2%20Manual-05-Beta_1-Searchable.pdf

http://ir.lib.u-ryukyu.ac.jp/bitstream/20.500.12000/7729/1/No63p1.pdf

https://usermanual.wiki/Document/MITSAltair680VeryTinyLanguageVTL2Manual.3512030835/view
https://www3.hp-ez.com/hp/bequest333/page56

https://www.jstage.jst.go.jp/article/johokanri/25/4/25_319/_pdf
https://en.wikipedia.org/wiki/History_of_Star_Trek_games
https://web.archive.org/web/20150303015501/http://www.dunnington.u-net.com:80/public/startrek/
https://ichigojam.github.io/asm15/armasm.html
GAMEという言語
http://www.mztn.org/game86/

電大版BasicとかStarTrekゲームとか。。
安田寿明 (1977年9月). マイ・コンピュータをつくる―組み立てのテクニック. 講談社. ISBN 9784061179288.
安田寿明 (1978年4月). マイコンピュータをつかう―周辺機器と活用の実際. 講談社. ISBN 9784061179479.

http://d.hatena.ne.jp/mikkabo/20150531/1433026306
http://www.eas.uccs.edu/~mwickert/ece5655/lecture_notes/ARM/ece5655_chap3.pdf

http://www.csci.csusb.edu/dick/samples/c.syntax.html#Syntax of The C Programming Language
https://cs.wmich.edu/~gupta/teaching/cs4850/sumII06/The%20syntax%20of%20C%20in%20Backus-Naur%20form.htm

豊四季TinyBasic公開サイト
https://vintagechips.wordpress.com/2015/12/06/%E8%B1%8A%E5%9B%9B%E5%AD%A3%E3%82%BF%E3%82%A4%E3%83%8B%E3%83%BCbasic%E7%A2%BA%E5%AE%9A%E7%89%88/
豊四季って理科大??

http://d.hatena.ne.jp/gust_notch/20110626/p1
StarTrekソース解説

■VTL版StarTrek
https://ameblo.jp/siropyon/entry-11917965564.html
VTL版StarTrekをリリースされた方がおられて、上記記事からソースをDLできます。ただ、、Very Tiny Language (VTL) for MSX とのことで、素のVTLよりも結構拡張された言語仕様のように思えます。

■追記
ネットで探すとVTLインタプリタがあちこちで入手できるようですが、自分で作ってみたいので、俺VTLを実装して、その上でStarTrekを走らせるのが当面の目標。。

VTL2 Source
https://github.com/Klaus2m5/VTL02

http://middleriver.chagasi.com/electronics/vtl.html

*1:歳をとると昔の事が懐かしく居心地がいい。。そんなことでいいのか?