2015年05月21日

イシターの復活forP6(11)(Ver2リリース)

  イシターの復活 for P6


  88版→P6SRへの変換ツールをリリースします。

ishtarp6_v2.zip


 ○Ver.1 → Ver.2 変更箇所
  呪文リストで、選択するものがない状態の時に、画面が乱れる問題を対処。

  キャラクタの描画速度を速くした。
  (ただし、実機のみ。今のPC-6001VW ver309a では、逆に遅くなります)


  説明などは、同梱のドキュメントを参照して下さい。


  実機では速くなりますが、今の PC-6001VW Ver309a では、すごーく遅くなります。
  エミュレータの問題が修正されれば、問題ないかと思います。

イシターの復活forP6(10)(Ver1.1リリース)

  イシターの復活 for P6


  88版→P6SRへの変換ツールをリリースします。

ishtarp6_v1_1.zip


 ○Ver 1 → Ver 1,1 変更箇所
  呪文リストで、選択するものがない状態の時に、画面が乱れる問題を対処


  説明などは、同梱のドキュメントを参照して下さい。


  ゲームをプレイするのには支障はないバグですが、気になるので修正しました。


2015年05月19日

イシターの復活forP6(8)

  前の話の続き。


  ふと思いついて、キャラクタ消去用描画の高速化をしてみました。

  とりあえずバグがいっぱいある状態ですが、速度を測るのには支障がないので測定してみる事にしました。


  場所は、いつものDEAD END 。

 ・PC88版:24.3秒(エミュレータ)

  修正前
 ・フル機能版:46.7秒(実機)
 ・BGMなし:39.1秒(実機)
 ・BGMなし+敵キャラクタ描画なし:25.3秒(実機)

  修正後
 ・フル機能版:34.7秒(実機)
 ・BGMなし:29.2秒(実機)
 ・BGMなし+敵キャラクタ描画なし:15.3秒(実機)


  大体、3/4ぐらいになっている感じです。この修正を進めていくのでよさそうです。


  ただ一つ問題が...エミュレータ(PC-6001VW)では、動作が非常に遅くなります。

  エンディングロールなどで問題がある機能を使っているためです。

  やっている事は単純で、ポート0xC8のビット3をON/OFFしているだけです。

  ビットマップのON/OFFなんですが、同じポートにBASICモードの選択があるために、頻繁にON/OFFをすると遅くなるようです。

2015年05月18日

イシターの復活forP6(7)

  イシターの復活を一応無事リリースできたのですが...

  動かしていると、やっぱりちょっと遅いかなー、と思ってきました。

  スクロールだけだとPC88版と同じぐらいなのですが、敵キャラクタがたくさん出てくると遅くなるのを実感します。


  で、測定してみました。

  場所は、DEAD END 。都合よくローパーが並んでいるだけの直線なので、通路の端から端まで、どれくらい掛かるかを測定してみました。

 ・PC88版:24.3秒(エミュレータ)
 ・P6SR版:43.1秒(エミュレータ)/46.7秒(実機)

  PC88版の倍程度掛かっています...

  どこのルーチンが時間が掛かっているかを調べるために、特定の動作の部分だけを処理しないプログラムで測定してみました。

 ・BGMなし:39.1秒(実機)
 ・BGMなし+敵キャラクタ描画なし:25.3秒(実機)
 ・BGMなし+キャラクタ消去用描画なし:21.0秒(実機)
 ・BGMなし+敵キャラクタ描画なし+キャラクタ消去用描画なし:6.8秒(実機)


  ざっくりと計算すると

 ・BGM:7.6秒
 ・敵キャラクタ描画:13.8秒
 ・キャラクタ消去用描画:18.1秒

  となりました。


  敵キャラクタ描画もキャラクタ消去用描画も、処理が大変なのでかなり工夫していたのですが、今一度見直す事にします。


  BGMは...処理が重すぎですね。

  BGM処理は元のPC88のプログラムをほとんどそのまま使用しているので、改良の余地は十分にあります。
  ただ、それ以前に解析をする、という作業が残っているのですが(^^;)
  (ほぼ解析せずに使用できています)

2015年05月17日

イシターの復活forP6(6)(リリース改)

  イシターの復活 for P6


  先にアップしたツールでは、〜.d88の内容次第で変換時にエラーになることがあるようです。

  その辺りを対応した変換プログラムをアップします。

