2014年08月31日

リトルバンパイアforP6(完成版)について

  先日リリースしたリトルバンパイアですが、指摘があったため一度公開を停止しています。

リトルバンパイアforP6(8)

  リトルバンパイアをP6で動かそうブログ8

  前回の続きです。

○P6版のマシン語プログラムについて
 P6版では、88版をベースに以下の4つのプログラムを新規に作っています。

  je(オープンしているファイルに対してアクセスを行う)
  mika2(グラフィックデータを画面に描画する)
  skj3(漢字を表示する)
  nm4(BGMを鳴らす)

  このうち、nm4は普通にCALL文で呼び出していますが、他の3つはBASICから変数などのパラメータのやり取りをしています。88版と同じように未定義命令を使って、起動させています。


  N66SR-BASICの未定義命令を使う方法に関しては、

  Mr.PC テクニカルコレクション
  ハローMr.PC

  に詳しく書かれています。特に、ハローMr.PCは、BASICの内部解析の記事もありますので、非常に参考になります。
  Mr.PCテクニカルコレクションは国会図書館に、ハローMr.PCは名古屋市鶴舞図書館にあります。


  具体的な使い方に関しては、それぞれのソースを参照してください。je.asm などは、WINDOW という未定義命令を、ステートメントとしても、関数としても使用していますので、参考になるかと思います。

  ちなみに関数ですが、

  関数名(引数)

  の形式しか許されていないようです。また()の処理は不要です。


  今回のプログラムでは、WINDOW、WINDOW()、VIEW、SET、TERM、CHAIN、CMD、KEY()、の未定義命令を作成しています。


  未定義命令ですが、DEFINT、DEFSTR、COMMON、などの命令が普通では使用できません。それは、DEFやCOMなど定義されている命令があり、先にその予約語で解釈されて、メモリにセットされるためです。直接バイナリレベルでメモリに入れるなどをする必要があります。

リトルバンパイアforP6(7)

  リトルバンパイアをP6で動かそうブログ7

  前回の続きです。

○88版からP6版への変換について(続き)

 (4)88版のマシン語プログラムをP6用に新規作成する。
  88版のプログラムでは、

  cali3(選択肢の決定などの演算を行う)
  je(オープンしているファイルに対してアクセスを行う)
  mika2(グラフィックデータを画面に描画する)
  skj3(漢字を表示する)
  nm4(BGMを鳴らす)

  で、cali3以外は全て新規作成を行っています。

  cali3に関しては、機種依存の部分がないので、ほとんどそのまま使用しています。


 (5)画像データを変換する
  88版の画像データは、640×200です。これを320×200のデータに変換しています。変換方法は割と単純です。

 ・奇数列のデータを描画しない
  これだけの処理でも、案外ちゃんと見える絵になっています。

 ・中間色用のタイルペイントのデータを加工する。
  奇数列だけを描画しない場合、中間色用のドット構成で妙な絵になります。

  こういうドット構成の場合、奇数列を抜くと...
□■□■□■□■□■
■□■□■□■□■□
□■□■□■□■□■
■□■□■□■□■□
□■□■□■□■□■
■□■□■□■□■□

  こんな具合に縞模様になってしまいます。
□□□□□
■■■■■
□□□□□
■■■■■
□□□□□
■■■■■


  別のパターンでこういうのがありますが、これの奇数列を抜くと...
□□■□□□■□□□
■□□□■□□□■□
□□■□□□■□□□
■□□□■□□□■□
□□■□□□■□□□
■□□□■□□□■□

  こんな具合になって、色調が変わった感じがします。
□■□■□
■□■□■
□■□■□
■□■□■
□■□■□
■□■□■


  対処としては、パターンを見て描画するデータを変更しています。

  例えばこういうデータなら、
□■□■□■□■
  こういうデータに変換。
□■□■


  こういうデータなら、
□□□■□□□■
  こういうデータに変換。
□□□■

  という具合です。


 (6)P6版のデータをD88イメージに書き込む
  ここまでで全てのデータが揃うので、それをN66SR-BASIC形式でD88フォーマットに書き込んでいます。

  書き込みには、D88TOOL.exe を使用しています。新規イメージ作成、ASCIIセーブ、バイナリセーブ、トラック/セクタを指定した書き込みが出来るので便利です。



  続きます。

