Hintergrund und erste Beispiele
In einem alten Beitrag schrieb ich, dass ich am Reverse Engineering des PLA-Chips des Commodore 128 arbeite. Jetzt habe ich diesen Prozess fast abgeschlossen, also ist es Zeit, meine Erkenntnisse zu teilen.
Es war ein sehr interessantes Projekt, weil ich nicht viel über das Entwerfen und Herstellen von Halbleitern wusste. Mein Wissen beschränkte sich darauf, Bilder von Kristallen zu betrachten und diese schönen Fotografien zu bewundern.
Für mich begann meine Forschung mit dem Kauf eines billigen Mikroskops zum Löten von SMD-Komponenten (Surface Mount).

Billiges Mikroskop
Nach einiger Zeit fand ich auf Youtube ein Video, das einen einfacheren Weg zeigt, Siliziumkristalle aus einem Gehäuse zu entfernen.
Die Methode sah einfach genug aus, um zu Hause implementiert zu werden, da ich bereits über alle erforderlichen Geräte verfügte. Das Entfernen eines IC aus einer Verpackung erfordert normalerweise erhitzte Schwefelsäure oder andere gefährliche Chemikalien, mit denen ich zu Hause nicht wirklich experimentieren wollte. Also habe ich ein paar kaputte MOS-Chips in meinem Inventar ausgegraben (wirf niemals etwas weg, es könnte nützlich sein). Mit ein wenig Arbeit bekam ich zwei 8521R0-Matrizen und eine 8721 PLA. Im vorherigen Beitrag habe ich das erste echte Foto gezeigt.

Vollständiges Foto des 8721 PLA-Chips
Besseres Mikroskop
Obwohl das Experiment erfolgreich war, stellte ich sofort fest, dass das Mikroskop nicht genügend Auflösung hatte, um Bilder mit ausreichender Qualität für mich aufzunehmen. Bei einem 2x Barlow-Objektiv beträgt die maximale Vergrößerung das 90-fache. Außerdem hat das Mikroskop keinen Tisch, deshalb musste ich den Kristall auf den Tisch legen und dann das gesamte Mikroskop bewegen. Dieses Design ist sehr instabil und es ist schwierig, die erforderlichen Teile mit seiner Hilfe zu entfernen.
Also habe ich ein besseres Mikroskop gefunden und gekauft, auch zu einem vernünftigen Preis.

AmScope ME580-T-Mikroskop Es hat
viel bessere Arbeit geleistet, um Fotos in anständiger Qualität aufzunehmen, aber ich war mit der Kamera, die ich damit gekauft habe, unzufrieden. Dies ist eine billige Kamera ohne Fernbedienung, mit Ausnahme der AmScope-Anwendung. Zu dieser Zeit veröffentlichte die Raspberry Pi Foundation eine neue hochwertige Kamera für den Raspberry Pi. Diese Kamera verfügt über eine mit dem Mikroskop kompatible C-Halterung, daher habe ich sie sofort gekauft und auf dem Mikroskop installiert. Es leistet hervorragende Arbeit, um die volle Kontrolle über Linux zu gewährleisten.

Teil des Siliziumchips 8521R0
Im Vergleich zum vorherigen System ist dies eine enorme Verbesserung. Aufgrund der erhöhten Auflösung musste ich die Fotos zusammenfügen, um größere Bilder zu erhalten. Es klingt zunächst einfach, aber es stellte sich heraus (wie Sie vielleicht vermutet haben), dass es überhaupt keine leichte Aufgabe ist. Ich habe immer noch Schwierigkeiten, Fotos zusammenzufügen, aber ich verbessere allmählich meine Fähigkeiten. Einer der Schlüsselfaktoren für eine erfolgreiche Panoramaaufnahme ist die Gleichmäßigkeit von Fokus, Weißabgleich usw. Je einheitlicher die Fotos sind, desto einfacher und besser werden die Nähte.
Mechanisierung
All dies brachte mich dazu, den Tisch zu mechanisieren. Ich wurde es sehr leid, den Tisch manuell zu bewegen, wobei die Fotos entlang mehrerer Achsen verschoben wurden und andere Verzerrungen auftraten.
Nachdem ich viel Design, 3D-Druck und Recherchen zur CNC-Firmware durchgeführt hatte, kam ich zu folgendem Design:

Modifiziertes Mikroskop AmScope ME580-T
Oben befindet sich ein 7-Zoll-Himbeer-Display, hinter dem sich ein Himbeer-Pi4 befindet. Das Foto zeigt nicht die am Mikroskop montierte RPi HiQ-Kamera. Das RPi nimmt Fotos auf, zeigt sie auf dem Display an und führt auch den Python-Code aus, der die CNC-Platine antreibt.
Die Stufe und die Nivellierstufe werden von 28BYJ-48-Schrittmotoren angetrieben, die von einer kleinen ESP32-Platine mit Grbl_Esp32 sowie vier AD4498-Schrittmotorsteuerungen angetrieben werden.
Die Schaltung hat bestimmte Software- und Hardwareprobleme, funktioniert aber für meine Zwecke recht gut.
Den Chip umkehren
Nachdem ich mich mit der Logistik befasst hatte, kehrte ich zum Reverse Engineering des Chips selbst zurück. Ich wollte ursprünglich den PLA-Chip in Angriff nehmen, weil es am einfachsten wäre, das herauszufinden. PLA steht für Programmable Logic Array ; ähnliche Strukturen waren in der Commodore-Ära sehr verbreitet.
Basierend auf dem Diagramm aus Wikipedia sollten wir erwarten, dass sich auf dem Chip zwei Hauptarrays befinden, AND und OR. Die Eingänge sind mit AND verbunden und die Pins kommen aus dem OR-Array.
Wenn wir zum vorherigen Schuss des Stempels zurückkehren, können wir ihn verbessern, indem wir den Stiften und Bereichen des Chips Anmerkungen hinzufügen. Nachdem wir uns mit dem Zweck der Kristalle befasst haben, sehen wir, dass alle Eingänge wie erwartet mit einem Array und alle Ausgänge mit einem anderen verbunden sind. Außerdem hilft es uns zu verstehen, wo sich welches Array befindet.

Momentaufnahme des 8721 PLA-Chips mit Anmerkungen
Hier sehen wir die markierten E / A-Pins und ihre Verbindung zum Lead-Frame und zu den Pins des DIP selbst. Ebenfalls sichtbar sind die beiden Hauptbereiche, aus denen die PLA-Struktur besteht, das AND-Array und das OR-Array. Außerdem gibt es hier unten eine zusätzliche Logik, die mit einem Fragezeichen gekennzeichnet ist. Sein Zweck war mir unbekannt, aber da alle Ausgangskontakte ihn durchlaufen, nahm ich an, dass dies eine Art Ausgangsstufe war.
UND-Array
Wenn wir also zuerst die UND-Matrix genauer untersuchen, sehen wir das Bild unten. Die Farben sind etwas verzerrt, da dieses Bild mit einer AmScope-Kamera aufgenommen wurde und ich nicht herausfinden konnte, wie der Weißabgleich darauf eingestellt werden soll.

UND-Matrix mit Metallschicht
Das Bild ist nicht sehr nützlich, um zu verstehen, was passiert, da alle interessanten Teile von der obersten Metallschicht bedeckt sind. Ich habe gerade erst angefangen zu lernen, also habe ich das Metall mit brutaler Gewalt entfernt. Ich habe das Metall durch starken mechanischen Aufprall gelöscht. Nach dem Studium unter dem Mikroskop stellte sich heraus, dass im Allgemeinen alles außer dem Substrat selbst entfernt wurde.
Glücklicherweise befanden sich die Details, die ich brauchte, in der Diffusionsschicht im Substrat:

Matrixsubstrat UND
Wenn Sie sich das Bild genau ansehen, sehen Sie kleine Wellenlinien, in denen sich der Transistor befindet, um eine Verbindung in der Matrix herzustellen.
ODER-Array
Wenn wir zum OR-Array übergehen, sehen wir genau das gleiche Format. Schwer zu analysieren, ohne die Metallschicht zu entfernen, aber einfacher im Vergleich zur UND-Matrix. Und es ist viel einfacher, wenn nur das Substrat und die Diffusionsschicht übrig bleiben.

ODER mit Metallschicht sterben

ODER Matrixsubstrat
Vollmatrix-Decodierung
Mit diesem Wissen können wir fortfahren, die vollständige PLA-Logikmatrix aus Bildern wiederherzustellen.
Ich habe alle Transistoren in jeder Matrix mit Punkten markiert und das folgende Bild erhalten:

Eine UND-Matrix mit einer Metallschicht
In einer UND-Matrix sind alle Eingänge horizontal und jeder Leitung wird ein normales und invertiertes Signal zugeführt. In der ODER-Matrix sind alle Leitungen horizontal und mit vertikalen Linien verbunden, die als Zwischenzeiten bezeichnet werden.
Nachdem wir die Punkte untersucht haben, können wir die Intervalle dekodieren, indem wir die Logik "UND" für alle vertikalen Linien in der UND-Matrix ausführen. Beispiel:
p0 = CHAREN & HIRAM & BA & !MS3 & GAME & RW & AEC & A12 & !A13 & A14 & A15
Für Stifte nehmen wir für jeden Stift eine horizontale Linie und kombinieren sie mit "oder".
SDEN = p42 | p43 | p66 | p69
So erhalten wir den gesamten Satz logischer Gleichungen. Hurra!
Ausgangsstufe
Kehren wir zum vollständigen Foto des Kristalls zurück - jetzt haben wir alles außer dem Rechteck, das auf dem Ausgangsweg mit einem Fragezeichen markiert ist.
Wenn wir uns die Fotos mit höherer Auflösung dieses Bereichs ansehen, sehen wir ähnliche Muster für jeden Stift. In allen bis auf zwei Fällen wird diese Struktur umgangen und der Ausgang der ODER-Matrix geht direkt zum Ausgangspin. Dies gilt jedoch nicht für zwei Kontakte:
DWEund CASENB.
DWEWird das Write Enable-Signal an die DRAM-Chips des Hauptsystems angelegt, und CASENB leitet das CAS-Signal an den RAM weiter. Diese beiden Signale werden irgendwie von diesen Ausgangsgatterstrukturen verarbeitet, also musste ich diesen Block zurückentwickeln.

Auslassblock mit Metallschicht

Ausgangsblocksubstrat
Nachdem ich viel Zeit damit verbracht hatte, Informationen über das Design und die Herstellung von Siliziumchips zu lesen und auch viele Versuche zu unternehmen, konnte ich eine logisch aussehende Schaltung erstellen. Ich werde hier nicht näher auf den gesamten Prozess eingehen, sondern ihn später dokumentieren und veröffentlichen. An dieser Stelle möchte ich mich auch bei Frank Wolfe für seine Hilfe bedanken , wenn möglich sein Projekt unterstützen!

