mieki256's diary



2022/10/14(金) [n年前の日記]

#1 [pc][windows][mz][z80] S-OSアプリをX1エミュレータで動かす

S-OS SWORD を X1エミュレータ上で動かして、S-OSアプリを実行する手順を把握したい。環境は Windows10 x64 21H2。

S-OSアプリのバイナリ(.obj)を、ヘッダ部分と本体バイナリに分離して、本体バイナリを .d88 イメージファイルに含めるところまでは昨日メモした。

_S-OSアプリをX1エミュレータで動かすための下準備

実際に操作してる様子は以下。

X1エミュレータを起動。 :

今回は、X1エミュレータとして X millennium 0.60a を利用させてもらった。IPL ROM やフォントROMが無くても動作するエミュレータらしい。ありがたや。

_X millennium

xmil060a.zip を入手して解凍。Xmillennium.exe を実行。

S-OS SWORDを入手してロード。 :

以下のページで公開されてる、「X1/C/D/Cs/Ck/F/G/Twin(高速版)」のD88イメージを入手する。

_THE SENTINEL

SWXCV110.zip を入手。解凍すると、中に SWXCV110.d88 が入ってる。コレを X1エミュレータのインストール場所にコピー。

X1エミュレータのメニュー → FDD-0 → Open、を選択。SWXCV110.d88 を開く。

X1エミュレータのメニュー → Emulate → IPL Reset。エミュレータのリセットがかかって、FDD-0 にセットした SWXCV110.d88 から S-OS SWORD が読み込まれて実行される。

S-OSアプリをロードして実行。 :

FDD-0 → Eject してから、FDD-0 → Open。昨日作成した GAME01.d88 を開く。

S-OSの画面上で、D と打つ。カレントドライブのフロッピーディスク(GAME01.d88)、の中に入ってるファイルの一覧が表示される。
#D
$4C Clusters Free
Bin  A:INVADER     .BIN:3000:430B:3000
INVADER.BIN というファイルだけが入ってることが分かる。その後に続く数値は、ロードアドレス、終了アドレス、実行アドレス、だろうか。

「L ファイル名」でロードができる。
#L INVADER.BIN
Loading INVADER     .BIN

実行アドレスが 0x3000 なので、「J アドレス」で、ロードしたバイナリを実行できる。
#J 3000

その他のコマンドは以下が参考になる。ありがたや。

_S-OS Sword Ver2.0 (J)(1986-02)(Oh!mz) [mz80K][type-in].txt

余談。INVADER.obj の遊び方。
  • 4キーと6キーで砲台の左右移動。
  • スペースキーで弾を撃つ。
  • ゲーム開始は、タイトル画面表示中にスペースキー押し。
  • 終了は、『ゲームプレイ中』に BREAKキー、らしい。Windows + X1エミュレータの場合、Shiftキーを押しながら Pauseキー、だろうか…?

FuzzyBASICを実行してみる。 :

S-OS上で動作する整数BASIC、FuzzyBASIC というアプリがあるらしい。動かしてみたい。

_THE SENTINEL

FUZZYBASIC.LZH を入手して解凍。FUZZYBASIC、FZ_DRG.BAS の2つのファイルが得られる。

ファイル名に .obj はついてないけど、どちらもヘッダ部分(ファイル先頭から18byte分)を含んでいるので、バイナリエディタの類で、ヘッダ部分と本体バイナリを、FUZZYBASIC.HED と FUZZYBASIC.BIN として分けて別ファイルにする。

L3 Disk Explorer を使って、FUZZYBASIC.BIN を d88イメージファイルに含める。
  1. ディスクを新規作成。「カテゴリー」は「シャープ X1 Hu-BASIC」を選択。「ディスク名」は「BASIC」にしてみた。
  2. 「BASIC」を右クリックして「BASIC用にフォーマット」。BASICの種類は「X1 Hu-BASIC (3インチ/5インチ2D)」を選択。
  3. 「インポート」をクリックして、FUZZYBASIC.BIN を選択。
  4. 「ディスクイメージ内のファイル名」は「FUZZYBASIC.BIN」にしてみた。ファイル種類は「Bin」を選択。
  5. ロードアドレスと実行アドレスは「3000」を入力。
  6. BASIC.d88 として、ディスクイメージを保存。

X1エミュレータのインストール場所に、BASIC.d88 をコピーして、 X1エミュレータを起動。S-OS SWORD を FDD-0 にセットしてロード。

FDD-0 に BASIC.d88 をセットし直して、「D」「L FUZZEYBASIC.BIN」「J 3000」で FuzzyBASIC を実行。
#D
$4A Clusters Free
Bin  A:FUZZYBASIC   .BIN:3000:69FF:3000

#L FUZZYBASIC.BIN
Loading FUZZYBASIC   .BIN

#J 3000

FuzzyBASICが起動すると、以下のメッセージが表示される。
* Fuzzy BASIC Interpreter ver 1.0 *
38397 bytes free
ready

