このページはOS-Wikiのページのコピーです。


AT互換機のI/Oポートマップ

  • 各レジスタの使い方、ビット構成などは別のページで説明
  • ここではどのアドレスにmapされているかという程度のことだけ
    アドレス(hex)wideR/Wデバイス説明備考
    0000byteRDMAC-0カレントアドレスレジスタ(ch0)
    0000byteWDMAC-0カレント/ベースアドレスレジスタ(ch0)
    0001byteRDMAC-0カレントカウントレジスタ(ch0)
    0001byteWDMAC-0カレント/ベースカウントレジスタ(ch0)
    0002byteRDMAC-0カレントアドレスレジスタ(ch1)
    0002byteWDMAC-0カレント/ベースアドレスレジスタ(ch1)
    0003byteRDMAC-0カレントカウントレジスタ(ch1)
    0003byteWDMAC-0カレント/ベースカウントレジスタ(ch1)
    0004byteRDMAC-0カレントアドレスレジスタ(ch2)
    0004byteWDMAC-0カレント/ベースアドレスレジスタ(ch2)
    0005byteRDMAC-0カレントカウントレジスタ(ch2)
    0005byteWDMAC-0カレント/ベースカウントレジスタ(ch2)
    0006byteRDMAC-0カレントアドレスレジスタ(ch3)
    0006byteWDMAC-0カレント/ベースアドレスレジスタ(ch3)
    0007byteRDMAC-0カレントカウントレジスタ(ch3)
    0007byteWDMAC-0カレント/ベースカウントレジスタ(ch3)
    0008byteRDMAC-0ステータスレジスタ(ch0-3)
    0008byteWDMAC-0コマンドレジスタ(ch0-3)
    0009byteWDMAC-0リクエストレジスタ(ch0-3)
    000AbyteWDMAC-0シングルマスクレジスタ(ch0-3)
    000BbyteWDMAC-0モードレジスタ(ch0-3)
    000CbyteWDMAC-0クリアバイトポインタフリップフロップ(ch0-3)
    000DbyteRDMAC-0テンポラリレジスタ(ch0-3)
    000DbyteWDMAC-0マスタクリア(ch0-3)DMACリセット
    000EbyteWDMAC-0クリアマスクレジスタ(ch0-3)
    000FbyteWDMAC-0オールマスクレジスタ(ch0-3)
    0010-001FR/Wfree未使用
    0020byteRPIC-0IRR/ISR
    0020byteWPIC-0OCW2/OCW3/ICW1
    0021byteRPIC-0IMR
    0021byteWPIC-0OCW1/ICW2/ICW3/ICW4
    0022-003FR/Wfree未使用
    0040byteR/WPITカウンタ0
    0041byteR/WPITカウンタ1
    0042byteR/WPITカウンタ2
    0043byteWPITコントロールワード
    0044-005FR/Wfree未使用
    0060byteRKBCKBCデータポート/キーボードデータ
    0060byteWKBCKBCデータ出力
    0061byteRPORTBシステムステータス
    0061byteWPORTBシステムデータ
    0062-0063R/Wfree未使用
    0064byteRKBCステータスレジスタ
    0064byteWKBCKBC制御コマンド出力
    0065-006FR/Wfree未使用
    0070byteWRTCRTCレジスタ指定
    0071byteR/WRTCRTCデータ
    0072-007FR/Wfree未使用
    0080byteWDMApag未使用レジスタPOSTコード表示用ポート
    0081byteWDMApagDMA-ch2アドレス上位
    0082byteWDMApagDMA-ch3アドレス上位
    0083byteWDMApagDMA-ch1アドレス上位
    0084byteWDMApag未使用レジスタ
    0085byteWDMApag未使用レジスタ
    0086byteWDMApag未使用レジスタ
    0087byteWDMApagDMA-ch0アドレス上位
    0088byteWDMApag未使用レジスタ
    0089byteWDMApagDMA-ch6アドレス上位
    008AbyteWDMApagDMA-ch7アドレス上位
    008BbyteWDMApagDMA-ch5アドレス上位
    008CbyteWDMApag未使用レジスタ
    008DbyteWDMApag未使用レジスタ
    008EbyteWDMApag未使用レジスタ
    008FbyteWDMApagRAMリフレッシュ時アドレス上位
    0090-009FR/Wfree未使用
    00A0byteRPIC-1IRR/ISR
    00A0byteWPIC-1OCW2/OCW3/ICW1
    00A1byteRPIC-1IMR
    00A1byteWPIC-1OCW1/ICW2/ICW3/ICW4
    00A2-00BFR/Wfree未使用
    00C0byteRDMAC-1カレントアドレスレジスタ(ch4)このゾーンの奇数番地がどうなっているかは不明。
    00C0byteWDMAC-1カレント/ベースアドレスレジスタ(ch4)8237Aに16bit転送させるために
    00C2byteRDMAC-1カレントカウントレジスタ(ch4)アドレス線をずらして配線する必要があり、
    00C2byteWDMAC-1カレント/ベースカウントレジスタ(ch4)それでこんな風になっている。
    00C4byteRDMAC-1カレントアドレスレジスタ(ch5)
    00C4byteWDMAC-1カレント/ベースアドレスレジスタ(ch5)
    00C6byteRDMAC-1カレントカウントレジスタ(ch5)
    00C6byteWDMAC-1カレント/ベースカウントレジスタ(ch5)
    00C8byteRDMAC-1カレントアドレスレジスタ(ch6)
    00C8byteWDMAC-1カレント/ベースアドレスレジスタ(ch6)
    00CAbyteRDMAC-1カレントカウントレジスタ(ch6)
    00CAbyteWDMAC-1カレント/ベースカウントレジスタ(ch6)
    00CCbyteRDMAC-1カレントアドレスレジスタ(ch7)
    00CCbyteWDMAC-1カレント/ベースアドレスレジスタ(ch7)
    00CEbyteRDMAC-1カレントカウントレジスタ(ch7)
    00CEbyteWDMAC-1カレント/ベースカウントレジスタ(ch7)
    00D0byteRDMAC-1ステータスレジスタ(ch4-7)
    00D0byteWDMAC-1コマンドレジスタ(ch4-7)
    00D2byteWDMAC-1リクエストレジスタ(ch4-7)
    00D4byteWDMAC-1シングルマスクレジスタ(ch4-7)
    00D6byteWDMAC-1モードレジスタ(ch4-7)
    00D8byteWDMAC-1クリアバイトポインタフリップフロップ(ch4-7)
    00DAbyteRDMAC-1テンポラリレジスタ(ch4-7)
    00DAbyteWDMAC-1マスタクリア(ch4-7)DMACリセット
    00DCbyteWDMAC-1クリアマスクレジスタ(ch4-7)
    00DEbyteWDMAC-1オールマスクレジスタ(ch4-7)
    00E0-00EFR/Wfree未使用
    00F0NDPビジーラッチクリア
    00F1NDPリセット
    00F2-00F7R/Wfree未使用
    00F8-00FFNDPNDPレジスタ
    0100-016FR/Wfree未使用
    0170wordR/WATA-1Dataレジスタ
    0171byteRATA-1Errorレジスタ
    0171byteWATA-1Featuresレジスタ
    0172byteRATA-1Sector CountレジスタPACKETコマンド時にはInterrupt Reasonレジスタになる
    0172byteWATA-1Sector Countレジスタ
    0173byteR/WATA-1Sector Numberレジスタ
    0174byteR/WATA-1Cylinder LowレジスタPACKETコマンド時にはByte Count Lowレジスタ
    0175byteR/WATA-1Cylinder HighレジスタPACKETコマンド時にはByte Count Highレジスタ
    0176byteR/WATA-1Device/Headレジスタ
    0177byteRATA-1Statusレジスタ
    0177byteWATA-1Commandレジスタ
    0178-01EFR/Wfree未使用
    01F0wordR/WATA-0Dataレジスタ
    01F1byteRATA-0Errorレジスタ
    01F1byteWATA-0Featuresレジスタ
    01F2byteRATA-0Sector CountレジスタPACKETコマンド時にはInterrupt Reasonレジスタになる
    01F2byteWATA-0Sector Countレジスタ
    01F3byteR/WATA-0Sector Numberレジスタ
    01F4byteR/WATA-0Cylinder LowレジスタPACKETコマンド時にはByte Count Lowレジスタ
    01F5byteR/WATA-0Cylinder HighレジスタPACKETコマンド時にはByte Count Highレジスタ
    01F6byteR/WATA-0Device/Headレジスタ
    01F7byteRATA-0Statusレジスタ
    01F7byteWATA-0Commandレジスタ
    01F8-01FFR/Wfree未使用
    0200-020Fgampadゲームパッド?
    0210-0277R/Wfree未使用
    0278-027Fpara-2パラレルポート2まだ書いてない
    0280-02AFR/Wfree未使用
    02B0-02DFR/Wfree未使用旧オルタネートEGAらしい
    02E0-02E7R/Wfree未使用
    02E8-02EFseri-4シリアルポート4まだ書いてない、旧GPIB0は02E8-02EFにあったらしい
    02F0-02F7R/Wfree未使用
    02F8-02FFseri-2シリアルポート2まだ書いてない
    0300-036FR/Wfree未使用
    0370-0375FDC-1FDC-0との違いは不明まだ書いてない
    0376byteRATA-1Alternate Statusレジスタ
    0376byteWATA-1Device Controlレジスタ
    0377byteRFDC-1ディスクチェンジ
    0378-037Fpara-1パラレルポート1まだ書いてない
    0380-03AFR/Wfree未使用
    03B0-03BBVGAビデオカードまだ書いてない
    03BC-03BEpara-3パラレルポート3まだ書いてない
    03BF-03DFVGAビデオカードまだ書いてない
    03E0byteR/WPCICindexレジスタ
    03E1byteR/WPCICdataレジスタ
    03E2-03E7R/Wfree未使用
    03E8-03EFseri-3シリアルポート3まだ書いてない
    03F0-03F5FDC-0まだ書いてない
    03F6byteRATA-0Alternate Statusレジスタ
    03F6byteWATA-0Device Controlレジスタ
    03F7byteRFDC-0ディスクチェンジ
    03F8-03FFseri-1シリアルポート1まだ書いてない
    0400-0CF7R/Wfree未使用(註1)0000-03FF
    0CF8dwordR/WPCICONFIG_ADDRESSレジスタPCI 2.0より前では機能番号などを設定(byte?) (註1)00F8
    0CF9-0CFBR/Wfree未使用PCI 2.0より前では0CFAにバス番号 (註1)00F9-00FB
    0CFC-0CFF(all)R/WPCICONFIG_DATAレジスタbyte/word/dwordで自由にアクセスできる (註1)00FC-00FF
    0D00-BFFFR/Wまだ書いてない
    C000-CFFFR/Wfree未使用PCI 2.0より前ではコンフィグレーションレジスタ空間 (註1)0000-03FF
    D000-FFFFR/Wfree未使用(註1)0000-03FF
  • デバイスについて
    • free:空き空間
    • DMAC-0:スレーブDMAコントローラ (8237A)
    • DMAC-1:マスタDMAコントローラ (8237A)
    • PIC-0:割り込みコントローラ(マスタ:IRQ0-7) (8259A) → 参考:(PIC)8259A
    • PIC-1:割り込みコントローラ(スレーブ:IRQ8-15) (8259A) → 参考:(PIC)8259A
    • PIT:タイマコントローラ (8254) → 参考:(PIT)8254
    • KBC:キーボードコントローラ (8042) 参考:(AT)keyboard
    • RTC:リアルタイムクロック (MC146818)
    • DMApag:DMAページレジスタ
    • NDP:NDP(80287?)
    • ATA-0:プライマリATA → 参考:ATA
    • ATA-1:セカンダリATA → 参考:ATA
    • gampad:ゲームパッド
    • para-1:パラレルポート1
    • para-2:パラレルポート2
    • seri-1:シリアルポート1
    • seri-2:シリアルポート2
    • seri-3:シリアルポート3
    • seri-4:シリアルポート4
    • PCIC:16bit-PCIC → PCIC参照
    • PORTB:システムポート → 参考:(PIT)8254
    • PCI:PCIバス関係 → 参考:PCI
  • (註1) 0400-FFFFのI/Oアドレス空間の利用はすこし慎重にする必要があるかもしれない。古いデバイスでは下位10bitしかデコードしないものもあり、このようなデバイスにとっては例えば0400へのアクセスも0C00へのアクセスも全て0000へのアクセスであると見なしてしまうからである。なお最近のチップセットではちゃんと16bitデコードしており、したがって現状においてこの問題に配慮すべきなのは古い外部デバイスだけかもしれない。ここでは参考のために該当アドレスの下位10bitの値を書いておいた。

こめんと欄

  • まだ書いてないとか調査中以外のところで、おかしいところなどがあったらここで教えてください。 -- K 2003-08-04 (月) 08:43:10
  • CF8あたりをバイトで何か書くと、リセットが掛かったと思います。 -- 名無しさん 2005-10-04 (火) 19:27:51
  • それは実験してみたい情報ですね。ありがとうございました。 -- K 2005-10-13 (木) 01:03:21
  • 0x92はA20ライン制御などのポートです。0x279/0xA79はISA PnPポートで、パラレルポートではないです。 -- 名無しさん 2005-10-13 (木) 22:59:25
  • ↑機種によってはパラレルポートですが。 -- 名無しさん 2005-10-13 (木) 23:00:15
  • 伝統的にはLPT2ですね(もっともLPT2なんてついてるマシンはそうそうないですが)。ISA PnPの仕様を後から追加したとき、うかつに新規に割り振るとまずいと思ったのか、LPT2のステータスポート(readonly)のwrite側にもぐりこませたと。 -- 名無しさん 2005-11-20 (日) 08:34:01

[リロード]   [新規] [編集] [凍結] [差分] [添付]   [トップ] [一覧] [単語検索] [最終更新] [バックアップ]   [最終更新のRSS]
Last-modified: 2006/11/22 (水) 17:50:00 (6358d)