The PAK68/3 Accelerator - [German]

Kai Robinson

TinkerDifferent Board President 2023
Staff member
Founder
Sep 2, 2021
1,164
1
1,173
113
42
Worthing, UK
Some of you may be aware of the PAK68 line of open source accelerators, originally published in the German C't Magazine in the 1990's.

This was intended to be a 'universal' 68000 accelerator, for the Atari ST line, primarily, but with modifications you can make it work in an Amiga or a Macintosh. I've never seen a physical copy of most of these, however the first PAK68 was featured in a magazine, i think i gave that one to @RMCRetro a few years back, but I stumbled across the following scans from the November 1993 edition of C't (incomplete, however, think i'm missing a page), and i've attached the GAL equations as text files.

I've also come across this: http://www.wrsonline.de/pak3.html which has more information, but again - German!

pak68-3-1.jpg


pak68-3-2.jpg


pak68-3-3.jpg


pak68-3-4.jpg


pak68-3-5.jpg


pak68-3-7.jpg
 

Attachments

  • PAK68-3 GAL Equations.zip
    5.1 KB · Views: 141

fehervaria

Tinkerer
Sep 23, 2021
153
160
43
48
North Germany
Urgh. Sounds like a pain - but presumably that's a PDF download once you do?
Sadly no. Have to subscribe for a "Yearly extended" to access to the archives.

BUT:
I find after diving into the german internet, and a backlink to a forum, where you talk with few guys:
http://eab.abime.net/showthread.php?t=58872&page=3

There you've wrote:
Kai 01:26 27 October 2017
Raising this thread from the dead, I don't have access to the free.fr dropbox any longer, but I do still have the copy of C'T magazine if anyone here wants me to re-upload images, or even if they want the magazine itself, it's in an envelope in the bottom of my cupboard, getting old.

Maybe you still have to original paper print??
 

Kai Robinson

TinkerDifferent Board President 2023
Staff member
Founder
Sep 2, 2021
1,164
1
1,173
113
42
Worthing, UK
Ahhh thats for the older magazine with the original PAK68, not the 68/3 as detailed here. @RMCRetro has that magazine somewhere, i think!
 

Melkhior

Tinkerer
Jan 9, 2022
98
50
18
@MacinJosh: awesome thank you, if there's a 68030 external cache in here it's going to be interesting - I wondered how to build a IIci cache card and having a schematic and the (P|G)AL equation would help a lot.

But in the sequence, it seems page 225 is absent; from the era, it could have been full of advertisement, can you confirm?
 
  • Like
Reactions: MacinJosh

MacinJosh

Tinkerer
Jan 16, 2022
52
54
18
46
Finland
www.atariancomputing.com
@MacinJosh: awesome thank you, if there's a 68030 external cache in here it's going to be interesting - I wondered how to build a IIci cache card and having a schematic and the (P|G)AL equation would help a lot.

But in the sequence, it seems page 225 is absent; from the era, it could have been full of advertisement, can you confirm?
I don't have the actual magazine but I did purchase the DVD containing all the magazines in digitized form. Unfortunately while 1990-2004 was in text form, the images were really low quality, unusable. I'll paste the text in the following posts. It should show that all scans are there.

EDIT: I believe there is external cache as I remember hunting down the same cache chips as found on 486 machines, IIRC. Listed as:
Toshiba TC5588-25 (SRAM) and SGS MK48S74-25 (TAGRAM)

Josh.
 
Last edited:

MacinJosh

Tinkerer
Jan 16, 2022
52
54
18
46
Finland
www.atariancomputing.com
minpic01.jpg

Doppel-PAK​

PAK-68/3 mit Cache und 68020/030 für 68000-Rechner​

Holger Zimmermann​

Ganz im Zeichen der fünften Zweierpotenz präsentiert sich die nunmehr dritte Auflage unseres Dauerbrenners PAK-68: 32 MHz, 32 Bit und 32 KByte Cache sind die gewichtigen Gründe, den optimalen 68000-Beschleuniger zum Selbstbau vorzustellen.

Die PAK-68 hat seit ihrer (nicht ganz ohne Komplikationen verlaufenen) Geburt im Juli 1987 viele Freunde gefunden. Anfangs [1] noch mit gemächlichen 8 MHz, später mit 16 MHz [2] und nun mit Taktfrequenzen fast nach Belieben getaktet, bleibt die Prozessor-Austauschkarte der konsequenteste Weg, einem vorhandenen Rechner zeitgemäße Leistung einzuhauchen.

Und die ist nicht von Pappe: Neben der eklatanten Beschleunigung kommen Atari-ST-Freunde in den Genuß der modernen TOS-Versionen 2.06 und (mit kleinen Patches) 3.06 im 32-Bit-Zugriff; mit der 68030-Version gibt´s zusätzlich eine PMMU fürs Multi-TOS. Kompakt-Macs profitieren unter dem ressourcenfressenden System 7 besonders von der - je nach Ausstattung - Verdrei- bis Versechsfachung der Arbeitsgeschwindigkeit. Dabei blieb es unser Bestreben, so 68000-kompatibel wie möglich zu bleiben, damit auch kritische Rechner (Atari mit IMP-Chipsätzen, Amiga) nicht außen vor bleiben - obwohl es sicher immer noch Applikationen und Erweiterungen geben wird, die nicht 68020/030-konform aufgebaut sind. Erkundigen Sie sich also vor der PAK-Anschaffung, ob Ihr Liebligs-Editor auch auf größeren Maschinen (Atari TT, Falcon, Mac II) `spielt´.

Umweltfreundlich​

Ein 68020 mit 8 oder 16 MHz ist aber mittlerweile auch nicht mehr ganz `state of the art´. Ganz oben auf der Wunschliste stand daher ein 68030, gefolgt von höherer Taktfrequenz und einem Second-Level-Cache. Zum Glück gibt es heute preiswerte Bauteile, die eine Implementation derlei Begierden ohne nennenswerte Hardwareverrenkungen und ohne Kontoaustrocknung ermöglichen. Zum alten Eisen respektive Plastik gehört Ihr ST oder Schuhkarton-Mac also noch lange nicht.

Hier ist sie also, die PAK-68/3. Bei nahezu gleichen Abmessungen wie die PAK/2 hat sich `unter der Haube´ einiges getan: Wahlweise eine 68020- oder 68030-CPU mit 16 bis 33 MHz Taktfrequenz bei 8 MHz Systemtakt, eine 68881- oder 68882-FPU, 256 oder 512 KByte ROM sowie ein 32 Bit breiter und 32 KByte großer Second-Level-Cache.

Beim Nachbau der PAK/3 steht eine schwerwiegende Entscheidung gleich zu Anfang an: Soll es ein 68020 oder ein 68030 sein? Da es für beide Prozessoren jeweils eine eigene Platinenversion gibt, ist kein nachträglicher Wechsel möglich. Gewissermaßen als Ausgleich dazu können aber alle anderen Features auch nachträglich durch Austauschen der GALs hinzugefügt oder weggelassen werden. In Anbetracht der mitunter sehr preiswert angebotenen Gebrauchtprozessoren (siehe Kleinanzeigen) empfehlen wir bei nicht schon vorhandener alter PAK-68 die 030er-Version, die gegenüber der 020er bei gleicher Taktfrequenz einen Geschwindigkeitsvorteil von rund 15 Prozent bringt. Ansonsten können Sie die meisten Bauteile der alten PAK weiterverwenden, die GALs allerdings nur, wenn Sie eine geeignete Programmiereinrichtung besitzen. Natürlich muß der Prozessor die gewünschte Taktfrequenz verkraften.

Große Pläne​

Der Schaltplan der 030er-Version der PAK/3 deckt im Prinzip die 020er mit ab. Da beim 68020 die Anschlüsse /STERM, /CIIN, /CIOUT, /MMUDIS, /CBREQ und /CBACK nicht vorhanden sind, entfallen in diesem Fall die entsprechenden Leitungen mitsamt zugehörigen Pullups und Jumpern. Die Pinbelegung beider CPUs ist leider deutlich unterschiedlich, was sich im Schaltplan nur im Kleingedruckten bemerkbar macht, beim Platinenlayout aber im Endeffekt zu den beiden unterschiedlichen Platinenversionen geführt hat. Bis auf die GALs, R1, R2 und eben die CPU sind beide Platinenversionen absolut gleich bestückt.

Das State-Machine-Konzept der PAK/2 hat sich in der Praxis bewährt, so daß es im Kern auch für die PAK/3 beibehalten werden konnte. CPU, FPU und die ROMs sind weitgehend wie beim Vorgänger verschaltet. Die synchrone Takterzeugung mit einem 74F86 als Verdoppler für den 8-MHz-Systemtakt ist ebenfalls identisch. Auch der Quarzoszillator war schon auf der PAK/2 zu finden, dort aber lediglich für die FPU zuständig. Bei entsprechender GAL-Bestückung kann die PAK nun auch asynchron zum Systemtakt (getestet bis 33 MHz) betrieben werden; mehr dazu in der nächsten c't. Die GALs U4, U5 und U6 haben ihre Funktion (und ihre Namen) weitgehend beibehalten. Bei den Gleichungen für U5 wird man noch einiges wiedererkennen, während bei U4 kaum ein Stein auf dem anderen geblieben ist. Gänzlich neu sind GAL U1, das die Kontrolle über die lokalen Buszyklen übernimmt (also bei ROM-Read und bei Cache-Hit) und GAL U2, das den Cache koordiniert.

Der 68020 hatte bereits einen Cache für Befehle in der CPU integriert, beim 68030 ist noch ein Datencache dazugekommen. Leider sind die internen Caches mit 256 Bytes nicht besonders üppig bemessen. Benchmarks benutzen häufig kurze Schleifen zum Testen der Performance, hier liegt der CPU-Cache noch gut im Rennen; in der Praxis bleibt davon jedoch nicht allzuviel übrig. Die PAK/3 hat deshalb einen 32 KByte großen Second-Level-Cache spendiert bekommen, und wer ihn mal probehalber ausschaltet, merkt, wie richtig diese Entscheidung war. Typische Anwendungen laufen bei Maximalausbau (32 MHz plus L2-Cache) in wenigstens sechsfacher 68000-Geschwindigkeit, einige Benchmarks zeigen gar zweistellige Performance-Gewinne. Im Vergleich zur alten PAK, die rund 250 Prozent der Leistung eines 68000 brachte, ein nennenswerter Fortschritt.

Hucke-PAK​

Für den L2-Cache sind zwei Tag-RAMs, vier schnelle SRAMs und zwei Datenbustreiber hinzugekommen. Die SRAMs (schmale Bauform, 300 mil) benötigen weitgehend dieselben Signale wie die ROMs (Breite 600 mil), so daß sich hier eine zweigeschossige Bauweise anbot. Nur dadurch war es auch möglich, die Abmessungen der PAK/2 beizubehalten. Nebenbei konnten wir auch einen kleinen Schönheitsfehler beseitigen: Die PAK überdeckt nun nicht mehr den PDS-Steckplatz im Mac SE.

Die vier SRAMs (je 8 KBit × 8, also 8 KByte) bilden zusammen einen 32 KByte großen Cache-Speicher, auf den die CPU sehr schnell und in voller Breite zugreifen kann. GAL U2 sorgt dafür, daß die aus dem Hauptspeicher geholten Daten sozusagen nebenbei im Cache abgelegt werden. Daten beispielsweise von der Hauptspeicheradresse 1 landen so auch im Cache unter Adresse 1. Da der Cache aber nur 32 768 Byte umfaßt, landen auch Daten von der Hauptspeicheradresse 32768+1 im Cache unter Adresse 1, wobei der vorherige Inhalt des Cache natürlich überschrieben wird. Wie kann das gutgehen?

Schildchen-Speicher​

An dieser Stelle kommen die Tag-RAMs ins Spiel, das sind zunächst einmal ebenfalls statische RAMs mit 8K × 8, deren Datenleitungen aber an die CPU-Adreßleitungen A15 bis A21 angeschlossen sind. Jedesmal, wenn Daten in den Cache übernommen werden, kommen die dazugehörigen oberen Adreßbits im Tag-RAM zu liegen. Zu jedem einzelnen Datenwort im Cache steht hier also die Information, zu welcher 32-KByte-Page des Hauptspeichers der Inhalt des Cache gehört.

Wenn die CPU einen Lesezugriff initiiert, wird das Tag-RAM jetzt nicht ausgelesen, sondern im sogenannten Compare-Modus betrieben, wobei es die von außen angelegten Adreßbits A15 bis A21 mit den gespeicherten Adreßbits vergleicht. Der dazu notwendige Komparator ist im Tag-RAM integriert und meldet das Ergebnis über den Anschluß MATCH nach außen, im Falle der Übereinstimmung erhält man hier high-Pegel. Das ist das Zeichen für die CPU und ihre Read-Logik, daß sich die gesuchten Daten bereits im Cache befinden. Meldet das Tag-RAM keinen Treffer (MATCH ist low), dann gehört das Datenwort im Cache zu einer anderen Page, woraufhin die CPU jetzt doch im Hauptspeicher nachsehen muß. In der Hoffnung, das gerade geholte Datenwort werde in naher Zukunft nochmals gebraucht, legt es die Steuerlogik dann auch gleich im Cache ab.

minpic02.jpg
Die Cache-SRAMs liegen unter den EPROM-Fassungen. Probieren Sie vor dem Einsatz von SRAM-Sockeln aus, ob die `Türmchen´ in Ihren Rechner passen. Vor allem im Kompakt-Mac geht es recht eng zu.

Wegen des 16 Bit breiten Sytembusses muß der Cache wortweise verwaltet werden, für den 32 Bit breiten Cache der PAK werden also zwei Tag-RAMs benötigt. Die sieben Adreßbits, die das Tag-RAM auswertet, decken 128 Pages, also den Adreßraum von 0 bis 4 MByte ab. Im Bereich oberhalb $40 0000 ist der Second-Level-Cache unwirksam, was bei den in Frage kommenden Macs und Ataris keine Einschränkung bedeutet; die CPU hat das ROM auf der PAK ja ohnehin im direkten Zugriff.

minpic03.jpg
Gleicher Plan für zwei Versionen: Bis auf die CPU sind beide neuen PAKs identisch.Der 64polige Sockel zur Verbindung mit der Hauptplatine gehört auf die Lötseite in die DIL-Reihen, die zur Platinenmitte weisen (siehe auch Detailfoto). R1 und R2 werden nur bei der 030-Version bestückt.

Das achte Bit der Tag-RAMs bildet das Valid-Bit und liegt daher an V__CC. Um alle Daten im Cache für ungültig zu erklären (z. B. bei DMA-Zugriffen oder Reset), werden die Tag-RAMs über den Anschluß /TCLR gelöscht und damit alle Bits auf low gesetzt. Damit erkennt der Komparator beim nächsten Lesezugriff in jedem Fall ein Cache Miss (kein Treffer) und lädt daraufhin den Cache neu.

UngeBursted​

Im Ablauf eines Buszyklus gibt es auf der PAK/3 keine Unterschiede zwischen 68020 und 68030. Der synchrone Busmodus des 68030, der einst den Mac IIci so beschleunigte (Burst-Mode mit /STERM), darf hier leider nicht genutzt werden; zum einen sind die ROMs und Tag-RAMs bei 32 MHz zu langsam, zum anderen gäbe es ein Problem, wenn nach einem Lesezugriff auf den Hauptspeicher ein lokaler Lesezugriff auf der PAK/3 folgte, weil die Datenbustreiber des Mainboards (im Mac genauso wie im Atari) noch vom vorherigen Zugriff her eingeschaltet wären und somit dazwischenfunken würden.

Zur Veranschaulichung der Abläufe soll zunächst eine PAK/3 mit 16 MHz Taktfrequenz herhalten. Ein Buszyklus beginnt, indem die CPU die Adresse anlegt und, nachdem die Suche im CPU-internen Cache erfolglos verlaufen ist, /AS_20 mit fallender Flanke von CLK16 aktiviert. Falls dies ein ROM-Zugriff ist (/ROM von U6 aktiv) und sich ROMs auf der PAK befinden (J7 auf 1-2), schaltet U1 die ROMs ein und bestätigt sofort mit /DSACK0 und /DSACK1. Mit der nächsten fallenden Flanke von CLK16 wird dies von der CPU erkannt, worauf sie den Buszyklus genau einen CLK16-Takt später durch Desaktivieren von /AS_20 beendet. U1 hält /CYC_00 die ganze Zeit auf high, so daß U4 keinen Zugriff auf das Mainboard startet.

Angenommen, es findet ein Lesezugriff auf den Bereich $0 bis $40 0000 statt (/DRAM von U6 aktiv), der L2-Cache ist aktiviert (/TCLR auf high), aber mindestens eines der beiden Tag-RAMs meldet keinen Treffer (MAT0 oder MAT2 auf low): In diesem Fall geht /CYC_00 nach kurzer Wartezeit auf low und startet damit in U4 einen Zugriff auf das Mainboard, der im Prinzip wie bei der PAK/2 abläuft. Hier sorgt jetzt aber U2 dafür, daß das gelesene Datenwort auch in den SRAMs abgelegt und gleichzeitig die zugehörige Adresse im entsprechenden Tag-RAM festgehalten wird.

mnqpic01.jpg

mnqpic02.jpg
Bis auf den Prozessor und sein Pinout sind 020er- und 030er-PAK gleich. Hier finden Sie die Schaltung deshalb nur einmal.

minpic04.jpg
Der Taktverdoppler für den synchronen 16-MHz-Betrieb wurde von der alten PAK übernommen.

Der Umstand, daß der Datenbus auf dem Mainboard nur 16 Bit, der Cache aber 32 Bit breit ist, bedarf einer näheren Betrachtung. Liegt die Adresse eines Datenwortes nämlich nicht auf einer Langwortgrenze (also A1 = high), so entsteht folgendes Problem: Das Mainboard liefert das Datenwort auf den CPU-Datenleitungen D16 bis D31, die CPU erwartet es im Cache aber später auf D0 bis D15. In diesem Falle werden die beiden Bustreiber auf der PAK/3 im wahrsten Sinne des Wortes aktiv und lösen das Problem, indem sie eine temporäre Querverbindung zwischen unterem und oberem Datenwort herstellen.

Querschläger​

Bis hier ist die PAK/3 noch kein Stück schneller als ihr Vorgänger. Aber beim nächsten Lesezugriff auf diese Adresse erkennt der Komparator im Tag-RAM an der Gleichheit von angelegter und abgespeicherter Adresse einen Treffer. Wenn jetzt auch noch das zweite Tag-RAM, zuständig für die andere Hälfte des 32 Bit breiten Cache, einen Treffer signalisiert (MAT0 und MAT2 beide auf high), dann genügt der CPU ein schneller Blick in den Cache, um die gewünschten Daten zu bekommen. In diesem Fall bleibt /CYC_00 auf high, U4 hält sich vornehm zurück, und das Mainboard bekommt von diesem Zugriff gar nichts mit. Statt dessen schaltet U1, analog zum ROM-Zugriff, die SRAMs ein und bestätigt mit /DSACK0 und /DSACK1. Der Rest ist Formsache. Ein solcher Lesezugriff dauert nur drei CLK16-Takte, im Vergleich zu acht CLK16-Takten, die ein Zugriff auf das Mainboard im günstigsten Fall dauert. Dabei bekommt die CPU aus dem Cache 32 Bit auf einen Schlag präsentiert, ohne Cache hingegen werden für das zweite Wort nochmal acht Takte fällig.

Bei Schreibzugriffen ist der Cache dagegen machtlos, mit der hier implementierten Write-Through-Strategie ist in jedem Fall ein Zugriff auf das Mainboard angesagt. Falls die Tag-RAMs dabei einen Treffer melden, sich das zu dieser Adresse gehörende Datenwort also auch im Cache befindet, kümmert sich U2 darum, daß der Cacheinhalt ebenfalls aktualisiert wird. Somit kann bereits der nächste Lesezugriff wieder aus dem Cache abgewickelt werden. Sogenannte Write-Back-Caches, die selbständig ihren Inhalt in den Hauptspeicher zurückschreiben und somit auch Schreibzugriffe puffern, sind in ihrer Realisierung ungleich aufwendiger und in diesem Fall - wegen des 16-Bit-Nadelöhrs - noch nicht einmal besonders wirkungsvoll.

An der CPU vorbei​

Ein unerfreuliches Thema, von dem die Macs (jedenfalls die hier in Frage kommenden Typen) verschont bleiben, sind die DMA-Zugriffe. Da hier der Inhalt des Hauptspeichers an der CPU vorbei manipuliert wird, muß nach einer solchen Aktion sicherheitshalber der gesamte Cache für ungültig erklärt werden. Bei der PAK/3 wird dies erreicht, indem der Inhalt der Tag-RAMs gelöscht, also auf low gesetzt wird. Damit ist die Kohärenz von Cache und Hauptspeicher immer gewährleistet. Wenn jetzt aber allenthalben DMA-Zugriffe stattfinden, geht die Performance natürlich in den Keller. Aus diesem Grund ist der Blitter im Atari ST mit PAK-68/3 völlig witzlos und sollte daher ausgeschaltet oder ganz ausgebaut werden; die neue CPU ist ohnehin schneller.

Aufbau und Pflege​

Für Mac und ST sind jeweils vier Permutationen in der Bestückung möglich: Völlig nackt, das heißt ohne Cache und ohne ROMs (für erste Tests empfehlenswert), mit ROMs und ohne Cache, mit Cache, aber ohne ROMs und schließlich der Vollausbau mit allem Drum und Dran, jeweils mit den zum Rechner und zur gewünschten Taktfrequenz passenden GALs. Die Optionen sind in der Stückliste angegeben. In der Tabelle neben der Stückliste finden Sie sämtliche in Frage kommenden GAL-Bezeichungen wieder. Im Gegensatz zur alten PAK werden hier auch bei Abwesenheit der ROMs oder des Cache alle GALs bestückt, da der PAK-Logik diese Optionen durch Jumper angezeigt werden; im zweiten Teil dieses Beitrags gehen wir noch erschöpfend auf Rechnerspezifika ein.

Die Platine erreicht dank Multilayer-Technik fast die Packungsdichte eines Freibierausschanks; um die Maße der alten PAK nicht zu überschreiten, mußten die Tag-RAMs unter die EPROM-Sockel verbannt werden, und auch einige Stützkondensatoren finden bei Verwendung von geschlossenen PGA-Sockeln für die Prozessoren nur auf der Lötseite Platz. CPU und FPU lassen sich übrigens aus PGA-Typen mit Kelchfederkontakten (`Präzisionsfassungen´), wenn überhaupt, nur mit roher Gewalt entfernen. Besser sind hier normale Ausführungen, wie sie etwa AMP herstellt. Sicherheitshalber sollten Sie auch den Tag-RAMs Sockel spendieren; die Stege der darüberliegenden EPROM-Fassungen müssen vorsichtig entfernt werden.

Wie bei der alten PAK stellt ein lötseitiger 64poliger DIL-Sockel mit eingestecktem beidseitig `piekendem´ Adaptersockel oder ebensolchem SIL-Streifen die Verbindung zum Mainboard her. Aus Stabilitätsgründen ist diesmal das operative Entfernen der alten 68000-CPU - sofern nicht schon geschehen - unumgänglich, eine 64polige DIL-Fassung tritt an ihre Stelle. Ein GAL-Satz, der den Betrieb bei auf dem Mainboard verbleibender CPU gestattet, ist im Gegensatz zur PAK-68/2 nicht vorgesehen. Bewährt hat sich die Amputation sämtlicher 68000-Beinchen mit einem kleinen Seitenschneider. Einzeln lassen sich die Pins dann leicht aus der Platine ziehen. Wem bei dieser Prozedur ob der leidenden CPU die Tränen kommen, der kann dem beinlosen 68000 später eine Prothese in Form einer DIL-Fassung unterlöten und ihn für Testzwecke weiterverwenden.

Optional ist übrigens der Betrieb der 68000 umschaltbar neben dem 68020/030 möglich, wenn man einige Leitungen zur bislang leeren Spare-Fassung fädelt und ein entsprechend programmiertes GAL einsetzt (Tips dazfolgen). Leider waren die Verbindungen beim besten Willen nicht mehr auf der Platine unterzubringen, und da nicht jeder eine `Vorher/Nachher´-Option braucht, haben wir für diese nur eine freiverdrahtbare Leerfassung vorgesehen. Die auf der Platine vorhandene 68000-Fassung auf der Bestückungsseite kann alternativ auch zur Aufnahme von MSDOS-Emulatoren und ähnlichen Erweiterungen dienen, die sich direkt der Prozessorsignale bedienen.

Der Einsatz mittelschneller CPUs (20 und 25 MHz) bei asynchroner Taktung, das heißt, bei Verwendung des 32-MHz-GAL-Satzes und entsprechend ausgelegtem Quarzoszillator, führt in der Regel zu Problemen; auch ist eine asynchron laufende 20-MHz-CPU bedingt durch unvermeidliche Wartezyklen kaum schneller als die synchron getaktete 16-MHz-Version.

Was es bei der Anpassung des TOS 3.06 zu beachten gilt, wie die asynchronen Zugriffe der 32-MHz-Version funktionieren und wie man den Mac zur Nutzung der FPU und des Datencache überredet, erfahren Sie in der nächsten c't. (cm)

Literatur​

[1] Manfred Völkel, Carsten Meyer, Tausch mit Turbo, PAK-68/2 - mehr Dampf für 68000-Rechner, c't 10/91, S. 178
[2] Manfred Völkel, Carsten Meyer, Tausch mit Turbo, PAK-68/2 in Mac, Atari und Amiga, c't 11/91, S. 314
[3] Manfred Völkel, Tausch mit Turbo, Tips zur PAK-68/2 im ST, c't 12/91, S. 222
[4] Manfred Völkel, Turbo für den Austauschmotor, Schneller Atari mit modifizierter PAK-68, c't 3/91, S. 282
[5] Carsten Meyer, Schnelle Freundin, Amiga mit PAK und 14 MHz, c't 9/90, S. 338
[6] Roland Beck, Hilfskraft: 68000-Prozessor trotz PAK-68/2, c't 7/92, S. 196
[7] Leo Drisis, Real-Renner, 68881-Einbindung für die PAK im Mac, c't 5/90, S. 190
[8] Carsten Meyer, Fast-PAK, 68000 und PAK-68 mit 16 MHz im Macintosh, c't 1/90, S. 194
[9] Johannes Assenbaum, Mehr CPU, PAK-68 - die Prozessor-Austausch-Karte für 68000-Rechner, c't 8/87, S. 68
 
Last edited:
  • Wow
Reactions: Melkhior

MacinJosh

Tinkerer
Jan 16, 2022
52
54
18
46
Finland
www.atariancomputing.com

Kasten 1​


PAK-68/3-Jumper​

Code:
Jumper Name                       Funktion
J1     MMU disable       gesteckt MMU disabled
                         offen    enabled
J2     CPU Cache disable gesteckt CPU-interner Cache disabled
                         offen    enabled
J3     FPU enable        gesteckt FPU aktiviert
                         offen    desaktiviert oder
                                  nicht vorhanden
J4     L2 Cache disable  gesteckt Second-Level-Cache ausgeschaltet
                         offen    eingeschaltet
J5     PAK enable        gesteckt PAK ist am 68000 Bus aktiv
                         offen    alle Ausgänge hochohmig
J6     BR                gesteckt Normalbetrieb
                         offen    Betrieb mit 68000 auf der PAK
                                  (extra Verdrahtung notwendig)
J7     ROM               1-2      ROM auf der PAK aktiviert
                         2-3      desaktiviert oder nicht vorhanden
J8     ROM_CS            1-2      /ROM_CS auf GND
                                  für langsame EPROMs
                         2-3      mit /ROM_OE verbunden
                                  spart Strom
J9     CPUCLK            1-2      CPU-Takt 32 MHz (asynchron)
                         2-3      16 MHz (synchron)
J9     FPUCLK            1-2      FPU-Takt 32 MHz (asynchron)
                         2-3      16 MHz (synchron)
                                  (die FPU sollte nicht
                                  langsamer laufen als die CPU)
J11    Cache Control     1-2      L2-Cache wird über die MMU
                                  kontrolliert
                         2-3      Umschaltung über
                                  Schreibzugriff auf das ROM
                         offen    L2-Cache immer an

Kasten 2


GAL-Bestückung

Code:
U1 P12_16 68020 mit 16 MHz
   P12_32 68020 mit 32 MHz
   P13_16 68030 mit 16 MHz
   P13_32 68030 mit 32 MHz
U2 P2_JP  für Mac, L2-Cache wird über Jumper geschaltet
          bleibt im Normalfall immer eingeschaltet
   P2_RST für Atari ST, L2-Cache bleibt nach Reset bis
          zum ersten DMA-Zugriff ausgeschaltet
U4 P4_16  für 16 MHz
   P4_32  für 32 MHz
U5 P5_16  für 16 MHz
   P5_32  für 32 MHz
U6 P6_MAC für Mac
   P6_ST  für Atari

Beispiel: Sie wollen im Atari eine 030-PAK mit 16 MHz einsetzen. Benötigt werden also P13_16, P2_RST, P4_16, P5_16 und P6_ST.

Kasten 3


Bei der Bestückung sollten Sie in der Reihenfolge der Optionen vorgehen und jede Variante gründlich testen.

Stückliste​

Code:
Halbleiter
U8                 MC68020/68030, Taktfrequenz ab 16 MHz
U22                74F86
U1, U2, U4, U5, U6 GAL 20V8-15 Prog.
U23                Quarz-Osz. 32 MHz   (Option 32 MHz)
U9                 MC68882             (Option FPU)
U10, U11, U12, U13 27C010-120          (Option ROM)
                   oder 27C512-120
U14, U15, U16, U17 Cypress CY7C185-25, (Option Cache)
                   oder Toshiba TC5588-25
U18, U19           SGS MK48S74-25,     (Option Cache)
                   oder SGS MK48S80-25
U20, U21           74F541
Widerstände
RN1                Array 4k7 × 8
R1, R4, R7, R10,   4k7
R23...R27
R8                 2k2
R2, R5, R6         1k
R31, R32           330R
R41, R43           560R
R44...R47          33R
Kondensatoren
C1...C15           100n ker. RM2.5
C20...C24          Ta 10uF/16V
Sonstiges
1                  IC-Fassung 128pol. PGA (evt. 124pol.)
1                  IC-Fassung 68pol. PGA
1                  Adapterfassung 64pol. DIL (oder SIL-Stecker o.ä.)
8                  Fassung 16pol. SIL für ROMs oder
4                  IC-Fassungen 32pol.
6                  IC-Fassung 28pol. DIL schmal (oder 2 × 14er)
5                  IC-Fassung 24pol. DIL schmal
2                  IC-Fassung 20pol. DIL
2                  IC-Fassung 14pol. DIL
1                  Platine PAK-68/3-20 oder PAK-68/3-30
Pfostenleisten einreihig, Jumper nach Bedarf

Kasten 4​


Diese sieben GAL-Listings gelten für die 16-MHz-Version mit 68020 im Atari und Mac.

Code:
PAK 68/3, GAL 1:  CPU-Clk State Machine fr 68020 mit 16 MHz

26-08-93   V12_16a   Holger Zimmermann @ PE
                             ___  ___
                            |   \/   |
                  16m = CLK |1     24| VCC
                       mat2 |2     23| !mat0
                        16m |3     22| !dsack0
                         a1 |4     21| !dsack1
                     !as_00 |5     20| !cyc_00
                      !tclr |6     19| !sterm
                        !wr |7     18| !as_22
                     !as_20 |8     17| !doe
                      !prom |9     16| !as_21
                     !csp19 |10    15| !roe
                      g1p11 |11    14| !dram
                        GND |12    13| !OE auf VCC
                            |________|
%ID
      P12_16
%TYP
      GAL20V8A
%PINS
 CLK  mat2  16m  a1  !as_00  !tclr  !wr  !as_20  !prom  !csp19  g1p11
 !OE  !dram  !roe  !as_21  !doe  !as_22  !sterm  !cyc_00  !dsack1  !dsack0  mat0
%LOGIC

 sterm.OE  = GND;

 as_21.OE  = VCC;
 as_21     = as_20 * 16m
           + as_21 * !16m
           + as_20 * as_21;

 as_22     = as_20 * as_21 * !16m
           + as_22 * !16m
           + as_20 * as_22;

 doe       = as_20 * !as_00 * dram * !tclr * !wr * mat0 * mat2 * as_22
           + as_20 * !as_00 * dram * !tclr * !wr *   a1 * mat2 * as_22;

 !cyc_00   = !as_21
           + csp19
           + !as_00 * dram * !tclr * !wr * mat0 * mat2
           + !as_00 * dram * !tclr * !wr *   a1 * mat2
           + prom * !wr;

 dsack0.OE = as_21 * !cyc_00 * !csp19;
 dsack0    = as_20 * dram * !tclr * !wr * mat0 * mat2 * 16m
           + as_20 * dram * !tclr * !wr *   a1 * mat2 * 16m
           + as_20 * dram * !tclr * !wr * mat0 * mat2 * dsack1
           + as_20 * dram * !tclr * !wr *   a1 * mat2 * dsack1
           + as_20 * prom * !wr * 16m
           + as_20 * prom * !wr * dsack1;

 dsack1.OE = as_21 * !cyc_00 * !csp19;
 dsack1    = as_20 * dram * !tclr * !wr * mat0 * mat2 * 16m
           + as_20 * dram * !tclr * !wr *   a1 * mat2 * 16m
           + as_20 * dram * !tclr * !wr * mat0 * mat2 * dsack1
           + as_20 * dram * !tclr * !wr *   a1 * mat2 * dsack1
           + as_20 * prom * !wr * 16m
           + as_20 * prom * !wr * dsack1;

 roe       = as_20 * prom * !wr * !OE;

%END

Kasten 5​


Code:
PAK 68/3, GAL U2:  Cache Control Logic, L2-Cache ber Jumper schaltbar

08-09-93   V2_JPa     Holger Zimmermann @ PE
                          ___  ___
                         |   \/   |
                    !rom |1     24| VCC
                    mat2 |2     23| mat0
                      a0 |3     22| !twe0
                      a1 |4     21| !dwe0
                  !as_00 |5     20| !tclr
               !bgack_20 |6     19| !dwe2
                     !wr |7     18| !c2off
                  !as_20 |8     17| !dwe1
                  !dsack |9     16| !dwe3
                  !reset |10    15| !twe2
                    siz1 |11    14| !dram
                     GND |12    13| siz0
                         |________|
%ID
      P2_JP
%TYP
      GAL20V8A
%PINS
 !rom  mat2  a0  a1  !as_00  !bgack_20  !wr  !as_20  !dsack  !reset  siz1
 siz0  !dram  !twe2  !dwe3  !dwe1  !c2off  !dwe2  !tclr  !dwe0  !twe0  mat0
%LOGIC

 dwe0.OE = VCC;
 dwe0  = dram * !tclr * as_20 *  as_00 *  wr *  mat0 * !a1 * !a0
       + dram * !tclr * as_20 *  as_00 * !wr * !mat0 * !a1 * dsack
       + dram * !tclr * as_20 *  as_00 * !wr *  dwe0 * !a1 * dsack;

 dwe1  = dram * !tclr * as_20 *  as_00 *  wr *  mat0 * !a1 * siz1
       + dram * !tclr * as_20 *  as_00 *  wr *  mat0 * !a1 * a0
       + dram * !tclr * as_20 *  as_00 *  wr *  mat0 * !a1 * !siz0
       + dram * !tclr * as_20 *  as_00 * !wr * !mat0 * !a1 * dsack
       + dram * !tclr * as_20 *  as_00 * !wr *  dwe1 * !a1 * dsack;

 dwe2  = dram * !tclr * as_20 *  as_00 *  wr *  mat2 *  a1 * !a0
       + dram * !tclr * as_20 *  as_00 * !wr * !mat2 *  a1 * dsack
       + dram * !tclr * as_20 *  as_00 * !wr *  dwe2 *  a1 * dsack;

 dwe3  = dram * !tclr * as_20 *  as_00 *  wr *  mat2 *  a1 * siz1
       + dram * !tclr * as_20 *  as_00 *  wr *  mat2 *  a1 * a0
       + dram * !tclr * as_20 *  as_00 *  wr *  mat2 *  a1 * !siz0
       + dram * !tclr * as_20 *  as_00 * !wr * !mat2 *  a1 * dsack
       + dram * !tclr * as_20 *  as_00 * !wr *  dwe3 *  a1 * dsack;

 twe0  = dram * !tclr * as_20 *  as_00 * !wr *  dwe0 * !a1 * dsack
       + dram * !tclr * as_20 *  as_00 * !wr *  dwe1 * !a1 * dsack;

 twe2  = dram * !tclr * as_20 *  as_00 * !wr *  dwe2 *  a1 * dsack
       + dram * !tclr * as_20 *  as_00 * !wr *  dwe3 *  a1 * dsack;

 tclr  =  as_20 * tclr
       + !as_20 * bgack_20
       + !as_20 * reset
       + !as_20 * c2off;

 c2off.OE = GND;                                          'SLC off per Jumper

%END

Kasten 6​


Code:
PAK 68/3, GAL U6:  Adressdekoder, Atari ST

16-09-93   V6_STc1   Holger Zimmermann @ PE

                          ___  ___
                         |   \/   |
                    !vpa |1     24| VCC
                     fc0 |2     23| !jp3           Jumper J3: fpu_en
                     fc1 |3     22| !berr_20
                  !as_20 |4     21| !csp19
                     a21 |5     20| !rom
                     a20 |6     19| !fpucs
                     a17 |7     18| !word
                     a18 |8     17| !ciin
                     a16 |9     16| !dram
                     a19 |10    15| !avec
                     a22 |11    14| a23
                     GND |12    13| !berr_00
                         |________|

%ID
   P6_ST
%TYP
   GAL20V8A
%PINS
 !vpa  fc0  fc1  !as_20  a21  a20  a17  a18  a16  a19  a22
 !berr_00  a23  !avec  !dram  !ciin  !word  !fpucs  !rom  !csp19
 !berr_20  !jp3
%LOGIC

 berr_20.OE = VCC;
 berr_20    = as_20 * fc1 * fc0 * !a19 * !a17                     'PMMU, BKPT
            + as_20 * fc1 * fc0 * !a19 *  a17 * !jp3            'FPU disabled
            + as_20 * berr_00;

 fpucs      = fc1 * fc0 * !a19 * !a18 *  a17 * !a16 * jp3;       'FPU enabled

 avec       = fc1 * fc0 * vpa;

 csp19      = fc1 * fc0 * !a19;

 dram       = !fc0 * !a23 * !a22
            + !fc1 * !a23 * !a22;

 rom        = a23 * a22 * a21 *  a20 *  a19 *  a18 * !a17           'TOS 1.04
            + a23 * a22 * a21 *  a20 *  a19 *  a18 * !a16           'TOS 1.04
            + a23 * a22 * a21 * !a20 * !a19;                        'TOS x.06

 word       = a23 * a22 * a21 *  a20 *  a19 *  a18 * !a17
            + a23 * a22 * a21 *  a20 *  a19 *  a18 * !a16
            + a23 * a22 * a21 * !a20 * !a19
            + !fc0 * !a23 * !a22
            + !fc1 * !a23 * !a22;

 !ciin      = a23 * a22 * a21 *  a20 *  a19 *  a18 * !a17                'ROM
            + a23 * a22 * a21 *  a20 *  a19 *  a18 * !a16                'ROM
            + a23 * a22 * a21 * !a20 * !a19                              'ROM
            + !fc0 * !a23 * !a22                                         'RAM
            + !fc1 * !a23 * !a22;                                        'RAM
%END

Kasten 7​


Code:
PAK 68/3, GAL U2:  Cache Control Logic, L2-Cache nach Reset aus bis 1. DMA

18-09-93   V2_RSTb    Holger Zimmermann @ PE
                             ___  ___
                            |   \/   |
 (Pin C2 des 68030)  !ciout |1     24| VCC
                       mat2 |2     23| mat0
                         a0 |3     22| !twe0
                         a1 |4     21| !dwe0
                     !as_00 |5     20| !tclr
                  !bgack_20 |6     19| !dwe2
                        !wr |7     18| !c2off
                     !as_20 |8     17| !dwe1
                     !dsack |9     16| !dwe3
                     !reset |10    15| !twe2
                       siz1 |11    14| !dram
                        GND |12    13| siz0
                            |________|
%ID
      P2_RST
%TYP
      GAL20V8A
%PINS
 !ciout  mat2  a0  a1  !as_00  !bgack_20  !wr  !as_20  !dsack  !reset  siz1
 siz0  !dram  !twe2  !dwe3  !dwe1  !c2off  !dwe2  !tclr  !dwe0  !twe0  mat0
%LOGIC

 dwe0.OE = VCC;
 dwe0  = dram * !tclr * as_20 *  as_00 *  wr *  mat0 * !a1 * !a0
       + dram * !tclr * as_20 *  as_00 * !wr * !mat0 * !a1 * dsack * !ciout
       + dram * !tclr * as_20 *  as_00 * !wr *  dwe0 * !a1 * dsack * !ciout;

 dwe1  = dram * !tclr * as_20 *  as_00 *  wr *  mat0 * !a1 * siz1
       + dram * !tclr * as_20 *  as_00 *  wr *  mat0 * !a1 * a0
       + dram * !tclr * as_20 *  as_00 *  wr *  mat0 * !a1 * !siz0
       + dram * !tclr * as_20 *  as_00 * !wr * !mat0 * !a1 * dsack * !ciout
       + dram * !tclr * as_20 *  as_00 * !wr *  dwe1 * !a1 * dsack * !ciout;

 dwe2  = dram * !tclr * as_20 *  as_00 *  wr *  mat2 *  a1 * !a0
       + dram * !tclr * as_20 *  as_00 * !wr * !mat2 *  a1 * dsack * !ciout
       + dram * !tclr * as_20 *  as_00 * !wr *  dwe2 *  a1 * dsack * !ciout;

 dwe3  = dram * !tclr * as_20 *  as_00 *  wr *  mat2 *  a1 * siz1
       + dram * !tclr * as_20 *  as_00 *  wr *  mat2 *  a1 * a0
       + dram * !tclr * as_20 *  as_00 *  wr *  mat2 *  a1 * !siz0
       + dram * !tclr * as_20 *  as_00 * !wr * !mat2 *  a1 * dsack * !ciout
       + dram * !tclr * as_20 *  as_00 * !wr *  dwe3 *  a1 * dsack * !ciout;

 twe0  = dram * !tclr * as_20 *  as_00 * !wr *  dwe0 * !a1 * dsack * !ciout
       + dram * !tclr * as_20 *  as_00 * !wr *  dwe1 * !a1 * dsack * !ciout;

 twe2  = dram * !tclr * as_20 *  as_00 * !wr *  dwe2 *  a1 * dsack * !ciout
       + dram * !tclr * as_20 *  as_00 * !wr *  dwe3 *  a1 * dsack * !ciout;

 tclr  =  as_20 * tclr
       + !as_20 * bgack_20
       + !as_20 * reset
       + !as_20 * c2off;

 c2off.OE = !bgack_20;
 c2off    = reset                                         'SLC off nach Reset
          + c2off * !bgack_20;           'notwendig fr TOS 2.06 Speichertest

%END

Kasten 8​


Code:
PAK 68/3, GAL U4:  State Machine 1 fr 68000 Businterface, 16 MHz

26-08-93   V4_16b   Holger Zimmermann @ PE
                       ___  ___
                      |   \/   |
                clk16 |1     24| VCC
                 clk8 |2     23| !dtack
                !from |3     22| !uds
              !cyc_00 |4     21| !lds
                   rd |5     20| q1
                   e2 |6     19| !as_00
                   e1 |7     18| !vma
                 siz1 |8     17| q0
               !as_20 |9     16| !dsack1
                !word |10    15| !dsack
                   a0 |11    14| siz0
                  GND |12    13| !OE
                      |________|
%ID
   P4_16
%TYP
   GAL20V8A
%PINS
   CLK  clk8  !from  !cyc_00  rd  e2  e1  siz1  !as_20  !word  a0
   !OE  siz0  !dsack  !dsack1  q0  !vma  !as_00  q1  !lds  !uds  !dtack
%LOGIC

 dsack.OE = VCC;
 dsack    = as_20 * dsack1;

 dsack1 <-  as_00 * !dsack1 *  q0 * !q1 * as_20 * rd * !clk8 * dtack
         +  as_00 * !dsack1 *  q0 * !q1 * as_20 * rd * !clk8 * vma * !e1 * e2
         +  as_00 * !dsack1 *  q0 *  q1
         +  as_00 *  dsack1       * !q1;

     q0 <- !as_00 * !dsack1 * !q0 * !q1
         + !as_00 * !dsack1 *  q0 * !q1 * !as_20
         + !as_00 * !dsack1 *  q0 * !q1 *  as_20 * !clk8
         + !as_00 * !dsack1 *  q0 * !q1 *  as_20 * !cyc_00
         +  as_00 * !dsack1       * !q1 *  as_20;

     q1 <-  as_00 * !dsack1 *  q0 * !q1 * as_20 * !rd * !clk8 * dtack
         +  as_00 * !dsack1 *  q0 * !q1 * as_20 * !rd * !clk8 * vma * !e1 * e2
         +  as_00 *  dsack1 *  q0 * !q1;

    vma <- !clk8 * !e1 * !e2
         + vma * !e2
         + vma * !e1
         + vma * clk8;

  as_00 <- !as_00 * !dsack1 *  q0 * !q1 * as_20 * clk8 * cyc_00
         +  as_00 * !dsack1 * !q0 * !q1 * as_20
         +  as_00           *  q0 * !q1 * as_20
         +  as_00 * !dsack1 *  q0       * as_20;

    uds <- !as_00 * !dsack1 *  q0 * !q1 * as_20 *  rd * clk8 * cyc_00 * word
         + !as_00 * !dsack1 *  q0 * !q1 * as_20 *  rd * clk8 * cyc_00 * !a0
         +  as_00                 * !q1 * as_20 *  rd * uds
         +  as_00 * !dsack1 *  q0       * as_20 * !rd * !a0;

    lds <- !as_00 * !dsack1 *  q0 * !q1 * as_20 *  rd * clk8 * cyc_00 * word
         + !as_00 * !dsack1 *  q0 * !q1 * as_20 *  rd * clk8 * cyc_00 * a0
         + !as_00 * !dsack1 *  q0 * !q1 * as_20 *  rd * clk8 * cyc_00 * !siz0
         + !as_00 * !dsack1 *  q0 * !q1 * as_20 *  rd * clk8 * cyc_00 * siz1
         +  as_00                 * !q1 * as_20 *  rd * lds
         +  as_00 * !dsack1 *  q0       * as_20 * !rd * a0
         +  as_00 * !dsack1 *  q0       * as_20 * !rd * !siz0
         +  as_00 * !dsack1 *  q0       * as_20 * !rd * siz1;

%END

Kasten 9​


Code:
PAK 68/3, GAL U5:  State Machine 2 fr 68000 Businterface, 16 MHz

21-08-93   V5_16a   Holger Zimmermann @ PE
                       ___  ___
                      |   \/   |
                clk16 |1     24| VCC
                 clk8 |2     23| nc
              !cyc_00 |3     22| e
                 !vpa |4     21| !bgack_20
              !pak_en |5     20| !bg_00
            !bgack_00 |6     19| e2
               !bg_20 |7     18| e1
               !br_20 |8     17| !enab
               !as_20 |9     16| e0
                  fc0 |10    15| !bgx
                  fc1 |11    14| nc
                  GND |12    13| !OE
                      |________|

%ID
  P5_16
%TYP
  GAL20V8A
%PINS
  CLK  clk8  !cyc_00  !vpa  !pak_en  !bgack_00  !bg_20  !br_20  !as_20
  fc0  fc1
  !OE  nc  !bgx  e0  !enab  e1  e2  !bg_00  !bgack_20  e  nc
%LOGIC

  enab.OE   = VCC;
  enab      = !bg_00 * !bgack_20 * pak_en * cyc_00
            + !bg_00 * !bgack_20 * pak_en * enab * !clk8;

  bgx      <-  clk8 * bg_20 * !as_20
            + !clk8 * bgx;

  bg_00    <-  clk8 * bg_20 * bgx * br_20
            +  clk8 * bg_20 * bgx * bgack_00
            + !clk8 * bg_00;

  bgack_20 <-         bgack_00
            + !clk8 * bgack_20;

  e        <-  e       * !e1
            +  e             * !e0
            +  e                   *  clk8
            +      !e2 *  e1 *  e0 * !clk8
            +      !e2 * !e1 * !e0 * !clk8;

  e0       <-                   e0 *  clk8
            +                  !e0 * !clk8;

  !e1      <- !e *  e2 * !e1 * !e0
            +  e       * !e1 *  e0
            +            !e1       *  clk8
            + !e *  e2 *  e1 *  e0 * !clk8
            +  e * !e2       *  e0 * !clk8;

  !e2      <-      !e2 *  e1 * !e0
            + !e * !e2 *  e1
            +      !e2             *  clk8
            + !e       * !e1 *  e0 * !clk8
            + !e *  e2 * !e1       * !clk8 * !fc0 * vpa
            + !e *  e2 * !e1       * !clk8 * !fc1 * vpa;

%END

Kasten 10​


Code:
PAK 68/3, GAL U6:  Adressdekoder, Mac SE und Mac Plus

01-09-93   V6_MCa    Holger Zimmermann @ PE

                          ___  ___
                         |   \/   |
                    !vpa |1     24| VCC
                     fc0 |2     23| !jp3           Jumper J3: fpu_en
                     fc1 |3     22| !berr_20
                  !as_20 |4     21| !csp19
                     a21 |5     20| !rom
                     a20 |6     19| !fpucs
                     a17 |7     18| !word
                     a18 |8     17| !ciin
                     a16 |9     16| !dram
                     a19 |10    15| !avec
                     a22 |11    14| a23
                     GND |12    13| !berr_00
                         |________|

%ID
   P6_MAC
%TYP
   GAL20V8A
%PINS
 !vpa  fc0  fc1  !as_20  a21  a20  a17  a18  a16  a19  a22
 !berr_00  a23  !avec  !dram  !ciin  !word  !fpucs  !rom  !csp19
 !berr_20  !jp3
%LOGIC

 berr_20.OE = VCC;
 berr_20    = as_20 * fc1 * fc0 * !a19 * !a17                     'PMMU, BKPT
            + as_20 * fc1 * fc0 * !a19 *  a17 * !jp3            'FPU disabled
            + as_20 * berr_00;

 fpucs      = fc1 * fc0 * !a19 * !a18 *  a17 * !a16 * jp3;       'FPU enabled

 avec       = fc1 * fc0 * vpa;

 csp19      = fc1 * fc0 * !a19;

 dram       = !fc0 * !a23 * !a22                                         'RAM
            + !fc1 * !a23 * !a22;

 rom        = !a23 * a22 * !a21 * !a20 * !a19;                           'ROM

 word       = !a23 * a22 * !a21 * !a20                                   'ROM
            + !fc0 * !a23 * !a22                                         'RAM
            + !fc1 * !a23 * !a22;

 !ciin      = !a23 * a22 * !a21 * !a20                                   'ROM
            + !fc0 * !a23 * !a22                                         'RAM
            + !fc1 * !a23 * !a22;

%END



Zu diesem Artikel existieren Programmbeispiele​

1193_222.doc
1193_222.zip
 

Attachments

  • 1193_222.zip
    7.8 KB · Views: 129
Last edited:

MacinJosh

Tinkerer
Jan 16, 2022
52
54
18
46
Finland
www.atariancomputing.com
Contents of 1193_222.doc:

Doppel-PAK
PAK68/3 mit Cache und 68020/030 für 68000-Rechner
-------------------------------------------------
c't 11/93, S. 222 (cm)

P*_16.LCI GAL-Sourcen fuer 16-MHz-Version
P6_MAC.LCI GAL-Source fuer U6 Mac
P2_JP.LCI GAL-Source U2 fuer Cache-Enable per Jumper
P2_RST.LCI GAL-Source U2 fuer Cache-Enable per Reset/DMA (Atari)

GAL-Assembler-Sourcefiles fuer c't-Projekt PAK68/3. Bitte beachten
Sie die Hinweise im Artikel, in den Tabellen und in den GAL-Listings.
 

Melkhior

Tinkerer
Jan 9, 2022
98
50
18
@MacinJosh Thank you! Having the text means I can put it in Google Translate and understand it without a ton of OCR :) And there's indeed a second-level cache that seems to follow the standard Motorola pattern (just with a very limited memory coverage of 4 MiB it seems).

The text reference 'the next ct': "In the next c't you will find out what needs to be considered when adapting TOS 3.06, how the asynchronous accesses of the 32 MHz version work and how to persuade the Mac to use the FPU and the data cache." Any chance of getting those additional explanations for completeness?
 
  • Like
Reactions: MacinJosh

MacinJosh

Tinkerer
Jan 16, 2022
52
54
18
46
Finland
www.atariancomputing.com
I can also confirm that no pages are missing in the pages provided here. Text on page 224 continues on page 229:

...low gesetzt. Damit erkennt der Komparator beim nächsten Lesezugriff in jedem Fall ein Cache Miss (kein Treffer) und lädt daraufhin den Cache neu.

Also, all diagrams and listings are complete.
 

MacinJosh

Tinkerer
Jan 16, 2022
52
54
18
46
Finland
www.atariancomputing.com
minpic01.jpg

Doppel-PAK​

PAK-68/3 mit Cache und 68020/030 für 68000-Rechner, Teil 2​

Holger Zimmermann

Nun wird es richtig spannend: nach der gut 800stelligen Lötorgie und den ersten Tests wartet die PAK auf Taktsignale im VHF-Bereich. Damit sich die CPU im Gestrüpp asynchroner Zugriffe und Wait-Zyklen nicht verheddert, ist neben dem 32-MHz-Quarz auch eine listige GAL-Logik vonnöten.

Im bislang besprochenen 16-MHz-Betrieb liefert CLK16 den Takt für CPU und GALs U1, U4 und U5, gewonnen durch Taktverdopplung aus dem 8-MHz-Systemtakt. Damit läuft die CPU synchron zum Systemtakt. Auch mit 12 MHz Systemtakt auf dem Atari-Mainboard [6] kommt die PAK/3 hervorragend zurecht, wobei die CPU dann, richtig geraten, mit 24 MHz läuft. Die einzig notwendige Änderung betrifft die Taktverdopplerschaltung. Für R41 und R43 sollten in diesem Fall 470 Ohm, für C41 und C42 15 pF vorgesehen werden (irrtümlicherweise fehlen die Kondensatoren C41 und C42 in der Stückliste; im Schaltplan sind sie jedoch richtig `bewertet´).

Wollte man die CPU auf diese Art bei 8 MHz Systemtakt mit 32 MHz betreiben (also mit vervierfachtem Takt), dann wäre eine aufwendigere Takterzeugung, etwa mit Hilfe einer PLL, notwendig. Bei der PAK-68/3 wird im 32-MHz-Betrieb ein anderer Weg beschritten: Ein Quarzoszillator versorgt CPU, FPU und GAL U1 mit eigenen 32 MHz, alles läuft also asynchron zum Systemtakt. Die GALs U4 und U5, zuständig für das Interface zum Mainboard, laufen hingegen weiterhin mit CLK16 und somit synchron zum Mainboard.

Im Gleichschritt ...​

Alle lokalen Zugriffe auf der PAK-68/3 (Cache Hit, ROM und FPU) laufen immer synchron zu CPUCLK ab. Die Kommunikation zwischen CPU und FPU geschieht genauso wie bei 16 MHz, nur eben doppelt so schnell. Bei ROM-Zugriffen wird die Geschwindigkeit durch die Zugriffszeit der EPROMs begrenzt. Während 120er EPROMs bei 16 MHz für 0 Waitstates ausreichen, wären bei 32 MHz Zugriffszeiten kleiner 60 ns notwendig. Derartige EPROMs sind nicht nur kaum zu beschaffen, sondern auch unangenehm teuer. Auf der PAK-68/3 sorgt daher U1 mit den Signalen W1 und W2 dafür, daß bei ROM-Zugriffen vier Waitstates eingeschoben werden, wodurch EPROMs mit bis zu 150 ns (dann aber mit /CS auf GND) eingesetzt werden können.
Auch bei einem Cache Hit kommt man leider nicht um einen Waitstate herum, da zunächst das Tag-RAM befragt werden muß, ob die gewünschten Daten überhaupt im Cache vorliegen. Schnellere Tag-RAMs mit Zugriffszeiten unter 20 ns sind leider, bedingt durch ihre geringe Verbreitung, prohibitiv teuer. In PCs kommen nämlich für diese Aufgabe fast ausschließlich normale SRAMs zum Einsatz, die Komparatorlogik ist dort im LSI-Chipsatz mit integriert. Dagegen sind die auf der PAK/3 für den Cache verwendeten SRAMs die gleichen wie in der PC-Welt. Somit sind wenigstens beim SRAM Zugriffszeit, Beschaffbarkeit und Preis kein Problem.

... Marsch!​

Solange keine Zugriffe auf das Mainboard stattfinden, bleibt der Ausgang CYC_00 von U1 inaktiv, und die State-Machine in U4 tritt sozusagen auf der Stelle, wobei die 68000-Bussignale ebenfalls inaktiv sind. Bei Schreibzugriffen, I/O-Zugriffen und Cache Miss aktiviert U1 CYC_00, worauf U4 einen Buszyklus startet. Mit dem weiteren Ablauf dieses Buszyklus hat U1 dann nichts mehr zu tun, die Ausgänge DSACK0 und DSACK1 von U1 sind abgeschaltet, und alles wartet auf DSACK1 aus U4, dessen Ausgang mit CYC_00 eingeschaltet wurde. Inzwischen hagelt es Waitstates.
Soweit gibt es keine Unterschiede zwischen dem 16-MHz- und dem 32-MHz-Betrieb. Da jedoch bei 32 MHz die Prozessorsignale sowie CYC_00 als Eingangssignale für U4 völlig asynchron kommen, ist damit zu rechnen, daß gelegentlich die Setup- und Hold-Zeiten für U4 verletzt werden. Dann hängt es vom Zufall ab, ob die Eingangssignale als low oder high erkannt werden, wobei sich die einzelnen Register des GALs durchaus unterschiedlich entscheiden können.

Um zu verdeutlichen, was passieren kann, stelle man sich zwei Registerausgänge mit exakt denselben Gleichungen vor. Man erwartet zunächst, daß beide Ausgänge immer übereinstimmen. Wenn aber ein Eingangssignal gerade zum `richtigen´ Zeitpunkt wechselt, könnte das eine Register durchaus noch den alten Wert erkennen, während das andere bereits den neuen Wert sieht und daraufhin seinen Zustand ändert. Eine Taktperiode lang würden also beide Ausgänge unterschiedliche Ergebnisse liefern.

Verbotene Zone​

Damit daraus keine unangenehmen Situationen entstehen, dürfen sich niemals zwei Zustandsvariablen, die von asynchronen Eingangssignalen abhängig sind, gleichzeitig ändern. Bei der PAK-68/3 ist sichergestellt, daß sich nur jeweils eine Zustandsvariable ändert, und somit keine `Bombenstimmung´ aufkommt.
Der Abschluß eines Zugriffs auf das Mainboard sieht bei 32 MHz ebenfalls etwas anders aus. Zunächst wartet U4 einen CLK16-Takt länger als bei 16 MHz, bis DSACK1 aktiviert wird. Mit der nächsten fallenden Flanke des 32-MHz-Taktes erkennt die CPU, daß jetzt endlich Schluß ist mit der Warterei. Da beide Takte asynchron laufen, erfolgt die Datenübernahme beim Lesen nicht exakt mit der steigenden Flanke von AS_00, sondern mit einem Jitter von 30 ns. Die PAK/2 hat bewiesen, daß dies kein Problem darstellt, denn dort fand die Datenübernahme durch die CPU stets 30 ns vor AS_00 statt.

Prinzipiell ist man bei CPUCLK nicht auf 32 MHz festgelegt. Bei niedrigeren Frequenzen würde jedoch der Jitter zu groß (stets eine CPUCLK-Periode, bei 25 MHz also bereits 40 ns), was gutgehen kann, aber nicht muß. Zu höheren Taktfrequenzen hin gäbe es mit dem Jitter keine Probleme, wohl aber mit den Datenbustreibern auf dem Mainboard, die nach getaner Arbeit nicht schnell genug abgeschaltet werden und dadurch den folgenden Buszyklus stören würden. FPU-Zugriffe sind, da sie ohne Waitstates auskommen, am ehesten gefährdet.

Hilfskraft​

Wie im ersten Teil des Beitrags bereits angesprochen, sind auf der Platine eine Leerfassung und ein 68000-Sockel vorgesehen, mit denen Sie recht einfach eine Umschaltmöglichkeit zwischen beiden Prozessoren (natürlich nicht im laufenden Betrieb) realisieren können.
An dem 64poligen Sockel U7 auf der PAK-68/3 sind die Pins 11 (/BG), 13 (/BR) und 20 (E) nicht angeschlossen. Wer hier Erweiterungen aufstecken will, die diese Signale benötigen (eventuell Grafikerweiterungen oder Emulatoren im Atari), muß sie per Drahtbrücke nachreichen. Falls ein 68000 als Notantrieb eingesetzt werden soll, müssen diese sechs Leitungen (je drei von der PAK und vom 68000er) zu einem Umschalt-GAL (Listing PUK) geführt werden. Zusätzlich wird am GAL noch /BR_20 (von J6) und /PAK_EN (von J5) benötigt. Der Jumper J6 entfällt damit, die Umschaltung zwischen den Prozessoren erfolgt mit J5.

Atarisch​

Die PAK/3-020 läuft unter TOS 2.06 problemlos, was im Prinzip auch für die 030er PAK gilt. Da TOS 2.06 jedoch nichts von der Existenz einer MMU und eines CPU-internen Datencache weiß, kann es in bestimmten Situationen Probleme geben, so zum Beispiel bei einigen Plattentreibern mit eingeschaltetem Datencache. Im TT fällt das nicht weiter auf, weil dort die MMU vom TOS 3.06 entsprechend programmiert wird. Daß es aber auch anders geht, zeigt AHDI, der auch auf einer PAK/3-030 unter TOS 2.06 ohne MMU-Unterstützung einwandfrei läuft.
Des weiteren gibt es noch einige Programme, etwa Treiber für virtuelles RAM, die die MMU verwenden, diese aber in genau dem Zustand vorfinden möchten, wie sie vom TOS 3.06 im TT initialisiert wird. Bei TOS 2.06 kann diese MMU-Initialisierung durch ein kleines Programm im Auto-Ordner nachgeholt werden, womit dann auch solche Programme laufen.

Leider handelt man sich damit ein weiteres (kleines) Problem ein: Ein über die Tastatur ausgelöster Kaltstart führt zum Aufhängen des Rechners, denn TOS 2.06 löscht dabei den gesamten Speicher und mithin auch die MMU-Tabelle. Die CPU trifft zwar in der Startup-Sequenz des TOS auf einen RESET-Befehl, womit die gesamte Hardware des Rechners (auch der L2-Cache) zurückgesetzt wird. Der interne Status der CPU bleibt davon jedoch unberührt, die MMU und die beiden CPU-Cache sind nach wie vor aktiv, was dann auch prompt in die Hose geht.

minpic02.jpg
Ein ODER-verknüpftes Enable-Signal beider Laufwerke schaltet den Cache ab, wenn der Mac Schwierigkeiten mit Disketten haben sollte.

pic03.jpg

Mit und ohne: Die Ergebnisse (relativ zum Mac Classic) in der rechten Spalte wurden mit dem SANE-Beschleuniger GEMStart ermittelt; der Zuwachs an FPU-Performance im Benchmark-Mix ist deutlich. Die FPU-Benchmarks ermittelt Speedometer (Version 3.23) dagegen immer an SANE vorbei. Mit einer 68030-PAK liegen die Ergebnisse im Schnitt 10 Prozent höher.

Die elegantere Alternative ist die Verwendung von TOS 3.06, das ja bereits für einen 68030 ausgelegt ist. Da zudem im Gegensatz zum TOS 2.06 an einigen Stellen 68020-Code verwendet wird, gibt es einen spürbaren Geschwindigkeitsgewinn.

Das originale TOS 3.06 des TT kann aufgrund unterschiedlicher Hardwarevoraussetzungen auf der PAK-68/3 leider nicht verwendet werden. Dies gilt gleichermaßen für den in der c't 9/92, S. 212 vorgestellten Patch, dem damals kurzerhand die gesamte MMU-Initialisierung zum Opfer fiel. Dort wurde außerdem ein Unterprogramm, in dem die CPU einigen ihrer Kollegen gelegentlich kurze Verschnaufpausen gönnt (im TT mit dem TT-MFP realisiert), einfach übersprungen. Was bei der PAK/2 wegen der geringeren Geschwindigkeit noch funktioniert haben mag, geht bei der PAK-68/3 garantiert schief. Daher wird es einen neuen Patch für TOS 3.06 geben, den wir aber erst nach einer ausgiebigen Testphase freigeben wollen.

Einziges ungelöstes Problem ist zur Zeit noch die Memory-Protection von MiNT, die leider bisher auf der PAK/3 nicht zum Laufen zu kriegen ist. Da aber auch andere 68030-Boards dasselbe Problem haben, ist der Fehler wohl eher bei MiNT zu suchen.

Inside Mac​

Grundsätzlich ist der Einbau in alle Macs mit 68000-8 möglich, einschließlich des Classic 1. Das Dumme ist nur, daß letzterer (wie auch der Atari STE) einen 68000 in PLCC-Ausführung beschäftigt - und ohne entsprechenden Adapter ist da nichts zu machen. Verschiedene Firmen, etwa MW Elektronik aus Königswinter, bieten derartiges an.
Auch beim Mac ist es (wie schon bei der PAK-68/2) möglich, das Rechner-ROM auf vier EPROMs zu verteilen und auf die PAK zu stecken. Auf der Mac-Sammeldiskette 7 ist das Split-Utility aus [3] neben allen GAL-Sourcen und -JEDECs mit enthalten. Da der Mac Classic von Haus aus mit 512 statt 256 KByte ROM ausgerüstet ist (warum, weiß allein Apple), ist hier das Split-Programm entsprechend anzupassen (Variable ROMLen); außerdem werden 27C010-EPROMs benötigt.

pic04.jpg

Das GAL P3_PUK wird mit etwas `Freiluftverdrahtung´ im Reservesockel der PAK-Platine untergebracht.

Bei manchen Maskenversionen des IWM beziehungsweise SWIM (Diskettencontroller des Mac, `Integrated Woz Machine´) tritt folgendes Problem auf: Der Mac erkennt die eingelegte Diskette nicht, formatiert sie fehlerhaft oder zeigt einen nicht vorhandenen Schreibschutz an. Sollte Ihr Exemplar so reagieren, müssen Sie den Prozessor- und eventuell auch den L2-Cache während aller Diskettenzugriffe lahmlegen. Sehr einfach geht das mittels zweier Dioden, die gemäß obenstehender Abbildung zu verschalten sind. Da der Mac ohnehin etwas pingelig bezüglich des Diskettenformatierens ist, kann man Disketten auch mit dem `Diskcopy 4.2´ formatieren: Einfach ein Image einer Leerdiskette anlegen und neue Disks damit überbraten. Vor allem, wenn eine Diskette schon einmal MSDOS-formatiert war, wirkt dies Wunder.

Empfehlenswert ist der Einsatz eines SANE-Beschleunigers (ein INIT oder Kontrollfeld, das die SANE-Aufrufe auf den Koprozessor umleitet), damit alle `rechnenden´ Applikationen etwas vom 68881/882 (so vorhanden) haben - der bleibt sonst nämlich außen vor, wenn ihn das laufende Programm nicht höchstpersönlich anspricht. [7] beschreibt den Patch des Radius-MATH-INITs, das eigentlich für Beschleunigerkarten der amerikanischen Firma gedacht ist. Wer Zugang zu CompuServe (Mac Systems Forum) oder AppleLink (Software Updates) hat, sollte sich das Kontrollfeld GEMStart (Version 2.2 oder 3.0) der Firma Total Systems herunterladen; es harmoniert auch ohne Patch ganz wunderbar mit der PAK - alt wie neu.