ishtarp6_2.zip


  先にアップしたもので動いていれば、特にやり直す必要はありません(結果は同じになります)。

イシターの復活forP6(5)(リリース)

  イシターの復活 for P6


  88版→P6SRへの変換ツールをリリースします。

ishtarp6.zip


  説明などは、同梱のドキュメントを参照して下さい。



  Q&Aコーナー

 Q1.PC88版とどこが変わったか?
 A1.
  ・グラフィックが横640ドット→320ドットのため、グラフィックが多少荒くなっています。
  ・動作速度がPC88版よりも同等か遅いです。キャラクタが多い場合は特に目立ちます。
  ・呪文系統を変更するたびにディスクアクセスしていたものを、オンメモリーにしました。
  ・ちょっとしたバグを修正しています。
  ・キーボード+ジョイスティック、あるいはジョイスティック×2、あるいはXPD-1LDが使用できます。
  ・呪文名、Detect MonsterやDetect Magic使用時の表示、ルーム名などが見やすくなりました。
  ・KIが移動する際に、呪文名、残り時間、GILのHPが一時的に消されます。

 Q2.PC88版より速くなったのでは?
 A2.KIを一人だけでスクロールした場合は、PC88版より若干速いです。他のモンスターが出てくると遅くなります...

2015年05月16日

イシターの復活forP6(4)

  イシターの復活(ザ・リターン・オブ・イシター)の、ゲームとしてあまり解析されていない部分について調査した結果です。

  PC-8801版を解析したので、他のバージョンでは違う部分があるかと思います。


  モンスター情報

140516_03_モンスター経験値.jpg


  バイタリティ、リカバーポイントは、All About NAMCO に書かれているのとほぼ同じです(Mirror Knight、Golden Mirror Knight のリカバーポイントがちょっと違う)

  左の#は、Light Violet Vampireからの通し番号です。


  気付いた人がいるかも知れませんが、経験値はモンスター番号+リカバーポイントになります。
  そのため、リカバーポイントが大きいモンスターを倒した方が、経験値がたくさん入ります。


  ウーズやスネークは、倒すのがラクな割りに経験値が多く入ります。
  ローパーやリザードマンは、倒すのに苦労する割りに経験値が入りません。



  経験値でソーティングしたのが次の表です。


140516_03_モンスター経験値2.jpg


イシターの復活forP6(3)

  イシターの復活(ザ・リターン・オブ・イシター)の、ゲームとしてあまり解析されていない部分について調査した結果です。

  PC-8801版を解析したので、他のバージョンでは違う部分があるかと思います。


1)NEW GAME 開始直後の状態
  KIの最大呪文ポイント(最大MP):6
  GILの最大バイタリティ(最大VT):15


2)成長(経験値について)
  モンスターを倒した時に、モンスターごとに決まっている経験値が入ります。

  その経験値が一定量貯まると、レベルアップします。
  レベルアップ後に残った経験値は切り捨てられずに残りますが、ゲームオーバーになると捨てられます(パスワードやコンティニュー時には持ち越されません)。


  KIの場合は経験値が 18 貯まると、最大呪文ポイントが 1 増えます。
  GILの場合は経験値が 36 貯まると、最大バイタリティが 1 増えます。


  例えば、ゲーム開始直後にモンスターを倒した時に、経験値を92得た場合は、

  KI:最大MPが 5 増えて、経験値が 2 残る。
  GIL:最大VTが 2 増えて、経験値が 20 残る。

  この状態で、経験値 16 を得ると、GILの最大VTがさらに 1 増える事になります。

  モンスターごとの経験値については別途記載します。

  最大MP/最大VTは、ゲームオーバー時に反映されます。


3)KIの呪文選択メニューについて
  KIの所持MPにより、使用できる呪文が変わりますが、これは以下の通りです。

 ・消費MPが 0 のものは常に使用可能(当たり前)
 ・消費MPが 0 以外の場合、所持MP が 消費MPx2-1 以上の場合は使用可能


  例えば、NEW GAME 開始直後の場合、所持MPは 6です。
  そのため、消費MP 2 の Flying Disk は使用可能ですが、消費MP 4 の Lightning Bolt は使用不可です。
  この状態で経験値 36 を得て、ゲームオーバー後、再開すると、Lightning Boltが使用可能になります。

  呪文ごとの消費MPについてはマニュアルに記載されています。
 (All About NAMCOや、アーケード版と同じだと思います)


