Vollkompatible Erweiterung der Ataris um mehrere Parallelports
**************************************************************


Ziel
----
Es werden 4 Druckerports gebraucht, mit denen auch ahnungslose Programme 
arbeiten knnen. Es soll alles, was am Originalport nutzbar ist, an 
beliebigen Ports nutzbar sein, z.B. Drucker, EPROM- und GAL-Programmierer, 
Scanner, Sampler, Foliotalks. Neue Programme sollen den Port selbst whlen 
knnen. So ergeben sich die Forderungen:
- aus der Sicht eines Programms volle Kompatibilitt zum Original,
  inklusive der Bidirektionalitt der Datenleitungen D7..D0
- die Ports ndern ihre Ausgangspegel nicht, wenn sie inaktiv sind
- durch Software umschaltbar
Das Projekt trgt den Namen Mulpri und das Kurzzeichen 4P.


Copyright
---------

Dies ist die freie Version von Mulpri. Diese Version gehrt zu der 
besonderen Art von Shareware, die aus einer Hardware-Bauanleitung und 
Software besteht. Natrlich sind weder Hardware noch Software in ihrer 
Funktion eingeschrnkt. Der Shareware-Preis, den jeder Mulpri-Bastler 
bezahlen sollte, betrgt 30DM (Kontonummer folgt). Das halte ich fr Mulpri 
angemessen, hoffentlich viele Bastler/Nutzer auch.

Dieses Paket darf und soll frei kopiert werden, solange alle im Abschnitt 
Inhalt aufgefhrten Dateien unverndert weitergegeben werden. Wenn Dateien 
oder modifizierte Originaldateien hinzufgen werden, so mu fr diese ein 
wesentlich anderer Name gewhlt und deren Inhalt vermerkt werden. Die 
bersetzung in andere Sprachen ist ausdrcklich erwnscht.

Mulpri darf fr den Eigenbedarf gebaut werden. Gegen den Aufbau fr gute 
Freunde habe ich ebenfalls nichts. Dabei darf der Bastler aber keinen 
Gewinn machen. Eine kommerzielle Fertigung oder Verwertung ist nur mit 
meiner schriftlichen Zustimmung erlaubt.

Ich habe diese Bauanleitung sorgfltig berprft. Ich hafte in keiner Weise 
fr eventuelle Fehler und/oder (daraus resultierende) Beschdigungen 
irgendwelcher Objekte oder Subjekte oder die Unbrauchbarkeit fr einen 
Einsatzzweck. Ich bitte aber darum, mir Fehler mitzuteilen. Diese 
Bugreports sollten so genau wie mglich sein. Nur wenn ich einen Fehler 
finden kann, kann ich ihn beseitigen.

In diesem Paket sind alle Informationen zu Mulpri enthalten. Auer dem 
Layout als Scooter-Datei und den Quellen der Programme habe auch ich nicht 
mehr. Anfragen werden normalerweise nur beantwortet, wenn es mich kein 
Geld kostet (Email oder frankierten Rckumschlag beilegen). Ich habe auch 
ein Telefon, das man nur in Ausnahmefllen strapazieren sollte.

Es gibt bei mir eine fertig aufgebaute Version, die sich im Aufbau 
mglicherweise von der freien Version unterscheidet. Die Fertigversion 
enthlt alle Funktionen der freien Version und eventuell noch 
Erweiterungen. Preis und Bezugsbedingungen teile ich auf Anfrage mit.

Wahrscheinlich gibt es die Platinen der freien Version und die GALs 
ebenfalls bei mir. Preis auf Anfrage.

Meine Postanschrift:
Harun Scheutzow
Dresdener Strae 83
D-10179 Berlin

Per Email bin ich zu erreichen
im Mausnetz:      Harun Scheutzow @B
aus dem Internet: Harun_Scheutzow@B.maus.de

Meine Bankverbindung:
Kontoinhaber: Harun Scheutzow
Kontonummer:  581854107
Bankleitzahl: 10010010
Bank:         Postgiroamt Berlin


Inhalt des Paketes
------------------
Bilder sind 300dpi GEM-IMG monochrom, Mastab 1:1. Bestckungsplne sind 
Ansicht von der Oberseite (Bauelemente auf Unterseite erscheinen in 
Spiegelschrift). Layouts sind Ansicht von der Unterseite (Kupferseite) der 
Platine.
MUL_USG.IMG   Layout der Mulpri-Hauptplatine. Sieht mit 300dpi sehr eng
              aus. Ich habe 1270dpi-Druck auf Film belichtet -> super.
MUL_BP.IMG    Bestckungsplan der Mulpri-Hauptplatine
SND_USG.IMG   Layout der Soundchipplatine
SND_BP.IMG    Bestckungsplan der Soundchipplatine