リトルバンパイアforP6(完成版)の補足

  先日リリースしたリトルバンパイア for P6 の補足です。


○Bookwormさん作のD88TOOL.exe を同梱しています。記載するのを忘れていました。また、BookwormさんのHPの物置に、98版からのデータの音楽再生プログラムがアップされているようです(MAKO60)。


○エミュレータP6VWでは、Ver308、309では動作しません(原因不明)。Ver307a2を使用して下さい。他のエミュレータは未確認です。

○起動の際は、ドライブ#2にlvp6_b.d88をセットするのをお忘れなく。

○STOPキーのキャンセルをするのを忘れていました。ゲーム実行中は、STOPキー(エミュレータではENDキー)を押さないで下さい。

○FM音源の音色データの元として、PC-88用のROMデータが必要ですが、そのファイル名は、

 N88_3.rom もしくは N88EXT3.ROM

 が正解なようです。

 すみませんが、上記ROMデータを、N88-3.rom にリネームしてから変換を行ってください。


2014年08月30日

リトルバンパイアforP6(6)

  リトルバンパイアをP6で動かそうブログ6

  やっと完成しました。技術的な話をまとめておきます。

○P6のメモリマップ

 ・FM音源なしバージョン
  0x0000〜0x7FFF:グラフィック画面
  0x8000〜0x99A9:メインBASICプログラム
  0x99AA〜0xA544:変数エリア
  0xA545〜0xAD48:スタックエリア+空き
  0xAD47〜0xB8FF:文字列領域
  0xB900〜0xCFFF:美咲フォントデータその2
  0xD000〜0xDFFF:マシン語プログラム(後述)
  0xE000〜0xEFFF:BASICワーク
  0xF000〜0xFFFF:美咲フォントデータその3

  拡張RAM
  0x0000〜0x3FFF:美咲フォントデータその1


 ・FM音源ありバージョン
  0x0000〜0x7FFF:グラフィック画面
  0x8000〜0x99A9:メインBASICプログラム
  0x99AA〜0xA544:変数エリア
  0xA545〜0xAD48:スタックエリア+空き
  0xAD47〜0xB8FF:文字列領域
  0xB900〜0xCFFF:空き
  0xD000〜0xDFFF:マシン語プログラム(後述)
  0xE000〜0xEFFF:BASICワーク
  0xF000〜0xF3C7:空き
  0xF3C8〜0xFFFF:BGM演奏用MMLデータ

  拡張RAM
  0x0000〜0x66FF:美咲フォントデータ
  0x7000〜0x77FF:BGM演奏プログラム(メイン)
  0x7800〜0x7FFF:FM音源音色データ

○ディスクマップ

  今回のプログラムでは、ファイルの管理をBASICがしているため、どのトラックにどのデータが入っているかは意識していません。ただし、トラック#0セクタ#1に関しては、起動用のプログラムが入っています。そのため、D88TOOLなどで上書きされないようにFATを一部書き換えています(0xFEを設定してシステム予約にしている)。

