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日にリリースしたいんだけどなぁ...

2014年10月28日

アリスソフトforP6(15)(イントルーダー別バージョン)

  イントルーダー for P6


  内容などは先日アップしたものと変更はありません。

  日本語が使えない環境で変換した場合に、半角カナのファイルが作成できないために変換が正常に終了しない事があるようです。

  その場合は、以下の変換ツールを使用して下さい。


intr_p6_2.zip



  Bookwormさん作の binpaste.exe を使用しています。直接D88ファイルの中をいじって、半角カナのファイル名を英数字名に変更しています(安直)。



2014年10月27日

アリスソフトforP6(14)(イントルーダーリリース)

  イントルーダー for P6


 ○注意事項
 ・P6版に変換したものに関しては、配布禁止です。


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

intr_p6.zip



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



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

  PC-6001V ver1.22では、SRでのOUT &H93,2 がまだ実装されていないため、デモ画面がちょっとヘンになります。また、画面周りでバグがあるようです(詳細不明)。

2014年10月26日

アリスソフトforP6(13)

  アリスソフト for P6


  イントルーダー for P6 のプログラムが終わりました。


  後はデバッグですが、以前に書いたようにPAINT文のチェックのために、シナリオを一通りプレイする必要があります。

  ランスでは、地図が曲線的なものが多かったため、結構隙間があって、PAINT文が失敗する事があったんですが、イントルーダーは直線的な図なので、多分大丈夫じゃないかと思います。

  見切りでリリースしても構わないんですが、セーブデータの差し替えの対応が面倒ではあります。



  これでアリスソフトの88版の移植は終了です。ランス2はアナログRGBの画像のため、移植はできません。

  チャンピオンソフトの「ちょっと名探偵」は、一連のアリスソフトと似ている部分が多いため、割と手間が掛からずに移植できそうです。しかしコマンド入力タイプのため、メインルーチンのBASICにかなりの手を加える必要がありそうです。それ以上にBASICプログラムのサイズが大きいために、メモリが足らないかも。

  それより昔のチャンピオンソフト(例えば「ポップレモン」)とかは、LINE+PAINTの描画なので移植するのもなー、という感じです。


2014年10月25日

アリスソフトforP6(12)(ランスリリース)

  ランス for P6


 ○注意事項
 ・P6版に変換したものに関しては、配布禁止です。


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

rance_p6.zip



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

  婦警さんVXも実装しています。


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

  PC-6001V ver1.22では、SRでのOUT &H93,2 がまだ実装されていないため、デモ画面がちょっとヘンになります。

2014年10月24日

アリスソフトforP6(11)(リトルバンパイアなど3本バージョンアップ)

  アリスソフト for P6


  BGM再生のプログラムを一部変更しました。それ以外の部分は変更していません。


  リトルバンパイア:lv_p6.zip

  DPS:dps_p6.zip

  あぶない天狗伝説:tengu_p6.zip



  実機で再生すると、FM音源とSSG音源(PSG音源)の音量バランスがどうも理論値と違うようです(それぞれの固有差もあるみたいです)。

  そのため、FM音源とSSG音源の音量をそれぞれ変更できるようにしました。詳しくは同梱のドキュメントを参照して下さい。


  Bookwormさん作のmako60を使用している場合は、今回の変更は関係ありません。

  また、エミュレータのP6VWを使用している場合も、パネルから音量比を変更できるため、バージョンアップする必要がないかと思います。

アリスソフトforP6(10)

  アリスソフト for P6


  ランス for P6のプログラムが大体終わりました。ランスは、オープニングのデモが一番力が入っている部分です。でも、普通は飛ばしちゃうんですよね...


  デバッグとして最初からエンディングまでプレイしました。通常のプレイの仕方では時間が掛かるので、裏技(?)を使っています。

 1)エミュレータのP6VWを使う
 2)起動したら、F10を2回押す(エミュレータ速度を最大にする)
 3)BGMをなしにする

  で動かすと、快適にプレイできます。BGMが鳴らないのが寂しいんですが...

  通常速度ではかなり遅く感じるんですが、これは88で4MHz動作した時でもほぼ同じ速度です。当時はこの速度でプレイしていたんですよねぇ。



  また、ランスをプレイした時に参考にしたのは、

http://www20.atwiki.jp/rancewiki/pages/8.html

  です。

  ただ、この攻略方法は、98版のようで、88版では若干違いがあります。

  以下ネタバレ。