Output​

Wichtig ist, wenn man einem bekannten deutschen Politiker glauben darf, vor allem, was hinten heraus kommt - siehe untenstehende Benchmark-Tabelle. Zum einen fällt auf, daß QuickIndex bereits der PAK/2 eine recht hohe Rechenleistung bescheinigte. Dies liegt an den dort verwendeten kurzen Programmschleifen, die weitgehend im CPU-internen Cache Platz finden; so nimmt sich der Schritt zur PAK/3 in den verschiedenen Ausbaustufen nicht mehr so groß aus. In der letzten Spalte fällt auf, daß eine 24-MHz-PAK in einem 12-MHz-Atari fast ebenso schnell ist wie die 32-MHz-Version bei 8 MHz Bustakt, weil Datenzugriffe auf das Mainboard immer nur zu bestimmten Zeitpunkten stattfinden können; zwischendurch ist der Videocontroller dran. Eine schnellere CPU vertrödelt somit bei 8 MHz einen guten Teil der gewonnenen Zeit wieder mit dem Warten auf das nächste `Zugriffsfenster´. Auch beim GEM-Test wirken sich die vielen Schreibzugriffe auf den Bildschirmspeicher, die ja nicht über den L2-Cache laufen, etwas bremsend aus.
Der Dhrystone-Test und die Berechnung der Juliamenge zeigen ein anderes Bild, das sich auch mit den Erfahrungen aus der täglichen Praxis deckt, zum Beispiel bei Anwendungen wie TeX. Unter dem Strich erreicht die PAK/3 mit 32 MHz etwa den Faktor 3,5 bis 4 gegenüber einem normalen ST mit 8 MHz und ist etwa doppelt so schnell wie übliche 68000er Beschleuniger mit 16 MHz.

Zum Betrieb im Amiga liegen uns derzeit noch keine Erfahrungen vor; wir rechnen aber in Bälde mit positiven Rückmeldungen einiger `Beta-Tester´. (cm)