フロッピー内のファイル一覧は…。思い付く単語を手当たり次第に打ってみたら、どうやら「files」で表示できるらしい。
files
$4A Clusters Free
Bin  A:FUZZYBASIC   .BIN:3000:69FF:3000
ready

Fuzzy BASIC の終了は「bye」でいい模様。S-OS SWORD に戻ってくる。

もう一度「J 3000」と打つと、再度 FuzzyBASIC が起動する。

簡単なプログラムを打ってみる。
10 FOR I=0 TO 5
20 PRINT I
30 PRINT "  Hello World!!"
40 PRINT
50 NEXT I

list で、ソースリストが表示される。
list
   10 FOR I=0 TO 5
   20 PRINT I
   30 PRINT "  Hello World!!"
   40 PRINT
   50 NEXT I
ready

run で実行。
run
0  Hello World!!
1  Hello World!!
2  Hello World!!
3  Hello World!!
4  Hello World!!
5  Hello World!!
ready

打ち込んだソースをフロッピーに保存する。saveコマンドを使う。注意点として、ファイル名は「"〜"」で囲んでやらないといけない。もし「"〜"」で囲まないと、頓珍漢なファイル名で保存されてしまう…。
save "TEST01.BAS"
Writing TEST01       .BAS
ready

files でファイル一覧を出して、保存できたのか確認する。
files
$49 Clusters Free
Bin  A:FUZZYBASIC   .BIN:3000:69FF:3000
Bas  A:TEST01       .BAS:6A00:6A33:30C1
ready
バイナリ(Bin)ではなく、BASICファイル(Bas)として保存されてることが分かる。また、ロードアドレスは 0x6A00、実行アドレスが 0x30C1 になっている。

「bye」「J 3000」で、FuzzyBASIC を再起動してから、先ほど保存した "TEST01.BAS" を、load "TEST01.BAS" でロードしてみる。
bye

#J 3000
load "TEST01.BAS"
Loading TEST01     .BAS
ready

list と打てば、ロードし直したことが確認できる。
list
   10 FOR I=0 TO 5
   20 PRINT I
   30 PRINT "  Hello World!!"
   40 PRINT
   50 NEXT I
ready

問題点。 :

FUZZYBASIC.LZH には、FZ_DRG.BAS という、おそらくはサンプルプログラムも同梱されているように見えたのだけど。これを BASIC.d88 にインクルードして、ロードと実行をしてみたら、FuzzyBASIC が落ちて S-OS に戻ってしまった…。

一応、そのあたりの作業手順をメモ。
  • FZ_DRG.BAS にもヘッダ部分がついているので、ヘッダ部分と本体バイナリに分割して、本体バイナリだけを BASIC.d88 にインクルードする。
  • 一旦、ファイル種類を「Bin」にしてインクルードしないと、ロードアドレス(0x6A00)と実行アドレス(0x30C1)が指定できない。
  • インクルードしてから、ファイルを右クリック → プロパティ → ファイル種類を「Bas」に切り替える。

ちなみに、list と打ってソースがずらずらと表示されていく途中で ESCキーを叩くと、リスト表示をそこで止めることができる模様。

FZ_DRG.BAS の内容は以下のように見える。おそらく、LINE文を使って何かを描画するプログラムなのではあるまいか…。

fz_drg_bas_ss01.png

fz_drg_bas_ss02.png


FuzzyBASICが落ちてしまう原因は…何だろう…?
  • X1実機の IPL ROM が無いと動かないプログラムなのだろうか?
  • オリジナルの S-OS SWORD のバイナリが無いと動かないプログラムなのか?
  • LINE文を使うには、何か他にも必要になるのだろうか? 例えばグラフィックパッケージの MAGIC とか…。
  • FuzzyBASIC の LINE文は、実はX1には非対応だったりして…? これが MZ-2000 ならすんなり動いたりする?
  • X1エミュレータの再現度の問題だろうか。しかし、X millennium ではなくて、eX1 を使っても、同様に落ちてしまう…。

ちなみに、FuzzyBASICが落ちて、S-OS に戻ってきた状態で、「J 3000」と打ってみたけど、FuzzyBASIC は再起動してくれなかった。「Can't do it.」と表示されて、コマンド入力待ちになってしまう。メモリ上の FuzzyBASIC が破壊された状態になるのかな…?

2022/10/15追記。 :

FuzzyBASIC の関連情報についてググっていたらいくつか分かってきたので、 _2022/10/15の日記 でメモ。

以上、1 日分です。

過去ログ表示

Prev - 2022/10 - Next
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31

カテゴリで表示

検索機能は Namazu for hns で提供されています。(詳細指定/ヘルプ


注意: 現在使用の日記自動生成システムは Version 2.19.6 です。
公開されている日記自動生成システムは Version 2.19.5 です。

Powered by hns-2.19.6, HyperNikkiSystem Project