4)効果が怪しい呪文について
 ・Neutralize Spell I/II、First Aid は効果がありません(MPは消費します)。


5)GILがモンスターと直接戦っているときの、VTの減り方について

  これは、
   Shield、Shield Red Line、Shield Blue Line
   Dispell Magic
   シールド封じ/スーパーシールド封じ
  と関連があります。

 ややこしいので、フローチャートにします。


 まず通常の場合。

モンスターのVTを 1 減らします。
 ↓
モンスターのVTが 0 ならば、モンスターを倒した事になります。
GILのVTにリカバーポイントを加えます(最大VTを超えない範囲で)。
 ↓
GILのVTを 1 減らします。
 ↓
最初に戻る。


 Shield を掛けている場合。

モンスターのVTを 1 減らします。
 ↓
モンスターのVTが 0 ならば、モンスターを倒した事になります。
GILのVTにリカバーポイントを加えます(最大VTを超えない範囲で)。
 ↓
シールド用のカウンタを 1 増やす。
カウンタが 2 になったら、カウンタを 0 に戻し、GILのVTを 1 減らす。
 ↓
最初に戻る。

 Shield Red Line の場合は、カウンタが 3 になったらVTを減らし、Shield Blue Line の場合は、カウンタが 4 になったらVTを減らします。
 これにより、ダメージが 1/2、1/3、1/4 になります。


 シールド封じを受けた場合は、上記の、GILのVTから減らす量を 1 ではなく、2、3、4になります。
 シールド封じを1回受けるごとに、VTから減らす量が +1 されます(最大で 4 まで)。
 受けるダメージが、2倍、3倍、4倍になる事になります。

 スーパーシールド封じの場合は、1回受けるごとに、VTから減らす量が x2 されます。
 最大で 8 まで、VTから減らします。
 受けるダメージが、2倍、4倍、8倍になる事になります。

 Dispell Magic を掛けると、シールド封じ、スーパーシールド封じで変化した、VTから減らす量を 1 に戻します。

イシターの復活forP6(2)

  3つ目のRed Wisp発生時の画面が乱れるバグですが、いまだに再現しません。

  さらに描画ルーチンをちょっと変更したので、再現されるかどうかも分かりません。


  ゲームがストップするとかいうバグではないため、とりあえずこのままリリースしようかと思います。

  ディスクにセーブするゲームではないので、最悪は何とかなるかと思いますので。

2015年05月15日

イシターの復活forP6(1)

  入力の反応の改善が終わって、最終チェック中ですが...
  バグが3つほど。

 ・126面、127面をクリアしたパスワードを受け付けない。
 ・Fire Element、Fire Explosion が飛んで行かずに、手元で爆発する。
 ・Red Wisp発生時に、画面が乱れることがある。

  1つ目は、PC88版からのバグのようです。これは簡単。
  2つ目は、入力の反応改善をした時に発生したバグです。直し方はちょっと考えれば分かりそう。

  問題は3つ目で、一度発生しただけで再度発生しません。
  原因もよく分からないので、再現するまで何度もプレイするしかないんですが、これがなかなか手ごわい...


  今週末にリリースを、と思っていたのですが、もう少し先になりそうです。

2015年05月13日

イシターの復活forP6(0)

  移植の作業がほとんど終わりました。

  画面はこんな感じです。


140513_01_ish1.jpg
 ゲームタイトル

