|
Das ISA-Bus Steckkartensystem des Milan
Der ISA-Bus ist ein einfach zu handhabendes Bussystem im Bezug auf
die Hardware als auch im Bereich der Programmierung. Im Gegensatz zum
PCI Bus ist es auch für Hobbyelektroniker problemlos
möglich, eigene Karten selber zu entwickeln. Dies resultiert
einerseits aus dem einfachen mechanischen Aufbau, andererseits aus der
simplen digitalen Logik. Ebenfalls existiert eine Vielzahl
kostengünstiger Zusatzkarten für den Heim- als auch für
den professionellen Bereich.
Der ISA-Bus wurde Anfang der 80er Jahre speziell für die
Intel 8086 Prozessorfamilie entwickelt. Aus diesem Grund hat der
ISA-Bus Eigentümlichkeiten die im Einsatz zusammen mit einem
Motorolla Prozessor beachtet werden müsssen. Diese werden im
folgenden dargestellt:
- 1) Besonderheiten/Software
-
a) Die Adressräume des 8088/ISA-Bus
Der 8086 Prozessor kennt zwei Adresseräume einen mit einer
Breite von 20Bit, der sogenannte Adressbus, sowie einen mit 16Bit, der
sogenannte Portadressraum. Diese beiden Bereiche findet man
vollständig, ohne Lücken, am ISA-Bus wieder, dh. 8086
Adressraum = ISA Adressraum!
Der Adressbus dient wie der Name schon sagt, zur Adressierung von
RAM/ROM Bereichen und hat eine Größe von 1MByte. Der
Portadressraum ist ein Überbleibsel aus der 8Bit Zeit und wird in
der Regel als Speicherbereich für Status- und
Konfigurationsregister verwendet. Er hat eine Größe von
64KByte. Da der Milan nur einen einzigen Adressraum kennt (was auch
vernünftiger ist) müssen die 8086 Adressen in dessen
Speicherraum abgebildet werden. Die Portadressen beginnen beim Milan
ab der Adresse $C0000000 und enden bei $C000DFFF (es wird nicht der
gesamte Adressbereich abgebildet.) Die 20Bit des Adressbuses liegen
zwischen $40000000 $400FFFFF.
Installiert man im Milan ein im PC bereich übliche Multi- I/O
Karte die einen Druckerport enthält (und meist 2 Serielle Ports)
so leigt in der Regel das Ausgaberegister des Druckerports an der
Portadresse $278. Die folgende Anweisung ist nötig um jedes 2.Bit
am Druckerausgang zu setzen:
move.b #$AA,($C0000278)
Würde man eine ISA-Grafikkarte installieren bei der, der
Adressraum an Adresse $A0000 (Intel Notation A000:0000) beginnt so
kann man mit folgender Anweisung den Wert $FF dort hineinschreiben:
move.b #$FF,($400A0000)
b) Little und Big-endian
Es gibt Dinge in der Mikroprozessortechnik die eigentlich klar und
logisch sind ....... was nicht heißen soll das die
Systemdesigner bei Intel in der Lage sind es zu kapieren.
Mit Little und Big-Endian wird umschrieben in welcher Reihenfolge
ein Prozessor Bytes im Speicher ablegt. Schreibt ein 8088 oder auch
ein Pentium ein Byte ins RAM, ist noch alles in Ordnung. Bei einem
Wort (16Bit) wird das niederwertige Byte an die niedrigere Adresse
geschrieben. Und das höherwertige an die höhere! Klingt
logisch auf den ersten Blick!?!? Nehmen wir mal an der Prozessor legt
den Wert $ABCD in die Adresse $400A0000. Dazu Abbildung 1 :
Wie man sieht ist die Reihenfolge genau umgekehrt wie man es
eigentlich erwartet hätte. Ein Motorolla (und alle anderen
Modernen Prozessoren) machen es in genau umgekehrter Reihenfolge:
Schon rein optisch wirkt diese Darstellung angenehmer. Das von
Intel verwendete Format heist Little-Endian, Motorolla verwendet
Big-Endian. Die Nachteile des Little-Endian Formates sollen an dieser
Stelle nicht weiter Diskutiert werden. Als Anmerkung sei jedoch
folgendes Beispiel gegeben:
Man möchte den Inhalt des Bildschirmspeichers von links nach
rechts scrollen. Unser Bildschirm soll die Farbtiefe von einem Bit
haben. Mit einem Intelprozessor muß man diesen Vorgang Byteweise
durchführen, auch mit einem Pentium! Mit einem Motorolla geht das
ganze Wort bzw. Langwortweise was bedeutet das bei gleicher Taktrate
ein Intel 4 mal langsamer wie ein Motorlla ist........
Macht ein Milan Wortlesezugriffe (16 Bit) auf den Porta- dressraum
so kommen die Bytes in der Little-Endian Reihenfolge an. Um nun die
richtige Reihenfolge in einem Register wieder herzustellen, muß
dieses um acht Positionen rotiert werden. Dies macht die folgende
Anweisung:
ror.w #8,d0
Gleiches gilt bei schreibenden Zugriffen. Bei Zugriffen auf den
20Bit Adressraum muß keine Rotation vorgenommen werden, da dies
die verwendeten Milan-PCI Chipsätze erledigen.
c) Die Interrupts des ISA-Bussystems
Der ISA-Bus kennt folgende Interrupts:
Tabelle 31: ISA-Interrupts
Nummer |
Bedeutung |
|
|
0 |
Zeitgeber |
1 |
Tastatur |
2 |
eventuell frei beim Milan |
3 |
Serielle Schnittstelle 2 |
4 |
Serielle Schnittstelle 1 |
5 |
frei |
6 |
Diaketten Laufwerk |
7 |
Drucker |
8 |
Echtzeituhr |
9 |
frei |
10 |
frei |
11 |
frei |
12 |
Maus |
13 |
frei |
14 |
IDE Primarkanal |
15 |
IDE Sekundärkanal |
ISA Interrupt Vektoren werden in den Milan Exception Bereich
$140+4*Nummer eingeblendet. Um den Vektor zu setzen sollte die
Biosroutine Setexc() verwendet werden.
- 2) Hardware
-
a) Der Busslot
Der ISA-Bus hat Insgesamt 62 Anschlüsse.
b) Die Pinbeschreibung
Tabelle 32: ISA-Bus Pinbelegung
GND |
Masse |
Reset |
Resetsignal |
IRQ 2-7 |
Interruptleitungen |
DRQ 1-3 |
DMA-Requestleitungen |
res |
reserviert |
/MEMW |
speichere in Adressraum |
/MEMR |
lese von Adressraum |
/IOW |
schreibe an Portadresse |
/IOR |
lese von Portadresse |
/DACK 0-3 |
DMA Acknowledge |
/CLK |
Takt (8,33MHZ) |
TC |
Ende der DMA Übertragung |
ALE |
Adress Signal gültig |
OSC |
Oszillator (14,3MHZ beim XT) |
/I/O |
Zeigt Fehler auf ISA-Bus Karte an |
D0-D7 |
Datenbits |
I/O* |
Wartezyklen beim Prozessor anfordern |
A0-A19 |
Adressbits |
Technische Informationen von: saheit00@fht-esslingen.de
Sascha Heinisch
Copyright © Robert Schaffner (doit@doitarchive.de)
Letzte Aktualisierung am 23. Mai 2004
|