SFD-700 mkII ユーザーマニュアル

SFD-700 mkII ユーザーマニュアル

SFD-700 mkII は Sharp MZ シリーズのホームおよびビジネスコンピューター用フロッピーディスクインターフェースカードです。フロッピーサポートが内蔵されていない、または独自の現在では入手困難な拡張カードが必要なマシンに標準的な 3.5 インチまたは 5.25 インチフロッピーディスクドライブを接続できます。MZ-700 でのみ動作し(しかも MZ-1U06 拡張ユニット内でのみ)、1985 年製のオリジナル Kersten & Partners SFD-700 とは異なり、mkII は 3 ビット MODE ジャンパーによって 1 枚の基板で 7 種類の Sharp MZ ホストマシンをサポートする完全な新設計です。
このマニュアルでは、Sharp MZ コンピューターに SFD-700 mkII を組み立て、インストール、使用するために必要なすべての情報を説明します。詳細なハードウェアとロジックの情報については テクニカルガイド を参照してください。CPLD ロジックまたは ROM ファームウェアの変更については デベロッパーズガイド を参照してください。

必要なもの

ハードウェア
  • SFD-700 mkII v1.2 PCB — 著者から 6 枚の予備基板を入手できます(送料のみ);ウェブサイトから連絡してください。自己製造用の Gerber ファイルはリポジトリの releases/ ディレクトリにあります。
  • 部品表(BOM)に記載されているすべての部品(KiCAD インタラクティブ BOM は kicad/v1.0/bom/ibom.html に含まれています)。
  • 組み立て後に CPLD をプログラムするための Altera USB-Blaster(またはクローン)JTAG プログラマー。
  • 1 台または 2 台の 3.5 インチ PC 互換フロッピーディスクドライブ(DD または HD)。5.25 インチドライブもサポートされています。
  • 34 ピン IDC フロッピーリボンケーブル。2 台のドライブを使用する場合、ケーブルには 3 つのコネクターが必要です(ドライブ B と A のコネクターの間にツイストのある PC スタイル)。
  • フロッピー電源ケーブルスプリッター(ドライブタイプによって 4 ピン Molex または Berg/mini コネクター)。
  • 特定のホストマシン用の拡張コネクター — 以下の ホストコネクター を参照してください。
ソフトウェア(ソースからビルドする場合)
  • Quartus II 13.0.1 SP1 Web Edition — CPLD VHDL ソースのコンパイルに必要です。後のリリースでは MAX7000S デバイスサポートが削除されたため、この特定のバージョンが必要です。Intel FPGA Software Archive から入手できます。
  • Logical Devices CUPL v4.0(オプション、v1.0/v1.1 GAL ファイルのみ)— DOSBox 上で実行できます。
工具
  • 細いチップのはんだごて、はんだ、フラックス。
  • PLCC-84 ソケット(必須 — EPM7128SLC84 は面実装 PLCC デバイスで、再プログラミングのためにソケットに実装する必要があります)。
  • 静電防止マットとリストストラップ — CMOS デバイスは静電気に敏感です。

基板概要

SFD-700 mkII v1.2 PCB は以下の主要コンポーネントを搭載しています。組み立て前にそれらの位置を理解しておくと、ビルドプロセスがスムーズになります。
リファレンス コンポーネント 説明
U1 EPM7128SLC84-15 84 ピン PLCC パッケージの Altera MAX7000S CPLD — すべてのバスロジックを実装
U2 WD1773 Western Digital フロッピーディスクコントローラー IC
U3 SST39SF040(または互換品) 512 KB Flash ROM — ブートファームウェアを格納(AFI ROM、ROM Filing System ページ)
U4 62256(32KB SRAM) ROM Filing System ワークスペース用スタティック RAM
X1 16 MHz 水晶発振器 主要クロックソース — WD1773 用に 8 MHz に分周
J1 MODE ジャンパー(3 ピン × 1) ホストマシンを選択(MODE ジャンパー を参照)
J2 JTAG ヘッダー(10 ピン) USB-Blaster による CPLD プログラミングに使用
J3 フロッピーコネクター(34 ピン IDC) 標準リボンケーブルでフロッピードライブに接続
J4 ホストバスコネクター Sharp MZ 拡張バスに接続