140513_01_ish2.jpg
 L_Violet Vampire に Killer Cloud を撃つ(^^;

140513_01_ish3.jpg
 ローパーまみれ。先にはあんどーさんが。

140513_01_ish4.jpg
 ドラゴンの昼寝。

140513_01_ish5.jpg
 Akynd Knight の名前を表示してみました。



  デバッグモードというか、KIのMPを60000程度にしてデバッグしていたため気付かなかったのですが、最初の状態で1面からゲームをした時に Fire Ball がちゃんと連射できない事が判明...
  入力に対する反応が極めて悪いのが原因なようです。

  この辺りを修正した後にアップします。いつものごとく、PC-88版のイシターの復活からの差分プログラムです。

2015年05月06日

某88ソフトからの移植

  すっかりブログを更新していませんでした。


  今は、元々アーケードのゲームだったものを88版に移植されていたものを
 さらにSR用に移植しています。

  完成したらまたアップしますが、まあまあ完成度は高いと思います。


  SRのグラフィックなんですが、触っていると分かりますがかなり使いにくいです。

  今回のゲームはアクション系でさらに画面がスクロールするので、どうしても
 大量のデータを高速に扱う必要があります。その辺りのプログラムを組んでいると、
 SRでは妙に使いにくいです。

  SRでは、ポート0xCE/CFにY座標を出力して、0〜319のメモリに書き込む事で、
 ドット表示が出来ますが、これでスクロールさせるとかなり遅くなります。
 (この方式をビットマップ方式と呼んでいるようです)

  この方式ではなくて直接VRAMに書き込む事も出来ますが、VRAMは変態的な構成に
 なっています。
  VRAM構成はスクロールし易いように作っているんだと思いますが、一部アドレス線が
 逆になっている問題があるのと、実はビットマップモードは使いにくい事が
 わかっていないような気がします。


  ゲームは、BGMがない状態で大体完成しました。動作速度も遅いながらに許容範囲かなーと
 思っていました(大体、88版の約2倍)。

  で、割り込みでBGMを付けると...ゲームにならないような遅さに...
  8msごとにBGMに割り込んでるんですが、すごく重いのかなと思います。



  BGMルーチンがちょっと遅すぎるので、ロジアナで調べてみると...
  nMREQ、nIOEQ、nRD、nWRなどが、なぜかアクセスしていない期間がありました...


  SRなのに、バスリクエストをONにしていました (__)...


  バスリクエストをOFFにすると、非常に快適な速度になりました。88版よりも速いかも。


  後は細かな点を実装すれば完成します。

  完成後にちょろちょろと技術的な事を書いていこうと思ってます。

2014年11月28日

ポッキーforP6(3)(リリース)

  ポッキー for P6


  88版→P6SRへの変換ツールをリリースします。

pokky_p6.zip



  説明などは、同梱のドキュメントを参照して下さい。
  バグ情報などもあります。


  エミュレータでは、PC-6001VW ver307a2 で動作確認をしました。

2014年11月25日

ポッキーforP6(2)

  ポッキー for P6


  大体、プログラムが終わりました。後は、BASIC変換用ののAWKスクリプトを書くだけです。

  一区切り付いたので、技術的な事をまとめます。
  と言っても、基本はリトルバンパイアとほとんど同じです。


  今回面倒だったのは、以下の3点。


1)音楽再生が単なるPLAY文で実行されている
  前のアリスソフト用BGM演奏プログラムを使うために、PLAY文からBGM演奏プログラム用に変換するプログラムを書いています。
  また、エンベロープを使った場合に音が鳴らないバグがあったので、修正しました。
  (リトルバンパイアで、このバグに相当する曲があります。どうしよう...)


2)ディスク容量が足りない
  2Dを1DDにするので、通常では不足する事はないのですが...

  ポッキーのディスクは、通常の1セクタ=256バイト、1トラック=16セクタの80トラックではなく、1セクタ=512バイト、1トラック=10セクタの84トラックです。このため、ディスク容量自体がかなり違います。

  アリスソフトでも似たような状況だったのですが、CGのサイズが640x200→320x200になるので、グラフィック容量が少なくなって避けられていました。

  ポッキーでは、
  ・複数の画像ファイルを1つのファイルにする。
  ・メッセージファイルを圧縮する。

  で回避しています。


3)速度が遅い
  アリスソフトではあまり気にならなかったのですが(それでもちょっと遅い)、ポッキーでは許容範囲を超えた遅さでした。

  ディスクからデータを読み出し、そのデータを文字列として、全部処理をしています。そのため、MID$を多用しています。

  MID$自体の処理があまり速くなく、さらに文字領域を毎回確保するために、ガベージコレクションも割りと発生していました。

  以上の問題点の対策として
 ・文字領域を決まった場所に割り当てる。
 ・MID$をマシン語処理する。

  としてます。

  とりあえずそれなりな速度にはなっています。速い、とは言えませんが...


2014年11月16日

66SRのキーボードについて(3)

  フォーマットが分かったので、ハードウエアで実現してみました。


  動くかどうかのテスト用なので、Arduino を使います。

  回路図とスケッチは次の通りです。

141116_01_66SR_key_Arduino.PNG


有線通信のスケッチ

