いまさらベーシックマスターの開発環境を作ってみる(5) NAKAMOZU Tiny BASICを移植してみる(1)
肩慣らしに、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誌に載っていた素数を求めるプログラムは動いた。先はまだ長い。
続く
ディスカッション
コメント一覧
まだ、コメントがありません