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エミュレータで動かすための下準備
実際に操作してる様子は以下。
S-OSアプリのバイナリ(.obj)を、ヘッダ部分と本体バイナリに分離して、本体バイナリを .d88 イメージファイルに含めるところまでは昨日メモした。
_S-OSアプリをX1エミュレータで動かすための下準備
実際に操作してる様子は以下。
◎ X1エミュレータを起動。 :
今回は、X1エミュレータとして X millennium 0.60a を利用させてもらった。IPL ROM やフォントROMが無くても動作するエミュレータらしい。ありがたや。
_X millennium
xmil060a.zip を入手して解凍。Xmillennium.exe を実行。
_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 が読み込まれて実行される。
_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)、の中に入ってるファイルの一覧が表示される。
「L ファイル名」でロードができる。
実行アドレスが 0x3000 なので、「J アドレス」で、ロードしたバイナリを実行できる。
その他のコマンドは以下が参考になる。ありがたや。
_S-OS Sword Ver2.0 (J)(1986-02)(Oh!mz) [mz80K][type-in].txt
余談。INVADER.obj の遊び方。
S-OSの画面上で、D と打つ。カレントドライブのフロッピーディスク(GAME01.d88)、の中に入ってるファイルの一覧が表示される。
#D $4C Clusters Free Bin A:INVADER .BIN:3000:430B:3000INVADER.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イメージファイルに含める。
X1エミュレータのインストール場所に、BASIC.d88 をコピーして、 X1エミュレータを起動。S-OS SWORD を FDD-0 にセットしてロード。
FDD-0 に BASIC.d88 をセットし直して、「D」「L FUZZEYBASIC.BIN」「J 3000」で FuzzyBASIC を実行。
FuzzyBASICが起動すると、以下のメッセージが表示される。
フロッピー内のファイル一覧は…。思い付く単語を手当たり次第に打ってみたら、どうやら「files」で表示できるらしい。
Fuzzy BASIC の終了は「bye」でいい模様。S-OS SWORD に戻ってくる。
もう一度「J 3000」と打つと、再度 FuzzyBASIC が起動する。
簡単なプログラムを打ってみる。
list で、ソースリストが表示される。
run で実行。
打ち込んだソースをフロッピーに保存する。saveコマンドを使う。注意点として、ファイル名は「"〜"」で囲んでやらないといけない。もし「"〜"」で囲まないと、頓珍漢なファイル名で保存されてしまう…。
files でファイル一覧を出して、保存できたのか確認する。
「bye」「J 3000」で、FuzzyBASIC を再起動してから、先ほど保存した "TEST01.BAS" を、load "TEST01.BAS" でロードしてみる。
list と打てば、ロードし直したことが確認できる。
_THE SENTINEL
FUZZYBASIC.LZH を入手して解凍。FUZZYBASIC、FZ_DRG.BAS の2つのファイルが得られる。
ファイル名に .obj はついてないけど、どちらもヘッダ部分(ファイル先頭から18byte分)を含んでいるので、バイナリエディタの類で、ヘッダ部分と本体バイナリを、FUZZYBASIC.HED と FUZZYBASIC.BIN として分けて別ファイルにする。
L3 Disk Explorer を使って、FUZZYBASIC.BIN を d88イメージファイルに含める。
- ディスクを新規作成。「カテゴリー」は「シャープ X1 Hu-BASIC」を選択。「ディスク名」は「BASIC」にしてみた。
- 「BASIC」を右クリックして「BASIC用にフォーマット」。BASICの種類は「X1 Hu-BASIC (3インチ/5インチ2D)」を選択。
- 「インポート」をクリックして、FUZZYBASIC.BIN を選択。
- 「ディスクイメージ内のファイル名」は「FUZZYBASIC.BIN」にしてみた。ファイル種類は「Bin」を選択。
- ロードアドレスと実行アドレスは「3000」を入力。
- 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 に戻ってしまった…。
一応、そのあたりの作業手順をメモ。
ちなみに、list と打ってソースがずらずらと表示されていく途中で ESCキーを叩くと、リスト表示をそこで止めることができる模様。
FZ_DRG.BAS の内容は以下のように見える。おそらく、LINE文を使って何かを描画するプログラムなのではあるまいか…。
FuzzyBASICが落ちてしまう原因は…何だろう…?
ちなみに、FuzzyBASICが落ちて、S-OS に戻ってきた状態で、「J 3000」と打ってみたけど、FuzzyBASIC は再起動してくれなかった。「Can't do it.」と表示されて、コマンド入力待ちになってしまう。メモリ上の FuzzyBASIC が破壊された状態になるのかな…?
一応、そのあたりの作業手順をメモ。
- FZ_DRG.BAS にもヘッダ部分がついているので、ヘッダ部分と本体バイナリに分割して、本体バイナリだけを BASIC.d88 にインクルードする。
- 一旦、ファイル種類を「Bin」にしてインクルードしないと、ロードアドレス(0x6A00)と実行アドレス(0x30C1)が指定できない。
- インクルードしてから、ファイルを右クリック → プロパティ → ファイル種類を「Bas」に切り替える。
ちなみに、list と打ってソースがずらずらと表示されていく途中で ESCキーを叩くと、リスト表示をそこで止めることができる模様。
FZ_DRG.BAS の内容は以下のように見える。おそらく、LINE文を使って何かを描画するプログラムなのではあるまいか…。
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の日記
でメモ。
[ ツッコむ ]
以上です。