v1.2 PCB

PCB Top PCB Bottom PCB 3D Top PCB 3D Bottom


MODE ジャンパーの設定

3 ビットの MODE ジャンパー(J1)は、カードが取り付けられている Sharp MZ ホストマシンを CPLD に伝えます。この値はシステムリセットのたびに CPLD によってラッチされます — 電源投入時に 1 回読み取られ、内部的に格納されます。ホストコンピューターの電源を入れる前にジャンパーを設定する必要があります。電源投入中にジャンパーを変更しても、次のリセットまで効果はありません。
ジャンパーは 3 位置のバイナリヘッダーです。ジャンパー位置をショートすると MODE 値に 1 が加算され、オープンのままにすると 0 が加算されます。完全な真理値表は以下の通りです:
MODE バイナリ(bit2:bit1:bit0) ホストマシン
0 0 : 0 : 0 Sharp MZ-80A / MZ-1200
1 0 : 0 : 1 Sharp MZ-700
2 0 : 1 : 0 Sharp MZ-80B
3 0 : 1 : 1 Sharp MZ-800
4 1 : 0 : 0 Sharp MZ-1500
5 1 : 0 : 1 Sharp MZ-2000
6 1 : 1 : 0 Sharp MZ-2200
MZ-80A / MZ-1200(MODE 0)
MZ-80A は Z80 CPU を 2 MHz で動作させます。これは WD1773 の DRQ(データリクエスト)フラグを確実にポーリングして次のバイトが到着する前に各バイトを取得するには遅すぎます。CPLD は MODE 0 でこれを自動的に処理します。DRQ 信号を Flash ROM アドレスビット A10 に直接ルーティングすることで行います。ブート ROM の各 1 KB セグメントに読み取りルーチンの重複コピーが格納されています — DRQ 状態がハードウェアで直接正しいパスを選択し、ソフトウェアポーリングループを完全にバイパスします。これについて何も設定する必要はありません;自動です。
MZ-700 / MZ-1500(MODE 1 と 4)
これらのマシンには、内部 DRAM と CGROM を上位アドレス空間(D000h〜FFFFh)にバンクイン/アウトできるメモリ管理コントローラーがあります。CPLD はメモリ管理 I/O ポート(0xE0〜0xE6)を監視し、ホストのページング状態と一致するように SFD-700 のオンボード Flash ROM と RAM を自動的に有効化または無効化します。
MZ-80B、MZ-800、MZ-2000、MZ-2200(MODE 2、3、5、6)
これらのマシンには内蔵 IPL ROM にフロッピーディスクブートストラップファームウェアが含まれているため、SFD-700 のオンボード Flash ROM はアドレス空間にマッピングされません。CPLD は引き続き I/O デコード、FDC 制御、WD1773 が必要とするデータバス反転を処理します。マシン固有の IPL コードは CPLD の I/O ポートデコードロジックを通じて WD1773 に直接話しかけます。

ホストコネクター

Sharp MZ の各マシンは異なるコネクターを通じて拡張バスを提供します。以下はサポートされている各ホストの接続方法のまとめです。
ホスト 拡張方法 注記
MZ-80A / MZ-1200 リア拡張ポートの直接エッジコネクター リビジョンによって 50 ピンまたは 60 ピンのバスコネクター
MZ-700 MZ-1U06 拡張ユニットまたはカスタムアダプター MZ-1U06 とカスタムアダプターに関する下記注記を参照
MZ-80B リア拡張スロット 標準 MZ-80B バスヘッダー
MZ-800 リア拡張スロット MZ-800 バスコネクター
MZ-1500 EXT700 アダプターまたは直接リア拡張 EXT700 アダプター(別プロジェクト)が MZ-700 スタイルの拡張バスをインターフェースします
MZ-2000 MZ-2000 拡張ユニット 拡張シャーシのスロット
MZ-2200 MZ-2200 拡張スロット リア拡張コネクター
MZ-700 注記: オリジナルの K&P SFD-700 は外部ページングロジックを提供する MZ-1U06 拡張ユニット内での使用専用に設計されていました。SFD-700 mkII は CPLD 内に独自のページングロジックを含み、MZ-1U06 内でもカスタム拡張アダプターでも動作します — これが K&P オリジナルに対する主要な改善点の 1 つです。

ホストコンピューターへのインストール

安全第一: 拡張カードを取り付けまたは取り外す前に、必ずホストコンピューターの電源を切り、電源コンセントから抜いてください。Sharp MZ マシンは 5V で動作します;電源が入った状態でカードを挿入または取り外すと、カードとホストの両方が損傷する可能性があります。
一般的なインストール手順:
  1. カードを取り付ける前に SFD-700 mkII の MODE ジャンパー(J1)をホストマシン用に設定します。
  2. ホストコンピューターの電源を切り、電源コンセントから抜きます。
  3. SFD-700 mkII をマシンの適切な拡張スロットまたはアダプターに挿入します。すべてのエッジコネクターピンがしっかりと接触していることを確認してください。
  4. SFD-700 mkII の J3 からフロッピードライブへの 34 ピンフロッピーリボンケーブルを接続します。以下の フロッピードライブの接続 を参照してください。
  5. ホストの内部電源または外部電源からフロッピードライブの電源を接続します。
  6. ホストコンピューターの電源を入れます。

フロッピードライブの接続

SFD-700 mkII は最大 4 台のドライブ(A〜D)をサポートします。実際には、1 台または 2 台のドライブが最も一般的な構成です。標準の 3.5 インチ PC 互換倍密度(DD)または高密度(HD)ドライブが動作し、5.25 インチ機器もサポートされています。

ドライブ選択とモーター制御
ドライブ選択は I/O ポート 0xDC への書き込みで制御されます。下位 3 ビットがアクティブドライブをエンコードします:
ビット [2:0] の値 選択されたドライブ
0 なし(全ドライブを選択解除)
4 ドライブ A
5 ドライブ B
6 ドライブ C
7 ドライブ D
同じバイトのビット 7 がスピンドルモーターを制御します — 1 を書き込むとモーターを起動し、0 で停止します。WD1773 に読み書きコマンドを発行する前に、モーターが動作して(ドライブヘッドが安定して)いる必要があります。
ケーブル注記: 標準の PC フロッピーケーブルは B と A のコネクターの間にツイストがあります。ツイストケーブルを使用する場合、ツイストの後のエンドコネクターに物理的に接続されたドライブがドライブ A として応答します;ミドルコネクターがドライブ B です。ツイストケーブルを使用する場合、両方のドライブの DS(ドライブ選択)ジャンパーを DS1(ドライブ 1)に設定する必要があります。ストレート(ツイストなし)ケーブルを使用する場合は、ドライブ選択ジャンパーを個別に設定します(ドライブ A は DS0、ドライブ B は DS1)。
ターミネーション: ケーブルの最後のドライブのみにターミネーション抵抗パックを取り付ける必要があります。最近の 3.5 インチドライブのほとんどはターミネーターが内蔵されていて取り外せません — これはシングルドライブ構成では問題ありません。古い 5.25 インチドライブの 2 台構成では、ドライブ A(ミドルコネクター)からターミネーターを取り外し、ドライブ B(ケーブルの末端)にのみ残してください。

電源投入と初期テスト

インストールとドライブ接続が完了したら、ホストコンピューターの電源を入れます。期待される動作はホストマシンによって異なります:
MZ-80A / MZ-1200: マシンは内蔵モニター ROM から通常通り起動します。フロッピーディスクからブートするには、モニタープロンプトで F と入力します。SFD-700 mkII の AFI ROM が制御を取り、ドライブ A をスピンアップして、ブートセクターのロードを試みます。
MZ-700: 同様に通常通り起動し、モニタープロンプトで F と入力してフロッピーブートを開始します。ROM Filing System(RFS)が SFD-700 mkII の Flash ROM にプログラムされている場合、サインオンバナーに "+ RFS" が含まれ、* プロンプトで完全な RFS コマンドセットが使用できます — 以下の ROM Filing System セクションを参照してください。
MZ-80B、MZ-800、MZ-2000、MZ-2200: ドライブ A にブータブルディスクが挿入されていてマシンの IPL がドライブを検出した場合、これらのマシンはフロッピーから自動ブートします。MZ-80B と MZ-800 では、内蔵モニターファームウェアが SFD-700 の I/O ポートを通じて WD1773 を直接初期化します。
MZ-1500: EXT700 アダプターまたは同等品が必要です。アダプターが接続されたら MZ-700 のブート手順に従ってください。
マシンがフロッピーコマンドに応答しない場合は、MODE ジャンパーの設定を確認し、リボンケーブルの向き(ケーブルのピン 1、通常赤いストライプで示される、が SFD-700 mkII の J3 のピン 1 に合っている必要があります)を確認し、ドライブに電源が来ていることを確認してください。

ROM Filing System (RFS)

ROM Filing System(RFS)は SFD-700 mkII の Flash ROM に格納されたソフトウェアのスイートで、ホストマシンのモニターを包括的な拡張コマンドセットで拡張します。RFS は tranZPUter プロジェクトから移植され、SFD-700 mkII ハードウェア用に適応されています。起動時に、ファイリングシステムの初期化が成功すると、馴染みある SA-1510 モニターのサインオンバナーに "+ RFS" が追加され、標準の * プロンプトが表示されます。以下に示す RFS 拡張とともに、すべてのオリジナル SA-1510 コマンドが引き続き使用できます。

Flash ROM ページレイアウト
512 KB Flash ROM は 4 KB ページに分割されています。CPLD は 2 つの独立してページ可能な 4 KB ウィンドウを提供します:
  • FXXX ウィンドウ(F000h〜FFFFh): ページ 0 は MZ-80A AFI ブート ROM を保持します。ページ 1 は MZ-700 AFI ブート ROM を保持します。より高いページは RFS モジュールを保持します。アクティブページは I/O ポート 0x61 への書き込みで選択されます。
  • EXXX ウィンドウ(E300h〜EFFFh): ここのページは追加の RFS コードとデータを保持します。アクティブページは I/O ポート 0x60 への書き込みで選択されます。各 4 KB ページの 3.75 KB のみ使用可能です(E000h〜E2FFh は MZ-700/MZ-1500 メモリマップド I/O 用に予約されています)。

使用可能なコマンド
SFD-700 mkII で使用可能な RFS モニターコマンドの完全なセットを以下に示します。
コマンド パラメータ 説明
ASM <address> <address> から始まる内蔵 Z80 アセンブラーを起動します。ニーモニックを 1 行ずつ入力します;アセンブルされたバイトは直接 RAM に書き込まれ、アドレスは自動的に進みます。
B n/a キー入力ビープの有効/無効を切り替えます。
BASIC n/a ROM 内の BASIC SA-5510 を検索し、ロードして実行します。
C [<8 bit value>] 0x1200 から RAM の末尾まで 0x00 または指定したバイト値でメモリを初期化します。
CP <src addr> <dst addr> <size> メモリのブロックをコピーします。3 つの引数はすべて 4 桁の 16 進数:ソースアドレス、デスティネーションアドレス、バイト数。例:CP120020003FFF は 0x1200 から 0x2000 に 0x3FFF バイトをコピーします。
CPM n/a ROM 内の CP/M 2.2 を検索し、ロードして起動します。
D <address>[<address2>] <address> から <address2>(または 20 行)まで 16 進および ASCII でメモリをダンプします。各画面分で出力が一時停止します;キーを押して続行、’U’ で前ページ、’X’ で終了。アドレスなしで ‘D’ を繰り返すと最後に表示した位置から続行します。
DASM <address>[<address2>] <address> から <address2> まで内蔵 Z80 ディスアセンブラーを起動します。各命令のアドレス、16 進バイト、ニーモニックを表示します。
F / FL [<drive>] 指定したフロッピードライブからブートします。省略するとドライブ番号の入力を求めるプロンプトが表示されます。ブートセクタを読み取り、ブートプログラムをメモリにロードして実行します。
FD [<drive>] フロッピーディスクのディレクトリ一覧を表示します。オプションのドライブ番号でドライブ 1〜4 を選択します(デフォルト: 1)。各ファイルのファイル名、ロードアドレス、実行アドレス、ファイルサイズを表示します。
H n/a 使用可能なすべてのコマンドのページ形式ヘルプ画面を表示します。
IR n/a Flash ROM ドライブに格納されているプログラムのページ形式ディレクトリ一覧。各エントリには 16 進ファイル番号とファイル名が表示されます。
J <address> 指定したアドレスにジャンプします(そこから実行を開始します)。
L | LT [<filename>] テープ(CMT)からファイルをロードして実行します。
LTNX [<filename>] テープ(CMT)からファイルを実行せずにロードします。
LR <name> または <file no.> 名前またはファイル番号で ROM からプログラムをロードして実行します。
LRNX <name> または <file no.> 名前またはファイル番号で ROM からプログラムを実行せずにロードします。
M <address> <address> から始まるインタラクティブメモリエディター。現在のバイト値を表示します;新しい 16 進値を入力して Enter を押して書き込むか、Enter のみで変更なしにします。
P n/a 接続されたプリンターのテストを実行します。
R n/a 0x1200〜0xCFFF で包括的な DRAM メモリテストを実行します。失敗したアドレスを報告します。
S | ST <start addr> <end addr> <exec addr> メモリのブロックをテープ(CMT)に保存します。ファイル名の入力を求めるプロンプトが表示されます。例:S120020001203 は 0x1200 から 0x2000 まで実行アドレス 0x1203 で保存します。
T n/a 8253 タイマーをテストします。
V n/a テープに保存したばかりのファイルをメモリ内の元データと照合して確認します。

ディスクイメージツール
SFD-700 mkII と互換性のあるフロッピーディスクイメージを作成・管理するためのコンパニオンツールが RFS リポジトリに 2 つ提供されています:
  • MZFDTooltools/MZFD/MZFDTool)— MZ-700 FDC 用のフロッピーディスクイメージを作成・管理します。空イメージのフォーマット、ディレクトリ一覧の表示、MZF ファイルの追加と抽出、ブートプログラムの設定をサポートします。使用法: MZFDTool format|dir|add|extract|boot [-o disk.img]。デフォルトイメージファイル名: MZ700.img
  • MZQDTooltools/MZQD/MZQDTool)— Quick Disk(QD)イメージを作成・管理します。フォーマット、ディレクトリ一覧の表示、MZF ファイルの追加をサポートします。使用法: MZQDTool format|dir|add [-o disk.qd]。デフォルトイメージファイル名: MZ700.qd

トラブルシューティング

ホストコンピューターがフロッピーコマンドに応答しない

  • MODE ジャンパーを確認 — J1 がホストマシンに対して正しく設定されていることを確認してください。MODE が正しくないと、CPLD が間違った I/O アドレス範囲をデコードするか、ブート ROM のマッピングに失敗します。
  • カードの装着を確認 — SFD-700 mkII を取り外して再挿入し、すべてのエッジコネクターピンが確実に接触していることを確認してください。
  • CPLD プログラミングを確認 — CPLD がプログラムされていない場合(製造直後など)、カードは機能しません。Quartus Programmer または JTAG ヘッダー J2 経由の USB-Blaster を使用して CPLD をプログラムしてください。テクニカルガイド — CPLD のプログラミング を参照してください。
  • Flash ROM がプログラムされていることを確認 — Flash ROM にはマシン用の AFI ブートコードが含まれている必要があります。標準の EPROM/Flash プログラマーを使用して、リポジトリの ROM/ ディレクトリから適切なバイナリでプログラムしてください。

