HaDesWWW logo
Startseite

Downloads
Geschichte(n)
 
Hardware
FPGA-Board
Prozessor
  Instruktionssatz
Peripherie
  XBus-Referenz
PS/2-Board
Soundboard
USB-MMC-Board
 
PC-Software
HaCom
HoAsm, HLink
Emulator
Connectivity
 
Embedded Software
HAL
Dateimanager
Tetris
PacMan
3D-Engine
Pong
PacMan 3D
 
Kontakt

HaDes XP - Die XBus Komponenten

Dies ist eine Referenz aller XBus-Komponenten, die in der aktuellen Version HaDes Pro vorhanden sind und ihrer verfügbaren Port-Adressen. XBus-Komponenten, die in früheren Hardware-Versionen vorhanden waren, aber inzwischen ersetzt wurden, sind unter Alte XBus-Komponenten aufgeführt. 

Allgemeine Konventionen:

Einige allgemeine Konventionen helfen, auf XBus-Komponenten zuzugreifen.
  • Der Bereich gültiger Portadressen reicht von 0 bis 255 (inklusive).
  • Jede XBus-Komponente hat maximal 8 Portadressen, wobei die erste Portadresse der Komponente durch 8 teilbar ist. (Üblicherweise handelt es sich dabei um ein Statusregister der Komponente.)
  • Ein Lesezugriff auf die erste Portadresse einer Komponente darf keine Seiteneffekte haben.
Diese Konventionen werden von den neuesten HAL-Versionen genutzt, um beim Systemstart abzufragen, welche XBus-Komponenten tatsächlich vorhanden sind. Dazu wird ein Lesezugriff auf alle gültigen, durch 8 teilbaren Portadressen ausgeführt. Der dabei ggf. auftretende XAddr-Interrupt (falls keine Komponente an dieser Adresse existiert) wird abgefangen. Alle Ergebnisse werden in einer Bitmaske gespeichert, die mit der HL-Funktion xbus_exists() abgefragt werden kann.

XTimerPro:

Der XTimerPro ersetzt XTimerXT und XTickClock und ist hierbei besonders genau und dabei sehr ressourcensparend (auf dem FPGA). 

Um den Timer zu starten, muss ein TickCount-Wert angegeben werden (auf Port 17). Das Timeout-Ereignis tritt ein, wenn der laufende Zähler diesen Wert erreicht. Um also eine bestimmte Zeit zu warten, wird zunächst der aktuelle Zählerstand geholt, die entsprechende Zeit addiert und die errechnete Summe anschließend als Timeout-Wert angegeben (Port 17). Der Timer kann jederzeit über das Bit 1 des Statusports deaktiviert werden (schreibe eine 0). Eine Aktivierung ist aber nur über Port 17 möglich.

Zur Zeitmessung (XTickClock-Funktion) kann einfach Port 17 vor und nach einer Operation ausgelesen werden, die Differenz der Werte ist dann die Zeitdauer der Operation in µs.

Interface:

Portadresse Bit Beschreibung
16 0 1: Interrupt auslösen, wenn Zeit abgelaufen
1 1: XTimerPro ist aktiv / 0: deaktiviert Timer
2 1: Zeit abgelaufen (READ ONLY)
31..3 Inhalt undefiniert
17 31..0 TickCount (in µs)
Schreiben: Nächstes Timeout (aktiviert automatisch den Timer)           |
Lesen: Aktueller Zählerstand

XJtag:

Überträgt Daten langsam und gemächlich über die bereitgestellte JTAG-Schnittstelle (Parallelport) zum PC.

Interface:

Portadresse Bit Beschreibung
32 0 1: JTAG hat Interrupt ausgelöst
1 1: Interrupt auslösen, wenn Daten empfangen
2 1: Interrupt auslösen, wenn Daten versandt
3 1: Daten wurden empfangen (have_recv_data) (RO)
4 1: Sendepuffer voll (have_send_data) (RO)
33 7..0 Data Port (byteweises Lesen / Schreiben)

XConsole:

Steuert die Anzeige- und Bedienelemente, die auf dem TeBL Board angebracht sind. Grundlegend gilt: das höchste ("linkeste") Bit gilt immer für die/den am weitesten links angebrachten Schalter / LED / Segmentanzeige.

Interface:

Portadresse Bit Beschreibung
64 0 1: Tasten haben Interrupt ausgelöst
1 1: Interrupt auslösen bei Tastendruck
65 7..0 Tastenstatus (1: Taste i gedrückt) (RO)
15..8 Switch-Status (1: Switch ist aktiv) (RO)
66 7..0 LED-Status (1: LED i an)
15..8 LED-Blinkend (1: LED i-8 blinkend)
67 15..0 Auf den 7-Segmenten angezeigter Hex-Wert (falls Hex-Ansteuerung verwendet wird)
31..0 Steuersignale für die 7-Segmente (falls Direktansteuerung verwendet wird)
68 3..0 1: 7-Seg-Anzeige i anschalten / 0: aus
7..4 1: Dezimalpunkt der Anzeige (i-4) an
8 1: aktivierte Anzeigen blinken / 0: fest
9 1: Direktansteuerung der 7-Segmente / 0: Hexwert (Standard)

XPoison:

Nur im Emulator: Diese XBus-Komponente wird nur vom Emulator implementiert. 

Kann benutzt werden, um gezielt Speicheradressen zu "vergiften", so dass jeder Zugriff zu einer Programmunterbrechung (impliziter Breakpoint) führt.

Interface:

Portadresse Bit Beschreibung
112 16..0 Zu vergiftende Speicheradresse
113 16..0 Zu entgiftende Speicheradresse

XPS2:

Stellt ein einfaches Interface zur Kommunikation mit einem PS/2-Gerät bereit.

Zu beachten ist, dass beim Start und nach jedem Resetvorgang die Bits ungültig sind und das Interface noch nicht benutzt werden darf. Es muss zunächst in einer Pollingschleife Bit 5 von Adr. 128 abgefragt werden, solange bis dieses 1 wird. Dann ist die Geräteinitialisierung abgeschlossen und es kann abgefragt werden, ob überhaupt ein funktionsfähiges Gerätangeschlossen ist (Bit 6) bzw. um welche Art von Gerät es sich handelt (Bit 7).

Die XPS2 ist zweimal im XBus eingebunden (einmal für jeden PS/2-Port), und zwar an den Adressen 128-130 für Port 1 sowie 144-146 für Port 2.

Interface:

Portadresse Bit Beschreibung
128 0 1: XPS2 hat Interrupt ausgelöst
1 1: Interrupt auslösen bei Empfang
2 1: Interrupt auslösen bei Versand (+Timeout)
3 1: Daten wurden empfangen (RO)
4 1: Sendevorgang läuft - busy (RO)
5 1: Geräteinitialisierung abgeschlossen
6 1: Ein Gerät ist angeschlossen, 0: keines
7 1: Eine Tastatur ist angeschlossen, 0: Maus
129 7..0 Data Port
130 X Reset Port
Bei Schreiben eines Wertes - egal welches - wird ein Reset der PS/2 Hardware ausgeführt; alle Bits werden ungültig!

XPix:

Steuert die Grafikmodus-Ausgabe auf dem angeschlossenen VGA-Monitor. Dabei wird die Auflösung 640x480 Pixel mit den 16 Standard-VGA-Farben verwendet.

Beachte, dass der Textmodus-Grafikspeicher in den XPix-Videospeicher bei den Adressen 1015808 (220 - 215) bis 1048575 (220-1) eingeblendet ist. Zugriffe auf diese Adressen durch den XPix sollten vermieden werden.

Interface:

Portadresse Bit Beschreibung
160 18..0 Grafikspeicher-Adresse
161 3..0 Data Port (Lesen / Schreiben eines Pixels). Jede Lese- bzw. Schreiboperation erhöht automatisch die Grafikadresse (mod 219).
162 31..0 Fast Data Port (Lesen / Schreiben von acht aufeinanderfolgenden Pixeln, begonnen ab der Grafikadresse, inklusive). Jede Operation erhöht die Grafikadresse um 8 (mod 219). Die höchstwertigen Bits des Eingangswortes kommen auf die niedrigste Adresse zu liegen (Big Endian).
163 3..0 Transparenzfarbe. Wenn Transparenz angeschaltet ist, wird diese bei nachfolgenden Schreibzugriffen ignoriert, der Originalwert aus dem Grafikspeicher bleibt stehen.
4 1: Transparenz aktiviert.
164 x..0 Veraltet: Der Textmodus (XGfx) wurde abgeschafft, eine Änderung des Anzeigemodus hat daher keine Auswirkung mehr.
Einstellen des Anzeigemodus. Folgende Werte sind möglich:
0 Textmodus 80x60x60 (Standard)
1 Grafikmodus 640x480x60
165 0 Wahl des Puffers (für Double-Buffering).
Falls Puffer= liegt das Bild bei Adr.
0 0 .. 307199
1 524288 .. 831487
(Die Pixeladresse wird für Puffer 1 einfach um 219 erhöht.) Dies betrifft nur die Ausgabe an den Monitor; CPU-Zugriffe sind nicht betroffen.

XSound:

Erzeugt Mono-Sound in 8-bit Samplequalität mit variabler (einstellbarer) Samplerate. Die Ausgabe erfolgt als ein einziges Bit (sigma-delta DAC), das durch einen Tiefpass in eine Analogspannung gewandelt werden muss. Solange Eingabedaten vorhanden sind (diese werden in einem Puffer zwischen- gespeichert), wird auch Sound produziert. Der Status des Puffers kann über das Statusregister abgefragt werden, alternativ können auch Interrupts ausgelöst werden, wenn der Puffer langsam leerläuft (ca. 1/4 Füllstand).

Interface:

Portadresse Bit Beschreibung
192 0 XSound hat Interrupt ausgelöst (lösch mit 0)
1 Soll Interrupt vor Pufferleerlauf ausgelöst werden?
3..2 Zustand des Soundpuffers. Mögliche Werte:
11 = komplett voll
10 = gut gefüllt (>1/4)
01 = schlecht
00 = komplett leer
193 7..0 Data Port (Schreiben eines Wave-Samples.) Von diesem Port kann nicht gelesen werden! Falls der Puffer voll war, wird der Wert ignoriert. Falls der Puffer leer war, wird die Soundausgabe gestartet.
194 ??..0 Länge eines Samples in Clocktakten. Umgekehrt proportional zur Samplefrequenz. Beim Start ist die Samplefrequenz 11 kHz. Der Port kann gelesen werden.

XMMC:

Liest und schreibt Daten von einer MultiMedia-Flash-Speicherkarte. Die XMMC ermöglicht einen wahlfreien Zugriff auf einzelne Bytes der Speicherkarte. Da MMC-Karten aber blockorientiert arbeiten (wobei ein Block aus 512 Byte besteht), enthält sie einen Cachhe für einen Block. Immer wenn die MMC-Adresse (Port 209) den gecachten Block verlässt, wird  dieser auf die Karte geschrieben, falls er verändert wurde, 

Achtung: Die XMMC ist nicht hotplug-fähig. Nach dem Einstecken einer Speicherkarte ist der Prozessor (und der XBus) neuzustarten.

Achtung: Die XMMC stellt keine Informationen über die Größe der eingelegten Speicherkarte bereit. Diese muss vom Anwender angegeben werden. Greift man auf Bytes der Karte zu, die über der realen Größe liegen, treten Command-Fehler auf. 

Interface:

Portadresse Bit Beschreibung
208 0 reserved (Interrupt)
1 reserved (Interrupt)
2 1: Write-Fail aufgetreten (Dieses Bit muss von der CPU zurückgesetzt werden, wenn weitere Schreibzugriffe erfolgen sollen. Solange dieses Bit gesetzt ist, ignoriert XMMC sämtliche Schreibzugriffe.)
3 1: Command-Fail aufgetreten (Dieses Bit muss von der CPU zurückgesetzt werden, wenn irgendwelche Zugriffe erfolgen sollen. Solange dieses Bit gesetzt ist, ignoriert XMMC sämtliche Lese/Schreibzugriffe.)
4 1: XMMC ist busy (Karte schreibt)
209 31..0 MMC-Adresse (mit Autoinkrement)
210 7..0 Byte Port (byteweises Lesen u. Schreiben).
Die Adresse (=Port 209) wird automatisch inkrementiert, sobald der Zugriff beendet wurde.
211 - Flush Port: Ein Schreibzugriff mit beliebigem Datenwort löst das sofortige Zurückschreiben des gecacheten Blocks auf die Karte aus. (Dies wird in fclose() aufgerufen.)
212 31..0 Adresse, an welcher der letzte Fehler (Write-Fail oder Command-Fail) aufgetreten ist, wird bei einem HaDes-Reset mit 0 initialisiert. (RO)

XDcf:

Die XDcf steuert die Echtzeit-Funkuhr (Empfängermodul für DCF77-Signale von Conrad) an.  

Das DCF77-Signal wird mit einer Datenübertragungsrate von nur 1 Bit / Sekunde übertragen, daher lohnt es sich nicht, größere Datenmengen in der XBus-Hardware zu puffern. 

Stattdessen löst die XDcf immer bei einem neuen Zeitpuls (d.h. zum Start jeder Sekunde) einen Interrupt aus (wenn dies aktiviert ist). Im Datenregister kann zu diesem Zeitpunkt immer der Wert des Datenbits ausgelesen werden, das beim vorigen Sekundenpuls übertragen wurde. 

Interface:

Portadresse Bit Beschreibung
224 0 1: Interrupt auslösen, wenn ein Sekundensignal detektiert wurde (Fehler max. 16 ms)
1 letztes empfangenes Datenbit (ändert sich 1x pro Sekunde, READ ONLY)
2 aktuelles DCF-Signal (Rohwert) (READ ONLY)
31..3 Inhalt undefiniert

 
rrobek.de Hauptseite
 
Valid HTML 4.01!