いまさらベーシックマスターの開発環境を作ってみる(5) NAKAMOZU Tiny BASICを移植してみる(1)

2024/05/31BASICMASTER, 昔のパソコン

肩慣らしに、NAKAMOZU Tiny BASICを移植してみる。 NAKAMOZU Tiny BASIC (以下NTB)は、電大版Tiny BASICを参考にして作られた高速・コンパクトな6800用BASICだ。
ASCII誌1979年4月号〜1979年7月号まで作者による連載があり、その後もNTBで作成されたソフトが続々と掲載された。それらを横目で見ながら羨ましいと思ったものだ。

掲載記事・ソースコードは作者のサイトで公開されている。

SBC6800への移植を行われた方がソースも載せているので、こちらを元に移植を行うことにした。さすがにOCRから入れるのはつらいのよ。



ゼロページが足りない

MC6800は 0ページ(0000-00FF)にアクセスするときは、ダイレクトモードアドレッシングが使えて、通常よりも1バイト短い命令が使える。速度もその分だけ速い。

NTBもダイレクトモードを使いまくっていて、0ページのほとんどが使われている。入力バッファすら0ページだ。
(作者のページにペースページワークエリアの表がある)

当時はマシンのメモリが少なく、NTBが開発されたH68/TRに至っては最大3KBだ。いまどきのCPUのレジスタ並だ。なので、0ページを積極的に使わないとプログラムがメモリに収まらないので、これは仕方がない。

※ 最近のIntel CPUのAVX-512では512bit長のレジスタが32個あり、これだけで2KBもある。

BASIC MASTERは、マニュアルの記述によると、モニタが00-71番地、BASICが$72-$FFと$400-$9FFを使うとある。しかし、モニタのMUSIC処理(JSR $F00Cで呼べる)は、$C5-$D9あたりも使っているようだ。

また割り込み時やモニタ入力時の一時的なスタックとして$FFを設定している(LDS #$00FF)ので、このあたりも使いにくい。結局、MUSIC無しで$72-$F?(126バイト+α)、MUSICありだと$72-$C4,$D9-$F? (83バイト、23バイト+α)しか使えない。

NTBが使っている0ページのうち、入力バッファと2つのスタックは他のページの方が良い。ただのデータに貴重な0ページを使うのはもったいない。

上記スタック等を省くと、残りのワークは$78(120)バイトほどである。MUSIC無しなら押し込められそうであるが、MUSIC有りだとギリギリである。

変数用に連続した領域が必要

ペースページワークエリアの表を見ると変数(A-Z,配列変数%0-%9,特殊変数 [ \ ] が場所を喰っている。

変数A-Zは、どのみちインデックスアドレッシングしかしないので、0ページにある必要は(たぶん)無い。変数のアドレス計算はサブルーチンVARが行っていて、下記のコードになっている。

例えば、変数A($41)なら、$3FでANDして$01、それを2倍するので($2,$3)がAの使うアドレスである。上記の表を見てもそうなってる。特殊変数 [ \ ] も同様だ。

[code lang="shell"]
    AND A #$3F ; 変数ADRS
    ASL A
    CLR B
    INX
    RTS
[/code]


特殊変数をどうするかは悩ましい。とりあえず0ページに残したが、VARの処理が複雑になってしまった。オリジナルのようにA-Zの後にした方が良いかもしれない(要検討)。

まだバグバグだが、ASCII誌に載っていた素数を求めるプログラムは動いた。先はまだ長い。

続く