4P_TEXT.TXT    dieser Text, die gesamte Erklrung
4P.JED         JEDEC-File fr Hauptplatinen-GALs
4P_SND.JED     JEDEC-File fr Soundchipplatinen-GAL
4P_AUTO.PRG    Treiber fr den AUTO-Ordner
4P_AUTO.TXT    Dokumentation zu 4P_AUTO.PRG
4PRN_COO.TXT   Dokumentation des von 4P_AUTO angelegten Cookies
4P_ACC.ACC     Accessory fr die Einstellungen
4P_ACC.TXT     Dokumentation zu 4P_ACC.ACC
4P_CPX.CPX     CPX fr die Einstellungen (von Ralf Zimmermann)
4P_CPX.TXT     Dokumentation zu 4P_CPX.CPX
 

Realisierung
------------

Der Soundchip-PortB (D0-D7 auf SUBD-25pol, pin2-pin9) wird je Druckerport 
(kurz: Dp) ber ein 8Bit-Latch gefhrt. Vom Soundchip-PortA werden Bit5 
(/STROBE-Signal auf SUBD-25pol-pin1) und optional Bit7 (/SELIN, gern fr 
Scanneranschlu herausgefhrt auf SUBD-25pol-pin17, beim Falcon ist 
standardmig Bit3 herausgefhrt) werden ebenfalls je Dp ber ein Latch 
gefhrt. Die BUSY-Signale (SUBD-25pol-pin1) werden ber einen X-auf-1 
Multiplexer gesammelt und dem MFP Bit0 zugefhrt. Fr den Falcon knnte man 
noch ACK ber einen Multiplexer einsammeln, das liegt auf SUBD-25pol-pin10 
und geht an MFP Bit1. Das /STROBE-Latch mu bei einem Reset automatisch auf 
H-Pegel gesetzt werden. Fr Bidirektionalitt mu das PortB-Latch auch auf 
Eingabe schaltbar sein.

Auf der Datenbusseite des Soundchip hngt eine Schaltung, die beim 
Beschreiben des Auswahlregisters des Soundchips die Datenbits D3..D0 
speichert, wenn eine Adresse von $1X geschrieben wurde. Mit den Bits D3..D0 
wird der Dp ausgewhlt, wobei immer nur das Bit des gewnschten Dp auf H zu 
setzen ist. Inaktivierung aller Dp ist zum Umschalten erforderlich. Der 
Wert nach Reset ist binr 0001 (erster Dp ausgewhlt). Die Software setzt 
immer das zu aktivierende Dp-Bit auf H, aber die RDxL-Leitungen sind 
L-aktiv und enthalten die negierten Werte der Softwareseite. Bei der 
TTL-Realisierung wird durch die Gleichungen des GALs sichergestellt, da 
immer nur ein Dp aktiviert wird. So werden Kurzschlsse zwischen den 
Treiberausgngen bei der Betriebsart Eingabe durch unsinnige 
Softwareeinstellungen verhindert. Wenn ein MACH eingesetzt wird, so lieen 
sich bei gleichzeitiger Aktivierung von mehr als einem Port 
Sonderfunktionen realisieren, z.B. die automatische Durchschaltung eines 
Eingabeports auf einen Ausgabeport.

Fr Bidirektionalitt wird beim Beschreiben des Auswahlregisters mit $07 
ein FlipFlop gesetzt, das bei Reset und jedem anderen Schreiben auf das 
Auswahlregister zurckgesetzt wird. Ist das FlipFlop gesetzt und es erfolgt 
ein Schreibzugriff auf das Datenregister, so wird das Bit7 vom Datenbus 
gespeichert (Bit7 =0 bedeutet Dp auf Eingabe). Dieses Bit7 (IOD7) wird von 
den Druckerports gelatcht. Durch Reset werden IOD7 und alle I/O-Flags auf 
Ausgabe gesetzt.

Ist ein Dp aktiviert, so sind seine Latches auf Durchgang geschaltet und 
der Multiplexer legt sein BUSY an den MFP an. Ist ein Dp inaktiv, so sind 
die Latches im Speicherzustand und BUSY wird nicht durchgeschaltet.

Die Umschaltung der Druckerports bernimmt ein Programm. Es ist immer 
darber informiert, welcher Dp aktiv ist und welche Pegel an den inaktiven 
Dp zuletzt ausgegeben wurden. Zur Umschaltung wird zuerst der Dp 
inaktiviert. Dann werden aus dem Soundchip die Zustnde des PortB und des 
Bit5 (optional auch Bit7 oder Bit3) von PortA gelesen und in den 
Merkerzellen fr den ehemals aktiven Dp abgelegt. Auch Bit7 von Register7 
wird gelesen und gespeichert. Nun werden aus den Merkerzellen des zu 
aktivierenden Dp die eben genannten Zustnde geholt und in den Soundchip 
geschrieben. Zuletzt wird der neue Dp aktiviert.

Der Anschlu erfolgt am Original-Druckerport und mit 8 Leitungen an die 
Platine am Soundchip. Diese 8 Leitungen knnen auch steckbar ausgelegt und 
herausgefhrt werden, so da die Mulpri-Platine extern angeschlossen wird. 
Die Stromversorgung der Mulpri-Platine kommt ber die Leitungen vom 
Soundchip. Fr die Versorgung von Gerten, die an Mulpri angeschlossen 
werden, sollte man unbedingt extra Leitungen verlegen.



Schaltung am Soundchip
======================

