見出し画像

X1エミュレータにS-OSアプリを導入

目的

 この記事は前回の記事X1エミュレータ環境を整えるで作成した環境上に S-OS アプリケーションを導入し、動作させる方法について説明します。
上記記事で説明した操作方法をすでに知っている前提で説明しますので、まだ見てない方は先に上記記事へアクセスし、実行しておいてください。
導入元は今のところは Oh!石 さんのサイト S-OSのページ ~THE SENTINEL~限定としておきます。Oh!X からダンプ入力するとかはまたの機会にでも(まだ方法を自分の中で確立してないので・・・)

先に必要なソフト

 導入する S-OS アプリケーションにはヘッダ情報が含まれていて、それを除去する必要がありますので、バイナリエディタと、Windows からエミュレータのディスクイメージにインポートするために L3 ディスクエクスプローラが必要になります。
事前にこれらのソフトをダウンロード・インストールして使える状態にしておいてください。

L3ディスクエクスプローラの項目までスクロールしたらダウンロードリンクがあります

事前準備

ダウンロード用フォルダ作成

前回構築した C:\Tools\X1 フォルダには色々なフォルダが雑多に残ってます
これらのフォルダを別フォルダに退避してしまいましょう
ついでにダウンロードしたファイル置き場にしてしまいます
archives フォルダを作成してください
archives フォルダの中はごちゃごちゃしてきたら各自で整理お願いします(まるなげ)

前回の解凍したフォルダを退避

bin と roms 以外の全てのフォルダを選択します
Ctrl キーを押しながらフォルダをクリックすると複数のフォルダを選択できます
選択できたらマウスでつかんで、archives フォルダに放り込みましょう
移動完了するとこのようにスッキリした状態になります

ゲーム用ディスクを作りましょう

 前回 S-OS の起動ディスクを作りましたが、起動ディスクを複製してゲーム専用ディスクを作ってしまいましょう。用途別にディスクを分けて整理すると後々便利かもしれません。

C:\Tools\X1\roms フォルダの SWXCV110.d88 を選択し、Ctrl+CCtrl+V します
上記操作は同一ファイルのコピペなので複製される事になります
この SWXCV110 - コピー.d88 を名前変更しましょう
SWXCV110 - コピー.d88 をダブルクリックにならないようにゆっくり2回クリックします
ファイル名変更状態になりますので、ここでは S-OS_GAME.d88 としておきます
これでいよいよ準備完了です!

THE SENTINEL へアクセスしましょう

 Oh!石さんのサイトの THE SENTINELへアクセスします。

ここに各種アプリケーションがアップロードされています
まずは「アプリケーションの数々・Oh!MZ/X掲載分」の項目までスクロールしてください
注意事項が書かれています
各種ファイルには先頭18バイトにヘッダがついています
実行時にはこのヘッダは不要なので削除が必要になります(方法は後述します)
今回はダウンロード手順とディスクイメージへのインポート方法の説明のみなので
何かゲームを1つ導入してみましょう

ゲームをダウンロードしましょう

ELFES、ELFES2、ELFES4 のリンクのある部分までスクロールさせます
画面内のそれぞれのリンクをクリックしてください
obj 拡張子のファイルが 3 つダウンロードされます
ダウンロードが完了したら、これらのファイルを全て C:\Tools\X1\archives へコピーします
3つのファイルをコピーした状態です
最初 archives に移動させたフォルダは邪魔なので trush フォルダを作ってここに退避しています
とりあえず、これでダウンロード完了です!

ヘッダを除去しましょう

 上記でダウンロードした 3 つの obj ファイルには 18 バイトのヘッダが含まれていますので、ヘッダを除去且つ、格納アドレスと実行アドレスを把握します。

Bzエディタの起動

最初にインストールした Bz エディタを起動してください。

Bz エディタ起動直後の様子

Bzエディタへのファイル読み込み

