オッサンのゲームに纏わる奮闘記です。
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
あけましておめでとうございます。
Twitterもあるので、ブログの更新頻度が滞っています。

さて、昨年の2016年9月にPC-9801シリーズでHxCを使用するために必要な拙作のVFO基板を配布しましたが、日頃から色々と情報頂いているUME-3さん(@ume3fmp)より、一つ動作に問題があるということで調べてみました。
結果的にはHxC側のバグでしたが、調べていく過程でPC-9801シリーズの挙動などもわかったことがあったので、ブログにして残しておきたいと思います。
おかしい挙動というのは「HxC+VFOをドライブ1,2、内蔵もしくは外付けの実際のドライブを3,4として設定し、ドライブ3(実際のドライブ)からブート出来ない」というもの。
結果的に「HxCを利用すると2台ではなく、4台ドライブが接続した形で認識される」という問題も解決します。
P_20170121_182544.jpg
当初VFOが悪いのかと修正したものを発送する必要があると早合点してVFOのチップをもう10個ぐらい輸入してしまいました。
VFOの基板、設計には問題ありませんでしたので、単純に在庫になっていますw
もしVFOの基板がまだ欲しいという方がありましたら、在庫ありますのでご連絡ください。

また今回PC-98シリーズの情報として、PC-98エミュレータnp2の作者ゆい☆さん(@yuinejp)より情報を頂きました。
ありがとうございます。
P_20170121_230038.jpg
調べた環境はPC-9801VXとなります。

P_20170121_074647.jpg
そのため正常動作確認のサンプルに使用したドライブはFD1155Dです。
FD1155DはおそらくPC-9801シリーズの5.25インチドライブとしてかなり多く採用されているかと思います。HD/DD切り換え、VFO内蔵のドライブです。

検索すればジャンパのセッティングなど多く見つかりますが、とりあえず情報の整理ということで、PC-9801シリーズ(HD/DD切り換え、ドライブ側のVFO)のFDDコネクタのピンアサインを記載します。
#PC-9821や26ピンは面倒なので割愛

まず内蔵の34ピンコネクタ兼FD1155Dのピンアサインです。
Out/InというのはPC-98側から見た場合の信号方向です。基本的にすべての信号線は負論理(Lでアサート)されます。
条件/備考は、その信号線の説明と、アサートされる、もしくは有効な出力を行う条件です。
DSはDriveSelectの略
DriveSelect以外の外付け50ピンコネクタと同じ信号名はマザー上で同一ラインです(ショートしています)。
ピン信号Out/In動作条件/備考ピン信号Out/In動作条件/備考
1GND2HD/DDOデフォルトはLでDD、HでHD
ドライブの設定に依存
3WindowIVFO動作+DS4HeadLoadOドライブの設定に依存
5GND6DriveSelect3NC
7MFM/FMOVFOへ。LでMFM、HでFM8IndexIDS+ドライブモーター動作
9GND10DriveSelect0O
11SyncOVFOに対して。Lで動作12DriveSelect1O
13GND14DriveSelect2NC
15GND16MotorOnOドライブの設定に依存
17GND18DirectionOLでマイナス、Hでプラス
19GND20StepODSのみで動作
21GND22WirteDataO
23GND24WriteGateO
25GND26Track00IDSのみで出力
27GND28WriteProtectILで書き込み禁止 DSのみ
29GND30ReadDataI(VFO動作+)ヘッドロード
31GND32SideSelectOLでヘッド1、Hでヘッド0
33GND34ReadyILでメディアセット状態
ドライブの設定に依存
DS+モーター動作

上の表の補足を少し。
ドライブの設定に依存というのは、そのピンを使用するかどうか、どのレベル(LH)の場合にどういう動作を行うかは、ドライブのジャンパ設定によるということです。
DSのみというはDriveSelctがアサートされるだけで信号を返すもしくは受け付けるということです。
例えばStepはDSがアサート+Stepでヘッドが動作します。メディアの挿入やモーター動作などに関係ありません。
逆に、IndexはDriveSelect+ドライブモーター動作の条件で信号が返ってきます。ですので、DriveSelectをアサートした状態でメディアをセットし、物理的に手動でドライブを回転させたりしてもIndexは返ってきません。


次に外付け用50ピンアンフェノールコネクタのピンアサインです。あくまでPC-9801VXです、念の為。
DriveSelect以外の内蔵34ピンコネクタと同じ信号名はマザー上で同一ライン(ショート)しています。
同じ信号に関しての記載はしていません。動作条件は外付けするドライブに依存するようです。