赤外線通信のスケッチ



  ハードウエアについての注意点です。

 ・赤外線通信の回路

  赤外線LEDは汎用なら特に何でもいいと思います。今回は共立電子で、L53F3BTというのを購入しました。

  制限抵抗は、330オームにしていますが、これで12mA程度流れる計算です。


  電源電圧 = 5V、順方向電圧降下 = 1.2V(L53F3BTのカタログより)なので、(5-1.2) / 330 = 0.0115 A

  制限抵抗を小さくすると、発光が強くなって赤外線が飛ばせる距離が伸びますが、Arduino の絶対最大出力が40mAなので、あまり大電流を流さないようにして下さい。


 ・有線通信の回路

  コネクタの番号が分かり難いので、Arduinoに接続する前に確認して下さい。66SRの電源を入れた時に、1ピンと2ピンの間に5Vの電位差が出るので、これを確認するといいと思います。

  後は回路図の通り、2ピンと4ピンをGNDに、3ピンを33オームの抵抗を解して接続します。

  スケッチをArduinoに書き込む時は、66SRと接続しない状態でするようにして下さい。



  送信するキーデータですが、Arduino を接続しているパソコンからシリアル通信で送信します。

  パソコンからのデータが0xFF以外は、制御コード = 0b000 として、キーデータを66SRに送信します。
  パソコンからのデータが0xFFの時は、その次のデータを制御コードとし、さらにその次のデータをキーデータとして送信します。


  とりあえずいつもの「あくのりっち」を使った場合について説明します。

http://www.vector.co.jp/soft/win95/prog/se089304.html


 1)回路を組み立てます。
 2)Arduino IDE でArduino にスケッチを書き込みます。
 3)Arduino IDE を終了させます。
 4)あくのりっちを起動します。
 5)「シリアルデバイスを開く」を選び、Arduino IDEで指定したCOMポートと同じものを選択します。
 6)画面下のボーレート設定を1200bpsにします。

  これで通信が可能になっているはずです。

 7)66SRの電源を入れます。BASICを選ぶ画面になるまで待ちます。

 8)F5 を押すために、Arduino にデータを送信します。あくのりっちの「編集」−「BINARYモード」を選び、下の入力部分に、FF、01、F4、を入力します。

 9)N66SR-BASICが起動されれば成功です。


 ・わかっている問題

  パソコン→Arduino→66SRにデータを送信する時に、パソコン→Arduinoの転送よりも、Arduino→66SRのデータ速度が遅いです。そのため、大量にデータを送信した場合、例えばファイル転送した場合などは、Arduinoでデータ溢れが発生します。

  通常はフロー制御を行って、パソコンからくる送信データを抑制するのですが、それがどうもうまくいきません。

  Arduinoのハードウエアは、フロー制御の信号が接続されていないので、Xon/Xoffのソフトウエア制御になります。
  パソコン側でXon/Xoffを受信した時に、送信を抑制/再開のフロー制御をすればいいだけだと思うのですが...このフロー制御は、Arduinoのドライバが行うのか、あくのりっちが行うのか、それともさらに上位のソフトが行うのか、よくわかりません。


  通常の人間がキー入力するような速度なら、特に問題はありません。





posted by えすび at 12:20| Comment(0) | P6解析:サブCPUと8255 | このブログの読者になる | 更新情報をチェックする

2014年11月15日

66SRのキーボードについて(2)

 続きです。


3.データの物理フォーマットについて

 赤外線通信も有線通信も、論理フォーマットは同じですが、物理フォーマットは違います。

 まず、有線通信のフォーマットです。

141115_02_66SR_keywire.png


 ヘッダ1、2は、このままの波形がそれぞれのデータの先頭に送信されます。ヘッダ2のパターンは、"1"のパターンと同一のようです。

 制御データ、キーデータは、それぞれLSBから送信されます。"0"と"1"は、両方とも"H"、"L"のパターンが出力されますが、"H"の長さが違います("L"の長さは同じです)。

 一つの送信データ(ヘッダ+24ビットデータ)を送信してから、次のデータが送信されるまでの最小間隔は、4657us(実測値)です。



 次に赤外線通信のフォーマットです。

141115_02_66SR_keyIR.PNG


 この波形は、サブCPUの出力のため、実際の赤外線LEDが光っているのは、波形が"L"の間になります。
 また、波形で塗りつぶしている"L"の部分は、38KHzの周波数のキャリアがあります。

 後の送信データに関しては、有線通信と同様です。ただし、長さが違う事と、"L"を出力するときは、38KHzのキャリアがあるという事です。特に"L"の出力をする時は、38KHzが16クロック分出力されています。

 一つの送信データを送信してから、次のデータが送信されるまでの最小間隔は、5173us(実測値)です。