○妃円屋敷の鍵

  妃円屋敷の鍵ですが、情報屋でみかんと交換となっていますが、88版では鍵をくれません。代わりに花束をくれます。

  この花束を持って、レベル屋に行き、「取る」コマンドで彼氏の話を聞いた後、「話す」コマンドで花束をあげます。すると、彼氏が墓場にいることが聞けます。

  この後、墓場に行き(入る)、レベル屋の彼氏を「戦う」で戦闘に入って倒します。その後、もう一度墓場に行き、魔王(彼氏の亡霊)を倒します。

  魔王(彼氏の亡霊)を倒した後に、聖書が落ちているので、拾って調べると鍵が手に入ります。

2014年10月15日

アリスソフトforP6(9)

  アリスソフト for P6


  DPSとあぶない天狗伝説については、技術的に書くことはほとんどありません。というのは、リトルバンパイアとほとんど同じなんです。

  一部のプログラムで処理が若干変更されている程度で、P6のプログラムとしては、メインプログラムを同じように修正しているのと、cali3 をcali5 に変更した程度です。


  残りの2本のイントルーダーとランスですが、これは大きく2つの問題があります。


○オープニングでアニメーションをする部分がある。

  例えば、アリスロゴの表示の場合、以下の方法です。

 1)画面一杯に黒ベタキャラを表示させる。
 2)グラフィック画面をロード(重ね合わせのため、グラフィック画面は見えない)。
 3)真ん中のアリスロゴの部分だけ、黒ベタキャラを消す(真ん中のみ表示される)
 4)見えない部分に表示されている次のパターンを、真ん中にコピーする。
 5)4)を繰り返すと、動いているように見える。


  これがP6では簡単に出来ないため、SWで無理やり実現しています。

 1)OUT &H93,2で画面を表示させないようにする。
 2)VRAMに画面データをロードする。
 3)VRAMのデータをVRAM以外のRAM上に転送する。
 4)画面を消去の後、OUT &H93,3 で画面を表示させる(この時は画面は消去された状態)。
 5)RAM上のデータを、VRAMに転送する。この際、アニメに見えるように、順番に転送する。


  既にリトルバンパイアで作ったプログラムをそのまま使えます(というかこれのために作っています)。


○表示した画面にPAINT文で塗りつぶしている。

  ランスでも、イントルーダーでも、移動の際にマップが常に表示されていて、マップ内のどの位置にいるかを色を変えて表しています。このため、表示した画面に対してPAINT文を実行しています。

  これの対応が結構面倒です。

 ・グラフィック画面を横方向に1ドットずつ間引いているため、切れ目が出来るときがある。
  →切れ目があると、PAINT文で悲惨な事に...
  →間引きプログラムをちょっと修正&描画後に、PSET文で修正して対処。

 ・PAINT文の開始場所が、画面中央とは限っていない。
  →cali5などの実行結果のため、最悪意図していない部分をPAINTしてしまう。
  →全部移動してみて確認する。


  という面倒な作業があります。

  ですのでリリースはもうちょっと先になります。

2014年10月05日

アリスソフトforP6(8)(あぶない天狗伝説リリース)

  あぶない天狗伝説 for P6


 ○注意事項
 ・P6版に変換したものに関しては、配布禁止です。


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

tengu_p6.zip


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

  また、アリスソフトアーカイブズには、88版あぶない天狗伝説がアップされていないので、各自でイメージデータを用意する必要があります。



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

2014年10月03日

アリスソフトforP6(7)(イントルーダー余談)

  ちょっと前に書いた事ですが...


  イントルーダーのBGMの全7曲は、リトルバンパイアのBGMと全く同じです、と書いたんですが間違いでした。

  イントルーダーは、BGMが13曲あり、その内7曲が全く同じ、でした。

  ただ、88版のBGMはWin版とは一部違うようです(詳しく調べていませんが)。少なくとも、アリスの館の音楽が、定番のアリスの館の音楽ではなく、リトルバンパイアのオープニングの曲が使われています。

  Win版は10曲しかデータがないようなので、どれかが使われていないんだと思いますが...聞き比べるしかなさそうです。

2014年10月02日

アリスソフトforP6(6)(リトルバンパイアバグ)

  先日リリースした、リトルバンパイア for P6 のバグについてです。


  動作にはそんなには影響はないんですが、以下のバグがあります。

・起動時、ドライブ1に lvp6_a.d88、ドライブ2に lvp6_c.d88 をセットすると、画面に変な模様が表示される。

  P6版ではフォントを読み込む前なので変な模様なのですが、88版オリジナルでは「チャンピオンソフトに連絡〜」のメッセージが表示されます。


  エミュレータでは前の設定が残るために、ドライブ2のディスクを変更したままの状態になる事がありますので注意して下さい。


  直した方がいいんですが、致命傷ではないので、とりあえずそのままにしておきます。

アリスソフトforP6(5)(DPSリリース)

  D.P.S for P6


 ○注意事項
 ・P6版に変換したものに関しては、配布禁止です。

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

dps_p6.zip

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


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

2014年09月24日

アリスソフトforP6(4)(リトルバンパイアリリース補足)

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


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


○Bookwormさん作のD88TOOL.exe を同梱しています。また記載するのを忘れていました。申し訳ありませんでした。

○BookwormさんのHPの物置に、WIN版からのデータの音楽再生プログラムがアップされています(MAKO60)。

○前回のリリースからの変更点。
 ・オープニング画面のちょっとした変更
 ・STOP/ESC/CTRL+C のキャンセル

 ぐらいです。

 プログラムはかなり変更が入っています。これは次回作以降のための布石です。


2014年09月23日

140923_02_アリスソフトforP6(3)(リトルバンパイアリリース)

  リトルバンパイア for P6


 ○注意事項
 ・P6版に変換したものに関しては、配布禁止です。
 ・88版→P6版の変換ソフトに関しては、配布OKです。


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

lv_p6.zip


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


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

  PC-6001V の方は、FM音源とSSG(PSG)音源のバランスと、SRでの OUT &H93,2 に対応していない問題があります。

アリスソフトforP6(2)

  アリスソフトから返答がありました。

  大体こちらが想定していた内容でよかったです。内容は以下の通り。


 ・P6版に変換したものに関しては、配布禁止です。
 ・88版→P6版の変換ソフトに関しては、配布OKです。


  ですので、今まで通り変換ソフトのみを公開します。



  リトルバンパイアですが、バージョンアップしたものを近日中にアップします。
  内容的にはほとんど変更はありませんが、他のプログラムとの兼ね合いで変更しています。


  オープニングがちょこっと変わっています。88版のように下からワラワラっと表示されます。


  この処理なんですが、88ではキャラクタ画面+グラフィック画面の重ね合わせで簡単に実現しています。

 1)画面一杯に黒ベタキャラを表示させる。
 2)グラフィック画面をロード(重ね合わせのため、グラフィック画面は見えない)。
 3)黒ベタキャラをちょっと小さい四角のキャラにする(隙間から後ろのグラフィック画面が見える)。
 4)四角のキャラクタをだんだん小さくしていく。



  これがP6では簡単に出来ないため、SWで無理やり実現しています。

 1)OUT &H93,2で画面を表示させないようにする。
 2)VRAMに画面データをロードする。
 3)VRAMのデータをVRAM以外のRAM上に転送する。
 4)画面を消去の後、OUT &H93,3 で画面を表示させる(この時は画面は消去された状態)。
 5)RAM上のデータを、VRAMに転送する。この際、88版と同じように下から見えるように転送する。


  上記処理は、他のプログラムでも使用しています。

2014年09月11日

アリスソフトforP6(1)

  タイトルが適当だ...


  アリスソフトアーカイブズ(http://retropc.net/alice/)で公開されているPC-8801版を元に、P6SR版を変換しています。

  で、そこにあるPC-8801版ランスを動かしてみたんですが、なぜか婦警さんVXが起動しない。


  確かちゃんと動いたはずと、自分が持っているディスクイメージを確認してみると、プログラムにバグがありました(ファイル名が違うだけ)。

  初期ロットなんですかねぇ...


  せっかくなので動くようにしました。

  DISKB.D88 の一部を修正するだけで動作します。
  バイナリエディタなどで、以下の箇所を変更します。

0x064F75〜
修正前:FF 96 28 0F 31 F3 53 4E 28 44 4B 29 29 F3 22
修正後:20 20 20 20 20 20 20 20 20 20 20 20 20 22 32

0x064F8A〜
修正前:22 F3 FF 96 28 0F 41 F3 44 4B 29
修正後:41 2E 56 58 22 20 20 20 20 20 20


  これで婦警さんVXが起動します。起動方法はアリスの館参照。