Home Milan Hardware Milan Rom Flash Milan Erweiterungskarten
 

5.8 Milan ISA Bus


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
Home Milan Hardware Milan Rom Flash Milan Erweiterungskarten