○88版からP6版への変換について

  変換でやっている事は、以下の通りです。

 (1)88版のディスクからファイルを取り出す。
  88版では、N88-BASICではない、特殊なセクタ構成のDOSが使用されています。

  1024バイト長×5セクタと、256バイト長×1セクタが、1トラック内に書き込まれています。そのうち、256バイト長のセクタに関しては、DOSのプログラムが書かれているようです。N88-BASICで使用しているのは、1024バイト長×5セクタの部分です。1トラックに5120バイト=256バイト×10として管理されています。また、1クラスタは2560バイトに設定されており、1トラック=2クラスタになっています(N88-BASICと同じ)。ディレクトリ、ID、FAT の構成は、N88-BASICやN66SR-BASICと同じですが、トラック#18ではなくトラック#1に格納されています。

  プログラム(tsdos2file.exe)で、それぞれのD88イメージから、BASICファイルを取り出しています。

 (2)88版のBASICメインプログラムをASCIIファイルに変換する
  アリスソフトのゲーム(あ、リトルバンパイアはチャンピオンソフトか)では、他のゲームとの共通化を図るための工夫がなされています。

  シナリオ(文章)、グラフィック、選択肢、BGMのファイルが、BASICで読めるデータファイル(or マシン語ファイル)です。BASICのメインプログラムでは、そのファイルをOPENした後に、専用の関数からデータを読み出して処理しています。選択肢を選んだ時は、選ぶ前の変数の状態からシナリオに書かれている計算式を実行して、動作を決定しているようです。

  そのため、BASICメインプログラムを読んでも、ゲームの内容に関しては全然分かりません。


  プログラム構成をできるだけ同じようにしたかったため、P6用のBASICメインプログラムも、元の88用のものから変換をしています。


  リトルバンパイアでは、Pオプション付でセーブされているため、Pオプションを外すプログラム(n88dec.exe)と、N88-BASICをASCII変換するプログラム(n88toascii.exe)を作成しました。ただし、n88toascii.exe は多少手抜きです。

 (3)ASCIIのBASICプログラムから、P6用のBASICメインプログラムを作成する
  ASCIIのBASICプログラムからは、かなり変更されているために、gawkを使って変換しています(まず、手動で修正してから、それになるようにgawkを組んでいます)。


  元のプログラムで使用されている文法で、N66SR-BASICにないものは、

  DEFINT A-Z(変数の整数宣言)
  WHILE WEND
  ラベルジャンプ
  2文字を超えた変数名
  CALL文

  です。意外に地味に面倒な変換をしています。



  次に続きます。

SD6031WIFのRAMの32Kバイト化

  以前、SD6031WIFの64Kバイトの改造記事を載せました。


  しかし、実装が結構大変ですし、部品の追加も必要です。

  そこで、少しの改造で、外部RAMを32Kバイトに拡張することが可能です。
  ただし、初代PC-6001での、外部RAMの使用ができなくなります。


  以下、SD6031WIFの改造方法を記します。



 ○回路図

140830_01_SD6031WIF_32k.PNG



 ○実際の改造

 1)まず、SRAMの1ピンの足を上げます。

140830_01_SRAM加工.jpg


 2)コネクタのA14から信号を取り出します。A14は基板の裏側です。写真の白い配線になります(赤い配線は別の改修)。

140830_01_A14取り出し.jpg


 裏面から表面に持ってくるのが面倒なので、今回はSDカードの横を通しました。


 3)コネクタA14からの信号をSRAMの1ピンに接続します。

140830_01_結線完.jpg




  外部RAMをチェックするのには、前にアップしたプログラムを使用して下さい。

  外部RAMを使う時は、DIPSWの6番をONにして下さい。


http://sbeach.seesaa.net/article/387861564.html

memcheck.zip



posted by えすび at 12:04| Comment(0) | HW:SD6031 | このブログの読者になる | 更新情報をチェックする

2014年08月19日

リトルバンパイアforP6(5)

  リトルバンパイアをP6で動かそうブログ5


  FM音源がやっと終わりました。
  音色が違ったのは、FM音源の再生時に1オクターブ高かったためでした。SSG音源の方は合っていたため、分かりづらかったようです。


  で、また別の問題が。


  漢字を表示させる時の美咲フォントデータですが、第一水準のデータだけでも30K程度あります。
  当初、PC-6006を使えばフリーエリアが16Kぐらいになるので、対処できるかなーと思っていたんですが、どうもこれだと足らないようです。


  今のターゲットは、

  PC-6001mk2SR+PC-80S31(2ドライブ) or PC-6601SR(2ドライブ)
    +
  PC-6006SR or PC-6007SR

  という、かなり贅沢なスペックが必要になります。


  PC-6601SR + SD-6031WIF(64Kバイト増設版)でもいいんですが、64Kバイト増設というのがネックですね。


  エミュレータなら、全然問題にならないんですけどね(^^;)


2014年08月18日