posted by えすび at 16:58| Comment(0) | P6解析:サブCPUと8255 | このブログの読者になる | 更新情報をチェックする

66SRのキーボードについて(1)

 最近話題の66SRのキーボードに関してです。
 MORIYAさんの所にも情報がありますが、再調査してまとめてみました。


1.データのやりとりの方法について

 66SRとキーボードは離れているため、キーボードの情報を赤外線通信、もしくは有線通信でデータを送信しています。キーボードから66SRへ、一方的にデータを送信しています。

 赤外線通信か、有線通信のどちらかしか行われていませんが、その選択方法は以下の通りです。

 ・66SR本体とキーボードが、付属のケーブルで接続されていたら、有線通信
 ・それ以外は、赤外線通信


 実際の回路での電気的な選択方法は次の通りです。
 (回路図を修正しました)

141115_01_66SR_keysch.PNG


 ケーブルで66SR本体とキーボードが接続された時、キーボード側の2ピン4ピンが"H"になり、その結果をサブCPU3が検知して、送信回路を赤外線通信から有線通信に切り替えます。
 また、66SR側の3ピン4ピンが"L"になり、その結果をサブCPU2が検知して、受信回路を有線通信の方に切り替えます。

 実際の送信データは、4ピンを使ってキーボードから66SRに送信されます。キーボードの2ピンから66SR本体の3ピンに向かって送信されます。


2.データのフォーマットについて

 赤外線通信も有線通信も、論理的に同じフォーマットを使って送信されています。
 ただし、実際の物理的なフォーマットは違います(後述します)。

 1回のデータ送信は、3ビットの制御データ(CT[2:0])+8ビットのキーデータ(DT[7:0])の11ビットのデータを送信します。

 論理フォーマットは以下の通りです。(LSB先送りに注意)

141115_01_66SR_keyformat.PNG


 キーを一度押すと、押したキーのコード(制御データ+キーデータ)が送信されます。押しっぱなしにすると、そのキーコードが連続して送信されます。キーボード側でオートリピートが実現されています。

 キーを離した時には、キーコードが送信されません。


 キーコード一覧です。

141115_01_66SR_keycode.jpg


 前の3桁の数字は3ビットの制御コード(CT[2:0])、後ろの2桁の数字がキーデータ(DT[7:0]・HEX表記)です。その後ろにキーデータを文字に変換しています。

 例えば、000:30(0) の場合は、制御コードが0b000で、キーデータが0x30、アスキーコードが"0"になります。

 「なし」は、他のキーを押していない場合に送信されるデータです。
 「SHIFT」は、SHIFTキーを押しながら、キーを押した時に送信されるデータです。「CTRL」「GRAPH」も同様です。
 「TV」は、キーボード上部の「PC/テレビ」のボタンを押し込んでから、キーを押した時に送信されるデータです。空欄があるのは、それ以外のキーはデータが送信されないためです。

 キーに「SHIFT」「CTRL」「GRAPH」がありませんが、このキーは単体ではデータを送信しないためです。

 「CAPS」「かな」キーを押した状態でも、送信されるキーコードは変わりません。ひらがな/カタカナの変換は本体側のサブCPUが行っているようです。



 また、キーコードとは別に、ゲームキー用のデータが送信されます。

 ゲームキーとは、STOP、SPACE、SHIFT、カーソル上下左右の7つのキーの事です。

 これらのキーは、他のキーとは違い、押している状態か、離している状態かが分かります。他のキーは、押された事しか分かりません。


 ゲームキー用の送信データは次の通りです。

 制御コード(CT[2:0]) = 0b010
 キーデータ(DT[7:0]) = 押されているキーの情報

 キーデータのそれぞれのビットは以下の通りです。

 DT[7]:SPACE
 DT[6]:"0"固定
 DT[5]:←
 DT[4]:→
 DT[3]:↓
 DT[2]:↑
 DT[1]:STOP
 DT[0]:SHIFT


 押されているキー"1"、押されていないキー"0"に出力され、複数のゲームキーが押された時は、その分のビットが"1"になります。全部のゲームキーが押された場合、0xBFになります。


 内部処理は、ゲームキー用の監視をポーリングで監視しているようです。一定間隔でゲームキーが押されている/押されていないの状態を調べているようです。

 その際に、以前の状態と違う場合に、ゲームキー用の送信データとして送信します。通常は、ゲームキーが押された時、もしくは離された時に送信されます。


 ゲームキー用の送信は、上記の通常のキーコードとは独立して行われます。そのため、STOP、SPACE、カーソルキーが押された時は、ゲームキー用の送信、キーコードの送信の両方が送信されます。

 例えば、何も押されていない時に、SPACEキーを押した場合は、

 0b010:0x80 (ゲームキー用の送信)
 0b000:0x20 (キーコードの送信)

 の2つのデータが送信されます。

 また、通常はゲームキー用の送信が先のようですが、逆になることもあります。


 次に続きます。