C:\Tools\X1\archives フォルダの ELFES.objBz エディタに放り込みます
いわゆるドラッグアンドドロップという操作方法です
単純に〇〇を〇〇へドロップしてくださいと端折って説明する事もあります
基本操作なので知らない人はここで覚えておいてください
ELFES.objBz エディタにドロップするとこのようになります
これはファイルの中身を表しています

ファイル本体の説明

この部分がファイルの本体です
コンピュータで取り扱うファイルは全てこのような数字の羅列になっています
AとかFのアルファベットはそれぞれ 10 から 15 までの数字を A から F に置き換えてます
これは16進数と呼ばれ、1桁を16 種類の数字で表現するために使われています
コンピュータの世界では 16 進数で情報を格納していますので今のうちに慣れておきましょう
2 桁の 16 進数の数字の範囲は 0 から FF までで、FF は 255 に相当します
この 2 桁の 16 進数は 1 バイトのデータとなります、覚えておきましょう
16 進数は 10 進数と区別するために頭に「&H」がついたり「0x」がついたります
FF の場合 &HFF だったり 0xFF ですね、覚えておきましょう

文字部分の説明

この部分は左の 16 進数のデータを文字として表現した内容になります
コンピュータで表現される文字にはそれぞれ文字コードと呼ばれる番号が決まっています
例えば半角「S」の文字コードは 16 進数で 0x53 になります
半角「8」は 0x38 になります、文字コードの内容は別に覚えなくてもいいです
コンピュータで取り扱われる文字には文字コードが割り当てられてると覚えておいてください

オフセットの説明

この部分はオフセットです
この場合のオフセットは、ファイルの先頭からどれだけ離れているかを表しています
横軸は行の先頭から何バイト離れているかを示しています
一番左は行の先頭なので、オフセットは +0 です
一番右は行の一番後ろ、15番目なので 16 進数で表現するとオフセットは +F です
縦軸は 10 ずつ増えてますが、16 進数において 10 は 16 となります
つまり、1行毎に 0x10(16)、0x20(32) という風に増えていきます、覚えておきましょう
先頭から何バイト目などの位置情報はオフセットで把握する事になります、覚えておきましょう
※ Bz エディタではオフセット値に 0x とかついてませんが、雰囲気で察しましょう

ヘッダ内容の把握

この部分が、ヘッダで大事な部分です
1つ目の青枠は、先頭アドレスです、この 4 桁の数字をメモしておいてください
2つ目の青枠は、実行アドレスです、次の行に折り返してますのでこれも 4 桁あります
アドレスはオフセットみたいなものです
コンピュータのメモリは一番先頭を 0 番地とし、0x8000 番地からこのプログラムを格納します
格納したプログラムはメモリの一番先頭を 0 番地とし、 0x8000 番地の位置から実行させます
という情報がヘッダに含まれているという事になります
S-OS のゲームディスクにインポートする時にこの情報が必要になるのでメモしておいてください

※ ヘッダはデータの先頭に「このデータはこういうやつです」という情報を指します
※ ヘッダはデータの種類によって様々で意味が異なる場合もあります
※ THE SENTINEL でダウンロードできる obj ファイルのヘッダはこういう意味ですよという事です

前置きめっちゃ長くなりましたね、ELFES.obj は S-OS で実行する時は、0x8000 番地から読み込みを行い、0x8000 番地から実行させるという事になります、そして、ヘッダの情報をメモしたらもうヘッダは不要なので、このヘッダ情報をバッサリ削除してやります。

いよいよヘッダ削除