リトルバンパイアforP6(4)

  リトルバンパイアをP6で動かそうブログ4


  FM音源が大体終わったんですが、88版と比べてみるとちょっと違う...M88とP6VWの違いではなさそうなんですよねぇ。
  音色データは、88のROMのを使っているので、同じになるはずなんですが...原因調査中です。

  ちなみに、

  ちょっと名探偵
  リトルバンパイア
  DPS
  イントルーダー
  ランス
  あぶない天狗伝説

  の全ての音楽が同じプログラムで鳴らせます。全曲確認するのが大変...




  前回の余談で

>> リトルバンパイアと、イントルーダーの音楽データが、7曲中6曲が全く同じでした(^^;)

  と書きましたが、7曲すべて同じでした。

2014年08月09日

リトルバンパイアforP6(3)

  リトルバンパイアをP6で動かそうブログ3


  FM音源がすごく大変...
  音を全然鳴らさない、という選択肢もあるんですが、やっぱり折角だから鳴らしたいんですよねぇ。


  今、必要なプログラムは、

 ・2ms割り込みを使って、
 ・MMLを解析して
 ・FM3音+SSG3音を自動的に音を鳴らす

  というFM音源ドライバです。


  SSG(PSG)単体だと、まだ何とかなりそうなんですが...
  FM音源の音色データは、PC-8801のROMから抜き出してくるしかなさそうです。


  ROM内のデータのありかをようやく見つけた所です...


  アリスソフトのゲームで使用されている音源ドライバは、リトルバンパイア〜ランスまで全く同じものを使っているようなので(音楽データも共通に使える)、一度作ってしまえば他のゲームにも使えるんですけどねぇ。




  余談:ちょっと驚いた事。

  リトルバンパイアと、イントルーダーの音楽データが、7曲中6曲が全く同じでした(^^;)

2014年08月07日

リトルバンパイアforP6(2)

  リトルバンパイアをP6で動かそうブログ2


  PC-88用のリトルバンパイアは、メインがBASICで、画面表示、漢字表示、サウンド、ファイルの読み込みなどは、マシン語で行われています。この部分を変更すれば、P6でも動くようになります。

  アドベンチャーの肝である、どの選択肢を選んだら、どういう動作をする、という部分は、シナリオファイルの中に書かれているので、メインのBASIC部分やマシン語部分は、基本的にタッチしていません。シナリオファイルの通りに動いているだけです。


  この方式を採っているのは、シナリオファイルや画像ファイルを変更するだけで、別のアドベンチャーゲームが出来るからだと思います。


  で、調べてみると、同じ方法で作られていると思われるのは、アリスソフトのPC-8801用のゲームで、

 ・イントルーダー 桜屋敷の探索
 ・あぶない天狗伝説
 ・DPS
 ・ランス
 ・ランス2

  でした。画像ファイルやシナリオファイルの形式もほとんど同じようです。うまくいくと、全部 P6で動かすことが出来そうです。

  ただ、ランス2は、アナログRBGを使っているので、かなり無理がありそうです。


  肝心のリトルバンパイアの方は、FM音源の再生でつまずいています...

2014年08月04日

リトルバンパイアforP6(完成間近?)

  最近、こういう事をやっています。


140804_01_LVP6_1.jpg

140804_01_LVP6_2.jpg


  元々は、PC-8801用のソフトを、SR用(もちろん、6001mk2SR/6601SR)に移植しています。
  大体は動くようになりました。


  ただ、今の所、以下の改良点をするつもりでいます。

  ・画像データの変換方法。今は暫定的に1ドットおきに表示させている。
  ・文字の表示が半角分ずれている。
  ・デバッグ(PC-88版と同じ動きかどうか)
  ・PC-8801のメインのBASICプログラムを、自動でSR用に変換するソフトを作る。



  ちなみに、元のゲームは、この辺り。

http://retropc.net/alice/menu.html


  使用している、8×8のフォント(美咲フォント)は、この辺り(ちゃんと読めるからすごいです)。

http://www.geocities.jp/littlimi/misaki.htm


  また、BASIC形式でのファイルの書き込みは、d88tool を使わせて頂きました(Bookwormさん、多謝)。

http://www.geocities.jp/submarine600/