ndr-nkc.de ndr-nbc.de
  
Startseite
News
 
NDR-NKC
Geräte Z80
Geräte 68000
Geräte 8088
 
NKC Emulator
 
Z80 Section
Baugruppen
ROM's
Software
68000 Section
Baugruppen
ROM's
PASCAL/S
Software
CP/M 68K
8088 Section
Baugruppen
Downloads
 
Bussysteme
Stromversorgung
Input / Output
Grafikkarten
Speicherkarten
Massenspeicher
Weitere Baugruppen
 
Projekte
 
Dokumentation
Datenblätter
Glossar
Portraits
Links

Impressum

 

Baugruppe PARWELL Coprozessor

Baugruppe CPU68000-8 Bestückungsseite In meinem Fundus hatte ich eine 68000 CPU-Baugruppe gefunden. Anhand der Fotos und der Steckerleiste sowie der Beschriftung konnte man eindeutig erkennen, dass diese Karte zum Einsatz in einem NKC entwickelt wurde. Zuerst hatte ich gedacht, dass diese Karte eine vollwertige CPU Baugruppe mit 68000 aber nur mit einem 8 Bit Datenbus sein könnte.

Eine erste Suche im Internet ergab nichts Verwertbares. An dieser Stelle muss ich mich für die Recherchen von Martin bedanken, der tatsächlich einiges gefunden und mir einen Ansatz für weitere Recherchen geliefert hat.

Die heutzutage noch verfügbaren Informationen sind trotzdem leider sehr dürftig. Eine ähnliche Karte wurde für den Einsatz in einem IBM PC Computer entwickelt, links zur Beschreibung finden sich weiter unten.


Inhaltsverzeichnis

Einsatzmöglichkeiten

Die Baugruppe PARWELL ist ein kleiner eigenständiger Computer mit Prozessor, Speicher, Ports und Steuerelektronik, von denen mehrere als Coprozessor zum Einsatz kommen können. Zum Betrieb ist ein Hauptrechner (zum Beispiel CPU68K) notwendig, welcher eine oder mehrere der Coprozessor-Karten steuert. Die eingesetzten Coprozessoren können parallel zum Hauptrechner gleichzeitig Programme bzw. Teile von Programmen ausführen. Auf jeder PARWELL kommt ein Motorola MC 68000 mit einer Taktfrequenz von 12 MHz zum Einsatz. Es können bis zu 128 kByte RAM eingesetzt werden.

Um die Rechenleistung der PARWELL sinnvoll nutzen zu können, sollten in einem System mehrere dieser Baugruppen eingesetzt werden. Das zu berechnende Problem muss sich gut in parallele Aufgaben teilen lassen, also in kleinere Unterprogramme mit möglichst gleichem Rechenaufwand. Datentransfers zwischen dem Hauptrechner und den Coprozessoren sollten auf ein Minimum reduzierbar sein, um den Zeitgewinn nicht durch große Datentransfers wieder aufzuheben. Mögliche Probleme sind zu Beispiel

  • Analyse von Schachstellungen
  • Berechnung von 3D-Modellen
  • Berechnung von Fraktalen

Ursprünglich wurde PARWELL tatsächlich als Coprozessor zum Berechnen von Schach-Stellungen entwickelt.

Systemaufbau

Zum Aufbau eines funktionsfähigen Systems zum Test und Einsatz der Coprozessoren ist nur ein Minimalsystem mit folgenden Komponenten notwendig.
  • CPU68K als Hauptprozessor
  • ROA64 mit Grundprogramm und RAM
  • GDP64K zur Grafikausgabe
  • KEY und Tastatur
  • PARWELL als Coprozessor

Kommunikation mit PARWELL

Jede PARWELL wird über einen einzigen freien I/O Port des Hauptrechners gesteuert. Ohne Probleme lassen sich in einem NKC-System mindestens 64 freie Portadressen finden und entsprechend viele PARWELL gleichzeitig ansteuern. Auf jeder PARWELL lassen sich bis zu 128 kByte RAM einsetzen, der Speicher wird einzeln, gemeinsam oder in Gruppen in freie Speicherbereiche des Hauptrechners eingeblendet.

Über 8 Jumper wird die Portadresse der PARWELL eingestellt, alle PARWELL müssen auf unterschiedliche Adressen eingestellt werden. Es bietet sich an, die Adressen 0x00 bis 0x3F zu verwenden, je nach Anzahl der verfügbaren PARWELL. Fortlaufende Portadressen vereinfachen die Verwaltung im Hauptprogramm der steuernden CPU.

Beim Setzen des Ports durch den Hauptrechner werden nur die Bits 0 und 1 verwendet, dadurch ergeben sich 4 Betriebszustände. Bei gesetztem Bit 0 wird der Coprozessor auf RESET gehalten, bei zurückgesetztem Bit 0 führt der Coprozessor sein Programm aus. Bei gesetztem Bit 1 ist der Speicher des Coprozessors in den Hauptrechner eingeblendet und kann von dort gelesen und beschrieben werden. Ansonsten ist der Speicher ausgeblendet.

Nach dem Einschalten sind beide Bits auf jeder PARWELL gesetzt, sodass alle Coprozessoren angehalten sind und alle Speicher parallel eingeblendet sind. Beim Lesen des Ports durch den Hauptrechner werden Statusinformationen zurückgegeben. Dazu kann das Programm auf der PARWELL diese Informationen über den internen Port 0xFF setzen.

Speicherzugriff

Auf PARWELL kommen keine ROM-Bausteine zum Einsatz, auszuführende Programme werden vom Hauptprozessor in den RAM-Speicher auf der Baugruppe PARWELL übertragen. Innerhalb des Coprozessors ist der installierte Speicher immer ab Adresse 0x00000000 ansprechbar, die Adresse unter welcher der Speicher im Hauptrechner eingeblendet wird, ist über Jumper einstellbar.

Solange der Speicher in den Hauptrechner eingeblendet ist (Bit 1 des Ports gesetzt), kann der Hauptrechner beliebige Daten und Programme an die PARWELL übertragen, indem der Speicherbereich beschrieben wird. Ist der Speicher mehrerer PARWELL gleichzeitig eingeblendet, so werden die Daten gleichzeitig an alle eingeblendeten Coprozessoren übertragen. Prinzipiell ist es auch möglich, verschiedene PARWELL mit unterschiedlichen Programmen zu versorgen.

Beim Lesen aus dem eingeblendeten Speicherbereich darf nur eine der installierten PARWELL den Speicher eingeblendet haben. Auf diese Weise lassen sich auch größere Ergebnismengen aus den Coprozessoren lesen.

Fotos der PARWELL Baugruppe

Foto von der Bestückungsseite: Sehr prominent der MC 68000 in der Keramik-Version am oberen Rand der Platine. Links oben ein Jumper zur Auswahl der eingesetzten RAM-Bausteine, rechts 8 Jumper zum Setzen der Adresse des Ports und 2 Gruppen mit 4 Jumpern zum Einstellen der Basisadresse des Speichers.

Baugruppe CPU68000-8 Bestückungsseite

Baugruppe CPU68000-8 Bestückungsseite

Prinzipien der Programmierung

Um die Baugruppe PARWELL nutzen zu können, sind grundsätzlich 2 Programmteile notwendig:

    - Hauptprogramm zur Steuerung der Coprozessoren
    - Programm zur Lösung von Teilaufgaben durch die Coprozessoren

Das Hauptprogramm / Steuerungsprogramm

Zusätzlich zu den allgemeinen Aufgaben (Tastaturabfrage, Bildschirmausgabe, usw.) hat das Hauptprogramm mehrere Sachen zu erledigen, die sich in folgende Gruppen aufteilen. Die Initialisierung sollte sich einfach in jedes bestehende Programm integrieren lassen.

Initialisierung der Coprozessoren
    - Anhalten aller Coprozessoren und Einblenden der Speicherbereiche
      dazu alle Ports der betroffenen PARWELL auf 0x03 setzen
    - Kopieren des Programmcodes zu allen Coprozessoren
      vom ROM des Hauptprozessors in den gemeinsamen Speicherbereich
    - Ausblenden aller PARWELL-Speicherbereiche, RESET beibehalten
      dazu alle Ports der betroffenen Coprozessoren auf 0x01 setzen
Teilprobleme ermitteln

Ob ein zu lösendes Problem parallelisierbar ist, lässt sich nicht verallgemeinern. Jedes Problem, welches sich aus vielen gleichen komplexen Rechenschritten zusammensetzt, sollte parallelisierbar sein. Beispiele wurden weiter oben genannt.

    - Zerlegung des Gesamtproblems in Teilaufgaben
      zum Beispiel einzelne Schachstellungen, Spalten eines Fractals, ...
    - Aufbau eines Arrays der Teilaufgaben (offen, aktiv, fertig) 
      korrespondierend zu der Anzahl der Teilaufgaben
Verteilung und Auswertung der Teilaufgaben

Hier liegen die größten Fallstricke: Um vorhandene Coprozessoren nicht ohne Arbeit warten zu lassen, sollten Ergebnisse der vorangegangenen Berechnungen verarbeitet werden können, während der Coprozessor sich schon mit der nächsten Aufgabe beschäftigt. Dazu bieten sich alternierende Ergebnisbereiche an.

    - Array testen, ob noch offene Teilaufgaben zu berechnen sind
      falls keine weiteren offenen Aufgaben verfügbar, Hauptprogramm beenden
      sonst
    - In einer Schleife Ports aller Coprozessoren testen
      0x00 bedeutet, dass der Coprozessor frei ist 
        - Speicher dieser PARWELL einblenden, RESET senden 
          0x03 an diesen Coprozessor Port senden
        - Parameter nicht berechneter Teilaufgaben übertragen
        - Speicher ausblenden, Berechnung starten
          0x00 an diesen Coprozessor senden
    - 0xFF bedeutet, dass die Teilaufgabe berechnet wurde
        - Speicher dieser PARWELL einblenden, RESET senden 
          0x03 an diesen Coprozessor senden
        - Ergebnisse lesen und verarbeiten
          zum Beispiel Grafikausgabe oder Schachzug verwerfen
        - Speicher wieder ausblenden, RESET beibehalten
          0x02 an diesen Coprozessor senden

Unterprogramm

Das Programm für die Coprozessoren muss eigenständig lauffähig sein und für den Ablauf ab Adresse 0x00000000 übersetzt werden. Es muss folgende Punkte erfüllen:

    - Initialisierung des Stackpointers und Festlegung der Startadresse
    - Zurücksetzen des Status-Ports 
      0x00 an Port 0xFF schreiben
    - Lesen der Parameter für das Teilproblem
    - Berechnung des Ergebnisses
    - Setzen des Status-Ports, wenn die Teilaufgabe berechnet wurde
      0xFF an den Port 0xFF schreiben
    - Endlosschleife zum Warten auf eine neue Teilaufgabe 

PARWELL für IBM-PC

Für eine ähnliche Steckkarte zum Einsatz auf einem IBM-PC sind dank Martin komplette Unterlagen verfügbar. Wegen der unterschiedlichen Architektur des PC im Gegensatz zum NKC ergeben sich Abweichungen, die eine Fehleranalyse nicht gerade einfacher machen.

Dokumentation

Im ersten Teil der Beschreibung aus der Zeitschrift MC vom Juli 1989 wird die Hardware der PC-Steckkarte und der Systemaufbau beschrieben. Es ist ein kompletter Schaltplan enthalten.
Download Teil 1
Der zweite Teil vom August 1989 beschäftigt sich mit der Software und der Programmierung unter PASCAL und C. Den Abschluss bildet ein komplette 3D-CAD Programm unter PASCAL, welches den Coprozessor zu 3D-Transformation nutzt.
Download Teil 2

Theorie und Praxis

Da die Karte in gutem Zustand war und Dank Martin weitere Infos verfügbar wurden, habe ich sie erst mal auf meinem Testsystem mit minimaler Bestückung ausprobiert. Gesichert funktionierende Baugruppen CPU68K, ROA64 mit dem Grundprogramm 4.3 und 8 kByte statischem RAM, KEY und GDP64K dienten als Basis-System.

Wenn die PARWELL auch nur ähnlich funktioniert wie die Beschreibung der PC-Steckkarte, dann muss irgend etwas defekt sein.

  • Nach dem Einschalten des Systems ist der Speicher der RARWELL im Grundprogramm nicht sichtbar.
    Änderungen an den Jumpern haben keinen Effekt.

  • Schreiben von Werten auf die Portadresse haben bei meiner PARWELL ebenfalls keinen Effekt.
    Weder RESET der CPU noch die Einblendung der RAM-Bausteine lassen sich steuern.

Daher gehe ich davon aus, dass mehrere integrierte Schaltkreise defekt sind. Ohne einen korrekten Schaltplan für meine spezifische Karte wird die Fehlersuche ziemlich kompliziert.

Aufruf zur Mitwirkung

Falls jemand zufällig weitere Informationen findet oder zum Beispiel Dokumentation zur PARWELL für den NKC besitzt, möge er sich bitte bei mir melden. Besonders interessiert bin ich an Originalunterlagen wie zum Beispiel Schaltplan und Aufbauanleitung oder auch Hinweise auf frühere Bezugsquellen und Preise.