Registerbeschreibung des Buddha IDE Controllers Die Autokonfiguration ist streng nach Commodore Dokumentation implementiert, wer ein eigenes Betriebssystem schreiben will (Einbinden der Autokonfig-Boards vom Linux-Kernel), sollte sich mit der Commodore-Doku auseinandersetzen. Die ausgelesenen Nibbles sollten ergeben: Hersteller-Nummer: 4626 ($1212) Produkt-Nummer: 0 Seriennummer: 0 Rom-Vektor: $1000 Z-II Board, 64K groß, nicht in die Freemem-Liste eintragen, Rom-Vektor ist gültig, kein weiteres Autokonfig-Board auf dieser Platine, keinen bevorzugten Speicherbereich, unterstützt "Shutup_forever". Das setzen der Basisaddresse ist in zwei Schritten erforderlich, da der Buddha die Tatsache ausnutzt, daß die Basisaddresse zweimal geschrieben wird: Das untere Nibble der 8-Bit Basisaddresse wird nach $4a geschrieben, danach wird das gesamte Byte nach $48 geschrieben. Beide male übernimmt der Buddha nur ein Nibble, wobei es keine Rolle spielt, wie oft in das Nibble $4a geschrieben wurde. Solange nicht in $48 geshrieben wurde, und Config_in auf Low-Pegel ist, antwortet der Buddha auf Addresse $e80000. Dort ist auch schon zum Config-Zeitpunkt die gesamte lokale Memory-Map gültig: $0-$7e Autokonfig-Bereich, siehe Z-II Autokonfig-Doku. $80-$7fd Reserviert $7fe Speed-select Register: Read & Write (Beschreibung siehe unten) $800-$8ff IDE-Select 0 (Port 0, Register set 0) $900-$9ff IDE-Select 1 (Port 0, Register set 1) $a00-$aff IDE-Select 2 (Port 1, Register set 0) $b00-$bff IDE-Select 3 (Port 1, Register set 1) $c00-$cff IDE-Select 4 (Port 2, Register set 0, Catweasel only!) $d00-$dff IDE-Select 5 (Port 3, Register set 1, Catweasel only!) $e00-$eff lokaler Expansions-Port, bei Catweasel: auch Catweasel Register. Finger weg, sonst Finger ab! $f00 nur Lesen, Byte-Zugriff: Bit 7 gibt den Zustand der IRQ-Leitung von Port 0 wieder. $f01-$f3f Spiegelung von $f00 $f40 nur Lesen, Byte-Zugriff: Bit 7 gibt den Zustand der IRQ-Leitung von Port 1 wieder. $f41-$f7f Spiegelung von $f40 $f80 nur Lesen, Byte-Zugriff: Bit 7 gibt den Zustand der IRQ-Leitung von Port 2 wieder (Catweasel only!) $f81-$fbf Spiegelung von $f80 $fc0 nur Schreiben: Schreibzugriff gibt Interrupts von den IDE-Ports frei. Nach einem Reset ist es einer Platte nicht möglich, einen IRQ auszulösen. So kann der Buddha auch mit Platten arbeiten, die erstmal eine Minute lang per IRQ Amok laufen, und den Rechner am Booten hindern. Wenn IRQs einmal freigegeben sind, können sie nur wieder durch einen Reset verboten werden. $fc1-$fff Spiegelung von $fc0 $1000-$ffff Buddha-Rom mit Offset $1000 im Rom selbst. Die Addressen $0 bis $fff im Rom können nie ausgelesen werden. Das Rom ist 8 Bit breit und wird an den geraden Addressen eingeblendet. Die IDE-Ports lösen einen INT2 aus, in den drei Registern $f00, $f40 und $f80 kann ermittelt werden, ob dieser IRQ für diesen Treiber gedacht war, und welcher der Ports ihn ausgelöst hat. Wenn Buddha-Erweiterungskarten einen RRQ auslösen, so ist dies INT6. Eine Memory-Map des Erweiterungsbereiches wird bei den jeweilligen Erweiterungen mitgeliefert. Die IDE-Ports bekommen die Addreßleitungen A2 bis A4, so daß jedes Wort im Speicher zweimal hintereinander gespiegelt ist. So kann per move.l ein Langwort gepollt werden, und move multiple ist im Keim erstickt (ich will ja keinen schlechten Programmierstil fördern). movem bringt außerdem nur etwas auf 68000er Prozessoren, ab 68020 mit Fastmem ist die Langwort-Geschichte schneller. Greift man auf die Spiegelungen bei $840, $940, $a40, $b40, $c40 und $d40 zu, kümmert sich Buddha nicht um das im Speed-Register eingestellte Timing, sondern fährt immer den 780ns-Zugriff. Diese Register sollten für den Kommando-Zugriff auf die Platte/das CD-Rom benutzt werden, da Kommando-Zugriffe 8 Bit-Zugriffe sind, und die müssen laut ATA-X3T9 langsamer ablaufen. Das Speed-Register: Byte-Zugriff, nur die obersten drei Bits (7, 6 und 5) sind für die Geschwindigkeit relevant. Bit 4 muß beim Schreiben immer auf 1 gesetzt werden, um kompatibel mit zukünftigen Buddha-Versionen zu sein. Die Bits 0-3 werden ignoriert, und auch vorraussichtlich von zukünftigen Buddhas nicht benutzt. Trotzdem wird an dieser Stelle festgelegt, daß die Bits beim Schreiben 1 gesetzt werden müssen. Die Werte in der Tabelle sind also vorm Schreiben 5 Bits nach links zu schieben (es sind ja die oberen Bits die benutzt sind), und eine OR-Verknüpfung mit $1f zu machen (so werden die unteren 5 Bit 1 gesetzt). Man kann natürlich direkt 1en von rechts nachschieben, WIE sie's am Ende machen können Sie halten wie ein Dachdecker. Für alle Timings gilt: Select und IOR/IOW haben gemeinsame steigende Flanke, IOR/IOW haben zu den Takten noch ein Propagation delay von ca. 30ns, daher die krummen Werte. Ein Takt ist 14,18 Mhz, also eine Periodendauer von 71ns (genau: 70,5). Wert 0 (Default nach Reset) 497ns Select (7 Takte) , IOR/IOW nach 172ns (2 Takte) Wert 1 639ns Select (9 Takte), IOR/IOW nach 243ns (3 Takte) Wert 2 781ns Select (11 Takte), IOR/IOW nach 314ns (4 Takte) Wert 3 355ns Select (5 Takte), IOR/IOW nach 101ns (1 Takt) Wert 4 355ns Select (5 Takte), IOR/IOW nach 172ns (2 Takte) Wert 5 355ns Select (5 Takte), IOR/IOW nach 243ns (3 Takte) Wert 6 1065ns Select (15 Takte), IOR/IOW nach 314ns (4 Takte) Wert 7 355ns Select, (5 Takte), IOR/IOW nach 101ns (1 Takt) Bei Zugriff auf AT-Addressen mit A6=1 (Beispielsweise $084x) wird immer ein Mode 0 8-Bit kompatibler Zugriff gemacht, unabhängig vom Wert der im Register steht: 781ns select, IOR/IOW nach 4 Takten (=314ns) aktiv. Bei sämtlichen Timings mit ganz kurzem Select-Signal (355ns) kommt es je nach Turbokarte auch vor, daß zwei weitere Takte eingefügt werden, so daß sich der gesamte Zugriff auf 497ns verlängert. Dies ist kein Fehler des Buddha, sondern der Turbokarte. Da dies allerdings sehr selten auftritt fällt es bei der Performance nicht ins Gewicht. Alle Zeiten sind übrigens ausgerechnet, und nur durch Messungen belegt, die die Größenordnung bestätigen. Ist ein Rechner mit einem anderen Master-Quarz als 28,37516 Mhz ausgestattet (z.B. mit dem NTSC-Quarz 28,63636 Mhz), so verkürzt sich jeder Takt auf knapp unter 70ns, eigentlich nicht der Rede Wert. Denkbar währe natürlich, den Z-II durch Quarz-Tuning ein wenig zu beschleunigen, das setzt aber entweder einen Multisync-Monitor am RGB-Port vorraus, oder eine Grafikkarte. Ein so getunter Amiga kann leider auch nicht fehlerfrei mit Disketten umgehen, von so einem Umbau sei also im großen und Ganzen abgeraten. Damit Software mit beiden Controllern (Buddha und Catweasel Z-II) kompatibel ist, verhält sich der Buddha so wie ein Catweasel Z-II, an dem kein Gerät am dritten Port angeschlossen ist. Das IRQ-Register für den 3. Port zeigt immer ein "Kein IRQ" an, so daß nicht zwischen den beiden Controllern unterschieden werden muß. Zugriffe auf den dritten Port gehen auf dem Buddha einfach ins Nirwana. Jens Schönfeld am 19. Februar 1997 überarbeitet am 27. Mai 1997 eMail: jens@siliconsonic.de -------- Änderungen am Buddha Flash: - Produktnummer und Hersteller-Nummer gleich - Seriennummer verschieden von 0. Bedeutungen: 0 kein Buddha Flash, zusatz-Features nicht verfügbar 1 Flash mit 32K Xicor EEprom 2 Flash mit 32K Samsung EEprom 3 Flash mit 64K AMD Flashrom PLCC32 * 4 Flash mit 128K AMD Flashrom PLCC32 * 5 Flash mit 256K AMD Flashrom PLCC32 (nur 240K nutzbar) (*): kann nicht vom Benutzer nachgerüstet werden, da anderes GAL erforderlich ("Bigrom"- GAL) - es kann kein Eprom mehr in den Sockel gesetzt werden, das Pinout ist jetzt auf das EEprom 28c256 von Xicor ausgelegt. - Mehr als 30K Rom möglich, mit 32 poligem PLCC Sockel bis zu 240K Alle Toggle-Register die nicht im MACH sind: -Schreiben auf $fc0 erlaubt IRQs, hebt Vertauschung auf und löscht alle Banking-Bits. -Schreiben auf $f00 vertauscht 16K-Bänke des Roms, so sind auch die bisher "verdeckten" 2K benutzbar. Bei 256K Flash ist dies Banking-Bit 18, die Vertauschung wird dann zwar auch noch durchgeführt, aber gleichzeitig auch die 128K-Bank umgeschaltet, so daß die Software von der Vertauschung nichts mitbekommt. -Schreiben auf $f40 setzt Banking-Bit 16. Achtung: IRQs werden jetzt nicht mehr durchgereicht! mit "BigRom" GAL: -Schreiben auf $f80 setzt Banking-Bit 17, Löschen durch Schreiben auf $fc0.