先週の土曜日、初めて、「P6オフ会」というものに参加させてもらいました。
もう、とにかく最初から最後まで、感動しっぱなしでした。
P6シリーズの実機があれだけ並ぶのを見たのも子供の頃以来でしたし、大画面のプロジェクターで動く数多くのP6ソフトをただ見ているだけでも幸せでした。
また、30年経った今でも、多くの人たちがPC-6001シリーズに対して愛情を持っているということを、実際に感じることができたのも良かったです。
あまりにもネタが多すぎて、全て消化しきれなかったのが残念ですが、逆に言えば、今後継続的に開催しても、まだ何年も楽しめるということではないですか!
このような会を開催してくださったことに、本当に感謝の気持ちでいっぱいです。
関係者の皆様、ありがとうございました。
さて。
オフ会ネタとして作成した「P6版イース2オープニング」ですが、こちらでは技術的なことについて書いていこうかと思います。
誰得?
…と思われるかもしれませんが、ごく一部の方が楽しんでいただければ、それだけで満足なのです!
では…
初回ということで、メモリ関連の話からいきましょう。
今回は、とにかくメモリとの戦いでした。
イース2のオープニングは、ご存知の通り、スタッフ紹介とイベントシーンが、交互にテンポ良く出てきます。
P6で再現するにあたり、1シーンごとにテープからデータをロードすればそれほど難しくないなーとは思ったのですが、数秒のシーンのあとに1分のロードが入ってしまっては、雰囲気が台無しです。
最初のダレス登場のシーンは分けるとしても、その後のシーンはすべてローディングなし、オンメモリで載せたいと思い、メモリの使い方には気を使いました。
とりあえず、P6イース2のメモリマップを、ざっくりと載せてみます。
まず、起動時からダレス登場シーンまでのメモリマップはこんな感じです。

BASICからローダープログラムを読み込んだ後、8580Hからメインプログラムおよびダレス登場シーン制御用のプログラム(サブプログラム1)と、BGMデータ、各種グラフィックデータをロードしています。
黒枠の部分が、最初の「Now Loading... 0%-----100%」の間にロードしているデータです。
メインプログラムは、名前の通りすべての制御を司る部分で、描画用のサブルーチンやサウンドドライバ、フォントデータも含まれており、最初から最後まで常駐しています。
逆に、8FE0H以降は、完全にモジュールとして独立していて、シーンによって読み替えられるようになっています。
ダレスのシーンが最後まで再生され、「承知いたしました」ですべてが消えた後、メモリはこうなります。

BGM(TO MAKE THE END OF BATTLE)は、気合いを入れて再現したということもあって、思っていたよりかなり大きいデータになってしまったため、8000Hからのテキスト画面+BASIC領域に転送することにしました。
この時点で、もうBASICには戻れません(;_;)が、仕方ありません。
メインプログラムが8580Hという中途半端なアドレスからスタートしている理由は、このときのBGMデータのサイズを考慮に入れたからです。
さらに、セル単位のデータで格納されているタイトル画面を、さっさとグラフィック画面に描いてしまいます。これで元データはいらなくなります。
こうすることで、8FE0HからDFFFHまでを全て空けて、長い長いオープニングシーンのデータをここに詰め込むようにしました。
演出的には、ダレス後のロード中は「イース」のタイトル画面を隠しておいて、BGM再生開始と同時にドーン!と出せば格好良かったのですが、ご覧の通り、タイトルを隠しておこうにもメモリがないのです(;_;)
モワッとタイトル画面が出て、その状態で「NOW LOADING」を出して待たせるという、あまり格好良くないことになってしまったのはそういう理由です。
ちなみに、「イース」画面での「NOW LOADING」が若干見にくい理由ですが、フォントを通常の表示ではなく、元画像とのXORで描いているからです。