Signalbelegung der Steuerleitungen BDIR (pin27) und BC1 (pin29) im ST
                  BDIR  BC1    Aktion
inaktiv           low   low
$FFFF8800 read    low   high   Daten lesen
$FFFF8800 write   high  high   Auswahlregister beschreiben
$FFFF8802 read    low   low    (=inaktiv -> sinnloser Zugriff)
$FFFF8802 write   high  low    Daten schreiben

Wichtig! Der Soundchip wird anscheinend nur mit /AS und nicht mit /UDS 
selektiert, so da bei der Selektion noch keine gltigen Daten auf dem Bus 
liegen. Erst mit der Deselektionsflanke darf man die Daten vom Bus 
bernehmen.

BDIR und BC1 mssen zur gleichen Zeit umschalten, sonst entstehen 
zwischenzeitlich andere Zustnde. Der Soundchip ist relativ langsam und so 
unkritisch. Aber auch fr ein 25ns-GAL drften die Flanken gleichzeitig 
genug sein, da BDIR und BC1 im ST durch je ein Gatter eines 74LS02 aus RWL, 
SNDCSL und A1 erzeugt werden:
BDIR = /(RWL + SNDCS)
BC1  = /(A1 + SNDCS)


Schaltung am Soundchip-Computerbus
----------------------------------

Signale vom Soundchip-Businterface:
RSTL    L-aktives Reset
BDIR
BC1
D7..D0  Daten vom Bus

Signale zur externen Schaltung:
RD3L..RD0L  L-aktive 1 aus 4 Auswahl des aktiven Dp
REXL        L-aktives Resetsignal
IOD7        Bit7 von Register7 des Soundchip, Richtungsbit

Es wird ein GAL20v8(-25ns) am Soundchip eingesetzt.

GAL 20v8 wird mit selbsterzeugtem GCLK getaktet.
/OE des GALs wird auf GND gelegt.
Es hat Register mit zustzlicher Selbsthaltung. Die Computerbusdefinition 
sichert, da die Eingangssignale nicht im Moment der Taktflanke wechseln.
( <- ist das = fr registered-Ausgnge)


Resetproblem
------------
Mit der steigenden Flanke des Reset-Signals RSTL werden die Reset-Werte in 
die GAL-Register geschrieben. So erhlt man erstens nach PowerOn andere 
Werte als nur die GAL-Register-Grundstellung 0, und zweitens werden auch 
die anderen Resetmglichkeiten ber den CPU-Befehl RESET und das Drcken 
der Reset-Taste bercksichtigt. Will man aber bestimmte Pegel einschreiben, 
und taktet das GAL nicht nur direkt mit dem RSTL-Signal, sondern ber ein 
GAL-Gatter, so mssen die Pegel an den Registereingngen des GALs lange 
genug nach der RSTL-L/H-Flanke noch anliegen. Dafr wird eine Verzgerung 
des Reset-Signals gebraucht, die durch ein GAL-Gatter erzeugt wird. Dieses 
Reset heit REXL und wird auch der externen Schaltung zugefhrt. Damit 
keine Strungen durch evtl. Reflexionen auf REXL auftreten (Takt, obwohl 
RSTL nicht mehr L ist), wird REXL mit RSTL verknpft.


GAL20v8 Pinbelegung
-------------------
                ---*---
          GCLK | 1   24| VCC    sndcp40
sndcp37   D0   | 2   23| DEBC1
sndcp36   D1   | 3   22| GCLK
sndcp35   D2   | 4   21| REXL
sndcp34   D3   | 5   20| RD0L
sndcp33   D4   | 6   19| RD1L
sndcp32   D5   | 7   18| RD2L
sndcp31   D6   | 8   17| RD3L
sndcp30   D7   | 9   16| IOD7
sndcp29   BC1  |10   15| IOFE   (intern)
sndcp27   BDIR |11   14| RSTL   sndcp23
          GND  |12   13| GND    sndcp1
                -------

DEBC1 ist das extern auf der H/L-Flanke um mindestens 25ns verzgerte 
BC1-Signal. Die Verzgerung erfolgt mit einem 4.3kOhm/22pF-Tiefpa. 
Minimalverzgerung fr H/L ist 28ns bei 2.7V auf 2.0V bei Cgesamt=22pF. Die 
L/H-Flanke ist auf jeden Fall schnell genug (DEBC1 geht in 200ns von 0V auf 
2V, wenn BC1 auch nur auf 2.7V geht, Cgesamt=34pF), damit ein definierter 
H-Zustand rechtzeitig vor Ende dieses Zugriffes erreicht wird. Die 
H/L-Flanke erreicht den L-Pegel auf jeden Fall frh genug vor Ende des 
eventuell ganz schnell nachfolgenden Zugriffs, da eine Entladung von 5V auf 
0.8V nur 270ns dauert. Die 4.3kOhm belasten BC1 nicht wesentlich, da 
Cgesamt max. 34pF (22pF Kondensator, 12pF GAL max.) ist.

Beide GCLK verbunden, beide GND verbunden.
GAL sitzt auf kleiner Platine und diese kopfber auf Soundchip. Beide Pin1 
zeigen in gleiche Richtung.


