長らく使ってきた macOS Mojave から Catalina へ移行。32bit開発のためにと残して来たがRISC-Vの開発環境が非対応となり決心。 記念に動かなくなってしまう 32bit版bootBASIC を、64bit化。


「bootBASIC_64bit for MacOS」(src on GitHub)
nasmでアセンブル可能。 コンパクトな実装でプログラミング言語づくりの入門にぴったり。 WindowsやLinuxへの移植もチャレンジしたいが、やってみたい方、fork/プルリク、大歓迎! 512byteのブートセクターに収まる「bootBASIC」を開発した、nanochessさん、ありがとう!(Thank you! nanochess-san.)

10 A=1 10 A=1 20 A=A*10 30 PRINT A 40 GOTO 20 >RUN 10 100 1000 10000 100000 1000000 10000000 100000000 1000000000 10000000000 100000000000 1000000000000 10000000000000 100000000000000 1000000000000000 10000000000000000 100000000000000000 1000000000000000000 -8446744073709551616

16bitのAXレジスタは、32bitでEAX、64bitでRAXへと段階的に進化を遂げたx86マシン語。今回変数も64bit化。100京まで表示!

; Compare statement (rsi, rdi, length:rcx) ; case sensitive check (original) ; rep cmpsb ; jne statement_not_match ; Equal? No, jump ; case insensitive check statement_check: mov al, [rdi] and al, 0xdf mov ah, [rsi] and ah, 0xdf cmp al, ah jne statement_not_match inc rdi inc rsi dec rcx jnz statement_check statement_check_end:

やっぱり、BASICなので、大文字表記にも対応したい。rep cmpsb という、ループ付きマシン語命令を大文字小文字を区別しないループに変更。

慣れない言語であってもネット時代、探せばすぐに解決する良い時代。x86マシン語に関して「Jun's Homepage」が参考になりました。 32bitのEAXで代入するとRAXの上位32bitは0クリアされるとか、MULやDIVが暗黙的にRDXが使われるとか、ハマりやすいポイントが分かります。

このサイト作者によるコンパクトなプログラミング言語「Return of Very Tiny Language」を発見!

IchigoJam BASICの元になったTinyBASICより、更にコンパクトなプログラミング言語VTLの64bit版!ファイルや画像も扱えるように大幅パワーアップ!(VTL系言語の歴史

Linux版をmacOSで動くように少しだけ書き換えて、コンソールでシンプルのVTLを体験することができました。
taisukef/rvtl-amd64: RVTL : Tiny BASIC in x86_64 assembly language for macOS (開発途中)

移植で困ったのは、アセンブル時にでるエラー「error: 32-bit absolute addressing is not supported in 64-bit mode」。アドレスに @GOTPCREL(%rip) をつけて回避とありましたが、Intel表記では使えず、ひとまず使ってなさそうなr15レジスタを介する形に修正。

macOS Catalina 化もトラブルなく終了。Windows NT 3.51 (1996年)から続いた32bit開発環境に分かれを告げました(クロス開発は除く)。 当時の開発環境は、Intel Pentium 90MHz、RAM16MB、HDD1GB、VC++。何より技術資料へのアクセス手段が紙頼み。良い時代になりました。

Tweet
クリエイティブ・コモンズ・ライセンス
この作品は「Creative Commons — CC BY 4.0」の下に提供されています。
CC BY / @taisukef / アイコン画像 / プロフィール画像 / RSS