すでにタイトルの元画像データがメモリ上に残っていないので、タイトル画面上にフォントを上書きしてしまうと、ロード後に戻せないのです。
ロードが終わっても「NOW LOADING」が出たままなのは格好悪いですし、かといって、「NOW LOADING」を消すために元画像データをメモリ上に保持していくのももったいない。
ということで、苦肉の策として、XORで表示を行い、ロード終了時には再びXORで「NOW LOADING」を描くことで元のタイトル画面に戻しています。
誰も気づかないかもしれませんが、こんなところにも苦労したのでした(^^;
オフ会ネタとして作成した「P6版イース2オープニング」ですが、こちらでは技術的なことについて書いていこうかと思います。
誰得?
…と思われるかもしれませんが、ごく一部の方が楽しんでいただければ、それだけで満足なのです!
では…
初回ということで、メモリ関連の話からいきましょう。
今回は、とにかくメモリとの戦いでした。
イース2のオープニングは、ご存知の通り、スタッフ紹介とイベントシーンが、交互にテンポ良く出てきます。
P6で再現するにあたり、1シーンごとにテープからデータをロードすればそれほど難しくないなーとは思ったのですが、数秒のシーンのあとに1分のロードが入ってしまっては、雰囲気が台無しです。
最初のダレス登場のシーンは分けるとしても、その後のシーンはすべてローディングなし、オンメモリで載せたいと思い、メモリの使い方には気を使いました。
とりあえず、P6イース2のメモリマップを、ざっくりと載せてみます。
まず、起動時からダレス登場シーンまでのメモリマップはこんな感じです。

BASICからローダープログラムを読み込んだ後、8580Hからメインプログラムおよびダレス登場シーン制御用のプログラム(サブプログラム1)と、BGMデータ、各種グラフィックデータをロードしています。
黒枠の部分が、最初の「Now Loading... 0%-----100%」の間にロードしているデータです。
メインプログラムは、名前の通りすべての制御を司る部分で、描画用のサブルーチンやサウンドドライバ、フォントデータも含まれており、最初から最後まで常駐しています。
逆に、8FE0H以降は、完全にモジュールとして独立していて、シーンによって読み替えられるようになっています。
ダレスのシーンが最後まで再生され、「承知いたしました」ですべてが消えた後、メモリはこうなります。

BGM(TO MAKE THE END OF BATTLE)は、気合いを入れて再現したということもあって、思っていたよりかなり大きいデータになってしまったため、8000Hからのテキスト画面+BASIC領域に転送することにしました。
この時点で、もうBASICには戻れません(;_;)が、仕方ありません。
メインプログラムが8580Hという中途半端なアドレスからスタートしている理由は、このときのBGMデータのサイズを考慮に入れたからです。
さらに、セル単位のデータで格納されているタイトル画面を、さっさとグラフィック画面に描いてしまいます。これで元データはいらなくなります。
こうすることで、8FE0HからDFFFHまでを全て空けて、長い長いオープニングシーンのデータをここに詰め込むようにしました。
演出的には、ダレス後のロード中は「イース」のタイトル画面を隠しておいて、BGM再生開始と同時にドーン!と出せば格好良かったのですが、ご覧の通り、タイトルを隠しておこうにもメモリがないのです(;_;)
モワッとタイトル画面が出て、その状態で「NOW LOADING」を出して待たせるという、あまり格好良くないことになってしまったのはそういう理由です。
ちなみに、「イース」画面での「NOW LOADING」が若干見にくい理由ですが、フォントを通常の表示ではなく、元画像とのXORで描いているからです。

すでにタイトルの元画像データがメモリ上に残っていないので、タイトル画面上にフォントを上書きしてしまうと、ロード後に戻せないのです。
ロードが終わっても「NOW LOADING」が出たままなのは格好悪いですし、かといって、「NOW LOADING」を消すために元画像データをメモリ上に保持していくのももったいない。
ということで、苦肉の策として、XORで表示を行い、ロード終了時には再びXORで「NOW LOADING」を描くことで元のタイトル画面に戻しています。
誰も気づかないかもしれませんが、こんなところにも苦労したのでした(^^;