posted by えすび at 14:06| Comment(0) | P6解析:サブCPUと8255 | このブログの読者になる | 更新情報をチェックする

2014年11月11日

ポッキーforP6

  今日の11月11日はポッキーの日らしいです。


  なので(?)、P6に移植しました。


141111_01_pokky_1.jpg

141111_01_pokky_2.jpg


  ただ、ちょっと前に書いた通り、動作がかなり遅いです。

  ですので、リリースはどうしようか迷っている所です。
  要望があればリリースしてもいいけど...という感じですね。

2014年11月07日

SD6031を内蔵ドライブと併用する

  ツイッターで気になった話題について。


  実機で、内蔵ドライブとSD6031WIFを併用した場合の話です。


  内蔵ドライブとSD6031WIFを併用した場合、実物のフロッピーのデータを読み書き出来たりするので、割と便利です。

  ただし、いろいろと制限が出てきます。


 ○イメージセレクタが使えない

  P6では、内蔵ドライブとSD6031WIF(外付けドライブ)を併用した場合、内蔵ドライブから順番にドライブ番号が付きます。

  そのため、起動ドライブが必ず内蔵ドライブからになってしまい、SD6031WIF上にあるイメージセレクタを使う事が出来ません。


 ○SD6031WIFのイメージを選ぶには

  SD6031WIFでは、イメージの選択は以下のように行っています。

  ☆起動時(リセット後)
   ・INIT.P31 というファイルがある場合は、必ずこのファイルが選択される。
   ・INIT.P31 がない場合は、日付が一番新しいファイルが選択される。

  ☆起動した後に、SDカードを一度抜いて、再度挿した後
   ・日付が一番新しいファイルが選択される。


  以上のことから、実物のフロッピーのデータの読み書きをする場合、例えばフロッピーにSD6031のデータを書き込みたい場合には、以下の手順を踏む必要があります。

 1)P6本体の背面のドライブ数を1か2に変更する。
 2)本体にユーティリティディスクをセットする。
 3)SD-6031WIFを本体に取り付ける。SDカードの内容は、とりあえず何でもいい。
 4)リセットして、ユーティリティを立ち上げる(ディスクのコピーを選ぶ)。
 5)SDカードを一度抜く。
 6)フロッピーにコピーしたいイメージファイル(〜.P31)の日付を最新にする。
   西田さんのページ(http://tulip-house.ddo.jp/digital/SD6031/index.html)に、日付変更プログラムが紹介されています(http://www.vector.co.jp/soft/win95/util/se351123.html)。

 7)SDカードを挿した後、コピーユーティリティで、目的のファイルをコピーする。



  SD6031WIFのファイルがちゃんと読めているかどうかを確認するだけなら、

 1)本体にフォーマット済みのディスクを挿して起動して
 2)SDカードを一度抜いて
 3)目的のイメージファイル(〜.P31)の日付を最新にして
 4)SDカードを挿して
 5)files 2 (or files 3)

 で確認できるはずです。



 もっと手っ取り早いのは、SDカード上にイメージファイルを目的のものだけにする事です。



  上記の話は、PC-6601/PC-6601SRのいずれも同じです。

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

2014年11月03日

某88ソフトforP6

  アリスソフトの技法を使って、他の88版ソフトをP6SRで動かす計画。


  88版の某美少女アドベンチャーソフトを移植しています。また18禁ですが...


  大体出来上がったんですが、結構致命的な欠点が。

  「遅い」


  88版を大体そのまま持ってきているので、そんなに差はなさそうなんですが、なぜか非常に遅いです。

  また、文字列演算(MID$)を頻繁に使っている関係で、たまにガベージコレクションで止まる事もあります。


  エミュレータで加速状態でプレイすれば快適なんですけどねぇ...


  速度が何とかならないと、お蔵入りにするかも知れません。


  出来れば11月11日にリリースしたいんだけどなぁ...