Ausgangsblockschaltung
Wenn Sie etwas weiter schauen, wird diese Schaltung mit Stiften verwendet
DWEund CASENBverwandelt sie in einen normalen D-Latch. Der Latch, der dies ermöglicht, wird in der PLA durch ein Zeilenpaar im OR dargestellt.
Ergebnis
So haben wir das Endergebnis erhalten und können nun den vollständigen HDL-Code für den PLA-Chip des C128-Computers schreiben. Dafür werde ich Verilog verwenden. Erwägen. dass dies mein erster Verilog-Code ist, daher ist er möglicherweise nicht optimal. Die Verwendung eines D-Latch für einen Pin wird in Verilog im Allgemeinen als schlechte Praxis angesehen, aber in diesem Fall repliziere ich die Logik und Funktionalität des fertigen Chips.
Ich habe es nach Möglichkeit überprüft, aber wenn mir etwas fehlt, melden Sie es bitte!
Im Gegensatz zum PLA C64 kann der PLA C128-Chip aufgrund vorhandener Ausgangs-Latches nicht durch ein EPROM oder ähnliches ersetzt werden.
module pla_8721(
input rom_256,
input va14,
input charen,
input hiram,
input loram,
input ba,
input vma5,
input vma4,
input ms0,
input ms1,
input ms2,
input ms3,
input z80io,
input z80en,
input exrom,
input game,
input rw,
input aec,
input dmaack,
input vicfix,
input a10,
input a11,
input a12,
input a13,
input a14,
input a15,
input clk,
output sden,
output roml,
output romh,
output clrbnk,
output from,
output rom4,
output rom3,
output rom2,
output rom1,
output iocs,
output dir,
output reg dwe,
output reg casenb,
output vic,
output ioacc,
output gwe,
output colram,
output charom);
wire p0;
wire p1;
wire p2;
wire p3;
wire p4;
wire p5;
wire p6;
wire p7;
wire p8;
wire p9;
wire p10;
wire p11;
wire p12;
wire p13;
wire p14;
wire p15;
wire p16;
wire p17;
wire p18;
wire p19;
wire p20;
wire p21;
wire p22;
wire p23;
wire p24;
wire p25;
wire p26;
wire p27;
wire p28;
wire p29;
wire p30;
wire p31;
wire p32;
wire p33;
wire p34;
wire p35;
wire p36;
wire p37;
wire p38;
wire p39;
wire p40;
wire p41;
wire p42;
wire p43;
wire p44;
wire p45;
wire p46;
wire p47;
wire p48;
wire p49;
wire p50;
wire p51;
wire p52;
wire p53;
wire p54;
wire p55;
wire p56;
wire p57;
wire p58;
wire p59;
wire p60;
wire p61;
wire p62;
wire p63;
wire p64;
wire p65;
wire p66;
wire p67;
wire p68;
wire p69;
wire p70;
wire p71;
wire p72;
wire p73;
wire p74;
wire p75;
wire p76;
wire p77;
wire p78;
wire p79;
wire p80;
wire p81;
wire p82;
wire p83;
wire p84;
wire p85;
wire p86;
wire p87;
wire p88;
wire p89;
wire casenb_int;
wire casenb_latch;
/* Product terms */
assign p0 = charen & hiram & ba & !ms3 & game & rw & aec & a12 & !a13 & a14 & a15;
assign p1 = charen & hiram & !ms3 & game & !rw & aec & a12 & !a13 & a14 & a15;
assign p2 = charen & loram & ba & !ms3 & game & rw & aec & a12 & !a13 & a14 & a15;
assign p3 = charen & loram & !ms3 & game & !rw & aec & a12 & !a13 & a14 & a15;
assign p4 = charen & hiram & ba & !ms3 & !exrom & !game & rw & aec & a12 & !a13 & a14 & a15;
assign p5 = charen & hiram & !ms3 & !exrom & !game & !rw & aec & a12 & !a13 & a14 & a15;
assign p6 = charen & loram & ba & !ms3 & !exrom & !game & rw & aec & a12 & !a13 & a14 & a15;
assign p7 = charen & loram & !ms3 & !exrom & !game & !rw & aec & a12 & !a13 & a14 & a15;
assign p8 = ba & !ms3 & exrom & !game & rw & aec & a13 & !a13 & a14 & a15;
assign p9 = !ms3 & exrom & !game & rw & aec & a12 & !a13 & a14 & a15;
assign p10 = ba & !ms2 & ms3 & rw & aec & a12 & !a13 & a14 & a15;
assign p11 = !ms2 & ms3 & !rw & aec & a12 & !a13 & a14 & a15;
assign p12 = charen & hiram & ba & !ms3 & game & rw & aec & !a10 & !a11 & a12 & !a13 & a14 & a15;
assign p13 = charen & hiram & !ms3 & game & !rw & aec & !a10 & !a11 & a12 & !a13 & a14 & a15;
assign p14 = charen & loram & ba & !ms3 & game & rw & aec & !a10 & !a11 & a12 & !a13 & a14 & a15;
assign p15 = charen & loram & !ms3 & game & !rw & aec & !a10 & !a11 & a12 & !a13 & a14 & a15;
assign p16 = charen & hiram & ba & !ms3 & !exrom & !game & rw & aec & !a10 & !a11 & a12 & !a13 & a14 & a15;
assign p17 = charen & hiram & !ms3 & !exrom & !game & !rw & aec & !a10 & !a11 & a12 & !a13 & a14 & a15;
assign p18 = charen & loram & ba & !ms3 & !exrom & !game & rw & aec & !a10 & !a11 & a12 & !a13 & a14 & a15;
assign p19 = charen & loram & !ms3 & !exrom & !game & !rw & aec & !a10 & !a11 & a12 & !a13 & a14 & a15;
assign p20 = ba & !ms3 & exrom & !game & rw & aec & !a10 & !a11 & a12 & !a13 & a14 & a15;
assign p21 = !ms3 & exrom & !game & rw & aec & !a10 & !a11 & a12 & !a13 & a14 & a15;
assign p22 = ba & !ms2 & ms3 & rw & aec & !a10 & !a11 & a12 & !a13 & a14 & a15;
assign p23 = !ms2 & ms3 & !rw & aec & !a10 & !a11 & a12 & !a13 & a14 & a15;
assign p24 = charen & hiram & ba & !ms3 & game & rw & aec & !a10 & a11 & a12 & !a13 & a14 & a15;
assign p25 = charen & hiram & !ms3 & game & !rw & aec & !a10 & a11 & a12 & !a13 & a14 & a15;
assign p26 = charen & loram & ba & !ms3 & game & rw & aec & !a10 & a11 & a12 & !a13 & a14 & a15;
assign p27 = charen & loram & !ms3 & game & !rw & aec & !a10 & a11 & a12 & !a13 & a14 & a15;
assign p28 = charen & hiram & ba & !ms3 & !exrom & !game & rw & aec & !a10 & a11 & a12 & !a13 & a14 & a15;
assign p29 = charen & hiram & !ms3 & !exrom & !game & !rw & aec & !a10 & a11 & a12 & !a13 & a14 & a15;
assign p30 = charen & loram & ba & !ms3 & !exrom & !game & rw & aec & !a10 & a11 & a12 & !a13 & a14 & a15;
assign p31 = charen & loram & !ms3 & !exrom & !game & !rw & aec & !a10 & a11 & a12 & !a13 & a15;
assign p32 = ba & !ms3 & exrom & !game & rw & aec & !a10 & a11 & a12 & !a13 & a14 & a15;
assign p33 = !ms3 & exrom & !game & rw & aec & !a10 & a11 & a12 & !a13 & a15;
assign p34 = ba & !ms2 & ms3 & rw & aec & !a10 & a11 & a12 & !a13 & a14 & a15;
assign p35 = !ms2 & ms3 & !rw & aec & !a10 & a11 & a12 & !a13 & a15;
assign p36 = !aec;
assign p37 = !rw & aec & !a10 & a11 & a12 & !a13 & a15;
assign p39 = !charen & hiram & !ms3 & game & rw & aec & a12 & !a13 & a14 & a15;
assign p40 = !charen & loram & !ms3 & game & rw & aec & a12 & !a13 & a14 & a15;
assign p41 = !charen & hiram & !ms3 & !exrom & !game & rw & aec & a12 & !a13 & a14 & a15;
assign p42 = va14 & !vma5 & vma4 & !ms3 & game & !aec;
assign p43 = va14 & !vma5 & vma4 & !ms3 & !exrom & !game & !aec;
assign p44 = !ms0 & !ms1 & ms2 &ms3 & z80en & rw & aec & a12 & !a13 & a14 & a15;
assign p45 = hiram & loram & !ms3 & !exrom & rw & aec & !a13 & !a14 & a15;
assign p46 = !ms3 & exrom & !game & aec & !a13 & !a14 & a15;
assign p47 = ms0 & !ms1 & ms3 & exrom & !game & aec & !a14 & a15;
assign p48 = !ms0 & ms1 & ms3 & aec & !a14 & a15;
assign p49 = hiram & !ms3 & !exrom & !game & aec & a13 & !a14 & a15;
assign p50 = ms3 & exrom & !game & aec & a13 & !a14 & a15;
assign p51 = vma5 & vma4 & !ms3 & exrom & !game & !aec;
assign p52 = ms0 & !ms1 & ms3 & rw & aec & !a12 & !a13 & a14 & a15;
assign p53 = !ms0 & ms1 & ms3 & rw & aec & !a12 & !a13 & a14 & a15;
assign p54 = !ms0 & !ms1 & ms3 & rw & aec & !a12 & !a13 & a14 & a15;
assign p55 = !ms0 & !ms1 & z80io & !z80en & rw & aec & !a12 & !a13 & !a14 & !a15;
assign p56 = !ms0 & !ms1 & ms3 & rw & aec & !a14 & a15;
assign p57 = !ms0 & !ms1 & ms3 & rw & aec & a14 & !a15;
assign p58 = hiram & !ms3 & game & rw & aec & a13 & a14 & a15;
assign p59 = hiram & !ms3 & !exrom & !game & rw & aec & a13 & a14 & a15;
assign p60 = hiram & loram & !ms3 & game & rw & aec & a13 & !a14 & a15;
assign p61 = !z80io & !z80en & aec & !a10 & !a11 & !a13 & a14 & a15;
assign p62 = !z80io & !z80en & aec & a12 & !a13 & a14 & a15;
assign p63 = !z80io & !z80en & aec & !a10 & a11 & a12 & !a13 & a14 & a15;
assign p64 = !rw & aec;
assign p65 = rw & aec;
assign p66 = !aec;
assign p67 = !ms2 & !z80en & aec & !a10 & !a11 & a12 & !a13 & !a14 & !a15;
assign p68 = !ms2 & !z80en & !rw & aec & !a10 & !a11 & a12 & !a13 & !a14 & !a15;
assign p69 = !charen & !vma5 & vma4 & ms3 & aec;
assign p70 = !rom_256 & !ms0 & !ms1 & ms3 & rw & aec & a14 & !a15;
assign p71 = !rom_256 & !ms0 & !ms1 & ms3 & rw & aec & !a12 & !a13 & a14 & a15;
assign p72 = !rom_256 & !ms0 & !ms1 & z80io & !z80en & rw & aec & !a12 & !a13 & !a14 & !a15;
assign p73 = clk;
assign p74 = rw & !aec & vicfix;
assign p75 = !ms0 & !ms1 & ms3 & rw & aec & a13 & a14 & a15;
assign p76 = !rom_256 & !ms0 & !ms1 & ms3 & rw & aec & a13 & a14 & a15;
assign p77 = !ms0 & ms1 & ms3 & rw & aec & a13 & a14 & a15;
assign p78 = !ms0 & ms1 & ms2 & ms3 & rw & aec & a12 & !a13 & a14 & a15;
assign p79 = ms0 & !ms1 & ms3 & rw & aec & a13 & a14 & a15;
assign p80 = ms0 & !ms1 & ms2 & ms3 & rw & aec & a12 & !a13 & a14 & a15;
assign p81 = !ms3 & exrom & !game & aec & a12 & !a14 & !a15;
assign p82 = !ms3 & exrom & !game & aec & a13 & !a14;
assign p83 = !ms3 & exrom & !game & aec & a14;
assign p84 = !ms3 & exrom & !game & aec & !a12 & !a13 & a14 & a15;
assign p85 = !loram & ms3 & aec;
assign p86 = !hiram & ms3 & !aec;
/* outputs */
assign sden = p42 || p43 || p66 || p69;
assign roml = p45 || p46 || p47;
assign romh = p49 || p50 || p51 || p52 || p79 || p80;
assign clrbnk = p85 || p86;
assign from = p48 || p53 || p77 || p78;
assign rom4 = p54 || p55 || p75;
assign rom3 = p56 || p70;
assign rom2 = p57;
assign rom1 = p58 || p59 || p60 || p71 || p71 || p76;
assign iocs = p0 || p1 || p2 || p3 || p4 || p5 || p6 || p7 || p8 || p9 || p10 || p11 || p62;
assign dir = p12 || p14 || p16 || p18 || p20 || p22 || p24 || p26 || p28 || p30 || p32 || p34 || p39 || p40 || p41 || p44 || p65;
assign vic = p12 || p13 || p14 || p15 || p16 || p17 || p18 || p19 || p20 || p21 || p22 || p23 || p61;
assign ioacc = p0 || p1 || p2 || p3 || p4 || p5 || p6 || p7 || p8 || p9 || p10 || p11 ||
p12 || p13 || p14 || p15 || p16 || p17 || p18 || p19 || p20 || p21 || p22 || p61 || p62;
assign gwe = p37;
assign colram = p24 || p25 || p26 || p27 || p28 || p29 || p30 || p31 || p32 || p33 || p34 || p35 || p36 || p63 || p67;
assign charrom = p39 || p40 || p41 || p42 || p43 || p44 || p69;
assign casenb_latch = p73 || p74;
assign casenb_int = p0 || p1 || p2 || p3 || p4 || p5 || p6 || p7 || p8 || p9
|| p10 || p11 || p12 || p13 || p14 || p15 || p16 || p17 || p18 || p19
|| p20 || p21 || p22 || p23 || p39 || p40 || p41 || p42 || p43 || p44
|| p45 || p46 || p47 || p48 || p49 || p50 || p51 || p52 || p53 || p54
|| p55 || p56 || p57 || p58 || p59 || p60 || p61 || p62 || p63 || p67
|| p69 || p70 || p71 || p72 || p75 || p76 || p77 || p78 || p79 || p80
|| p81 || p82 || p83 || p84;
/* Latched outputs */
always @ (clk or p64)
if (clk)
dwe <= p64;
always @ (casenb_latch or casenb_int)
if (casenb_latch)
casenb <= casenb_int;
endmodule
Was weiter
Der nächste analysierte Chip wird der C128-Computer-MMU-Chip sein, dessen Bearbeitung viel länger dauern wird, da es sich nicht nur um gewöhnliche PLA handelt.
Siehe auch: