Amiga Buddha 和 Catweasel IDE 驅動¶
Amiga Buddha 和 Catweasel IDE 驅動(ide.c 的一部分)由 Geert Uytterhoeven 根據以下規範編寫
Buddha IDE 控制器和 Catweasel Zorro-II 版本 Buddha 部分的暫存器對映
自動配置的實現方式與 Commodore 在其手冊中描述的一致,沒有使用任何技巧(例如省略某些地址線...)。如果您想自己配置板卡(例如讓 Linux 核心配置卡),請檢視 Commodore 文件。讀取 nibbles 應該會提供這些資訊
Vendor number: 4626 ($1212)
product number: 0 (42 for Catweasel Z-II)
Serial number: 0
Rom-vector: $1000
該卡應該是 Z-II 板,大小為 64K,不用於 freemem 列表,Rom-Vektor 有效,同一卡上沒有第二個自動配置板,沒有空間偏好,支援“Shutup_forever”。
設定基地址應該分兩步完成,就像 Amiga Kickstart 所做的那樣:8 位地址的低 nibble 寫入 $4a,然後整個 Byte 寫入 $48,只要不觸及 $48,寫入 $4a 的頻率無關緊要。在 $48 寫入之後,整個卡從 $e8 中消失並對映到剛寫入的新地址。確保 $4a 在 $48 之前寫入,否則找到該板的機會只有 1:16 :-)。
即使對映到 $e8,本地記憶體對映仍然有效
$0-$7e |
Autokonfig 空間,參見 Z-II 文件。 |
$80-$7fd |
保留 |
$7fe |
速度選擇暫存器:讀 & 寫 (描述見下文) |
$800-$8ff |
IDE-Select 0 (埠 0, 暫存器集 0) |
$900-$9ff |
IDE-Select 1 (埠 0, 暫存器集 1) |
$a00-$aff |
IDE-Select 2 (埠 1, 暫存器集 0) |
$b00-$bff |
IDE-Select 3 (埠 1, 暫存器集 1) |
$c00-$cff |
IDE-Select 4 (埠 2, 暫存器集 0, 僅限 Catweasel!) |
$d00-$dff |
IDE-Select 5 (埠 3, 暫存器集 1, 僅限 Catweasel!) |
$e00-$eff |
本地擴充套件埠,在 Catweasel Z-II 上,Catweasel 暫存器也對映到此處。永遠不要觸碰,使用 multidisk.device! |
$f00 |
只讀,位元組訪問:Bit 7 顯示 IDE 埠 0 的 IRQ 線電平。 |
$f01-$f3f |
$f00 的映象 |
$f40 |
只讀,位元組訪問:Bit 7 顯示 IDE 埠 1 的 IRQ 線電平。 |
$f41-$f7f |
$f40 的映象 |
$f80 |
只讀,位元組訪問:Bit 7 顯示 IDE 埠 2 的 IRQ 線電平。(僅限 Catweasel!) |
$f81-$fbf |
$f80 的映象 |
$fc0 |
只寫:向此暫存器寫入任何值都會啟用將 IRQ 從 IDE 埠傳遞到 Zorro 匯流排。此機制的實現是為了與有缺陷或具有錯誤韌體的硬碟相容,這些硬碟在啟動時會上拉 IRQ 線。如果中斷始終傳遞到匯流排,計算機可能無法啟動。一旦啟用,此標誌將無法再次停用。該標誌的級別無法由軟體確定(為什麼?如果需要,請寫信給我!)。 |
$fc1-$fff |
$fc0 的映象 |
$1000-$ffff |
Buddha-Rom,在 rom 晶片中偏移 $1000。無法讀取 rom 晶片的地址 $0 到 $fff。Rom 是 Byte 寬,並對映到偶數地址。 |
IDE 埠發出 INT2。您可以透過從三個(僅適用於 Buddha 的兩個)暫存器 $f00、$f40 和 $f80 讀取來讀取 IDE 埠的 IRQ 線電平。透過這種方式,可以處理多個 I/O 請求,您可以輕鬆確定哪個驅動程式必須服務於 INT2。Buddha 和 Catweasel 擴充套件板可以發出 INT6。I/O 模組和系統操作員的 I/O 模組有一個單獨的記憶體對映。
IDE 埠由地址線 A2 到 A4 提供,就像 Amiga 1200 和 Amiga 4000 IDE 埠一樣。透過這種方式,現有的驅動程式可以輕鬆地移植到 Buddha。move.l 從 IDE 埠的同一地址中輪詢兩個字,因為每個字都會映象一次。movmem 是不可能的,但也沒必要,因為你只能用這種技術加速 68000 系統。具有快速記憶體的 68020 系統使用 move.l 會更快。
如果你使用 A6=1 的 IDE 埠的映象暫存器,無論你在速度暫存器中選擇了什麼速度(見下文),Buddha 都不關心。使用 A6=1(例如埠 0,暫存器集 0 的 $840),將進行 780ns 的訪問。這些暫存器應該用於對硬碟/CD-Rom 進行命令訪問,因為命令訪問是 Byte 寬的,並且必須根據 ATA-X3T9 手冊進行減速。
現在介紹速度暫存器:該暫存器是 byte 寬的,並且僅使用上三個位(位 7 到 5)。位 4 必須始終設定為 1 才能與更高版本的 Buddha 相容(如果我更新了該版本)。我認為我永遠不會使用較低的四個位,但根據定義,必須將它們設定為 1。
此表中的值必須左移 5 位並與 $1f 進行或運算(這將設定較低的 5 位)。
所有時序都有一個共同點:Select 和 IOR/IOW 同時上升。IOR 和 IOW 對 Zorro 總線上的時鐘有大約 30ns 的傳播延遲,這就是為什麼這些值不是 71 的倍數。一個時鐘週期為 71ns 長(在 PAL 系統上 14.18 Mhz 時準確為 70.5)。
- 值 0 (復位後的預設值)
497ns Select (7 個時鐘週期),IOR/IOW 在 172ns 後 (2 個時鐘週期) (與 Amiga 1200 在沒有加速卡的情況下在其 IDE 埠上所做的時序相同)
- 值 1
639ns Select (9 個時鐘週期),IOR/IOW 在 243ns 後 (3 個時鐘週期)
- 值 2
781ns Select (11 個時鐘週期),IOR/IOW 在 314ns 後 (4 個時鐘週期)
- 值 3
355ns Select (5 個時鐘週期),IOR/IOW 在 101ns 後 (1 個時鐘週期)
- 值 4
355ns Select (5 個時鐘週期),IOR/IOW 在 172ns 後 (2 個時鐘週期)
- 值 5
355ns Select (5 個時鐘週期),IOR/IOW 在 243ns 後 (3 個時鐘週期)
- 值 6
1065ns Select (15 個時鐘週期),IOR/IOW 在 314ns 後 (4 個時鐘週期)
- 值 7
355ns Select,(5 個時鐘週期),IOR/IOW 在 101ns 後 (1 個時鐘週期)
當使用 A6=1 (例如 $84x) 訪問 IDE 暫存器時,無論你在速度暫存器中選擇了什麼,時序將始終為模式 0 8 位相容。
781ns select, IOR/IOW 在 4 個時鐘週期 (=314ns) 後啟用。
所有具有非常短的 select 訊號 (355ns 快速訪問) 的時序都取決於系統中使用的加速卡:有時匯流排介面會插入另外兩個時鐘週期,使整個訪問持續 497ns。這不會影響控制器的可靠性或卡的效能,因為這種情況不會經常發生。
所有時序都是計算出來的,並且僅透過允許我計算時鐘週期的測量來確認。如果系統由 28.37516 Mhz 以外的振盪器(例如 NTSC 頻率 28.63636 Mhz)計時,則每個時鐘週期都會縮短為略小於 70ns(不值得一提)。您可能會想到透過超頻系統來提高一點效能,但是您需要一臺多頻顯示器或一張顯示卡,並且您的內部磁碟驅動器會發瘋,這就是您不應該以這種方式調整 Amiga 的原因。
為了讓您能夠編寫與 Buddha 和 Catweasel Z-II 相容的軟體,Buddha 的行為就像一個 Catweasel Z-II,沒有裝置連線到第三個 IDE 埠。IRQ 暫存器 $f80 始終在 Buddha 上顯示“此處沒有 IRQ”,並且對第三個 IDE 埠的訪問將在 Buddha 上進入資料的 Nirwana。
Jens Schönfeld 1997 年 2 月 19 日
1997 年 5 月 27 日更新