Bz エディタはエディタなので、テキストエディタのようにカーソルが存在します
赤枠で囲った部分が点滅していますね、これがカーソルです
右の文字の部分にもカーソルがありますね、これは本体の部分に対応したカーソルを表します
つまり、現在カーソル位置の 0x5F は「_」の位置にもカーソルが存在します
故に、「0x5F」は「_」である事がわかります
ヘッダは 18 バイトなので、削除する範囲は赤枠で示した部分になります
1 行まるごとで 16 バイト、次の行の 2 バイトを足して 18 バイトになります
1 つめの赤枠、ファイル先頭にカーソルがある状態から、シフトキーを押しっぱなしにします
シフトキーを押しっぱなしにしながらカーソルキーを使って 2 つめの赤枠まで移動させます
移動完了したら押したままのシフトキーを離して大丈夫です
この操作は範囲選択といい、シフトキーを押しながらカーソルを動かした範囲を選択状態にします
基本操作の 1 つなので覚えておいてください
これで、先頭 18 バイトを範囲選択した事になります
範囲選択した状態で赤枠で囲ったハサミのようなアイコンをクリックします
これは切り取り、いわゆるカットともいいます
キーボード操作だと Ctrl+X になります、「カットしてください」という操作は大体これです
しかし Bz エディタでは Ctrl+X しても反応なかったのでハサミボタンで切り取ってください
先頭 18 バイトを切り取った後はこうなります
19 バイト目にあった 「3E」「28」と続くデータが先頭 0 バイト目に切り詰められています
ヘッダを削除後は保存しましょう

ヘッダ削除したファイルを保存

Bz エディタの 閉じるボタン(×)をクリックします
すると保存するか聞いてきますので はい(Y) をクリックして保存します
これでファイルインポートの準備ができました

S-OSゲームディスクにインポートしましょう

L3ディスクエクスプローラの起動

起動直後はこんな感じです

L3でS-OSゲームディスクを開く

C:\Tools\X1\romsS-OS_GAME.d88 を L3 の赤枠の部分へドラッグアンドドロップします
S-OS_GAME.d88 の下の SWXCV110 をクリックします
するとディスクの中に格納されているファイル一覧が表示されます
L3 はディスクイメージのフォーマットを自動判別してくれます
S-OS_GAME.d88 の中には SWXCV110.Sys というファイルが 1 つだけ格納されています

ゲームディスクにファイルをインポートする

C:\Tools\X1\archivesELFES.objドラッグアンドドロップします
この ELFES.obj は先ほど先頭 18 バイトを切り取り、保存しなおしたものです
すると、インポート前に確認のためのウインドウが表示されます
インポート時に必要な情報を設定します
ディスクイメージ内のファイル名は拡張子を消しておきます(楽なので)
ファイル種類は Bin にしておきます
ロードアドレスに先ほどメモした先頭アドレスの 8000 を設定します
実行アドレスには先ほどメモした実行アドレスの 8000 を設定します
最後に OK をクリックします
これでインポートが完了しました

S-OSゲームディスクを保存する

保存ボタンをクリックします
ファイル保存ダイアログが表示されるので 保存(S) をクリックします
上書きするか確認されるので はい(Y) をクリックします
これでゲームディスクへのインポート完了です

残りのゲームもインポートしましょう

先ほど説明した手順で ELFES2.objELFES4.obj もインポートしてみましょう
多分上のような感じになっていれば大丈夫と思います
最後にディスクイメージへの上書き保存も忘れずに行ってください

動作確認しましょう

S-OSゲームディスクの起動

X1 エミュレータを起動し、ディスクイメージ読み込みを行います
C:\Tools\X1\romsS-OS_GAME.d88 を開きます
キーボードの 0 を押し、上記画面になったら起動成功です

ファイル一覧

D と入力し、Enter キーを押すと、ディスクイメージ内のファイルが一覧表示されます
先ほどインポートされた ELFES / ELFES2 / ELFES4 が表示されています

ELFESをメモリ内に読み込む

