Featured image of post V53 VMEシステムで遊ぶ #13 NASCOM BASICを動かす

V53 VMEシステムで遊ぶ #13 NASCOM BASICを動かす

前回は、VMEバスのRAMボードの解析を行いました。このVMEシステムで使える広大なメモリ空間でアプリケーションを動かしていきます。今回はNASCOM BASICを動かしてみました。

NASCOM BASICとは

8086 CPUで動作するBASICが無いか探してみたところ、8086版のNASCOM BASICを見つけました。

Nascom BASICはマイクロソフトが作成し、Grant Searleさんがサブセットに改編し、鈴木哲哉さんが移植されたコードを元に、奥江聡さんが8080/Z80から8086にコンバートされたものでした。当然V53でも動作するはずですが、SBCV20 V20/8088用のためROMベースになっています。

ソースコードをRAM版に書き換える

ソースコードを拝見し、以下の方針で私のVMEシステムでも動くようにしました。

  • アセンブラは慣れているnasmに変更
  • ROM化しているところをRAMだけで動作するようにメモリマップを見直す
  • 割り込みはまだ不安なので一旦ポーリングに変更

修正したソースは以下にコミットしています。

NASCOM BASICを起動する

まずWSL2のnasmでNASCOM BASICをビルドして、objcopyでhexファイルを作成します。

% nasm -f bin 8088basic.asm  -o 8088basic.bin -l 8088basic.lst
% objcopy -I binary -O ihex --change-addresses=0x0000 8088basic.bin 8088basic.hex

次にVMEシステムでRAMモニタを2000:0000にロードして実行後にNASCOM BASICのHEXファイルを8000:0000にロードして実行します。

**  V53 MONITOR v0.1 2026-01-12  **
> l
Load HEX...2000:0
.......................................................................
.......................................................................
.......
OK>
> g 2000 0000
Go!

**  V53 RAM MONITOR v0.9 2026-02-07  **
> l 8000
Load HEX...8000:0
.......................................................................
.......................................................................
.......................................................................
.......................................................................
.......................................................................
.......................................................................
.......................................................................
.......................................................................
.................................................................
OK>
> g 8000 0000
Go!

NASCOM BASICはモニタコンソールとは別のシリアルポートを入出力にしているので、J1に接続したターミナルがNASCOM BASIC専用となります。

INTEL8080 Based x86 BASIC Ver 4.7b
Copyright (C) 1978 by Microsoft
15993 Bytes free
Ok

無事起動することができました。

簡単なBASICのコマンドを入力してみましたが、一応動作しているようです。

list
Ok
new
Ok
a=10
Ok
print a
 10
Ok

マンデルブロ集合を表示する

NASCOM BASICが動作したところでいつものようにASCIIART.basをアップロードして実行してみました。

VME 拡張メモリでの実行結果

このときかかった時間は2分48秒でした。

思ったより遅かったのでもしやと思いローカルメモリのセグメントである4000:0000にロードして実行したところ、実行時間が43秒に短縮できました。

CPU ローカルメモリでの実行結果

まとめ

V53のWCU(Wait Control Unit)の設定でローカルRAMは0ウェイトで設定しているのですが、VMEバスのメモリは余裕をもって3ウェイトに設定しています。
VMEバスのRAMボードに搭載されているSRAMのアクセススピードは70nsですので、うまくいけば0ウェイトでも動くかもしれませんが、VMEバスを経由することによるボトルネックもありそうです。このプログラムをベンチマークとして使い、どこまでチューニングできるか今後試してみます。

Hugo で構築されています。
テーマ StackJimmy によって設計されています。