Version 0.2 (NBUG例会 2025年9月版)
Grant Searle さんによるZ80用のBASICを、古のオムロン社製ワークステーションLUNAに搭載されているI/Oプロセッサ HD647180上で動作させる試みです。(HD647180はXPと呼ばれています)
- nono または実機で動く OpenBSD/luna88k または NetBSD/luna68k (以下、LUNAと書きます)
- 以下のファイルを https://www.nk-home.net/~aoyama/lunaxp/xp-basic/ および https://www.nk-home.net/~aoyama/lunaxp/xpfe/ に置いておきますので、LUNAに持っていってください。
ファイル名 | サイズ | 内容 |
---|---|---|
xp-basic.bin | 7.8KB | Grant’s BASICのイメージ |
xpfe-20250913.tar.gz | 6.9KB | サポートプログラムのソース |
以下、OpenBSD/luna88k on nono での実行例を示します。
LUNA上に持っていった xpfe-YYYYMMDD.tar.gz を展開し、xpfe ディレクトリの中で makeします。実行バイナリは xpfe です。
luna88k% tar zxf xpfe-20250913.tar.gz
luna88k% cd xpfe
luna88k% make
cc -O2 -pipe -MD -MP -c xpfe.c
cc -O2 -pipe -MD -MP -c xpdisk.c
cc -O2 -pipe -MD -MP -c xpload.c
cc -O2 -pipe -MD -MP -c xprtc.c
cc -O2 -pipe -MD -MP -c xptty.c
cc -O2 -pipe -MD -MP -c config.c
cc -o xpfe xpfe.o xpdisk.o xpload.o xprtc.o xptty.o config.o
luna88k%
LUNAでXPとデータ授受を行う /dev/xp を使うにはroot権限が必要なので、コンパイルしたサポートプログラム xpfe はrootで実行します。
xpfe の引数は今回は1つで、第1引数がGrant’s BASICのイメージですが、LUNA本体とデータ授受するアドレスがFUZIXとは異なるので、その設定を行う設定ファイルを指定する必要があります。具体的にはxpfe のソースに同梱されている設定ファイル example-xpfe.conf をオプション -c で指定したうえで、第1引数を xp-basic.bin としてください。
起動したら Cold or warm start (C or W)? と聞かれるので、C を入力します(小文字でもOK、リターンキーは不要)。その後 Memory top? と聞かれますが、リターンキーを入力して使用可能メモリすべてを使用します。
Okが表示されたら起動完了です。懐かしいBASICの世界をお楽しみください。(私はすっかり文法を忘れてしまいました…)
ちなみに、@DragonBallEZ さんのASCIIARTのソース(MSBASIC (実数型))はそのまま動きます。https://kyo-ta04.github.io/memo/
BASIC起動後、小文字部分が入力した内容です。
luna88k# ./xpfe -c ./example-xpfe.conf ../xp-basic.bin
XP binary loaded, type '^\' to detach.
Z80 SBC By Grant Searle
Cold or warm start (C or W)? C <---- ここではcを入力します(リターンキー不要)
Memory top? [Return] <---- ここではリターンキーを入力します
Z80 BASIC Ver 4.7b
Copyright (C) 1978 by Microsoft
56958 Bytes free
Ok
list
Ok
10 for a=0 to 6.2 step 0.2
20 print tab(40 + sin(a) * 20);"*"
30 next a
list
10 FOR A=0 TO 6.2 STEP 0.2
20 PRINT TAB(40 + SIN(A) * 20);"*"
30 NEXT A
Ok
run
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
Ok
実装されているコマンドは以下の通りです。上記の実行例のように実数も使えます。
SGN,INT,ABS,USR,FRE,INP,POS,SQR,RND,LOG,EXP,COS,SIN,TAN,ATN,PEEK,DEEK,LEN,STR$,VAL,ASC,CHR$,LEFT$,RIGHT$,MID$,END,FOR,NEXT,DATA,INPUT,DIM,READ,LET,GOTO,RUN,IF,RESTORE,GOSUB,RETURN,REM,STOP,OUT,ON,NULL,WAIT,DEF,POKE,DOKE,LINES,CLS,WIDTH,QUIT,PRINT,CONT,LIST,CLEAR,NEW,TAB,TO,FN,SPC,THEN,NOT,STEP
+,-,*,/,^,AND,OR,>,<,=
HEX$,BIN$
&Hnn,&Bnn
オリジナルWebページの内容から以下を変更しています。
- 削除: MONITOR コマンド
- 追加: QUIT コマンド ... BASICを終了します。(サポートプログラム xpfe も自動的に終了します。)
オリジナルWebページにも書いてある通り、Grant’s BASICにはBASICプログラムをセーブ/ロードするコマンドが実装されていません。元々ワンボードマイコン上で動かすことを想定しているので、シリアル接続に対応した端末エミュレータを接続して、端末エミュレータのキャプチャ機能やファイル内容送信機能で対応するという方針のようです。
とはいえnonoや実機のグラフィックコンソール画面の場合、端末エミュレータは使わないので、何とかしたいなあと思っています。
Okに対してQUITコマンドを実行すると、XP上のBASICは終了(Z80的にはhalt)し、xpfe も終了します。
Ok
quit
luna88k#
LUNA-88K2実機でキー入力が効かない現象の解消(nonoでは動作しているのですが…)→ 解決しました(Version 0.2)BASICへ終了コマンドを追加し、xpfe もあわせて終了できるようにする→ QUITコマンドで終了するようになりました(Version 0.2)- BASICのプログラムセーブ/ロードコマンドの実装
- Grant Searle さんの “Grant's 7-chip Z80 computer” ページ
http://searle.x10host.com/z80/SimpleZ80.html
- BASIC情報 http://searle.x10host.com/z80/SimpleZ80.html#RomBASIC
- 元となったNascom BASICのマニュアル http://www.nascomhomepage.com/pdf/Basic.pdf
- Grant’s BASIC for LUNA XPソース
https://github.com/ao-kenji/xp-basic/
- lunaxp.asm: LUNA XP用の初期化とキー入出力ルーチン
- basic.asm: MONITOR コマンドを QUIT コマンドに変更
- xpfe - OMRON LUNA's XP (HD647180X I/O processor) front-end https://github.com/ao-kenji/xpfe/
青山 健治 / Kenji Aoyama
X(旧Twitter) @ao_kenji
Mastodon @[email protected]