L ELFES と入力し、Enter キーを押します
最初の L は読み込みコマンドで、指定されたファイルをメモリに読み込みます
読み込み時のアドレスは、メモリの先頭を 0 番地とした場合 8000 番地に読み込まれます
この 8000 番地はインポート時に指定したアドレスが適用されている事になります
なんで 0 番地に読み込まないのかというと
このプログラムは 8000 番地に読み込む事を前提にバイナリが作られているからです
また、0 番地から 2FFF 番地までは S-OS のシステムがすでに入っているので使えません
とにかく、これで S-OS で ELFES が実行できる準備が整いました

ELFESを実行する

J 8000 と入力し、Enter キーを押します
J はジャンプコマンドで、8000 番地からプログラムの実行を開始する事を意味します
無事 ELFES が起動しました、思い存分遊びましょう
スペースキーでゲームスタートです
シルフィードっぽい雰囲気の疑似 3D シューティングゲームですね
カーソルで上下左右に移動して、スペースキーでショットの ON / OFF です
S-OS はキーボードの同時入力ができないので、こういう操作方法になります
一通り遊び終わったら、ControlNMI キーをクリックすると S-OS に戻れます
NMI とは、邪魔できない割り込みボタンです
何が起ころうとも割り込みが発生します
割り込みが発生した先には S-OS に戻る処理が書かれているようです(どうやら)
次は ELFES2 を遊んでみましょう

ELFES2を実行する

先ほどは L コマンドで読み込み、J コマンドで実行開始しましたが面倒ですね
S-OS はファイルに読み込み・実行アドレスが設定されていると直接読み込み実行ができます
空白をひとつあけて、ELFES2 と入力します
#_ELFES2」という風になります(_アンダーバーは空白と思ってください)
Enter キーを押すと、指定ファイルを指定アドレスに読み込み指定アドレスから実行します
便利ですね、このように実行できました
ELFES2 は横スクロールシューティングゲームです
Select weapon で武器を選択し、Enter キーを押します(最初は Lasor しか使えない)
そして対戦するステージを選択します
最初は D-DRAGON が無難でしょう
ステージクリアを進めていくと新しい武器が手に入るかもしれません
Enter キーでステージ選択完了
いよいよスタート、スペースキーで開始します
まぁ割りと死に覚えゲームなのでがんばってください
超ムズいです
NMI しました

ELFES4を実行する

最初は LJ コマンドで実行しました
次は空白+ファイル名の入力で実行しました
最後はもっと楽ちんな実行方法を説明します
D コマンドでファイル一覧を表示してください
次に、点滅するカーソルをカーソルキーの上と左を駆使して D で表示されたファイル一覧の
ELFES4 の行の先頭位置にまでもっていってください
そして「#__」(シャープ記号空白空白) と入力し、先頭の文字列「Bin」を上書きします
ここで Enter キーを押すと、なんと 「#_ELFES4」(_は空白)と入力したのと同じになります
便利ですね、ファイル名をタイプするのが面倒な人は是非活用してください
ELFES4 も無事起動しました

ゲームシステムはパワーカプセルによるグラディウス式のパワーアップタイプを採用しており、カプセルをとるごとに右端のメニュー部分の「>」マークが移動するので、欲しいパワーアップのところでリターンキーを押します。

SPEED ... スピードアップ
A.gun ... ショットの連射速度アップ
Image ... いわゆるオプション

また、カプセルをとるたびにシールドが最大4枚まで補充され、シールドが無い状態で被弾するとゲームオーバーです。

簡単に説明終わると思ったのに

 結局4時間ほどかかってしまいましたね、疲れた。
次回からは「Oh!石 さんのサイトから〇〇をインポートしてください」で説明を済ませるので、必ずこの記事の内容はしっかり把握しておいてください。

次回は、次回はいよいよプログラムを作って実行する記事に入りたいですね。それまでは他にも色々ゲームがあるのでダウンロードして是非実行してみてください。

更新履歴

2022/09/19 … ELFES / ELFES2 / ELFES4 例にインポート方法の記事を作成

参考資料

この記事が気に入ったらサポートをしてみませんか?