Skip to content

Instantly share code, notes, and snippets.

@ao-kenji
Last active September 13, 2025 03:34
Show Gist options
  • Save ao-kenji/564a5d7d5b62c3f954b2b5128b4b2309 to your computer and use it in GitHub Desktop.
Save ao-kenji/564a5d7d5b62c3f954b2b5128b4b2309 to your computer and use it in GitHub Desktop.
Grant's BASIC for LUNA XP: スタートガイド

Grant’s BASIC for LUNA XP:スタートガイド

Version 0.2 (NBUG例会 2025年9月版)

これは何?

Grant Searle さんによるZ80用のBASICを、古のオムロン社製ワークステーションLUNAに搭載されているI/Oプロセッサ HD647180上で動作させる試みです。(HD647180はXPと呼ばれています)

必要なもの

ファイル名 サイズ 内容
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% 

Grant’s BASICの実行

起動

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 も自動的に終了します。)

BASICプログラムのセーブ/ロード

オリジナルWebページにも書いてある通り、Grant’s BASICにはBASICプログラムをセーブ/ロードするコマンドが実装されていません。元々ワンボードマイコン上で動かすことを想定しているので、シリアル接続に対応した端末エミュレータを接続して、端末エミュレータのキャプチャ機能やファイル内容送信機能で対応するという方針のようです。

とはいえnonoや実機のグラフィックコンソール画面の場合、端末エミュレータは使わないので、何とかしたいなあと思っています。

終了

Okに対してQUITコマンドを実行すると、XP上のBASICは終了(Z80的にはhalt)し、xpfe も終了します。

Ok
quit
luna88k# 

TODO

  • LUNA-88K2実機でキー入力が効かない現象の解消(nonoでは動作しているのですが…) → 解決しました(Version 0.2)
  • BASICへ終了コマンドを追加し、xpfe もあわせて終了できるようにする → QUITコマンドで終了するようになりました(Version 0.2)
  • BASICのプログラムセーブ/ロードコマンドの実装

参考

作者

青山 健治 / Kenji Aoyama

X(旧Twitter) @ao_kenji

Mastodon @[email protected]

GitHub https://github.com/ao-kenji/

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment