このページは[[OS-Wikiのページ:http://community.osdev.info/index.php?%28AT%29iomap]]のコピーです。
----
*AT互換機のI/Oポートマップ
-各レジスタの使い方、ビット構成などは別のページで説明
-ここではどのアドレスにmapされているかという程度のことだけ
|アドレス(hex)|wide|R/W|デバイス|説明|備考|
|0000|byte|R|DMAC-0|カレントアドレスレジスタ(ch0)||
|0000|byte|W|DMAC-0|カレント/ベースアドレスレジスタ(ch0)||
|0001|byte|R|DMAC-0|カレントカウントレジスタ(ch0)||
|0001|byte|W|DMAC-0|カレント/ベースカウントレジスタ(ch0)||
|0002|byte|R|DMAC-0|カレントアドレスレジスタ(ch1)||
|0002|byte|W|DMAC-0|カレント/ベースアドレスレジスタ(ch1)||
|0003|byte|R|DMAC-0|カレントカウントレジスタ(ch1)||
|0003|byte|W|DMAC-0|カレント/ベースカウントレジスタ(ch1)||
|0004|byte|R|DMAC-0|カレントアドレスレジスタ(ch2)||
|0004|byte|W|DMAC-0|カレント/ベースアドレスレジスタ(ch2)||
|0005|byte|R|DMAC-0|カレントカウントレジスタ(ch2)||
|0005|byte|W|DMAC-0|カレント/ベースカウントレジスタ(ch2)||
|0006|byte|R|DMAC-0|カレントアドレスレジスタ(ch3)||
|0006|byte|W|DMAC-0|カレント/ベースアドレスレジスタ(ch3)||
|0007|byte|R|DMAC-0|カレントカウントレジスタ(ch3)||
|0007|byte|W|DMAC-0|カレント/ベースカウントレジスタ(ch3)||
|0008|byte|R|DMAC-0|ステータスレジスタ(ch0-3)||
|0008|byte|W|DMAC-0|コマンドレジスタ(ch0-3)||
|0009|byte|W|DMAC-0|リクエストレジスタ(ch0-3)||
|000A|byte|W|DMAC-0|シングルマスクレジスタ(ch0-3)||
|000B|byte|W|DMAC-0|モードレジスタ(ch0-3)||
|000C|byte|W|DMAC-0|クリアバイトポインタフリップフロップ(ch0-3)||
|000D|byte|R|DMAC-0|テンポラリレジスタ(ch0-3)||
|000D|byte|W|DMAC-0|マスタクリア(ch0-3)|DMACリセット|
|000E|byte|W|DMAC-0|クリアマスクレジスタ(ch0-3)||
|000F|byte|W|DMAC-0|オールマスクレジスタ(ch0-3)||
|0010-001F||R/W|free|未使用||
|0020|byte|R|PIC-0|IRR/ISR||
|0020|byte|W|PIC-0|OCW2/OCW3/ICW1||
|0021|byte|R|PIC-0|IMR||
|0021|byte|W|PIC-0|OCW1/ICW2/ICW3/ICW4||
|0022-003F||R/W|free|未使用||
|0040|byte|R/W|PIT|カウンタ0||
|0041|byte|R/W|PIT|カウンタ1||
|0042|byte|R/W|PIT|カウンタ2||
|0043|byte|W|PIT|コントロールワード||
|0044-005F||R/W|free|未使用||
|0060|byte|R|KBC|KBCデータポート/キーボードデータ||
|0060|byte|W|KBC|KBCデータ出力||
|0061|byte|R|PORTB|システムステータス||
|0061|byte|W|PORTB|システムデータ||
|0062-0063||R/W|free|未使用||
|0064|byte|R|KBC|ステータスレジスタ||
|0064|byte|W|KBC|KBC制御コマンド出力||
|0065-006F||R/W|free|未使用||
|0070|byte|W|RTC|RTCレジスタ指定||
|0071|byte|R/W|RTC|RTCデータ||
|0072-007F||R/W|free|未使用||
|0080|byte|W|DMApag|未使用レジスタ|POSTコード表示用ポート|
|0081|byte|W|DMApag|DMA-ch2アドレス上位||
|0082|byte|W|DMApag|DMA-ch3アドレス上位||
|0083|byte|W|DMApag|DMA-ch1アドレス上位||
|0084|byte|W|DMApag|未使用レジスタ||
|0085|byte|W|DMApag|未使用レジスタ||
|0086|byte|W|DMApag|未使用レジスタ||
|0087|byte|W|DMApag|DMA-ch0アドレス上位||
|0088|byte|W|DMApag|未使用レジスタ||
|0089|byte|W|DMApag|DMA-ch6アドレス上位||
|008A|byte|W|DMApag|DMA-ch7アドレス上位||
|008B|byte|W|DMApag|DMA-ch5アドレス上位||
|008C|byte|W|DMApag|未使用レジスタ||
|008D|byte|W|DMApag|未使用レジスタ||
|008E|byte|W|DMApag|未使用レジスタ||
|008F|byte|W|DMApag|RAMリフレッシュ時アドレス上位||
|0090-009F||R/W|free|未使用||
|00A0|byte|R|PIC-1|IRR/ISR||
|00A0|byte|W|PIC-1|OCW2/OCW3/ICW1||
|00A1|byte|R|PIC-1|IMR||
|00A1|byte|W|PIC-1|OCW1/ICW2/ICW3/ICW4||
|00A2-00BF||R/W|free|未使用||
|00C0|byte|R|DMAC-1|カレントアドレスレジスタ(ch4)|このゾーンの奇数番地がどうなっているかは不明。|
|00C0|byte|W|DMAC-1|カレント/ベースアドレスレジスタ(ch4)|8237Aに16bit転送させるために|
|00C2|byte|R|DMAC-1|カレントカウントレジスタ(ch4)|アドレス線をずらして配線する必要があり、|
|00C2|byte|W|DMAC-1|カレント/ベースカウントレジスタ(ch4)|それでこんな風になっている。|
|00C4|byte|R|DMAC-1|カレントアドレスレジスタ(ch5)||
|00C4|byte|W|DMAC-1|カレント/ベースアドレスレジスタ(ch5)||
|00C6|byte|R|DMAC-1|カレントカウントレジスタ(ch5)||
|00C6|byte|W|DMAC-1|カレント/ベースカウントレジスタ(ch5)||
|00C8|byte|R|DMAC-1|カレントアドレスレジスタ(ch6)||
|00C8|byte|W|DMAC-1|カレント/ベースアドレスレジスタ(ch6)||
|00CA|byte|R|DMAC-1|カレントカウントレジスタ(ch6)||
|00CA|byte|W|DMAC-1|カレント/ベースカウントレジスタ(ch6)||
|00CC|byte|R|DMAC-1|カレントアドレスレジスタ(ch7)||
|00CC|byte|W|DMAC-1|カレント/ベースアドレスレジスタ(ch7)||
|00CE|byte|R|DMAC-1|カレントカウントレジスタ(ch7)||
|00CE|byte|W|DMAC-1|カレント/ベースカウントレジスタ(ch7)||
|00D0|byte|R|DMAC-1|ステータスレジスタ(ch4-7)||
|00D0|byte|W|DMAC-1|コマンドレジスタ(ch4-7)||
|00D2|byte|W|DMAC-1|リクエストレジスタ(ch4-7)||
|00D4|byte|W|DMAC-1|シングルマスクレジスタ(ch4-7)||
|00D6|byte|W|DMAC-1|モードレジスタ(ch4-7)||
|00D8|byte|W|DMAC-1|クリアバイトポインタフリップフロップ(ch4-7)||
|00DA|byte|R|DMAC-1|テンポラリレジスタ(ch4-7)||
|00DA|byte|W|DMAC-1|マスタクリア(ch4-7)|DMACリセット|
|00DC|byte|W|DMAC-1|クリアマスクレジスタ(ch4-7)||
|00DE|byte|W|DMAC-1|オールマスクレジスタ(ch4-7)||
|00E0-00EF||R/W|free|未使用||
|00F0|||NDP|ビジーラッチクリア||
|00F1|||NDP|リセット||
|00F2-00F7||R/W|free|未使用||
|00F8-00FF|||NDP|NDPレジスタ||
|0100-016F||R/W|free|未使用||
|0170|word|R/W|ATA-1|Dataレジスタ||
|0171|byte|R|ATA-1|Errorレジスタ||
|0171|byte|W|ATA-1|Featuresレジスタ||
|0172|byte|R|ATA-1|Sector Countレジスタ|PACKETコマンド時にはInterrupt Reasonレジスタになる|
|0172|byte|W|ATA-1|Sector Countレジスタ||
|0173|byte|R/W|ATA-1|Sector Numberレジスタ||
|0174|byte|R/W|ATA-1|Cylinder Lowレジスタ|PACKETコマンド時にはByte Count Lowレジスタ|
|0175|byte|R/W|ATA-1|Cylinder Highレジスタ|PACKETコマンド時にはByte Count Highレジスタ|
|0176|byte|R/W|ATA-1|Device/Headレジスタ||
|0177|byte|R|ATA-1|Statusレジスタ||
|0177|byte|W|ATA-1|Commandレジスタ||
|0178-01EF||R/W|free|未使用||
|01F0|word|R/W|ATA-0|Dataレジスタ||
|01F1|byte|R|ATA-0|Errorレジスタ||
|01F1|byte|W|ATA-0|Featuresレジスタ||
|01F2|byte|R|ATA-0|Sector Countレジスタ|PACKETコマンド時にはInterrupt Reasonレジスタになる|
|01F2|byte|W|ATA-0|Sector Countレジスタ||
|01F3|byte|R/W|ATA-0|Sector Numberレジスタ||
|01F4|byte|R/W|ATA-0|Cylinder Lowレジスタ|PACKETコマンド時にはByte Count Lowレジスタ|
|01F5|byte|R/W|ATA-0|Cylinder Highレジスタ|PACKETコマンド時にはByte Count Highレジスタ|
|01F6|byte|R/W|ATA-0|Device/Headレジスタ||
|01F7|byte|R|ATA-0|Statusレジスタ||
|01F7|byte|W|ATA-0|Commandレジスタ||
|01F8-01FF||R/W|free|未使用||
|0200-020F|||gampad|ゲームパッド?||
|0210-0277||R/W|free|未使用||
|0278-027F|||para-2|パラレルポート2|まだ書いてない|
|0280-02AF||R/W|free|未使用||
|02B0-02DF||R/W|free|未使用|旧オルタネートEGAらしい|
|02E0-02E7||R/W|free|未使用||
|02E8-02EF|||seri-4|シリアルポート4|まだ書いてない、旧GPIB0は02E8-02EFにあったらしい|
|02F0-02F7||R/W|free|未使用||
|02F8-02FF|||seri-2|シリアルポート2|まだ書いてない|
|0300-036F||R/W|free|未使用||
|0370-0375|||FDC-1|FDC-0との違いは不明|まだ書いてない|
|0376|byte|R|ATA-1|Alternate Statusレジスタ||
|0376|byte|W|ATA-1|Device Controlレジスタ||
|0377|byte|R|FDC-1|ディスクチェンジ||
|0378-037F|||para-1|パラレルポート1|まだ書いてない|
|0380-03AF||R/W|free|未使用||
|03B0-03BB|||VGA|ビデオカード|まだ書いてない|
|03BC-03BE|||para-3|パラレルポート3|まだ書いてない|
|03BF-03DF|||VGA|ビデオカード|まだ書いてない|
|03E0|byte|R/W|PCIC|indexレジスタ||
|03E1|byte|R/W|PCIC|dataレジスタ||
|03E2-03E7||R/W|free|未使用||
|03E8-03EF|||seri-3|シリアルポート3|まだ書いてない|
|03F0-03F5|||FDC-0||まだ書いてない|
|03F6|byte|R|ATA-0|Alternate Statusレジスタ||
|03F6|byte|W|ATA-0|Device Controlレジスタ||
|03F7|byte|R|FDC-0|ディスクチェンジ||
|03F8-03FF|||seri-1|シリアルポート1|まだ書いてない|
|0400-0CF7||R/W|free|未使用|(註1)0000-03FF|
|0CF8|dword|R/W|PCI|CONFIG_ADDRESSレジスタ|PCI 2.0より前では機能番号などを設定(byte?) (註1)00F8|
|0CF9-0CFB||R/W|free|未使用|PCI 2.0より前では0CFAにバス番号 (註1)00F9-00FB|
|0CFC-0CFF|(all)|R/W|PCI|CONFIG_DATAレジスタ|byte/word/dwordで自由にアクセスできる (註1)00FC-00FF|
|0D00-BFFF||R/W||まだ書いてない||
|C000-CFFF||R/W|free|未使用|PCI 2.0より前ではコンフィグレーションレジスタ空間 (註1)0000-03FF|
|D000-FFFF||R/W|free|未使用|(註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'' SIZE(10){2003-08-04 (月) 08:43:10}
-CF8あたりをバイトで何か書くと、リセットが掛かったと思います。 -- ''名無しさん'' SIZE(10){2005-10-04 (火) 19:27:51}
-それは実験してみたい情報ですね。ありがとうございました。 -- ''K'' SIZE(10){2005-10-13 (木) 01:03:21}
-0x92はA20ライン制御などのポートです。0x279/0xA79はISA PnPポートで、パラレルポートではないです。 -- ''名無しさん'' SIZE(10){2005-10-13 (木) 22:59:25}
-↑機種によってはパラレルポートですが。 -- ''名無しさん'' SIZE(10){2005-10-13 (木) 23:00:15}
-伝統的にはLPT2ですね(もっともLPT2なんてついてるマシンはそうそうないですが)。ISA PnPの仕様を後から追加したとき、うかつに新規に割り振るとまずいと思ったのか、LPT2のステータスポート(readonly)のwrite側にもぐりこませたと。 -- ''名無しさん'' SIZE(10){2005-11-20 (日) 08:34:01}

//#comment


[Reload]   [New] [Edit] [Diff] [Upload]   [Front page] [List of pages] [Search] [Recent changes] [Backup]   [RSS of recent changes]