ドライブがスピンアップまたはシークしない

  • 電源を確認 — フロッピードライブが 5V と 12V を受け取っていることを確認してください(5.25 インチドライブの場合)。3.5 インチドライブは通常 5V のみ必要です。
  • リボンケーブルの向きを確認 — リボンケーブルの赤いストライプ(ピン 1)が SFD-700 mkII の J3 のピン 1 とドライブのコネクターのピン 1 に合っている必要があります。
  • ドライブ選択書き込みを確認 — ファームウェアはモータービット(ビット 7)を 1 に設定してポート 0xDC に正しい値を書き込み、その後 WD1773 コマンドを発行する前にモーターがスピンアップするまで待つ必要があります。
  • ターミネーションを確認 — 誤ったターミネーションは信号の反射を引き起こし、ドライブが応答できなくなる可能性があります。ケーブルの最後のドライブのみをターミネートする必要があります。

フロッピーでの読み取りエラー / CRC エラー

  • ディスク密度設定を確認 — ポート 0xDE に正しい値を書き込んでください。ビット 0 低 = 倍密度(MFM)、ビット 0 高 = 単密度(FM)。最近の 3.5 インチドライブと CP/M ディスクのほとんどは倍密度を使用します。
  • ディスクフォーマットを確認 — WD1773 は標準の MFM/FM コントローラーです。互換性のないジオメトリ(誤ったトラック数、セクターサイズ、またはインターリーブ)でフォーマットされたディスクはエラーを生成します。SFD-700 mkII 専用に RFS フォーマットツールを使用してディスクを準備してください。
  • 別のディスクを試す — フロッピーメディアは時間とともに劣化します。複数のディスクで持続的な読み取りエラーが発生する場合は、汚れたまたはアライメントがずれたドライブヘッドを示している可能性があります;ヘッドクリーニングディスクで清掃してください。
  • MZ-80A データレートの問題 — MODE 0(MZ-80A)で動作していて断続的なエラーが発生する場合は、CPLD が最新のビットストリームでプログラムされていることを確認してください。2 MHz CPU 速度制限を処理する DRQ から ROM A10 へのルーティングが正しく機能している必要があります。

MZ-700:特定のソフトウェア操作後に ROM が見えなくなる

  • これは期待される動作です。MZ-700 ソフトウェアが I/O ポート 0xE1(DRAM を D000h〜FFFFh にマップ)または 0xE5(全上位メモリを禁止)に書き込むと、CPLD は SFD-700 mkII の ROM と RAM を正しく無効化します。0xE3、0xE4、または 0xE6 を書き込むと再び有効になります。これは MZ-700 メモリ管理システムの動作方法であり、CPLD はそれを透過的に追跡します。
  • ROM が永続的に消えて回復できない場合は、CPLD が Z80_RESETn 信号を正しく受信しているか確認してください — リセットは両方のページング状態ビットをクリアし、デフォルトの ROM マッピングを復元します。

参考サイト

リソース リンク
SFD-700 mkII プロジェクトページ /sfd700/
SFD-700 mkII テクニカルガイド /sfd700-technicalguide/
SFD-700 mkII デベロッパーズガイド /sfd700-developersguide/
SFD-800(MZ-800 コンパニオンカード) /sfd800/
K&P SFD-800 マニュアル(ドイツ語) /Downloads/Manuals/KandP/sfd_mfd800.pdf
WD1773 データシート Western Digital / BPCD アーカイブ
Altera MAX7000S データシート Intel FPGA 製品ページ
Quartus II 13.0.1 SP1 Web Edition Intel FPGA Software Archive