サブページ
$000000

メモリマップ

Amigaの68000は24ビットアドレスバスを持ち、16 MBのアドレス空間($000000–$FFFFFF)を提供する。この空間はRAM、カスタムチップレジスタ、CIAレジスタ、拡張スペース、ROMに分割される。Gary(アドレスデコーダチップ)が各バスサイクルでどのデバイスが応答するかを決定する。

$000000
Chip RAM
512 KB ($000000–$07FFFF) — Fat Agnusで1 MBまで拡張可能
$080000
Chip RAM(拡張)
512 KB ($080000–$0FFFFF) — 1 MB Agnusのみ
$100000
予約
$100000–$1FFFFF — 標準A500では未使用
$200000
Fast RAM(拡張)
$200000–$9FFFFF — トラップドアまたはZorro経由で最大8 MB
$A00000
予約 / 拡張
$A00000–$BEFFFF — I/O拡張スペース
$BFD000
CIA-B (8520)
偶数アドレス: $BFD000, $BFD100, $BFD200, …
$BFE001
CIA-A (8520)
奇数アドレス: $BFE001, $BFE101, $BFE201, …
$C00000
Slow RAM(A500トラップドア)
$C00000–$D7FFFF — 512 KB「Slow」拡張RAM
$D80000
予約
$D80000–$DFFFFF
$DFF000
カスタムチップレジスタ
$DFF000–$DFF1FF — 約200レジスタ(Agnus、Denise、Paula)
$E00000
予約 / 拡張ROM
$E00000–$E7FFFF
$E80000
Autoconfig空間
$E80000–$EFFFFF — Zorro IIオートコンフィグレジスタ
$F00000
予約
$F00000–$F7FFFF
$F80000
予約 / 診断ROM
$F80000–$FBFFFF
$FC0000
Kickstart ROM
$FC0000–$FFFFFF — 256 KB(Kickstart 1.2/1.3)
$000000

Chip RAMとFast RAM

Amigaのメモリマップで最も重要な区別はChip RAMFast RAMの違いである。

Chip RAM($000000–$07FFFF、Fat Agnusでは$0FFFFF)は68000とカスタムチップの両方からアクセス可能。カスタムチップが必要とするすべてのデータ――ビットプレーングラフィックス、スプライト、オーディオサンプル、Copperリスト、Blitterソース――はChip RAMに存在しなければならない。AgnusがDMAアドレスを生成し、メモリの下位部分しかアドレスできないためである。

Fast RAM($200000以上)は68000からのみアクセス可能。カスタムチップからは見えない。利点は、68000がDMAとの競合なしにフルスピードでアクセスできること――だから「fast」。DMAアクセスを必要としないプログラムやデータ構造は、利用可能であればFast RAMに配置すべきである。

Slow RAM($C00000–$D7FFFF)はA500のトラップドア拡張RAM。「fast」アドレス範囲にあるにもかかわらず、チップバス上にあるためDMA競合の影響を受ける――真のFast RAMより遅いがカスタムチップからもアクセスできない。両方の世界の最悪だが、拡張なしよりはましである。

$000000

CIAアドレス空間

2つのCIA 8520チップはメモリマップ上で独特な位置を占める。CIA-Aは$BFE001から始まる奇数バイトアドレスに、CIA-Bは$BFD000から始まる偶数アドレスに配置される。この珍しい配置は、Garyがアドレスをデコードしてデータバスの異なるハーフにCIAを接続する方法の副作用である。

各CIAは16のレジスタを持ち、256バイト間隔で配置される(A0–A3とA8–A11のみデコード):

CIA-Aレジスタアドレス
$BFE001PRA — ポートAデータ(ファイアボタン、オーバーレイ、LED)
$BFE101PRB — ポートBデータ(パラレルポートデータ)
$BFE201DDRA — データ方向レジスタA
$BFE301DDRB — データ方向レジスタB
$BFE401TALO — タイマーA下位バイト
$BFE501TAHI — タイマーA上位バイト
$BFE601TBLO — タイマーB下位バイト
$BFE701TBHI — タイマーB上位バイト
$BFE801TODLO — TODカウンタ下位(1/10秒)
$BFE901TODMID — TODカウンタ中位(秒)
$BFEA01TODHI — TODカウンタ上位(分)
$BFEC01SDR — シリアルデータレジスタ
$BFED01ICR — 割り込み制御レジスタ
$BFEE01CRA — 制御レジスタA
$BFEF01CRB — 制御レジスタB

CIAは6800互換同期バスプロトコル(VPA̅/VMA̅/Eクロック経由)を使用するため、各CIAアクセスには約1.4 µsかかる――カスタムチップレジスタアクセスの約5倍遅い。

$000000

カスタムチップレジスタ空間

カスタムチップレジスタは$DFF000–$DFF1FFを占める――約200の個別レジスタを含む512バイト。多くはライトオンリー(68000は値を書き込めるが読み返せない)で、読み取りレジスタは同じアドレスで異なる機能を持つ。

レジスタはこの空間内でサブシステムごとに構成される:

レジスタ空間レイアウト
$000–$03Eシステム: BLTDDAT, DMACONR, VPOSR, VHPOSR, DSKDAT, JOYxDAT, CLXDAT, POTINP, SERDATR, DSKBYTR, INTENAR, INTREQR
$040–$07EBlitter: BLTCONx, BLTxPT, BLTxMOD, BLTxDAT, BLTSIZE, BLTxFWM/LWM
$080–$08ECopper: COPxLC, COPJMPx, COPCON, DIWSTRT, DIWSTOP
$090–$09E制御: DDFSTRx, DMACON, CLXCON, INTENA, INTREQ
$0A0–$0DFオーディオ: AUDxLCH/L, AUDxLEN, AUDxPER, AUDxVOL, AUDxDAT(×4チャネル)
$0E0–$0FEビットプレーンポインタ: BPLxPTH/L(×6プレーン)
$100–$10Eビットプレーン制御: BPLCONx, BPLxMOD
$110–$11Eビットプレーンデータ: BPLxDAT
$120–$17Eスプライト: SPRxPT, SPRxPOS, SPRxCTL, SPRxDATA, SPRxDATB(×8)
$180–$1BEカラー: COLOR00–COLOR31

Copperは$040未満のレジスタへのアクセスが制限されている(DMAコントローラや自身の再プログラミングを防ぐため)。COPCONのビット0をセットすると、$040–$07E(Blitterレジスタ)へのアクセスも許可される。

$000000

ROMとオーバーレイ

AmigaのOS、Kickstart$FC0000–$FFFFFFのROMに存在する(A500では256 KB)。電源投入時、68000はアドレス$000000からリセットベクタを読む。この時点でRAMはゴミデータを含んでいるため、GaryがROMオーバーレイを有効にし、Kickstart ROMを一時的に$000000にミラーする。CIA-Aのビット0(OVL)への最初の書き込みでオーバーレイは無効になり、$000000はChip RAMに戻り、ROMは$FC0000でのみ見える。

A1000 WOM(Write-Once Memory)

A1000にはROMがなかった――代わりにWOM(Write-Once Memory)、$FC0000に256 KBのライトワンスRAMがあった。電源投入時、$F80000の小さなブートストラップROM(8 KB)がフロッピーディスクからKickstartをWOMにロードした。書き込み後、WOMは次のリセットまで変更できなかった。これによりA1000は異なるディスクからブートするだけで異なるKickstartバージョンを使用できた――後のモデルではよりシンプルで高速なマスクROMアプローチのために廃止された柔軟性である。