Belegung des 8poligen EXT-Verbinders
------------------------------------
1  VCC
2  GND
3  REXL
4  RD0L
5  RD1L
6  RD2L
7  RD3L
8  IOD7


GAL20v8 Gleichungen
-------------------

;Takt fr das GAL: L-Impuls bei Schreiben auf Auswahlregister,
;L-Impuls bei Schreiben auf Register7, L-Impuls bei Reset
;auf GAL-Clock-Eingang gelegt
;L/H-Flanke bei Inaktivierung schreibt ein
GCLK.OE = 1
/GCLK =  BDIR * BC1 * REXL
       + /RSTL * /REXL
       + BDIR * /BC1 * IOFE * REXL

;getriebenes Reset fr externe Schaltung, intern als verzgertes
;(lnger aktives)
REXL.OE = 1
REXL =   RSTL

;speichert /D0 beim $1X-Schreiben auf Auswahlregister, L nach Reset
;es darf nur ein Bit D3..D0 auf H gesetzt sein, sonst wirkt es
;wie D3..D0 =L, also alles inaktiv
/RD0L <-  /RD0L * D7
       + /RD0L * D6
       + /RD0L * D5
       + /RD0L * /D4
       + /RD0L * /DEBC1
       + D0 * /D1 * /D2 * /D3 * /D7 * /D6 * /D5 * D4 * DEBC1
       + /REXL

;speichert /D1 beim $1X-Schreiben auf Auswahlregister, H nach Reset
/RD1L <-  /RD1L * D7 * REXL
       + /RD1L * D6 * REXL
       + /RD1L * D5 * REXL
       + /RD1L * /D4 * REXL
       + /RD1L * /DEBC1 * REXL
       + /D0 * D1 * /D2 * /D3 * /D7 * /D6 * /D5 * D4 * DEBC1 * REXL

;speichert /D2 beim $1X-Schreiben auf Auswahlregister, H nach Reset
/RD2L <-  /RD2L * D7 * REXL
       + /RD2L * D6 * REXL
       + /RD2L * D5 * REXL
       + /RD2L * /D4 * REXL
       + /RD2L * /DEBC1 * REXL
       + /D0 * /D1 * D2 * /D3 * /D7 * /D6 * /D5 * D4 * DEBC1 * REXL

;speichert /D3 beim $1X-Schreiben auf Auswahlregister, H nach Reset
/RD3L <-  /RD3L * D7 * REXL
       + /RD3L * D6 * REXL
       + /RD3L * D5 * REXL
       + /RD3L * /D4 * REXL
       + /RD3L * /DEBC1 * REXL
       + /D0 * /D1 * /D2 * D3 * /D7 * /D6 * /D5 * D4 * DEBC1 * REXL

;speichert D7 beim Schreiben auf Register7 des Soundchips
;H nach Reset (Soundchip-Wert fr Ausgabe)
;(bei BC1 =L gibt es nur Takt bei Schreiben auf Register7)
IOD7 <-   IOD7 * DEBC1
        + D7 * /DEBC1
        + /REXL

;H solange Soundchip-Auswahlregister $07 enthlt (intern)
IOFE <-  REXL * /D7 * /D6 * /D5 * /D4 * /D3 * D2 * D1 * D0



Der x646, ein bidirektionaler Treiber mit Registern
===================================================

Pinbelegung
-----------
     --*--
CAB | 1 24| VCC
SAB | 2 23| CBA
DIR | 3 22| SBA
A0  | 4 21| /OE
A1  | 5 20| B0
A2  | 6 19| B1
A3  | 7 18| B2
A4  | 8 17| B3
A5  | 9 16| B4
A6  |10 15| B5
A7  |11 14| B6
GND |12 13| B7
     -----
     

Verhalten
---------

zwei 8Bit-Ports A und B sowie zwei zugeordnete 8Bit-Register

bei OEL =L
  DIR =L  A ist Ausgang, B ist Eingang
     SBA =L  B nach A durchgeschaltet
     SBA =H  A liefert Daten aus RegisterB
  DIR =H  A ist Eingang, B ist Ausgang
     SAB =L  A nach B durchgeschaltet
     SAB =H  B liefert Daten aus RegisterA
     
bei OEL =H
  DIR =egal, A und B sind Eingang

CAB und CBA sind von DIR und OEL unabhngig.

SAB wirkt nur bei DIR =H.
SBA wirkt nur bei DIR =L.

Eine L/H-Flanke an CAB speichert die Daten von A im RegisterA.
Eine L/H-Flanke an CBA speichert die Daten von B im RegisterB.

Ist als Latch brauchbar: SAB und CAB sowie SBA und CBA verbunden. Bei L 
werden die Daten durchgeschaltet, mit der L/H-Flanke gespeichert und bei 
H die Registerdaten ausgegeben (hoffentlich ohne Spikes).


Einsatz im Druckerport
----------------------

OEL = RDxL * DBx
also =L (aktiv) bei Port x auf Ausgabe oder Port x selektiert
realisiert ber wiredAND mit 2 Dioden und 10kOhm-Widerstand nach +5V

DIR wird mit negierten gelatchten Richtungsbit des Soundchips gesteuert. 
PxDIR ist =H fr Soundchip auf Eingabe, x646 also auch vom erweiterten 
Druckerport zum alten Computerport geschaltet

Anschlsse B an Soundchip, A nach auen an neuen Druckerport.

CAB =L immer (eigentlich: egal).
SAB =L immer, bei Eingabefunktion immer durchschalten.

CBA und SBA zusammen und als H-aktives "Latch enable" an RDxL. Dafr mssen 
alle alten RDx-Definitionen invertiert werden. Ein RDx ist also hier RDxL 
und L-aktiv.

Das x in x646 steht fr die verschiedenen verwendbaren Baureihen. 
Empfehlenswert sind 74HCT646 und 74LS646. Der LS drfte etwas 
unempfindlicher gegen elektrische Zerstrung sein, frit aber einige mA 
mehr Strom. Ebenfalls nutzbar sind 74ALS646, 74ACT646 und 74FCT646, die 
aber alle unntig schnell schalten und sehr viel Strom liefern knnen 
(Geschwindigkeit und Strom von links nach rechts steigend). Das kann zu 
Strimpulsen und Reflexionen auf den langen Leitungen fhren. Auf keinen 
Fall sollten 74646, 74S646 oder 74AS646 verwendet werden. Daneben 
existieren noch andere Logikserien, aber ber alle will ich mich nicht 
auslassen.



Die Mulpri-Platine
==================


Belegung der 26poligen Leiterplattenverbinder
---------------------------------------------
fr Flachbandkabel auf SUB-D-Quetschbuchse/stecker
Pinnummern der SUB-D-Buchse
Sicht auf die Bohrungen von der Bestckungsseite:
 ------------------------------------**
|13 12 11 10 09 08 07 06 05 04 03 02 01|
|xx 25 24 23 22 21 20 19 18 17 16 15 14|
 --------------------------------------


Die beiden GALs
---------------

Beide GALs sind GAL 16v8 und gleich. Das spart Arbeit. Jedes GAL ist fr 
zwei Druckerports zustndig. Die BUSY-Ausgnge sind direkt verbunden und 
werden deshalb als tristate betrieben.

Das GAL latcht das STR-Signal und das DIR-Signal. STR wird auerdem 
getrieben, damit die Latches nicht von auen umgekippt werden knnen. Die 
beiden BUSY-Eingnge werden zusammengefat. Bei Reset (REXL =L) werden die 
PxSTR =H und die PxDIR =L gesetzt.


GAL-Pinbelegung
---------------

Alle "P0" / "P1" des ersten GAL gehen an Port1 / Port2, die "P0" / "P1" des 
zweiten GALs an Port3 / Port4.

        --*--
VCC    | 1 20| VCC
REXL   | 2 19| BENA intern
RD0L   | 3 18| P0DIR
RD1L   | 4 17| P0STR
IOD7   | 5 16| P0SU intern
P0BUSY | 6 15| P1SU intern
frei   | 7 14| P1DIR
STR    | 8 13| BUSY
P1BUSY | 9 12| P1STR
GND    |10 11| GND
        -----


GAL16v8 Gleichungen
-------------------

;BUSY Output Enable, BUSY hochohmig, wenn kein Port gewhlt
BENA.OE = 1
BENA =   /RD0L
       + /RD1L

;Dir-Latch Port0
P0DIR.OE = 1
P0DIR =   P0DIR * RD0L * REXL
        + /IOD7 * /RD0L * REXL
        + /IOD7 * P0DIR * REXL
        
;Strobe-Ausgang Port0
P0STR.OE = 1
P0STR = P0SU

;Strobe-Latch Port0, intern
P0SU.OE = 1
P0SU =   /REXL
       + P0SU * RD0L
       + STR * /RD0L
       + STR * P0SU

;Strobe-Latch Port1, intern
P1SU.OE = 1
P1SU =   /REXL
       + P1SU * RD1L
       + STR * /RD1L
       + STR * P1SU

;Dir-Latch Port1
P1DIR.OE = 1
P1DIR =   P1DIR * RD1L * REXL
        + /IOD7 * /RD1L * REXL
        + /IOD7 * P1DIR * REXL
        
;BUSY-Ausgang zum Computer, gesammelte PxBUSY
;hochohmig wenn beide Px inaktiv
BUSY.OE = BENA
BUSY =   P0BUSY * /RD0L
       + P1BUSY * /RD1L

;Strobe-Ausgang Port1
P1STR.OE = 1
P1STR = P1SU


Schaltungsdetails
-----------------
Zum Schutz der GAL-Eingnge (BUSY) wurden 1kOhm-Widerstnde vorgesehen.

Die 330Ohm-Pullups an den BUSY-Eingngen der Mulpri-Platine belasten die 
Signalquelle wie viele alte Centronics-Ports mit 16mA im Low-Zustand. Der 
AtariST hat meist ebenfalls 330Ohm-Widerstnde. Man kann sie etwas grer 
whlen, um die Last zu verringern. Das kann aber beim Einlesen von 
schnellen Impulsfolgen (z.B. vom GAL-Prommer) zu seltsamen Effekten fhren, 
die nicht auf ihre Ursache hindeuten. So wurden bei 2kOhm-Pullups 
beispielsweise einige Low-Pegel als High-Pegel gelesen (wirklich!).


