Zauberrei
Das IDE/CF-Interface ist nunmal ganz eng an den 16-Bit-ISA-Bus des IBM AT angelehnt. Und das wiederum ist an die Wort-Darstellung der X86-Prozessoren angepasst, und da werden nunmal 16-Bit-Worte im Little Endian Format dargestellt. Little Endian bedeutet, das ein 16-Bit Wort aus einem führenden Low-Byte und einem folgenden High-Byte gebildet wird. Also genau umgekehrt wie es wir z.B. bei unserem Stellwertsystem im 10er-System gewohnt sind, die Zahl "Zehn" wäre bei Little Endian da nicht 10, sondern 01... Der Motorola 68000 verwendet dagegen Big-Endian, also genau umgekehrt (und für uns westlich orientierte Menschen einfacher lesbar) mit High-Byte zuerst und dann Low-Byte. Wenn nun ein 68000 auf eine Little-Endian-Hardware zugreifen will, muss er eben den Byteswap machen*. Ihr habt ja schon genug IDE:Interfaces gebastelt, dass ihr sehen konntet, dass da die im Prinzip die Adress- und Datenbussignale (mit ein bischen Adressdecoderlogik) im Primzip 1:1 miteinander verbunden werden (bzw. bei den Daten der Byteswap hardwareseitig gemacht wird).
Bei SCSI spiewlt das keine Rolle, denn da gibtgs keine direkte Verbindung zwischen dem Prozessorbus und dem CF/IDE-Interface, sondern da sitzen 2 SCSI-Controller dazwischen, ein Initiator am Rechner, ein Targetdevice im SCSI-zu-CF/IDE-Adapter. Das SCSI-Interface ist entweder 8 Bit (SCSI 1/2) breit, oder Big Endian 16 Bit (neuere SCSI-Versionen). Der 68000er schreibt Big Endian auf den SCSI-Controller, der SCSI-Controller schickt zwei Bytes oder ein Big-Endian Wort auf den SCSI-Bus und das SCSI-Target wandelt entweder 2 nacheinander empfangene Bytes oder (bei Wide SCSI) Big Endian auf Little Endian um und schickt das auf das IDE/CF-Interface.
Wo ist da die Zauberrei???
* Es ist aber noch etwas komplizierter...: So ein CF/IDE-Interface überträgt ja zweierlei:
1. Befehle
2. Daten
Die Befehle für das IDE/CF-Laufwerk müssen grundsätzlich immer als Litte Endian übertragen werden, denn sonst versteht sie der IDE/CF-Controller im Laufwerk bzw. der Karte nicht.
2. Dem IDE/CF-Laufwerk ist aber egal, ob es Daten im Big oder Little Endian Format in seinen Sektoren speichern soll.
Das bedeutet:
1. Ein PC, der grundsätzlich immer in Little Endian arbeitet, da muss nichts gemacht werden.
2. Ein 68000 System, welches Big Endian arbeitet, muss ein IDE/CF-Laufwerk mit Little-Endian Befehlen steuern, kann aber wahlweise Little/Big Endian Daten darauf speichern. So hat es ATARI beim Falcon und ST-Book gemacht, die Ataris speichern normalerweise Big Endian auf IDE-Laufwerken.Will man PC beschriebene Laufwerke damit lesen und schreiben, muss der Byteswap auch bei Daten durchgeführt werden, was die Sache langsam macht. Dazu im Gegensatz das IDE-Interface nach P.Putnik, der die Big/Little-Endian-Konvertierung durch Vertausch der Datenleitungen auf dem IDE-Bus realisiert hat, da darf dann der Plattentreiber nicht noch zusätzlich einen Byteswap bei den Befehlen durchführen.
Immer noch keine Zauberrei, wenn man die Hintergründe kennt!