ZX SpectrumSwiftディスクからフロッピーのデータを読み取る

Jan 15 2021

当時、私たちは6ワードのswiftdiskを持っていたので、3.5インチフロッピーディスクを使用できるようになりました。見る:

  • https://www.worthpoint.com/worthopedia/swift-disc-interface-zx-spectrum-540379389
  • http://www.crashonline.org.uk/44/swiftdisk.htm
  • https://spectrumcomputing.co.uk/index.php?cat=96&id=1000412
  • https://hardware.speccy.org/hardware/Swift_Disc-Sixword-i.html

私は完全なハードウェア仕様を見て、ROMでさえ上記のhardware.speccy.orgリンクからオンラインで入手できます。これはかなり驚くべきことです。

どのディスクフォーマットが使用されたか(メモリ全体のスナップショットでした)、そして古いフロッピーが現代のレトロな世界のためにどのようにデジタル化されるかについて誰かが知っていますか?おそらく私たちはそれらをFDIフォーマットに変換することができますか?

動機:

StarBladeで行ったように、リリースされたことのないゲームGalacticPatrolをアップロードしてみるといいでしょう。敵の波を邪悪にしすぎてしまったことをお詫びします!もう少しプレイテストをすることもできたかもしれませんが、私たちはまだ学校に通っていました。

これは、私の兄弟が考案した高速画面切り替えスキームを使用して「フル」カラーで実行されました。これは、クラッシュでここに記載されています。

回答

3 Tommy Jan 16 2021 at 04:11

技術情報や既存のエミュレーターは見つかりませんでしたが、リンクを介して、インターフェイスのボードのこの高解像度の画像を見つけました。

そこから私は次のことに気づきます:

  • ディスクコントローラはWD1770で、左側の大きなものです。
  • エッジコネクタの下半分の右側にある2つの大きなチップは、8kbのRAMとEPROMです。そして
  • 表示される他のすべては74シリーズロジックです。

割り込みボタンがオンボードROMで切り替わり、NMIをトリガーするのは、Spectrumのアーキテクチャに基づく安全な方法です。

リンクされているROMイメージのサイズは32kbと16kbですが、前者は16kbのデータを2回コピーしたようですが、EPROMが16kbであると付け加えることもできます。その場合、その8kbのRAMがいつどこに表示されるかを推測するのに多少の推測が必要になる可能性があります。 。

comp.sys.sinclairで、後のバージョンに追加されたMicrodriveエミュレーションは部分的にハードウェアベースであるという古い言及を見つけましたが、ボードのリビジョンが付属しているようです。したがって、エミュレータの作成者は、追加のハードウェアがまだ存在しないことを期待して、おそらく古いEPROMから始めるでしょう。

それ以外の場合、良いニュースは、ディスクコントローラーがバニラIBMエンコーディングを行う非常に標準的な部品であり、「ディスクあたり13の48kbゲーム」という宣伝されているフロッピー容量に基づいて、ディスク上のデータの物理フォーマットは次のように推測できることです。 MFM(つまり、通常のPCの「倍密度」)。

つまり、MFMが基本的にサポートする唯一のものであるため(高密度フロッピーのみをサポートするものが見つからない限り)、プレーンUSBディスクドライブを使用してディスクをイメージできる可能性がありますが、多くの場合、512バイトのセクターに制限されています。番号が固定されているため、これは保証されません。ただし、あまり一般的ではない解決策を探す前に、試してみる価値があるかもしれません。このMSX関連のページは、Windowsセクションが空ですが、LinuxおよびmacOSのガイドを提供します。そこではもう少し調査が必要かもしれません。

それができない場合は、アムストラッドCPCのようなマシンのフロッピーをイメージできるソリューションを検討してください。これらはさまざまなセクターサイズとアドレス指定を処理する必要があり、一般的なCPC関連のファイル形式はそのすべての情報を保持できます。USB以前のフロッピーディスクコントローラとドライブを搭載するのに十分な古さのPCと、ソフトウェアがコントローラに自由にアクセスできるDOSなどのOSをお持ちの場合は、それでうまくいくはずです。または、scrussやKryofluxなどが言及したGreaseweazleなど、まさにこの問題に対応する低レベルのディスクコントローラーが存在します。

動作中のSpectrumエミュレーターから始めて、Swiftディスクインターフェイスを追加したり、フロッピーを読み取ったりするのにそれほど多くのことをする必要はありません。

WD1770に書き込むソフトウェアは非常によく知られているため、これらのアドレスをかなり簡単に分離できます。NMIルーチンが最初に行う必要があるのは、現在の表示をバックアップして、あまりジレンマのないRAMの質問。その時点で、ディスクイメージを接続するのと同じくらい簡単かもしれません。

これらの少しあいまいなインターフェイスがエミュレートされない場合の多くは、テストデータが利用できないためです。ディスクイメージを持っているだけで、既存の作者に興味を持ってもらうことができる可能性は非常に高いです。そうでなければ、Spectrumエミュレーターは簡単にノックアップできるので、一般的に正しい種類のコードを実行している私のような人が助けてくれるはずです。

または、検索が特に徹底的ではなかったため、すでにエミュレートされていることがわかる場合があります。その場合は、この回答の90%を変更できるように、お知らせください。

2 Spektre Jan 16 2021 at 16:25

WD1770を使用しているようです。よく知らないのですが、最初にWD1770がIBMフォーマットと互換性があるかどうかを確認してください。はいの場合は、PCで直接ディスクを読み取ることができます...そうでない場合は、ディスクを読み取ることができるハードウェアが必要です。

したがって、PC互換の場合は、ファイル形式ではなく、C ++(またはその他の言語やユーティリティ)で直接セクターアクセスを使用してイメージを作成します。フロッピーのバイナリイメージを取得した後(いずれかの方法で)、2つのオプションがあります。

  1. FDCをエミュレートする

    そのため、FDCインターフェイスをエミュレートできるエミュレータを用意するか、そのような機能をオープンソースコードに追加する必要があります。

    最後のリンクにはROMイメージと回路があります(ただし、これは読み取り不能です)。したがって、回路を逆にすることでこれをエミュレートできる可能性があります...以前にエミュレーターとWD2797に基づくD40 / D80FDCに対してこれを行いました。ただし、これはMC(マシンサイクル)タイミング解像度(私のような)で実行されるエミュレーターに対してのみ簡単に実行できます。そうでない場合、FDCは、Z80コードをバイパスしてHWおよびSW条件に接続し、代わりにFDCコード/操作を挿入することによってのみハッキングする必要があります(ほとんどのエミュレーターがそれを行う方法ですが、これは100%互換性がなく、カスタムローダーなどが機能しない可能性があります)対象のFDCの動作に関する深い知識がなければ誰もできません。

  2. ファイルを抽出する

    または、FDCを完全にバイパスして、圧縮されていないファイルをイメージから、などのエミュレーターで読み取り可能な形式に抽出します*.tap。あなたがいくつかの画像を共有する場合(どのファイルとどのくらいの長さの説明が最適です)、私はあなたのためにこれを行うwin32コンバーターを作成しようと思っています。

    ファイルは単なるスナップショットであるため、これが最善の選択肢かもしれません。理想的には、ハードウェアにもアクセスできる場合は、特定のメモリパターンを作成してフロッピーに保存すると、ファイルシステムへの侵入が容易になります。たとえば、128K(RAM部分)に32ビットアドレス(増分値)を入力します。セクターを正しい順序でまとめて、使用されている場合はFATに一致させることができます...