Bauteilliste Soundchipplatine
-----------------------------
GAL20v8-25 programmiert
optional 24polige Fassung (schmal)
4.3kOhm SMD-Widerstand
22pF SMD-Kondensator
100nF SMD-Kondensator
(optional) 40polige Fassung (mit gedrehten Kontakten)
mindestens 13, hchstens 21 Kontaktstifte (eine Seite in Leiterplatte, 
andere Seite in Fassung auf Soundchip oder direkt auf Soundchip)


Bauteilliste Mulpri-Platine
---------------------------
4 Stck 74HCT646 oder 74LS646
2 Stck GAL16v8-25 programmiert
optional 2 Stck 20polige Fassung (schmal, mit gedrehten Kontakten)
8 Stck Dioden 1N4148, besser noch SD103B o.. Shottky-Typ
4 Stck 330Ohm Widerstand (330Ohm bis 820Ohm)
4 Stck 1kOhm Widerstand (500Ohm bis 1.8kOhm)
4 Stck 10kOhm Widerstand (5kOhm bis 20kOhm)
5 Stck 100nF Kondensator (Abblockkondensator)
10 Stck Drahtschnipsel als Brcken
5 Stck Schneidklemm-Leiterplattenverbinder
5 Stck 25poliges Flachbandkabel, Lnge nach Bedarf
4 Stck SUB-D-Schneidklemm-Buchse (weiblich)
1 Stck SUB-D-Schneidklemm-Stecker (mnnlich)
Draht zur Verbindung mit Soundchip-Platine, optinal 15poligen SUB-D-Stecker 
und 15polige SUB-D-Buchse fr lsbare Verbindung


Aufbau der Soundchipplatine
---------------------------

Zuerst werden die SMD-Bauelemente bestckt.

Je nach Platz ber dem Soundchip sollte man fr das GAL und die Platine 
eine Fassung vorsehen, nur fr die Platine eine Fassung verwenden oder 
alles direkt lten. Die Kontaktstifte sind auf der Oberseite einzusetzen, 
wo auch das GAL sitzt. Die Kabel zur Mulpri-Platine (falls gewnscht, mit 
15poligem SUB-D-Verbinder) sollten ebenfalls angeltet werden, werden aber 
noch nicht mit der Mulpri-Platine verbunden.

Die Platine sitzt kopfber (GAL zum Soundchip hin) auf dem Soundchip. Pin1 
von GAL und Soundchip zeigen in die gleiche Reichtung.

Wenn die Soundchip-Platine komplett auf dem Soundchip sitzt, kann eine 
Funktionskontrolle durchgefhrt werden. Der Rechner mu sich genau wie vor 
dem Einbau verhalten, ansonsten sind irgendwo Kurzschlsse oder 
schwerwiegende Defekte entstanden und zu suchen.


Aufbau der Mulpri-Platine
-------------------------

Zuerst werden die Brcken bestckt.

Fr das Anquetschen der Flachbandkabel an die Leiterplattenverbinder (LPV) 
gibt es einige Varianten. Auf jeden Fall mu man darauf achten, da Pin1 
des LPV und des SUB-D-Verbinders auf der gleichen Ader des Kabels zu liegen 
kommen. Das Kabel wird in den LPV auf der Pin1-Seite bndig eingelegt, so 
da Pin26 frei bleibt.
- Man bohrt in ein Stck Hartholz, Plast oder Metall 26 Lcher entsprechend 
der Pins, steckt den LPV hinein und das Ganze mit Kabel zum Quetschen in 
einen Schraubstock. Danach wird der LPV eingeltet.
- Man ltet zuerst den LPV ein, steckt das Kabel ein und legt zum Quetschen 
auf der Leiterseite ein Stck Weichholz zwischen Schraubstock und Platine, 
in das sich die berstehenden Pins hineinbohren knnen. Dann wird 
gequetscht.
- Oder aber ach nicht doch ... (Man mu nicht mit einem Schraubstock 
arbeiten, sondern kann _bei_ _entsprechendem_ _Geschick_ solche 
Klemmverbindungen mit einem Hammer zusammenschlagen.)

Es werden alle anderen Bauelemente bestckt.

Die Kabel von der Soundchipplatine werden angeltet. Dabei ist wieder 
darauf zu achten, da die gekennzeichneten Pin1 miteinander verbunden 
werden und die restlichen Adern entsprechend folgen.

Wurde ein Steckverbinder zur Soundchipplatine vorgesehen, so wird dieser 
gesteckt. Jetzt erfolgt ein Testlauf noch ohne Verbindung zum alten 
Druckerport. Alles sollte wie frher funktionieren, andernfalls mu man die 
Ursachen fr Rauchzeichen oder sonstiges suchen.

Die Verbindung zwischen Original-Druckerport und Mulpri wird hergestellt. 
An Port1 der Mulpri wird ein Drucker (oder etwas anderes geeignetes) 
angeschlossen. Wenn der Rechner gestartet wird, sollte sich das Gert an 
Port1 so verhalten, als wre es am Originalport.

Wie und wo oder ob er/sie/es Mulpri in den Rechner einbaut, mu jeder selbst 
entscheiden.


Verbindung zwischen Soundchipplatine und Mulpri-Platine
-------------------------------------------------------

Wenn diese beiden Platinen nicht fest sondern steckbar verbunden werden 
sollen, so sind dafr eine 15polige SUB-D-Buchse auf der 
Soundchipplatinenseite und ein 15poliger SUB-D-Stecker auf der 
Mulpri-Platinenseite zu verwenden.

Pinbelegung:
(Pin1..8 wie Pin1..8 des EXT-Anschlusses auf Soundchipplatine)
1  VCC
2  GND
3  REXL
4  RD0L
5  RD1L
6  RD2L
7  RD3L
8  IOD7
9, 10, 11       optional VCC (+5V) fr externe Gerte
12, 13, 14, 15  optional GND fr externe Gerte

Auf keinen Fall darf die Stromversorgung fr externe Gerte wie 
EPROM/GAL-Programmierer irgendwo auf der Mulpri-Platine entnommen werden. 
Dafr sind die Zuleitungen nicht ausgelegt, so da es zu Strungen kommen 
kann. Wenn man seinem Rechnernetzteil die Versorgung dieser Gerte zumuten 
kann, mssen dafr extra Kabel verlegt werden, am besten direkt vom GND- 
und VCC-Anschlu des Rechnernetzteils auf der Computerplatine. Dafr sind 
Pin9..11 und Pin12..15 reserviert.


Nach Einschalten oder Reset
---------------------------
ist Port1 eingeschaltet. Alle Ports sind auf Ausgabe, die /STROBE-Leitungen 
sind inaktiv (High). Wird kein Treiber geladen, kann man mit Port1 wie mit 
dem Originalport arbeiten.


Falcon
------
Der Soundchip des Falcon heit YM3439 und befindet sich in einem 44poligen 
Quadflatpack-Gehuse. Dafr pat diese Soundchipplatine leider nicht. 
Ansonsten ist er aber wohl kompatibel, so da ich bei entsprechendem 
Interesse wahrscheinlich eine Version fr den Falcon entwickeln werde. 
Auerdem hat der Falcon einen Eingang (ACK) und einen Ausgang (SELECT) mehr 
am Druckerport als der ST. Diese kann man entweder ignorieren, fest mit 
einem Port verdrahten, ber noch zwei GALs in freier Verdrahtung fhren, 
oder: eine sptere kommerzielle Version der Hardware wird diese beiden 
Signale wahrscheinlich auch umschalten. Die Software wird dann entsprechend 
ergnzt.

Falls es jemanden interessiert:
Die Druckerschnittstelle entspricht der des Atari-ST, bis auf zwei
hinzugekommene Signale. Auf Pin17 liegt jetzt SELECT, das vom Soundchip PortA
Bit3 gesteuert wird. Die Grundeinstellung nach Reset ist Low. Auf Pin10 ist der
Eingang ACK, der zum MFP-Port Bit1 fhrt. Hier haben die Atari-Hardwaredesigner
wieder gepennt (wie im 1040STE am Monodetect) und einen Pullup-Widerstand
vergessen (Eingang ist freifliegend).

brigens: Busy wird nur noch mit 3.3kOhm gegen +5V gezogen. Ist ein bichen
viel, meine ich.


Scanner
-------
Eine beliebte Anschlumglichkeit fr Flachbettscanner am ST-Druckerport 
ist das zustzliche Herausfhren eines Soundchip-PortA-Signal (bit7 war es 
wohl) auf Pin17 des Druckerports. Da die freie Version der Hardware das 
Umschalten dieses Signals noch nicht untersttzt, sollte man auf der 
Mulpri-Platine Pin17 des Anschlusses zum Originalport mit Pin17 eines Ports 
durch einen Draht verbinden. An diesen Port schliet man dann seinen 
Scanner an.


Scanner-Problem
---------------
Obige Flachbettscanner machen oft Probleme, wenn der Pullup-Widerstand der 
BUSY-Leitung zu klein ist. Unter "Schaltungsdetails" wurde erklrt, warum 
Mulpri normalerweise mit 330Ohm-Pullups ausgestattet ist. Sollten aber 
Scanner-Probleme auftreten (Scanner wird zwar angesprochen, meldet sich 
aber nicht zurck o..), so empfiehlt es sich, den 330Ohm-Widerstand des 
entsprechenden Ports zu vergrern, z.B. durch einen 1kOhm-Widerstand zu 
ersetzen. Ein noch grerer Wert kann auch wieder Probleme verursachen.


Einige Problemdrucker
---------------------
Die Treiber der Mulpri-Karte knnen wesentlich mehr Strom liefern als der 
Originalport. So sollte auch der Anschlu alter Drucker funktionieren, die 
intern auf jedem Signal 330Ohm-Pullups haben. Die LS- und HCT-Versionen der 
Treiber knnen diesen Strom von 16mA normalerweise liefern, auch wenn der 
Hersteller dafr nicht garantiert. Wer ganz sicher gehen und solche Gerte 
anschlieen will, sollte ACT(garantiert 24mA)- oder FCT(garantiert 
48mA)-Treiber einsetzen (bringt aber mehr Hochfrquenzmll auf die 
Leitungen).

Dann gibt es noch wenige Drucker, die grundstzlich nur funktionieren, wenn 
das auf Pin17 der 25poligen Druckerbuchse liegende (oder auch nicht) Signal 
SELECT auf Low-Pegel (also Masse) ist. In diesem Fall sollte man Pin17 mit 
Pin18 verbinden, entweder im Druckerkabel, oder auf dem fr Druckeranschlu 
vorgesehenen Port von Mulpri.



Software
========

Zur Software gehrt das Treiberprogramm 4P_AUTO.PRG, das Accessory 
4P_ACC.ACC und das CPX-Modul 4P_CPX.CPX. Das CPX ist am 08.08.1993 noch 
nicht vorhanden. Die Anleitungen dazu befinden sich in den Files 
4P_AUTO.TXT, 4P_ACC.TXT und 4P_CPX.TXT.


CPX-Modul 4P_CPX.CPX
--------------------
Das CPX kann alternativ zum Accessory benutzt werden. Es enthlt die 
gleichen manuellen Umschaltfunktionen.

Am 08.08.1993 existiert es noch nicht.


Druckerspooler
--------------
Im Hintergrund arbeitende Druckerspooler, besonders die von der 
BUSY-Interrupt getriebenen Sorte, sollte man tunlichst deaktivieren bzw. 
ganz rauswerfen, wenn man beabsichtigt, Mulpri mal umzuschalten.

Druckerspoolerprogrammierer! Seht euch das File 4PRN_COO.TXT an und 
ergnzt euren Spooler so, da er mit Mulpri zusammenarbeitet.



Kompatibilitt
==============

Mulpri kann als voll kompatibel bezeichnet werden. Ich mchte aber auf alle 
Kleinigkeiten hinweisen, die mir als Inkompatibilitt einfallen. Sie haben 
sich aber noch nicht negativ bemekrbar gemacht:
- grerer Treiberstrom der Ausgnge
- falls LS-Treiber, max. 0.4mA Eingangsstrom im L-Zustand, wenn D7..D0 auf
  Eingang geschaltet sind
- BUSY-Signal und Ausgangssignale sind um etwa 25ns zustzlich verzgert
- /STROBE kann nicht mehr auf Eingang geschaltet werden (PortA des
  Soundchips hat m.W. noch keiner absichtlich auf Eingang geschaltet)
- BUSY kann nicht mehr als Ausgang geschaltet werden (hat m.W. auch noch
  keiner absichtlich gemacht, wobei der MFP die 16mA fr den Pullup auch
  kaum aufbringen kann)

Wenn ein Port im Zustand LOCKED1P ist, so darf man wie gewohnt am Soundchip 
fummeln. Ich bitte aber darum, im Interesse der Kompatibilitt, die Ports 
nur mit der Funktion Pswitch des 4P_AUTO umzuschalten oder zur Ausgabe auf 
nichtaktive Ports die anderen Funktionen zu benutzen. Wer eine bestimmte 
nichtexistente Funktion braucht, sollte sich bei mir melden.

Wenn ein Programm zur Steuerung einer bestimmten Hardware mehr als einen 
Port braucht und darauf schneller als ber Pswitch zugreifen mchte, 
sollte sich der Programmierer ebenfalls bei mir melden. Dafr habe ich den 
Zustand LOCKED4P vorgesehen, zu dem es noch spezielle Routinen in 4P_AUTO 
geben wird.

Wer in seinem Programm durch direkte Zugriffe auf den Soundchip die 
Mulpri-Hardware umschaltet, ohne sich vorher mit mir entsprechend 
verstndigt zu haben, hat mein ALLERGRSSTES UNVERSTNDNIS.

 

Versionen
=========

Ich vergebe keine Versionsnummern, sondern berlasse die Unterscheidung dem 
in der Installationsmeldung ausgegebenen Datum bzw. dem Erstellungsdatum 
der Datei. Ich notiere das Datum in der deutschen Schreibweise, also 
Tag.Monat.Jahr.

Neue Versionen sind zuerst in der Maus Berlin, Telefonnummer 030-727056 
(oft besetzt, Gastdownload 10.00-19.00 und 23.00-03.00), zu finden und 
verbreiten sich schnell ber die Muse. Man sollte nach dem Filenamen 
"MULPRI*.*" suchen lassen. Reine Softwareupdates werden unter "4PSOFT*.*" 
erscheinen. Das Archiv wird MULPRIxx.LZH heien, wobei xx 
fr die fortlaufende Verffentlichungsnummer steht.

08.08.1993 erste ffentliche Version
14.09.1993 Ergnzung um Scanner-Problem-Hinweis
29.10.1993 endlich mal wieder Zeit, um eine Version herauszugeben:
           mit CPX, Portnumerierung im Bestckungsplan korrigiert

Harun Scheutzow, 26.06.1993 ...
