Copyright(C) 1994,1995,1996,1997 Terumasa KODAKA , Takeshi KONO ■フロッピーディスクインターフェース 解説 o PC-9800のフロッピーディスクインターフェース(320KB FD I/Fを除く)では、 FDC(Floppy Disk Controller)にμPD765Aを使用している。 o PC-9800シリーズでは、640KBインタフェースと、1MBインタフェースの2つの インタフェースが存在する。PC-9801初代・E・F・Mのでは、この2つのインタフェ ースは共存可能であり、I/Oポートアドレス、外部割り込み番号、DMAチャネル 番号、BIOSワークエリアは全て異なったものを使用する。PC-9801VM(正確にはP C-98XAが最初)以降では、両用FD I/Fがサポートされ、内蔵のFDDでは640KBフ ォーマットと1MBフォーマットの両方が使用できる。 o 両用FD I/Fでは、従来のインターフェースとの互換性のために、1MB FD専用 I/Fと同じI/Oポートアドレス、外部割り込み番号、DMAチャネル番号、BIOSワ ークエリアを用いるモード(1MB I/Fモード)と、640KB FD専用I/Fと同じI/Oポ ートアドレス等を用いるモード(640KB I/Fモード)が用意されている。I/Fモ ードは、起動時にDIP SW 3-1,3-2の状態、およびブートに使用されるメディア 等によって決定される。工場出荷時状態(DIP SW 3-1,3-2ともOFF)では、1MB フォーマットのFDから起動すると1MB I/Fモードに、640KBフォーマットのFD から起動すると640KB I/Fモードに自動的に設定される、自動モードである。 -------------------------------------+--------------------------------- 機種 |使用するI/Oポート -------------------------------------+--------------------------------- 1MB専用インターフェース |0090h, 0092h, 0094h 640KB専用I/F |00C8h, 00CAh, 00CCh 両用FD I/F(1MB I/Fモード) |0090h, 0092h, 0094h, 00BEh 両用FD I/F(640KB I/Fモード) |00C8h, 00CAh, 00CCh, 00BEh 1.44MB対応両用FD I/F(1MB I/Fモード) |0090h, 0092h, 0094h, 00BEh, 04BEh 1.44MB対応両用FD I/F(640KB I/Fモード)|00C8h, 00CAh, 00CCh, 00BEh, 04BEh -------------------------------------+--------------------------------- * 1.44MB対応両用FD I/Fは、640KB I/Fモードに設定すると、 1.44MBフォーマットのディスクにアクセスできない。 I/O 0090h,00C8h 名前 ステータスレジスタ 対象 チップ μPD765A相当 機能 [READ] ステータスレジスタリード bit 7: RQM(Request for Master) 1= FDCがデータ受け付け中、またはデータ送信準備完了 0= FDCがデータ受け取り不可、またはデータ送信準備未完了 bit 6: DIO(Data Input/Output) 1= FDC→ホスト方向転送 0= ホスト→FDC方向転送 bit 5: NDM(Non-DMA Mode) 1= FDCがNonDMAモードでデータ転送中でサービスを要求している 0= FDCのサービス要求なし bit 4: CB(FDC Busy) 1= FDCがコマンドを実行中 0= FDCはコマンドを受け付け可能 bit 3: D3B(FD3 Busy) bit 2: D2B(FD2 Busy) bit 1: D1B(FD1 Busy) bit 0: D0B(FD0 Busy) 1= FDDがシーク中 0= FDDはシーク中でない [WRITE] 禁止 解説 o μPD765A(FDC:Floppy Disk Controller)のステータスを示す。 詳細はμPD765Aのデータシートを参照。 o I/Oアドレスは、FD I/Fの種類、モードにより以下のようになる。 -------------------+--------------------------------------- 使用するI/Oアドレス|FD I/Fの種類、モード -------------------+--------------------------------------- 0090h |PC-9801-15,PC-9801初代・M内蔵FD I/F, |両用FD I/Fの1MB I/Fモード 00C8h |PC-9801-08・09,PC-9801F・U・VF内蔵FD I/F, |両用FD I/Fの640KB I/Fモード -------------------+--------------------------------------- 関連 I/O 0092h I/O 00CAh I/O 0092h,00CAh 名前 データレジスタ 対象 チップ μPD765A相当 機能 [READ] データレジスタ読み込み [WRITE] データレジスタ書き込み [コマンド一覧] ----------------+---------------------------------- コマンド |コマンド名称 ----------------+---------------------------------- 0x000010b |READ DIAGNOSTIC 00000011b |SPECIFY 00000100b |SENSE DEVICE STATUS xx000101b |WRITE DATA xxx00110b |READ DATA 00000111b |RECALIBRATE 00001000b |SENSE INTERRUPT STATUS xx001001b |WRITE DELETED DATA 0xx01010b |READ ID xxx01100b |READ DELETED DATA 0x001101b |WRITE ID 00001111b |SEEK xxx10001b |SCAN EQUAL xxx11001b |SCAN LOW OR EQUAL xxx11101b |SCAN HIGH OR EQUAL その他 |INVALID ----------------+---------------------------------- 解説 o μPD765A(FDC)とCPUの間で、各種情報(コマンド,パラメータ,データ,リザルト ステータス)を交換するためのデータレジスタにアクセスするためのポート。 詳細はμPD765Aのデータシートを参照。 o I/Oアドレスは、FD I/Fの種類、モードにより以下のようになる。 -------------------+--------------------------------------- 使用するI/Oアドレス|FD I/Fの種類、モード -------------------+--------------------------------------- 0092h |PC-9801-15,PC-9801初代・M内蔵FD I/F, |両用FD I/Fの1MB I/Fモード 00CAh |PC-9801-08・09,PC-9801F・U・VF内蔵FD I/F, |両用FD I/Fの640KB I/Fモード -------------------+--------------------------------------- 関連 I/O 0090h I/O 00C8h 0000:0564〜0583h 0000:05D0〜05D6h I/O 0094h,00CCh 名前 コントロールレジスタ,リードスイッチ/シグナル 対象 ノーマル, PC-98LT・HA チップ 機能 [READ] リードスイッチ/シグナル ■[PC-9801初代を除く] bit 7: FINT1 - FDD I/Fボード上のDIP SW 1-7(割込番号設定)の状態 1= OFF 0= ON(既定値) * PC-9801-08・09・15,PC-9801F・M内蔵FD I/F上のDIP SWの状態。 両用FD I/Fでは0に固定。 bit 6: FINT0 - FDD I/Fボード上のDIP SW 1-6(割込番号設定)の状態 1= OFF(既定値) 0= ON * PC-9801-08・09・15,PC-9801F・M内蔵FD I/F上のDIP SWの状態。 両用FD I/Fでは1に固定。 bit 5: DMACH - FDD I/Fボード上のDIP SW 1-3(DMAチャネル設定)の状態 1= OFF(PC-9801-08・09,PC-9801F内蔵FD I/Fの既定値) 0= ON(PC-9801-15,PC-9801初代・M内蔵FD I/Fの既定値) * PC-9801-08・09・15,PC-9801F・M内蔵FD I/F上のDIP SWの状態。 両用FD I/Fでは、1MB I/Fモード時0に固定、 640KB I/Fモード時1に固定。 bit 4: RDY - FDDのRDY端子の状態 ■[640KB I/Fのみ] * PC-9801-08・09,両用FD I/Fの640KB I/Fモード時のみ有効。 * テクニカルデータブックで、PC-9801初代のみPSTB#マスクの 機能であるという記述があるが、PSTB#マスクはライト時の機能 なので、実際にはPC-9801初代でこのビットは未使用。 bit 3,2: TYP1,TYP0 - ドライブ番号割り当て状態 ■[両用FD I/Fのみ] 10b= 内蔵FDDが#3,#4、外付FDDが#1,#2(DIP SW 1-4=ON) 01b= 内蔵FDDが#1,#2、外付FDDが#3,#4(DIP SW 1-4=OFF) * FDDの接続状態を示す。 * このビットは両用FD I/Fでのみ有効。PC-9801-08・09・15と PC-9801初代・F・M・U内蔵FD I/Fでは未定義。 PC-9801VF内蔵のFD I/Fは常に00bを示す。 * 従来、両用FD I/Fを備えている機種では、内蔵している(最大)2台の FDDだけが両用ドライブで、FD I/Fコネクタ経由で外部に増設した FDDは1MB専用ドライブとしてしか使えなかった。このため、従来は このビットの状態から、どのドライブが両用ドライブなのかを判断 することができた(例えば、TYP0が1なら#1,#2ドライブが 両用ドライブと判断できた)。 ところが、ファイルスロットまたはファイルベイを搭載している 機種では、最大3台のFDDを内蔵することができるようになった。 この場合、内蔵の3台のドライブは両用ドライブとして使用できる が(ファイルスロットにPC-9801-F04を実装したときを除く)、さらに FDDを1台外付した場合は、そのドライブは非両用ドライブとなる。 このため現在では、このビットの状態からどれが両用ドライブかを 判断することはできなくなった。VFDDRV.EXE(仮想FDドライバ)が 提供するドライブも含め、正しく両用/非両用を判断するため には、ディスクBIOSのINT 1Bh - Function 84h(FD),C4h(FD)を使う 必要がある。 関連: INT 1Bh - Function 84h(FD) INT 1Bh - Function C4h(FD) DIP SW 1-4 bit 1,0: 00b * 両用FD I/FとPC-9801VF内蔵FD I/Fのみ定義。PC-9801-08・09・15と PC-9801初代・F・M・U内蔵FD I/Fでは未定義。 [WRITE] ライトコントロールレジスタ bit 7: RST(Reset) 1= FDCリセット 0= NOP * μPD765AのRESET端子への入力信号。 bit 6: FRY(Forced Ready) 1= RDY信号を強制的にアクティブ 0= NOP * μPD765AのRDY端子への入力信号。ドライブからのRDY信号と ORしたあとFDCに入力される。 * PC-9801-08・09,PC-9801F内蔵FD I/Fでは未使用。これらのI/Fでは、 FDCのRDY信号線は常時プルアップされている。 bit 5: AIE(Attention Interrupt Enable) ■[640KB I/Fのみ] 1= FRY(bit 6)の状態変更を許可する 0= FRY(bit 6)の状態変更を禁止する * PC-9801U・VF内蔵FD I/Fと両用FD I/Fの640KB I/Fモードでのみ 有効。 bit 4: DMAE(DMA Enable) - DMA使用の選択 ■[PC-9801初代以外] 1= DMAモード 0= プログラムI/Oモード * DMAでデータ転送するとき、DMACからのDRQ,DACK信号を 有効にするための許可ビット。DMA使用時1にする。0のとき、 拡張バスの(FD I/Fが使用するのと同じ番号の)DRQ,DACK信号線は 他のボードが使用できる。 PSTB - プリンタのPSTB#のマスク ■[PC-9801初代] * プリンタのPSTB#信号をマスクする。システムリセット時、 0にセットされている。プリンタI/Fの8255Aを初期設定したあと 1にする。 * 他機種では、I/O 0035h bit 6で制御。 bit 3: MTON(Motor ON) - スピンドルモータ制御 1= モータON 0= モータOFF * PC-9801-08・09,PC-9801F・U・VF内蔵FD I/F,両用FD I/F(PC-9801VM2・ VM21・VX2・VX21・UV2・UV21の1MB I/Fモードを除く)のみ使用。 * FDDのMOTOR信号を制御する。スピンドルモータの回転・停止を 制御できる。ただし、両用FD I/Fの1MB I/Fモード時は、 I/O 00BEh bit 2に1をライトした場合だけ有効。また、 PC-9801VM2・VM21・VX2・VX21・UV2・UV21の1MB I/Fモードでは、 このビットは無効。 関連: I/O 00BEh bit 2(Write) bit 2: TMSK(Timer Interrupt Mask) - タイマ割り込みマスク制御 1= タイマ割り込み許可 0= タイマ割り込みマスク * PC-9801-08・09,PC-9801F・U・VF内蔵FD I/F,両用FD I/F(PC-9801VM2・ VM21・VX2・VX21・UV2・UV21の1MB I/Fモードを除く)のみ使用。 * VFOからのタイマ割り込みのマスク制御を行う。VFOの割り込み トリガはTTRG(bit 0)。 u テクニカルデータブックでは、両用FD I/Fの1MB I/Fモードでは このビットは未定義になっているが、PC-9801VM2・VM21・VX2・VX21・ UV2・UV21以外の両用FD I/F搭載機ではこのビットは有効。 bit 1: 未使用 bit 0: TTRG(Timer Trigger) - VFOのTRIG IN端子制御 1= トリガ 0= NOP * PC-9801-08・09,PC-9801F・U・VF内蔵FD I/F,両用FD I/F(PC-9801VM2・ VM21・VX2・VX21・UV2・UV21の1MB I/Fモードを除く)のみ使用。 * VFOのTRIG IN端子を制御する。このビットを1にしてライトすると 100ms後に割り込みが発生する。ただし、TMSK(bit 2)でVFOからの 割り込みをマスクすることができる。 u テクニカルデータブックでは、両用FD I/Fの1MB I/Fモードでは このビットは未定義になっているが、PC-9801VM2・VM21・VX2・VX21・ UV2・UV21以外の両用FD I/F搭載機ではこのビットは有効。 解説 o FD I/Fの制御を行うためのFDC外部回路のI/Oポート。 o PC-9801初代の内蔵FD I/Fでは、I/O 0094hのリードは未定義。 o I/Oアドレスは、FD I/Fの種類、モードにより以下のようになる。 -------------------+--------------------------------------- 使用するI/Oアドレス|FD I/Fの種類、モード -------------------+--------------------------------------- 0094h |PC-9801-15,PC-9801初代・M内蔵FD I/F, |両用FD I/Fの1MB I/Fモード 00CCh |PC-9801-08・09,PC-9801F・U・VF内蔵FD I/F, |両用FD I/Fの640KB I/Fモード -------------------+--------------------------------------- u 一部機種では、I/O 0096h(I/O 00CEh)にI/O 0094h(I/O 00CCh)の デコードイメージが出ている。 関連 I/O 00BEh I/O 0094h 名前 コントロールレジスタ,リードスイッチ/シグナル 対象 ハイレゾ チップ 機能 [READ] リードスイッチ/シグナル bit 7: MODE - 内蔵ドライブの有無 1= なし 0= あり bit 6: 0 bit 5: HD(High Density) - アクセスモード状態 1= 640KBアクセスモード 0= 1MBアクセスモード * 現在のアクセスモードを示す。 bit 4: 0 bit 3〜0: 未定義 [WRITE] ライトコントロールレジスタ bit 7: RST(Reset) 1= FDCリセット 0= NOP * μPD765AのRESET端子への入力信号。 bit 6: FRY(Forced Ready) 1= RDY信号を強制的にアクティブ 0= NOP * μPD765AのRDY端子への入力信号。ドライブからのRDY信号と ORしたあとFDCに入力される。 bit 5: HD(High Density) - アクセスモード指定 1= 640KBアクセスモード 0= 1MBアクセスモード bit 4: 未使用 bit 3: MTON(Motor ON) - スピンドルモータ制御 ■[PC-98XA・XLを除く] 1= モータON 0= モータOFF * FDDのMOTOR信号を制御する。スピンドルモータの回転・停止を 制御できる。ただし、I/O 00BEh bit 2に1をライトした場合だけ 有効。 関連: I/O 00BEh bit 2(Write) bit 2: TMSK(Timer Interrupt Mask) - タイマ割り込みマスク制御 ■[PC-98XA・XLを除く] 1= タイマ割り込み許可 0= タイマ割り込みマスク * VFOからのタイマ割り込みのマスク制御を行う。VFOの割り込み トリガはTTRG(bit 0)。 u テクニカルデータブックでは、このビットは未定義になっている が、PC-98XA・XL以外のハイレゾモードではこのビットは有効。 bit 1: 未使用 bit 0: TTRG(Timer Trigger) - VFOのTRIG IN端子制御 ■[PC-98XA・XLを除く] 1= トリガ 0= NOP * VFOのTRIG IN端子を制御する。このビットを1にしてライトすると 100ms後に割り込みが発生する。ただし、TMSK(bit 2)でVFOからの 割り込みをマスクすることができる。 u テクニカルデータブックでは、このビットは未定義になっている が、PC-98XA・XL以外のハイレゾモードではこのビットは有効。 解説 o FD I/Fの制御を行うためのFDC外部回路のI/Oポート。 関連 0000:05CBh I/O 00BEh 名前 両用FD I/F制御 対象 ノーマル,PC-98LT・HA チップ 機能 [READ] リードモードステータス bit 7〜4: 未定義 bit 3: DSW(Dip Switch) - 本体DIP SW3-2の状態 1= OFF(1MB指定) 0= ON (640KB指定) * 本体のDIP SW 3-2の状態を示す。 bit 2: FIX(Fix Mode) - DIP SW3-1の状態 1= ON (固定モード…PORT EXC無効) 0= OFF(自動切換モード…PORT EXC有効) * 本体のDIP SW 3-1の状態を示す。 bit 1: FDD EXC(FDD FDD Mode Exchange) - アクセスモード状態 1= 1MB アクセスモード 0= 640KB アクセスモード * 現在のアクセスモードを示す。 bit 0: PORT EXC(Port Exchange) - I/Fモード状態 1= 1MB I/Fモード 0= 640KB I/Fモード * 現在のI/Fモードを示す。 [WRITE] ライトモードチェンジ bit 7〜3: 00000bを指定する bit 2: EMTON(Enable Motor ON) - I/O 0094h bit 3(MTON)の有効/無効 1= 1MB I/Fモード時、MTONビットを有効にする 0= 1MB I/Fモード時、常時モータON * PC-9801VM2・VM21・UV2・UV21・VX2・VX21,PC-98XLを除く 両用FD I/F搭載機で有効。 bit 1: FDD EXC(FDD Mode Exchange) - アクセスモード指定 1= 1MB アクセスモード 0= 640KB アクセスモード * 両用FD I/Fでフロッピーディスクを読み書きする際のアクセス モードを指定する。 bit 0: PORT EXC(Port Exchange) - I/Fモード指定 1= 1MB I/Fモード 0= 640KB I/Fモード * 両用FD I/FのI/Fモードを指定する。I/Fモードを変更すると、 FDCのI/Oポート、割り込み番号、DMAチャネルなどが同時に 変化するので、通常はシステム起動時に設定したモードのまま 使用する。 解説 o 両用FD I/Fの制御を行うポート。 u PC-9801VF2内蔵FD I/Fは640KB専用だが、このポートが存在する。ただし、 DIP SW状態の読み出しはできない。起動時状態では00hが読み出せる。 bit 3,2では、書き込んだ値が読み出せる。 関連 I/O 04BEh I/O 0094h bit 3 0000:05CBh I/O 00BEh 名前 Enable Motor ON制御 対象 ハイレゾ(PC-98XA・XLを除く) チップ 機能 [READ] bit 7〜0: 未定義 [WRITE] bit 7〜3:00000bを指定する bit 2: EMTON(Enable Motor ON) - I/O 0094h bit 3(MTON)の有効/無効 1= MTONビットを有効にする 0= 常時モータON bit 1,0: 00bを指定する 解説 o FDDモータの制御を有効にするかどうか設定する。 関連 I/O 0094h bit 3 I/O 04BEh 名前 3モードFD I/F制御 Undocumented 対象 1.44MB FDD搭載機種 チップ 機能 [READ] 状態読み出し bit 7〜5: 未使用?(常に111b) bit 4: 1.44MB対応ドライブ識別 1= 1.44MBアクセス可能 0= 1.44MBアクセス不可能 * 1.44MBアクセスは1MB I/Fモード時のみ可能。640KB I/Fモード 時は、どのドライブも0(1.44MBアクセス不可能)を示す。 bit 3〜1: 未使用?(常に111b) bit 0: 現在のアクセスモード 1= 1.44MBアクセスモード 0= 1MB/640KBアクセスモード [WRITE] ドライブ/モード指定 bit 7: 未使用?(0を指定) bit 6,5: ドライブ指定 10b= 内蔵FDD 2台モデルに実装したファイルスロット内FDDを指定 01b= 内蔵FDD 2台目または 内蔵FDD 1台モデルに実装したファイルスロット内FDDを指定 00b= 内蔵FDD 1台目を指定 * ドライブ指定値は、DIP SW 1-4(内蔵FDD番号)の状態に関らず一定。 bit 4: 動作モード指定 1= アクセスモード変更(bit 0の値が有効) 0= 無動作(状態読出のためのドライブ指定) bit 3〜1: 未使用?(000bを指定) bit 0: アクセスモード指定(bit 4=1のときのみ変更される) 1= 1.44MBアクセスモード 0= 1MB/640KBアクセスモード 解説 o 3モード(1.44MB,1MB,640KB)対応機で、1.44MBアクセスを行う場合の制御に 使用する。 o リードを行う前に、必ずライトしてドライブを指定しておく必要がある。 o 1.44MB FDD搭載機かどうかを調べるとき、このポートから読んだ値がFFhか どうかで判断することはできない。I/O 00BEhのデコードイメージが I/O 04BEhに出ている機種があるため。 関連 I/O 00BEh