Literatur​

[1] Holger Zimmermann, Doppel-PAK, PAK-68/3 mit Cache und 68020/030 für 68000-Rechner, c't 11/93, S. 222
[2] Jankowski/Reschke/Rabich, Atari Profibuch ST-STE-TT, 10. Auflage 1991, Sybex-Verlag
[3] Manfred Völkel, Carsten Meyer, Tausch mit Turbo, PAK-68/2 in Mac, Atari und Amiga, c't 11/91, S. 314
[4] Jürgen Knufinke, Manfred Völkel, Stufe sechs, TOS x.06 für die PAK-68/2, c't 9/92, S. 212
[5] MausNet, Gruppen ATARI.HARD, ATARI.SOFT, ATARI-EXP 29. 11. 91 - 15. 10. 93
[6] Und es geht doch, Atari mit mehr als 8 MHz, ST Computer, c't 9/92, S. 118
[7] Leo Drisis, Real-Renner, 68881-Einbindung für die PAK im Mac, c't 5/90, S. 190

Kasten 1​


Atari-Benchmarks​

Code:
System      1040 ST Speeder PAK/2  PAK/3  PAK/3  PAK/3  PAK/3
            68000   68000   68020  68020  68020  68030  68020
            8 MHz   16 MHz  16 MHz 16 MHz 32 MHz 32 MHz 24 MHz
                    16 KB          32 KB  32 KB  32 KB  32 KB
                    Cache          Cache  Cache  Cache  Cache
                                                        System
                                                        12 MHz
CPU Mem     100     164     245    330    374    396    495
Reg         100     204     402    406    811    811    614
Div         100     203     504    507    1014   1014   762
Shift       100     207     1708   1737   3534   3534   2628
TOS-T>ext   290     452     359    638    753    717    778
String      1075    1804    2406   2807   3062   3062   4218
Scroll      132     143     147    222    251    252    331
GEM Dialog  323     519     466    720    872    872    2159
Speedometer 104     188     209    335    479    485    465
Dhrystone   1059    1839    1282   2649   3407   3424   3944
Juliamenge  5622    3098    4040   2045   1429   1357   1350
Text        857     1460    1798   2452   3158   3203   4001
Linien      301     470     523    775    1055   1033   1099
Rechteck    411     573     605    736    916    941    1063
Polygone    201     365     399    640    1002   1019   984
Kreise      372     664     706    1158   1820   1813   1863
Raster      291     449     557    716    869    875    1076
Attribut    484     767     708    1134   1478   1432   1116
Auskunft    361     569     519    824    1052   1010   893
ESC         262     399     513    634    691    689    940
BIOS        201     282     234    417    495    468    578
GEMDOS      631     993     1316   1564   1704   1694   2332
AES         334     542     476    758    919    925    3150
[I]Testkonfiguration: 1040 ST, 2 MByte RAM, kein Blitter, TOS 2.06, NVDI 2.03, 520 ST mit 12 MHz, 4 MB RAM, KAOS 1.4.2, NVDI 2.03
Testprogramme: Quick Index 2.2, Speedometer V 1.0, Dhrystone und Juliamenge in Modula programmiert, NVDI GEM-Test V 1.02

Höhere Zahlen bedeuten höhere Performance, bis auf `Juliamenge´

Kasten 2


Neben den drei neuen 32-MHz-GALs finden Sie hier auch den Umschalter P3_PUK.

Code:
PAK 68/3, GAL U1:  CPU-Clk State Machine fr 68030 mit 32 MHz

18-09-93   V13_32c    Holger Zimmermann @ PE
                             ___  ___
                            |   \/   |
                  32m = CLK |1     24| VCC
                       mat2 |2     23| mat0
                        32m |3     22| !dsack0
                         a1 |4     21| !dsack1
                     !as_00 |5     20| !cyc_00
                      !tclr |6     19| !w2          (!sterm)
                        !wr |7     18| !w1
                     !as_20 |8     17| !doe
                      !prom |9     16| !as_21
                     !csp19 |10    15| !roe
      (g1p11)        !ciout |11    14| !dram
                        GND |12    13| !OE auf VCC
                            |________|
%ID
      P13_32
%TYP
      GAL20V8A
%PINS
 CLK  mat2  32m  a1  !as_00  !tclr  !wr  !as_20  !prom  !csp19  !ciout
 !OE  !dram  !roe  !as_21  !doe  !w1  !w2  !cyc_00  !dsack1  !dsack0  mat0
%LOGIC

 w1       <- as_20 * as_21 * !w2;

 w2       <- as_20 * as_21 * w1
           + as_20 * as_21 * w2;

 as_21     = as_20 * 32m
           + as_20 * as_21;

 doe = as_20 * !as_00 * dram * !ciout * !tclr * !wr * mat0 * mat2 * as_21 * !32m
     + as_20 * !as_00 * dram * !ciout * !tclr * !wr * mat0 * mat2 * as_21;

 !cyc_00   = !as_20
           + !as_21
           + csp19                                           'FPU, PMMU, BKPT
           + !as_00 * dram * !ciout * !tclr * !wr * mat0 * mat2    'Cache hit
           + prom * !wr;                                     'ROM auf der PAK

 dsack0.OE = as_21 * !cyc_00 * !csp19;
 dsack0    = as_20 * dram * !ciout * !tclr * !wr * mat0 * mat2 * as_21 * !32m
           + as_20 * dram * !ciout * !tclr * !wr * mat0 * mat2 * dsack0
           + as_20 * prom * !wr * w2 * !w1 * !32m
           + as_20 * prom * !wr * dsack0;

 dsack1.OE = as_21 * !cyc_00 * !csp19;
 dsack1    = as_20 * dram * !ciout * !tclr * !wr * mat0 * mat2 * as_21 * !32m
           + as_20 * dram * !ciout * !tclr * !wr * mat0 * mat2 * dsack0
           + as_20 * prom * !wr * w2 * !w1 * !32m
           + as_20 * prom * !wr * dsack0;

 roe       = as_20 * prom * !wr;

%END

Code:
PAK 68/3, GAL 4:  Statemachine 1 für 68000 Businterface, 32 MHz
16-10-93   V4_32c3  Holger Zimmermann @ PE

%ID
   P4_32
%TYP
   GAL20V8A
%PINS
   CLK  clk8  !from  !cyc_00  rd  e2  e1  siz1  !as_20  !word  a0
   !OE  siz0  !q1  !dsack1  q0  !vma  !as_00  !dsack  !lds  !uds  !dtack
%LOGIC

 dsack1.OE = cyc_00;
 dsack1    = as_20 * cyc_00 * dsack
           + as_20 * cyc_00 * dsack1;

 dsack <-  as_00 * !dsack *  q1 *  q0 * as_20 *  rd
        +  as_00 * !dsack *  q1 * !q0 * as_20 * !rd;

    q0 <- !as_00 * !dsack * !q1 * !q0 *  as_20 *  rd * cyc_00
        + !as_00 * !dsack * !q1 *  q0 *  as_20       * cyc_00 * !clk8
        +  as_00 * !dsack * !q1       *  as_20;

    q1 <-  as_00 * !dsack * !q1 *  q0 * as_20 * !clk8 * dtack
        +  as_00 * !dsack * !q1 *  q0 * as_20 * !clk8 * vma * !e1 * e2
        +  as_00 * !dsack *  q1 *  q0 * as_20
        +  as_00 *  dsack *  q1 * !q0;

   vma <- !clk8 * !e1 * !e2
        + vma * !e2
        + vma * !e1
        + vma * clk8;

 as_00 <- !as_00 * !dsack * !q1 * !q0 * as_20 * !rd * cyc_00 * clk8
        + !as_00 * !dsack * !q1 *  q0 * as_20       * cyc_00 * clk8
        +  as_00 * !dsack * !q1 * !q0 * as_20
        +  as_00 * !dsack       *  q0 * as_20;

   uds <- !as_00 * !dsack * !q1 *  q0 * as_20 *  rd * cyc_00 * clk8 * word
        + !as_00 * !dsack * !q1 *  q0 * as_20 *  rd * cyc_00 * clk8 * !a0
        +  as_00 * !dsack * !q1 * !q0 * as_20 *  rd * word
        +  as_00 * !dsack * !q1 * !q0 * as_20 *  rd * !a0
        +  as_00 * !dsack       *  q0 * as_20 *  rd * word
        +  as_00 * !dsack       *  q0 * as_20 *     * !a0;

   lds <- !as_00 * !dsack * !q1 *  q0 * as_20 *  rd * cyc_00
        * clk8 * word ´2
        + !as_00 * !dsack * !q1 *  q0 * as_20 *  rd * cyc_00 * clk8 * a0
        + !as_00 * !dsack * !q1 *  q0 * as_20 *  rd * cyc_00 * clk8 * !siz0
        + !as_00 * !dsack * !q1 *  q0 * as_20 *  rd * cyc_00 * clk8 * siz1
        +  as_00 * !dsack             * as_20 *  rd * lds
        +  as_00 * !dsack       *  q0 * as_20 * !rd * a0
        +  as_00 * !dsack       *  q0 * as_20 * !rd * !siz0
        +  as_00 * !dsack       *  q0 * as_20 * !rd * siz1;
%END

Code:
PAK 68/3, GAL U5:  State Machine 2 fr 68000 Businterface, 32 MHz

26-08-93   V5_32a    Holger Zimmermann @ PE
                       ___  ___
                      |   \/   |
                clk16 |1     24| VCC
                 clk8 |2     23| nc
              !cyc_00 |3     22| e
                 !vpa |4     21| !bgack_20
              !pak_en |5     20| !bg_00
            !bgack_00 |6     19| e2
               !bg_20 |7     18| e1
               !br_20 |8     17| !enab
               !as_20 |9     16| e0
                  fc0 |10    15| !bgx
                  fc1 |11    14| nc
                  GND |12    13| !OE
                      |________|

%ID
  P5_32
%TYP
  GAL20V8A
%PINS
  CLK  clk8  !cyc_00  !vpa  !pak_en  !bgack_00  !bg_20  !br_20  !as_20
  fc0  fc1
  !OE  nc  !bgx  e0  !enab  e1  e2  !bg_00  !bgack_20  e  nc
%LOGIC

  enab.OE   = VCC;
  enab      = !bg_00 * !bgack_20 * pak_en;

  bgx      <-  clk8 * bg_20 * !as_20
            + !clk8 * bgx;

  bg_00    <-  clk8 * bg_20 * bgx * br_20
            +  clk8 * bg_20 * bgx * bgack_00
            + !clk8 * bg_00;

  bgack_20 <-         bgack_00
            + !clk8 * bgack_20;

  e        <-  e       * !e1
            +  e             * !e0
            +  e                   *  clk8
            +      !e2 *  e1 *  e0 * !clk8
            +      !e2 * !e1 * !e0 * !clk8;

  e0       <-                   e0 *  clk8
            +                  !e0 * !clk8;

  !e1      <- !e *  e2 * !e1 * !e0
            +  e       * !e1 *  e0
            +            !e1       *  clk8
            + !e *  e2 *  e1 *  e0 * !clk8
            +  e * !e2       *  e0 * !clk8;

  !e2      <-      !e2 *  e1 * !e0
            + !e * !e2 *  e1
            +      !e2             *  clk8
            + !e       * !e1 *  e0 * !clk8
            + !e *  e2 * !e1       * !clk8 * !fc0 * vpa
            + !e *  e2 * !e1       * !clk8 * !fc1 * vpa;

%END

Code:
PAK 68/3, GAL PUK:  Umschaltung zwischen 68000-8 und PAK/3

08-09-93   P3_PUK   Holger Zimmermann @ PE

                    |ÿÿÿ\/ÿÿÿ|  
                    |1     20| VCC
            !pak_en |2     19| !br_20
                    |3     18|  
                    |4     17|  
                    |5     16|  
              e_68k |6     15| e_pak
                    |7     14|
            !br_pak |8     13| !br_68k
            !bg_68k |9     12| !bg_pak
                GND |10    11|  
                    |________|  

%ID
    P3_PUK
%TYP
    GAL16V8A
%PINS
    nc  !pak_en  nc  nc  nc  e_68k  nc  !br_pak  !bg_68k
    nc  !bg_pak  !br_68k  nc  e_pak  nc  nc  nc  !br_20
%LOGIC

    e_pak.OE  = !pak_en;
    e_pak     = e_68k;
    
    bg_pak.OE = !pak_en;
    bg_pak    = bg_68k;
    
    br_68k    = !pak_en * br_pak
              +  pak_en;
    
    br_20     =  pak_en * br_pak
              + !pak_en;

%END

Zu diesem Artikel existieren Programmbeispiele

1293_276.doc
1293_276.zip
 

Attachments

  • 1293_276.zip
    2.6 KB · Views: 127
  • pic03.jpg
    pic03.jpg
    69.2 KB · Views: 139
Last edited:

MacinJosh

Tinkerer
Jan 16, 2022
52
54
18
46
Finland
www.atariancomputing.com
Contents of 1293_276.doc:

Doppel-PAK
PAK-68/3 mit Cache und 68020/030 für 68000-Rechner, Teil 2
----------------------------------------------------------
c't 12/93, S. 276 (cm)
siehe c't 2/94, S. 12

p13_32.lci CPU-Clk-State Machine 68030, 32 MHz
p4_32.lci State Machine 1 fuer 68000-Businterface, 32 MHz
p5_32.lci State Machine 2 fuer 68000-Businterface, 32 MHz
p3_puk.lci Umschaltung zwischen 68000-8 und PAK/3

GAL-Listings fuer Maxon-GAL-Programmer auf Atari. Achtung!
Unter nicht immer reproduzierbaren Umstaenden liefern einige
Versionen des Maxon-Programmers fehlerhafte JEDEC-Files.
JEDECs sind daher vor dem endgueltigen Programmieren der
GALs durch Vergleichen mit dem Maxon-Disassembler zu verifizieren.
Bitte beachten Sie die Hinweise im Artikel, in den Tabellen
und in den GAL-Listings.
 
  • Wow
Reactions: Melkhior