ピン番号信号Out/In条件/備考
1Window
2MFM/FM
3ReadData
4WriteProtect
5Track00
6WriteGate
7WriteData
8Step
9Direction
10DriveSelect3DriveSelect1と接続(ショート)
11DriveSelect2DriveSelect0と接続(ショート)
12DriveSelect1
13DriveSelect0
14Sync
15Ready
16Index
17HeadLoad
18NC
19SideSelect
20NC
21TwoSideDiskILで両面ディスクがセット
22NC
23FileUnsafeILでFDDがFault
24FileUnsafeResetOLでFaultの状態リセット
25LowWriteCurrectOヘッドを43シリンダ以上でL
26~50GND

そしてFD1155Dのジャンパ設定です。
P_20170121_074603.jpg
名前動作PC-98デフォルト/備考
RDVFOの有効無効切り換え
1 無効
2 有効
2
USEヘッドロードするための条件
1 DriveSelect+HeadLoad+ドライブモーター動作
2 DriveSelect+ドライブモーター動作
1
MONドライブモーター動作条件、いずれもメディア挿入時
1 MotorOn
2 HeadLoad
3 DriveSelect
1
DXDriveSelectの番号0~30もしくは1
VCターミネーターの有効無効ショート(有効)
HDE回転数のモード
1 常に360回転
2 DD時は300回転
1 いずれの設定でも
HD時は360回転になる
DENDD/HDの切り換え条件(2ピン)
1 HでHD、LでDD
2 HでDD、LでHD
3 常にHD
オープン 1と同じ?
1
DCG34ピン出力設定
1 Ready
2 Disk change
1
TSTドライブのテスト?
オープンでコネクタからの
出力が停止するがドライブは動作
ショート

HxCの挙動について記載します。ファームウェアはv1.8.2.40です。
HxCは当然HeadLoadやMotorOnは無視されます。そもそもMotroOnはPC/AT機でもありますが、HeadLoadは存在しませんので、そのような信号を扱うように設計されていません。
#ここ重要
ピン信号 ピン信号Out/In動作条件/備考
1GND2DiskChangeIメディア交換
3GND4NC
5GND6NC
7GND8IndexIメディアセット+DS
9GND10DriveSelect0O
11GND12DriveSelect1O
13GND14DriveSelect2O
15GND16DriveSelect3O
17GND18DirectionO
19GND20StepO
21GND22WirteDataO
23GND24WriteGateO
25GND26Track00IヘッドがTrack0+DS(注)
27GND28WriteProtectIメディアセット+DS
29GND30ReadDataIメデイアセット+DS
31GND32SideSelectO
33GND34ReadyIメディアセット+DS

(注)ここの挙動でバグ

次にPC-98のフロッピーディスクドライブの選択と起動時のドライブ認識について記載します。
#PC-9801VXについてです。

P_20170121_074919.jpg
FDCはuPD765Aです。
P_20170121_074919A.jpg
765Aは29ピンのUS0と28ピンのUS1で4ドライブを選択出来ます。LLで0、LHで1、HLで2、HHで3です。
そしてその信号はVXの場合、
P_20170121_074919B.jpg
こちらのカスタムD65022G055の92ピンと91ピンに入ってデコードされ、更にディップスイッチ1−4の設定により、0,1と2,3を内蔵と外付けのどちらのDriveSelectへ割り振るかが決定します。
内蔵0、1へは、72ピン、71ピン、外付け0、1 70ピン、69ピンから出力されます。
ちなみにVXの場合、電源投入後も物理的なディップスイッチを切り換えると変更されます。

P_20170121_074919C.jpg
デコードされた信号は、一旦74LS38もしくは、uA75452を通じてNOTされ、出力はオープンコレクタの出力になります。
74LS38は内蔵の34ピンコネクタのDriveSelect0,1へ、uA75452は外付けのDriveSelect0,1へ割り振られていました。

PC-98のドライブ認識についてですが、起動時にPC-98側よりそれぞれのドライブにDriveSelect+Stepの信号を複数回送信し、すべてのドライブをTrack00にしようとします。
この時にTrack00が帰ってきたDriveSelectの番号で、ドライブの接続を認識します。


P_20170109_214011_vHDR_Auto.jpg
この信号が765AのUS0(上段)、US1(下段)です

P_20170121_220031.jpg
765AのUS0,1を順にDriveSelect0,1,2,3となるように変更していき、DriveSelect3の状態で待機します。
上からDS0、1、2、3の順です
#実際にはDriveSelect1と2の選択の間にラグがあり、一瞬DriveSelect0がアサートされます。

P_20170121_220054.jpg
またPC-98は約976Hz周期で、全ドライブのDriveSelectをアサートし、Ready信号などを確認しているようです。
#カウントできていた写真がどっか行ったorz

このためHxCをPC-98に接続すると、細かい周期でアクセスが発生し、さらにHxCのドライブをDriveSelect3に相当するように接続した場合、ずっとRBなどとDriveSelect3に相当するHxCでの設定ドライブがアクセスされた状態でホールドされてしまいます。

ynFdd4me.jpg
起動時に認識されたドライブの情報は、DISK_EQUIP(55Ch、55Dh)、DISK_EQUIP2(494h)、F2HD_MODE(493h)、DISK_RESET(492h)に格納されていて、BASICやDOSはこのデータからドライブの接続を確認しています。
#PC-9800シリーズテクニカルデータブックより

この時ドライブでDISKBASICから起動の場合は、ドライブ接続の有無に関係なく、DriveSelectの順に、ドライブ1〜4が割り当てられます。
DOSのFDD起動の場合、DriveSelect0,1のユニットの接続が無い場合はドライブレターが詰められて、DriveSelct2,3のドライブがA,Bに設定されます。
#HDDからの起動の場合は異なります。

さて「HxC+VFOをドライブ1,2、内蔵もしくは外付けの実際のドライブを3,4として設定し、ドライブ3(実際のドライブ)からブート出来ない」という不具合の原因と対処方法についてです。

簡単に言うと、PC-98が起動時に行うドライブ認識のタイミング時、HxCがTrack00を出力し続けることが原因です。
v1.8.2.40のファームでは、HxCはなぜかドライブID0A,1Bを選択した状態で、ドライブのトラックが0にあると、DriveSelectに関係なくTrack00を出力し続けます。
同じ問題によるトラブルがHxCのフォーラムに投稿されていました。
こちらの場合はPC-586RVにHxCを接続すると4ドライブとして認識されてしまう問題が投稿されていますが、結果的にHxCがTrack00を常に返してしまうことに起因しています。

解決方法ですが、HxCのファームウェアをベータ版に変更してください。ベータ版のファームで改良されています。
HxCのサイトはこちら
ちなみにベータ版もタイムスタンプは2014年なので、随分前から変更ないみたいです。
所有しているHxCはスリム版がありませんので、誰かスリム版を持っている人は人柱お願いします

これで不具合が解消されます。
また同様に4ドライブ認識されることも解決します。
#私も今回調べるまでわかりませんでした。

ということでVFOを購入いただいた方は、そのまま使用頂いて問題ありません。
今回調べたピンアサインや動作は自分の所有している機器によるもので、すべてのものが該当するとは限りません。
HxCはそもそもshugartなどのFDDをエミュレートするように設計されており、PC/AT機からはHeadLoadなどの信号は出ていないです。
PC-98のドライブはドライブモーター動作+ヘッドロード+DriveSelectがないとReadDataなど出力されないはずですが、HxCではそんなことは無視してデータが返ってきます。
これらによるタイミングの問題や不具合は今のところ確認できていませんが、本来のPC-98シリーズのドライブとは挙動が異なるということを理解して使用したほうがいいかもしれません。
追加のロジックを入れたりするのであれば、全く同じような動作は可能ですが、それならPC-98シリーズ用のドライブエミュレータを開発したほうが良いと自分は思います。

今回は文字多めでした。
では~

スポンサーサイト
管理人のみ閲覧できます
このコメントは管理人のみ閲覧できます
[2017/01/28 Sat] // # [ 編集 ] @

管理者にだけ表示を許可する
http://kitahei88.blog.fc2.com/tb.php/145-f47dbef0
この記事にトラックバックする(FC2ブログユーザー)
// ホーム //
Powered By FC2ブログ. copyright © 2017 レトロゲーム漫遊記 : episode2 all rights reserved.
最新記事
最新コメント
最新トラックバック

プロフィール

kitahei88

Author:kitahei88
dtiblogが閉鎖されたため、こちらでお世話になります。
ただのオッサンです。

オッサンのつぶやき

カテゴリ
月別アーカイブ
検索フォーム

リンク
RSSリンクの表示
ブロとも申請フォーム
QRコード

QR

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。