Home Site Map Sonstige Aufsätze Weblog und Gequassel counter

Web Log Teil 429: 17.6.2015 - 21.6.2015

17.6.2015: Intel und Stalin

Ja an Stalin wurde ich bei der Recherche für meinen neuesten Artikel erinnert. Nun ist ja Stalin für allerlei Scheußlichkeiten bekannt, doch ich meine etwas besonderes, das war das man unter seiner Zeit gerne die Geschichte zurecht gebügelt hat. Da gab es Photographien bei denen unter Stalin unbeliebte Personen herausretuschiert wurden, Manchmal amateurhaft, so fehlten die Köpfe aber die Füße waren noch zu sehen. Verzichten konnte man auf die Fotos nicht den es waren meistens welche wo auch Lenin drauf war. Stalin selbst sorgte dafür dass seine Rolle während der Oktoberrevolution (die eine eher kleine war) hervorgehoben wurde. So bekam er ein Schauspieler der ihm ähnlich sah eine Rolle in einem Film von Eisenstein wo das Winterpalais gestürmt wurde - in Wirklichkeit war Stalin da nie dabei.

Leute aus der Geschichte zu tilgen gab es öfters. Im alten Ägypten hat man die Namenskartuschen aus den Gräbern herausgemeiselt, wonach nach ihrer religiösen Vorstellung auch die Seelen im Jenseits vernichtet wurden. Doch was hat das mit Intel zu tun?

Nun ich verfasste einen Artikel über den 4004, gemeinhin der erste kommerziell verfügbare Mikroprozessor. Da kam ich auch auf die Webseite  http://www.intel4004.com/index.htm. Die Webseite enthält einige wichtige Informationen, es ist aber eines unübersehbar. Sie will Federico Faggins Rolle bei der Entwicklung des Intel 4004 zurechtrücken, die nach Ansicht des Autors (vieles, vor allem persönliche Dokumente spricht dafür das es Faggin selbst ist) von Intel falsch dargestellt wird.

Nun gibt es in der Tat ein Intel Museum und dort wird ganz groß Ted Hoff als der Erfinder des 4004 gefeiert. Nach Protest von Faggin steht dort auch sein Foto mit ein paar Zeilen, aber in der Größe nicht vergleichbar.  Okay, wenn man das nicht besucht, wie es wohl bei den meisten Internetnutzern der Fall ist, entgeht einem das. Intels Anniversary Webseite habe ich auch nur überflogen, weil das meiste in Videos steckt - ich habe lieber Texte die ich mehrmals durchlesen aber auch schnell überfliegen kann und die nicht wie ein Video meine Aufmerksamkeit dauernd erfordern.

Wenn es so ist und daran zweifele ich nicht, dann ist das schon etwas peinlich. Zum einen zeigt man Ted Hoff mit dem 8080 Chip, an dem er überhaupt keinen Anteil hatte und gibt an das wäre der 4004 (leicht daran zu unterscheiden dass der 4004 16 Pins hat und der 8080 hat 40 Pins). Noch dämlicher ist es jemanden totzuschweigen von dem allgemein bekannt ist das er die wichtigste Rolle in den Projekt spielte, vor allem wenn man Die- und Maskenfotos präsentiert und dort findet man die Initialen dessen der die Masken fast alleine gezeichnet hat - FF für Federico Faggin.

Bei Intel soll man wohl beschlossen haben Faggin totzuschweigen nachdem er 1974 die Firma verließ, zusammen mit Shima Zliog gründete. Vor allem weil der dann produzierte Z80 Prozessor den 8080 bald vom Markt verdrängte. Genutzt hat es wenig. Selbst in der Wikipedia steht die Story wahrheitsgemäß drin.

Zeit für alle die es noch nicht wissen: die Story als Kurzfassung hier wiederzugeben. 1969 bekommt Intel von der japanischen Busicomm den Auftrag für einen Tischrechner mit Drucker die Schaltung zu entwerfen. Beauftragt wird damit Ted Hoff. Er löst sich von dem vorgeschlagenen Entwurf der vorsah 16 Ziffern parallel zu addieren und ging über zu einer Architektur in der eine CPU ein Programm ausführt und Ziffer für Ziffer separat bearbeitet. Dieser Entwurf braucht viel weniger Schaltkreise und dabei entsteht der Mikroprozessor. Das wird nach längeren Diskussionen von Busicomm akzeptiert. Doch dann muss Hoff sich um die Abteilung für Speicherbausteine kümmern. Stan Mazor der bisher auch an dem Projekt mitarbeitete, hört nach einem weiteren Monat auch auf und das ganze bleibt liegen für mehr als ein halbes Jahr.

Am 3.4.1970 wird Faggin eingestellt um das Projekt "abzuschließen" - das ist höflich formuliert eine Untertreibung: was steht ist die Architektur des Systems, der Befehlssatz, die Register im Prinzip alles was man als Softwareentwickler wissen muss (Mazor war nur für die Programmierung zuständig damit der 4004 später auch wie ein Tischrechner funktionierte). Doch wie der Chip aufgebaut ist, also die eigentliche Arbeit, das war noch nicht gemacht. Faggin wurde eingestellt weil er bei Fairchild die Silcongate Technologie entwickelt hatte, die in diesem Prozessor erstmals zum Einsatz kommen soll. Mit der bisher genutzten Technologie mit Metall-Kontrollgatern war der Chip nicht zu realisieren - sie braucht doppelt so viel Platz pro Transistor und die Abwärme ist sogar viermal höher.

Faggin bekommt bald Besuch von Shima, der sich nach dem fortschritt erkundigen will und innerhalb einer Stunde sieht das es seit seinem letzten Besuch im September keinen Fortschritt gibt. Faggin setzt sich dann persönlich dafür ein, das der Zeitplan eingehalten ist. Da seine Frau zu dieser Zeit in Italien ist, arbeitet er bis Mitternacht und zeichnet schließlich sogar die Masken, eine Tätigkeit die sonst angestellte Zeichner übernehmen. Shima wird für ein halbes Jahr an Intel ausgeliehen und assentiert ihm. Als Busicomm in finanzielle Schwierigkeiten kommt, heuert er bei Intel ganz an. Bei intel4004.com findet man noch zahlreiche Details so dass Faggin eine Lösung erarbeitete wie die CPU sauber initialisiert werden konnte, obwohl es keinen Resetpin gab und die dafür nötige Schaltung bei dem bei Intel üblichen Prozess nicht einsetzbar war. Bis Dezember sind alle vier Chips die zum Drucker gehören konstruiert, eine enorme Leistung, bedenkt man dass vorher ein Jahr lang das Projekt nur bis zur Architektur kam. In die Produktion gehen sie nach Erstellung der Masken und vielen Tests im Juli bis Oktober 1971.

Soweit die Intel 4004 Story. Sicher ist Faggin gekränkt. Wäre ich auch. Selbst im Computer History Museum gibt es zwei "Oral History" Dokumente über den Intel 4004. Ein kurzes nur mit Hoff/Mazor und ein längeres bei dem auch Shima und Faggin dabei sind. Aber ich denke seine Rolle ist allgemein bekannt.

Wenn ich in Faggins Haut wäre würde ich es gelassener sehen. Denn die Geschichte geht ja noch weiter. Faggin entwickelt den 8080 Prozessor, den vierten Prozessor den Intel auf den Markt bringt. Vor ihm kam der 4004, der 8008 der viele krude Designentscheidungen des 4004 ebenfalls inne hat und der 4040 als verbesserter 4004. Alle verkauften sich zwar, aber nicht toll. Die Stückzahlen lagen im Bereich von Hunderttausenden. Faggin konstruiert den 8080 und ist auch dann wieder für viele Details verantwortlich. Der 8080 bringt das Kunststück fertig, kompatibel zum 8008 zu sein, aber vielseitiger einsetzbar und zehn bis zwanzigmal schneller. Mit ihm beginnt die Mikrocomputerrevolution. Innerhalb weniger Monate verkauft Intel mehr 8080 als von allen vorherigen Prozessoren in 4 Jahren zusammen verkauft wurden. Als er befördert wird und von der direkten Konstruktion entfernt verlässt er Intel macht mit Zilog seine eigene Firma auf und bringt nach 15 Monaten einen neuen Prozessor auf den Markt. Der Z80 ist kompatibel zum 8080 aber stark verbessert. Er hat viele neue Befehle, braucht nur eine Versorgungsspannung und unterstützt dynamische RAMs für die man beim 8080 eine eigene Schaltung aufbauen musste. Er steckte in vielen populären Heimcomputern wie der Armstrad/Joyce Serie, den Sinclair ZX81 und Spektrum, dem TRS-80 etc. Mehr als 2 Milliarden Z80 wurden gebaut und er wird heute noch hergestellt.

Wenn ich in Faggins Haut wäre ich stolz auf den 8080 und Z80. Beide Prozessoren sind heute dafür verantwortlich dass der Computer in unser Leben eingezogen ist. Der 8080 steckte im ersten PC, dem Altair. Mit Rechnern auf Basis des Z80 haben viele ihre ersten Computererfahrungen gemacht. Dagegen war die Fertigstellung des 4004 Designs, das nur durch Zufall der erste kommerziell erhältliche Mikroprozessor wurde doch eher belanglos. Was zählt mehr: ein Erfolg oder durch Zufall der erste zu sein, auch wenn keiner das kauft was man entwickelt? Wie Faggin auf der Webseite selbst schreibt, wusste man damals das man mit Silicon-Gate MOS die 2000 Transistoren die man für eine einfache CPU auf einem Chip unterbringen kann. Intel war zufälligerweise die erste Firma. Texas Instruments hatte schon vorher den Mikroprozessor patentieren lassen, hing aber mit der Umwertung hinterher. Später war sie aber viel erfolgreicher im Marketing. Ihr TMS 1000 war über Jahre einer der meist eingesetzten Mikroprozessoren.

Das gilt auch für Intel. Anstatt auf den zufällig als erster herausgebrachten MP stolz zu sein oder auf den 8086 (noch so ein verkorkstes Intel Design) der rein zufällig weil IBM ihn als Prozessor für ihr Model 5150 erkoren hat die heutige Marktmacht von Intel ermöglichte wäre ich stolz auf wirkliche Leistungen. Das war z.B. die Erfindung des EPROMS, das die Softwareproduktion revolutioniert hat oder wie man nach dem extrem energiehungrigen Pentium 4 mit der Core Mikroarchitektur wieder die technologische Führerschaft erlangte. Aber Stalin-Methoden?

17.6.2015: Buchkritik H.G. Wells: Die Zeitmaschine

Heute mal eine Buchkritik zu einem "ganz neuen" Buch. Es ist gerade mal lächerliche 120 Jahre alt. Aber da ich es gerade noch mal durchgelesen habe und mir dazu doch einige einfällt trotzdem eine Buchkritik. Es ist H.G. Wells Roman die Die Zeitmaschine . Mit ihm verbindet mich die Erinnerung an dem frühesten Film, den ich im Fernsehen sah. Wie alt ich war weiß ich nicht mehr, aber nicht sehr alt. Wir waren als Familie in unserem Ferienhaus und machten nach dem Mittagessen einen Spaziergang. So um drei oder vier sollte eben jener Film im Fernsehen laufen und es sah so aus, dass wir nicht rechtzeitig heimkommen würden. Ich lief voraus, hängte bald den Rest der Familie ab und muss irgendwo aber falsch abgebogen sein. Schließlich fragte ich jemand der campierte nach dem Weg und der war nett genug mich zu unserem Ferienhaus zu chauffieren. Der Film hatte schon angefangen und ich war auch ganz gebannt bis der Rest meiner Familie zurückkam, die sich Sorgen machte und es ein ziemliches Donnerwetter gab das nicht besser wurde dadurch dass ich mich hatte chauffieren lassen. Damals gab es bei Aktenzeichen XY eine Menge Fälle von Morden bei Anhaltern ....

Aber kommen wir zu dem Buch. Das Buch hat einige Unterschiede zu den beiden Verfilmungen. Die sind beide im Kern eine Liebes- und Actiongeschichte. Das Buch ist in der Hinsicht langweiliger aber es ist gesellschaftskritischer. Der Roman wird geschrieben von einem der Gäste des Zeitreisenden der niemals mit dem Namen genannt wird. Er gibt die Ereignisse wieder, die er als Gast sah und dann die die der Zeitreisende erzählt hat. Zuerst sind beide Teile noch identisch. Der Zeitreisende führt logisch aus, das wir uns in allen drei Raumdimensionen bewegen können, nicht aber in der Zeitdimension. Das ist im Roman noch logischer als heute. Die allgemeine Relativitätstheorie ist noch unbekannt und Flugzeuge auch nicht. So verweist er als Beispiel dafür dass der Mensch sich nicht in der Höhe bewegen kann - zumindest nicht ohne technische Hilfsmittel und die Zeitmaschine wäre eben ein solches Hilfsmittel für die vierte Dimension.

Er probiert nachdem er ein Modell in die Zukunft schickte, sie selbst aus und gelangt anders als im Film direkt ins Jahr 802701. Im Film fand ich die Abweichung wo er im ersten Weltkrieg, zweiten Weltkrieg und kurz darauf am 18.8.1966 vor einem Atomkrieg Stopps macht beeindruckend - ich wusste ja schon damals das der Roman 1895 geschrieben war und das war doch eine enorme Leistung diese beiden Kriege vorherzusehen (den Atomkrieg hat es ja gottseidank nicht gegeben).

Im Jahre 802.701 beschreibt der Zeitreisende dann seine Beobachtungen. Ergänzt durch die Thesen die der zur Erklärung was passiert ist aufstellt und das ist die Gesellschaftskritik. Die Elois sind zierlich, werden vor allem aber als naiv, mit dem Gemüt eines Kleinkindes beschrieben. Sie sind nur an Vergnügen interessiert. Scheinen kein Interesse an Forschung zu haben, ihre Sprache ist einfach und hat nur zwei Worte pro Satz und sie sind nicht sehr ausdauernd. Er sieht dies als ein Mischmasch von darwinscher Evolutionslehre (die damals noch umstritten war) und Gesellschaftskritik als eine Folge der idealen Gesellschaft. Die hat irgendwann alle Seuchen ausgerottet, es gibt keine Notwendigkeit zu arbeiten, so ernähren sich die Eloi nur von Früchten. Damit erklärt er auch die Veränderung des Körperbaus. Man müsste nicht mehr stark sein wenn man nicht arbeiten müsste. Ohne Eifersucht und andere Gefühle die die Eloi auch nicht kennen würden sich die Geschlechter angleichen weil der schönere oder stärkere keinen evolutionären Vorteil hätte. Als Kritik nennt er aber die Offensichtlichkeit des Verfalls - die Eloi haben eine primitive Sprache, kein Interesse an ihrer Umwelt und es gibt überall beeindruckende Bauten die aber im Zerfall begriffen sind oder überwuchert werden.  Am nächsten Morgen ist seine Zeitmaschine verschwunden. Nach Spuren zu beurteilen in das Innere einer Sphinx hineingezogen. Er kommt nicht mehr an sie heran.

Dann bemerkt er des Nachts die Morlocks und baut sie in seine Thesen ein und kann einige Ungereimtheiten lösen. So die überall vorhandenen "Brunnen" und Kamine aus denen Geräusche kommen und das die Eloi Kleidung und Sandalen haben aber keine herstellen - das sie überall gleich angezogen sind erklärt er mit nur einem Wort: "Kommunismus". Das ist angesichts uniformer Chinesen in Mao Kleidung eine doch sehr gute Vorhersage. Er sieht auch darin eine Folge der Verhältnisse von 1895: Es gibt die Reichen und die armen Arbeiter und man beginnt Dinge unter die erde zu verlegen damit sie keinen Platz oben wegnehmen wie Eisenbahntunnel. Auch sind schon damals Distrikte für nur bestimmte Personen zugelassen und andere gesperrt. Fortgesetzt bedeutet das das man irgendwann die gesamte Industrie samt Arbeiter unter die Erde verbringt und sie ebenfalls durch evolutionäre Anpassung zu Höhlenwesen werden. "Lebt denn nicht heute ein Arbeiter im Londoner East-End unter so unnatürlichen Bedingungen das er nahezu vom natürlichen Leben an der Erdoberfläche ausgeschlossen ist?". Starke Kritik an den Zeitverhältnissen von 1895. Sie müssen den Eloi dienen die sich einem Leben ohne Arbeit und Verantwortung hingeben.

Später klettert er in einen der Brunnen wird angegriffen und kann wieder entkommen. Er weiß nun das die Morlocks Maschinen unten betreiben, Menschen essen und kann auch die Angst der Eloi vor mondlosen Nächten deuten. Die Morlocks aka Arbeiter haben die Gesellschaftsordnung umgedreht und halten nun die Eloi aka Bürgerliche als Vieh. Sie kleiden sie und holen in den Nächten ihre Mahlzeit. Anders als im Film müssen diese aber nicht zum Schlechten angelockt durch eine Luftsierene kommen.

Der Zeitreisende will sich wappnen, setzt seine Hoffnung auf ein großes Gebäude in der Ferne. Vielleicht ist er dort nachts vor den Morlocks sicher. er erreicht es findet dort Streichhölzer, seine eigenen hat er aufgebraucht um die Eloi zu beeindrucken und eine Eisenstange als Waffe. Es handelt sich um ein Museum. Doch auch dort sind die Morlocks. So macht er sich Weena - die er auch im Roman gerettet hat und die ihn seitdem begleitet, vergleichbar einem Hund den man das Leben redet. Von Liebesgeschichte aber keine Rede. Die Gefühle zu Weena dürften nach der Beschreibung auch mehr denen zu einem anhänglichen Haustier vergleichbar sein. auf den Rückweg. Nachts überfallen ihn die Morlocks, nachdem er zwar ein Lagerfeuer anzündet, es aber dann erlischt und er übernächtigt eingeschlafen ist. Er kann sich wehren, doch Weena ist verschwunden und die Morlocks hätten ihn wohl überwältigt wenn er nicht in dem Urwald (ohne irdische Forstwirtschaft) einen Waldbrand ausgelöst hätte. Er nimmt an sie ist im Waldbrand umgekommen.

Wieder angelkommen bei seinem Ausgangspunkt sieht er die Türen der Sphinx offen und die Zeitmaschine. Er ahnt die Falle wähnt sich aber mit seinen Streichhölzern gewappnet. Kaum ist er in der Sphinx gehen die Türen auch zu und die Morlocks kommen. Leider stellt er erst jetzt fest dass man die Streichhölzer nur mit Schachtel anzünden kann. Er kann mit Müh und Not die Zeitmaschine noch starten und macht einen Sprung - 30 Millionen Jahre in der Zukunft. Die Erde hat nun keine Rotation mehr. Die rote viel größere Sonne beleuchtet einen Strand auf dem sich Krabben von Tischgröße tummeln. Etwas später wird es kühler, das Meer friert zu und es gibt eine Sonnenfinsternis und das einzige Leben ist eine Art Kopffüßler, der sich langsam an Land bewegt.

Der Zeitreisende kehrt zurück und der Gast schreibt noch das er erneut nach dem Essen aufbricht, lässt aber das Ziel offen, wobei er aber spekuliert das er in die Vergangenheit reist.

Kurzum, das ganze ist doch ziemlich unterschiedlich von den Verfilmungen und die Gesellschaftskritik - was passieren könnte wenn die Zustände von 1895 nicht sich ändern sind offensichtlich. Damit behielt er recht. Nach 1918 ging es Adeligen und Reichen in Russland nicht so arg gut wie vorher.

Für mich interessant ist einiges was er an naturwissenschaftlichen Erklärungen bringt. Die sind manchmal richtig manchmal falsch. So wird die Erde immer langsamer rotieren. Sie hat sich mal in wenigen Stunden um die eigene Achse gedreht. Nur wird der Mond dabei sich von der Erde entfernen und dann muss in Zukunft die Sonne kleiner sein. Sie wird aber zuerst größer und röter - eine richtige Vorhersage, Genauso wie das sie stärker scheint und wenn sie mal zu einem weißen Zwerg wird wird sie kühler. Nur die Begründung ist falsch. Da man die Kernfusion noch nicht kennt nahm man an die Sonne müsste laufend schrumpfen sie verbrennt ja ihren Brennstoff sehr rasch. Das temporäre vergrößern begründet er mit einem der inneren Planeten der auf die Sonne fiel und so weiteren Brennstoff liefert. In Wirklichkeit wird die erde den Übergang ins Riesenstadium nicht überleben und das ist auch nicht in 30 Millionen Jahren sondern eher in 3 Milliarden. Damals kannte man aber nur Kohle als Brennstoff und damit konnte die Sonne noch nicht so alt sein.

Ein Paradoxon ist das alles im Verfall ist, überwuchert wird und es trotzdem die Früchte gibt. Nach der Begründung des Autors hat man ja sogar Fäulnisprozesse ausgeschaltet, aber warum bleiben dann gerade die fruchtliefernden Pflanzen durchsetzungsfähig. Ohne Kultivierung klappt das heute nicht. Getreide, das hat der Autor erkannt erfordert Arbeit, also müssen die Eloi sich von Früchten ernähren. Es steht nirgendwo im Buch dass sie von den Morlocks gefüttert werden - wie den auch wenn die Früchte doch überirdisch wachsen.

Auch das Aussehen der Eloi passt nicht zur Mastviehhypothese. Schon damals wusste man ja dass der Mensch die Evolution steuert. Damaliges Getreide hat nichts mit dem Einkorn von vor 6000 Jahren zu tun und Erdbeeren sind größer als Walderdbeeren und Zuchtäpfel größer als Wildäpfel. Auch bei Tieren gibt es Unterschiede damals wusste man das das Hausschwein vom Wildschwein abstammt - es liefert aber viel mehr Fleisch und wächst schneller und wie weit Züchtung geht zeigt der Vergleich der Hunderassen und des Wolfs. So gesehen sollten die Morlocks dann keine zierlichen Eloi, sondern eher fette Elois züchten.

Der Sinn der Maschinen bleibt auch unerklärt. Die Morlocks tragen keine Kleidung und dass die Morlocks Maschinen betreiben nur um die Eloi damit zu versorgen ist doch dann ziemlich unwahrscheinlich - wer zieht schon seinem Schlachtvieh Kleidung an? Warm genug (es wird eine tropische Fauna beschrieben) scheint es auch so zu sein. Ansonsten gibt es im ganzen Buch keinen Hinweis auf irgend etwas was produziert wird. Aber ein Buch in dem alle nackt sind, das wäre wohl 1895 zu viel des guten gewesen.

Zuletzt: schon am Anfang schickt er ein Modell der Zeitmaschine in die Zukunft - bei den technischen Möglichkeiten von 1895 dürfte aber gerade ein kleines Modell fertigungstechnisch herausfordernder als die eigentliche Maschine sein.

Immerhin setzt der Autor mit dem Zieldatum +802.701 eine Zeitspanne in der sich solche evolutionären Änderungen vollziehen können. Ich selbst habe aber meine Zweifel, dass es im Jahr 802.701 nicht die Menschheit gibt.

21.6.2015: Mein 8/16/24 Bit Prozessor

Heute mal eine Neuigkeit: in der Reihe "Wir wissen es besser als die Industrie" heute ein Konzept für einen Prozessor. Ich habe das mal angefangen für einen 32 Bit Risc Prozessor, aber in der Klasse habe wenig Erfahrung in Bezug auf Befehlssatz. Die habe ich in der 8 und 16 Bit Klasse und inspiriert durch die Unzulänglichkeiten der frühen 8 und 16 Bitter von Intel habe mich an das Design eines eigenen Prozessors gemacht. es sollte ein 8 Bitter sein,  aber es ist ein 16/24 Bitter geworden. Dazu später mehr. Ich will den Artikel auch nutzen ein paar Dinge zu erklären die vielleicht den einen oder anderen interessieren.

Der Grundgedanke war das der Befehlssatz symmetrisch sein Darunter versteht man dass die Register gleichberechtigt sind. Also z.B. jedes Ziel und Quelle einer Rechenoperation sein kann. Das war beim 8080/Z80 nicht der Fall. Alle 8 Bit Rechenoperationen nutzten dort als einen der Operanden den Akkumulator und dort landete auch das Ergebnis. Ein solches "unsymmetrisches" Modell macht dann zahlreiche Kopieraktionen in den Registern notwendig, wenn man das Ergebnis z. B. noch braucht. Wenn man weiß wie Befehle dekodiert werden, dann ergibt sich beim symmetrischen Modell eine Problematik. Nehmen wir 16 Register bei einem unsymmetrischen Prozessor könnte der Opcode des Befehls ADD A,Reg z.B. so aussehen:

0100.RRRR

Das Befehlswort wird eingelesen, der Prozessor stellt anhand der Maske 0100 in den obersten 4 Bit fest das es ein ADD-Befehl ist und in den unteren 4 Bits steht das Quellregister. Für 16 Register braucht man 4 Bits (ein Nibble). Wenn der Befehlssatz symmetrisch ist sähe der Befehl so aus : Add Reg1,Reg2 und man braucht 8 Bits für die Angabe der beiden Quellregister (wenn man die Dreiadressadressierung nimmt sogar 12 Bits). Damit braucht man zwei Byte für einen Befehl. 16 Register ist auch die Zahl die ich vorhergesehen habe.

Nun haben 8 Bitter mit 64 Kbyte maximal adressierbarem Speicher keinen sehr großen Adressbereich. Wer wie ich seine ersten Erfahrungen mit einem 8-Bit Rechner gemacht hat wie einem C64, Armstrad oder Sincailr Spectrum. Der weiß - man kann damit einiges machen. Das geht aber nur weil viele Befehle nur ein Byte lang sind. Hier wären sie nun zwei Byte lang und das ist schon ein großes Manko. der Speicher eines 8-Bit Systems sollte eher größer als kleiner sein. Da kam ich auf die zweite Änderung: es gibt einen getrennten Daten- und Codebereich, ebenso zwei Adressbereiche. Das macht in meinem Fall zwar ein 64-poliges Gehäuse notwendig, aber es gibt einige Vorteile:

In meinem Fall habe ich jeweils 16 Bit Adressen für Daten und Code. Als ich mich an das Aufstellen der Codes machte (siehe unten) stellte sich raus, das die meisten Befehle nun zwei oder drei Bytes lang sind, die Ein-Byte Befehle sind in der Minderheit denn sie kommen nur bei keinem Parameter vor oder nur einem Parameter. Ich habe mich für eine Maßnahme entscheiden die den Prozessor kräftig auf Trab bringt: Anstatt einzelner Bytes sind Befehle immer drei Bytes lang. Benötigt man nur zwei Bytes, dann enthält das letzte Byte den NOP Befehl, das Bitmuster für 0. Die Befehle ohne Parameter die eigentlich in ein Byte reinpassen habe ich in zwei geschoben so sind zum einen viele Opcodes frei und zum anderen ist das Befehlsformat einheitlicher.

Anders als bei anderen Prozessoren hat NOP  aber nicht die Bedeutung einige Takte nichts zu tun, sondern ist ein Füllbyte das bei der Ausführung ignoriert wird also keine Zeitverzögerung generiert, dekodiert werden immer die gesamten 3 Byte. Der Vorteil wird deutlich wenn man sich ansieht, wie viele Takte bestimmte 8080 Befehle haben:

Aktion Mnemonic 8080 Takte 8080 Takte Mein Prozessor
Lade Register mit Register Mov Reg,Reg 4 4
Lade Register mit 16 Bit Konstante LXI Reg 10 4
Lade Register mit 8 Bit Inhalt der Adresse die in einem zweiten Register steht Mov Reg,M 7 nicht verfügbar
Lade Register mit 16 Bit Inhalt der Adresse die in einem zweiten Register steht LHLD 16 7
Lade Adresse mit dem Inhalt des Registers STAX 10 7

Diese Unterschiede kommen dadurch zustande:

Bei einem Befehl der nur interne Register benutzt, gibt es folgenden Taktablauf:

Bei dem zweiten Befehl LXI muss nun nochmals die Adresse auf den Bus gelegt werden, erneut gewartet werden bis die Daten anliegen und dann kann man das erste niedrigwertige Byte holen, nach einem erneuten Anlegen der Adresse+1 wiederholt sich das Spiel. Das sind pro Lesezyklus immer 3 Takte mehr, also zehn Takte.

Pro Lesezyklus eines Bytes oder Schreiben eines Bytes verlängert sich die Ausführung um 3 Takte. Bei meinem Prozessor ist nun aber das ganze Befehlswort schon im Prozessor, er transferiert nicht 8 Bit sondern 24 Bit über den Code-Datenbus. Das bedeutet beim zweiten Befehl entfallen die Zugriffe auf den Speicher. Beim Befehl LHLD braucht man einen weiteren Zugriff, diesmal auf den Code-Datenbus. Da dieser aber 16 Bit auf einmal transferiert, braucht man nur 3 weitere Takte anstatt 6.

Das ist die erste Maßnahme um Geschwindigkeit aufzunehmen. Die zweite ist, dass man bei dem starren Befehlsformat sehr einfach eine Pipeline implementieren kann. Zusammen mit einem kleinen Buffer von zwei Bytes für Daten und sechs für Code kann man die Geschwindigkeit deutlich erhöhen. Dier mal ein kleines Zeitdiagramm für den Fall eines Speicherzugriffs auf den Datenbereich (7 Takte ohne Beschleunigung)

Takt 1 2 3 4: Zyklus 2 beginnt 5 6 7: Zyklus 3 beginnt 8
Buseinheit Code Adresse auf Bus Warte auf Daten Hole Daten Adresse auf Bus Warte Auf Daten Hole Daten Adresse auf Bus Warte auf Daten
Ausführungseinheit       Führe aus     Führe aus  
Buseinheit Daten         Adresse auf Bus Warte auf Daten Hole Daten  

Der allererste Zyklus auf einer neuen Adresse (bei einer Verzweigung oder Sprung dauert immer 4 Takte, der folgende unabhängig von der Anzahl der Speicherzugriffe immer 3 Takte. Ausnahme sind einige Befehle, die intern sehr lange brauchen. Das sind Multiplikation und Division diese profitieren von der integrierten dreistufigen Pipeline. Als man diese im 80286 einführte sank die Ausführungszeit der DIV/Mul Operationen stark, denn die werden intern als Mikroprogramm ausgeführt und brauchen keine Speicherzugriffe außer beim Start so von 80-168 je nach Adressierung bei 8086 auf 17-28 beim 286. Dies war der Grun warum der Norton -Sysinfo einen so hohen wert für IBM-AT kompatible Rechner ausgab, denn dort steckten genau diese Operationen in einer Schleife (ein IBM-AT wurde z.B. 8,8-fach schneller als ein 8088 mit 5 MHz angezeigt anstatt rund 2,5 mal wie es richtig war).

Eine ähnliche Strategie gab es auch beim 8086 der eine 6 Byte Qeue hatte und einen automatischen Fetch d.H. während der Ausführungszeit las der Prozessor schon mal vorrauschauend die nächsten Bytes. Gerade diese Eigenschaft bremste den 8088 stark aus, weil durch den 8-Bit-Bus der Fetch nur noch selten angewandt werden konnte.

Kurzum: Dieser Prozessor ist deutlich schneller als andere 8-Bitter aber auch einfache 16-Bitter wie der 8086. (Würde man synchrones DRAM unterstützen, so wäre die Regelzeit eines Zyklus sogar nur 2 Takte und bei aufeinderfolgendem Code/Daten sogar nur noch 1 Takt.

Adressiert wird der Code und die Daten wortweise. Bei dem Code ist ein Wort 3 Bytes lang wobei drei denkbare Fälle möglich sind:

Drei NOP Bytes (Speicherzustand beim Reset, da der den Code 0 hat).

Nimmt man an das normaler 8 Bit Code im Mittel zwei Byte lang ist (es gibt viele ein-Byte-Befehle aber auch zwei und drei Byte Befehle) so bietet diese Lösung 100% mehr effektiven Speicher obwohl der Codebereich 192 KByte beträgt. Man kann auch Befehle einsparen weil mehr interne Register zur Verfügung stehen und alle mit 16 Bit rechnen.

Als ich den Instruktionssatz aufgestellt hatte, fiel mir was auf - es gibt gar keine 8 Bit Befehle. Alle Register sind, weil sie auch Adressen aufnehmen 16 Bit breit. Die Operationen bisher also auch immer 8 Bit. Wenn ich mir die arithmetischen Operationen ansehe, so sehe ich keine echte Notwendigkeit für 8 Bit. Bei Rechnungen reichen sie meist nicht aus, sie sind wegen dem 16-Bit Datenbus auch nicht schneller. Es gibt noch zwei Operationen bei denen könnte byteweise Operationen notwendig sein. Das eine sind Ein/Ausgabebefehle, das zweite sind Vergleiche, die braucht man z.B. bei einer Stringsuche. Dafür gibt es mehrere Lösungen.

Man könnte einen Befehl Compare Byte / Output / Input Byte einführen. Das zweite ist es bei Ein/Ausgabeoperationen einfach die oberen 8 Bit nicht zu verdrahten und bei Strings hilft einfach eine Konvention: man speichert immer zwei Bytes ab, nutzt also Unicode, das ist allerdings doch sehr platzverschwendend. So wäre ein Compare Byte Befehl nicht schlecht. Den Platz gibt es: im ersten Byte sind noch 164 Opcodes unbelegt, das ist so viel, dass man sogar alle arithmetischen Befehle mit 8 Bit integrieren könnte.

Ansonsten habe ich mich am 8080/Z80 Befehlssatz orientiert. Ich habe nicht alle Befehle übernommen, nur die die ich für sinnvoll hielt. Anstatt dem Befehl PUSH Flags könnte man natürlich auch den EXX Befehl des Z80 nehmen. Ich bin bei dem PUSH geblieben bei so eine Interruptroutine höhere Priorität eine nieder priore unterbrechen kann. Stackoperationen dauernd leider relativ lange. Man könnte auch einen 256 Wort Stack auf dem Chip nutzen. Alternativ, das weiter unten auch ein kleiner Cahce angedacht ist einen externen Speicher der für Cache und Stack gedacht ist.

Weiter ging ich bei den Adressierungsoperationen. Da gibt es ja eine Menge wie ich seit dem Studium der Befehlssätze von MicroVAX, NS32032 und Z8000 weiß. Ich habe mich auf einige sinnvolle Erweiterungen der drei Basisadressierungen des 8080 entschieden:

Allgemein gilt: Die Schreibweise Lad Reg1,Reg2 heißt: Lade das Register1 mit dem Inhalt von Register2. Folgende Adressierungsarten gibt es:

Das wars beim 8080. Der Z80 führte noch die indizierte Adressierung ein. Die Variante hier gibt es auch: Mit einer Konstante die zu einem Basisregister addiert wird. Dies ist ganz nützlich wenn man Datenstrukturen hat bei denen Teile immer an einem bestimmten Offset beginnen. Bei einem CP/M Verzeichniseintrag beginnt z.B. die FAT immer bei Offset 16. Dies ist die Instruktion Ld Reg, (Reg)+C beziehungsweise Ld (reg)+C,Reg, Die Indizierte Adressierung ist auf 12 Bits Offset beschränkt, das sind 4096 Bytes.

Flexibler ist die mit einem Basisregister und einem Offsetregister. Das erste bleibt konstant, das zweite wird erhöht. Der Vorteil ein Offsetregister anstatt dem Basisregister direkt zuer hohen ist dass man bei so bei einem erneuten Durchlauf das Basisregister nicht laden muss und vor allem bei einer Kopieraktion man nur ein Offsetregister erhöhen muss. Das ist ist die Instruktion Ld reg, (reg+reg) bzw. Ld (reg+reg),reg.

Speziell für Pointer braucht man die doppelte indirekte Adressierung: ld reg,((reg)). Dabei steht in Reg eine Adresse. Anstatt den Wert nun aus der Adresse zu holen wird dieser erneut als Adresse  angesehen wo sich der Wert befindet. Zeigervariablen haben als Wert die Adresse der Variablen auf die sie zeigen.

Verbesserungsmöglichkeiten: Sinnvoll beim Einsatz einer Pipeline ist ein kleiner Cache. Zwar kenne ich keinen 8-Bitter der einen hat, doch die TMS 9995 CPU hat einen 128 Byte Workspace auf dem Chip (die Architektur des Vorgängers TMS 9900 war ausgelegt auf nur wenige Register in der CPU aber eines war ein verschiebbarer Zeiger auf 256 Byte im RAM die dann als Register genutzt werden konnten, da RAM nicht so schnell wurde wie man das bei TI annahm bekam der Nachfolger daher sein internes schnelles RAM spendiert). 256 Worte, das sind 768 Byte belegen bei 3 Transistoren (so bei der 8080) pro Bit rund 18432 Transistoren - das ist eine Menge gemessen an den 8200 die eine einfache Z80 CPU hat, doch vergleichen mut den 68000 einer MC68000 oder 134.000 eines 80286 ist es wenig. Der Vorteil ist dass man im Cache dekodierte Anweisungen speichern kann. Ohne Speicherzugriff sinkt dann die Ausführungszeit auf einen Takt pro Befehl.

So nun noch zur Titelzeile. Früher hat man sich sehr um Bezeichnungen herumgestritten, also wann eine CPU ein 8 Bitter oder 16 Bitter ist. Folgende Kriterien gab es:

Alle Angaben konnte man diskutieren, vor allem weil bis zur 32 Bit Generation es so war, das die Breite von Registern für normale Operationen nicht für Adressen ausreichte, sonst wäre der Arbeitsspeicher zu klein gewesen. Einige Beispiele:

Heute könnte man nach demselben System eine aktuelle Intel CPU als 64/256 Bit CPU bezeichnen mit AVX2 wird daraus eine 64/512 Bit CPU ... Meine müsste man nach der Breite der Register, die man meistens als Kriterium nimmt als 16 Bit CPU bezeichnen. Dieses Kriterium ist auch meistens das beste, denn mit der Registerbreite stehen auch die Befehle, so haben 16 Bit CPUs eben Befehle um 16 Bit Daten zu verarbeiten und meistens noch weitergehende (Multiplikation, Division) als 8-Bitter. Die Ausnahme ist der MC68000 der weil der 68020 als Nachfolger geplant war breitere Register hat als er intern in einem Rutsch bearbeiten kann, so in etwa vergleichbar mit den 8080.

Für einen 16-Bitter wäre der Adressbereich von 192 KByte Code und 128 KByte Daten recht klein. Das könnte man durch Segmentregister und einige Befehle ändern. Nur würde ich dann einen linearen Adressbereich anstreben, indem man z.B. die 16 Bit breiten Segmentregister als oberste 16 Bit nimmt. Zusammen mit Befehlen die Segmentregister erhöhen und erniedrigen müsste man so auch durch über 64 KWorte große Datenstrukturen gehen können. Die Beschränkung auf 64 KByte pro Datenstruktur war das was ich bei der Programmierung unter DOS immer als größte Einschränkung empfand.

Bedingt durch Pipeline, RISC Datenformat und Prefetch-Buffer müsste mein Prozessor deutlich schneller als normale 9-Bitter aber auch 16-Bitter sein. Selbst ohne Cache hat er Features die ein 80296 noch nicht hat, in dieser Geschwindigkeitsklasse wäre er dann einzuordnen.

Befehlssatz:

Befehl Byte 1 Byte 2 Byte 3
Arithmetrik


Adc Reg,(Reg) 0000.0001 RRRR.RRRR
Adc Reg,Reg 0000.0010 RRRR.RRRR
Add Reg,(Reg) 0000.0011 RRRR.RRRR
Add Reg,Reg 0000.0100 RRRR.RRRR
And Reg,(Reg) 0000.0101 RRRR.RRRR
And Reg,Reg 0000.0110 RRRR.RRRR
Sbc reg,(Reg) 0000.0111 RRRR.RRRR
Sbc reg,Reg 0000.1000 RRRR.RRRR
Sub Reg,(Reg) 0000.1001 RRRR.RRRR
Sub Reg,Reg 0000.1010 RRRR.RRRR
Xor reg,(Reg) 0000.1011 RRRR.RRRR
Xor reg,Reg 0000.1100 RRRR.RRRR
Or Reg,(Reg) 0000.1101 RRRR.RRRR
Or Reg,Reg 0000.1110 RRRR.RRRR
Cmp reg,Reg 0000.1111 RRRR.RRRR
Cmp reg,(Reg) 0001.0000 RRRR.RRRR
Idiv Reg,Reg 0001.0001 RRRR.RRRR
Imul Reg,reg 0001.0010 RRRR.RRRR
Mul Reg,reg 0001.0011 RRRR.RRRR
Div Reg,Reg 0001.0100 RRRR.RRRR
Unäre Arithmetrik


Dec (reg) 0001.0101 RRRR.0000
Dec Reg 0001.0101 RRRR.0001
Inc (reg) 0001.0101 RRRR.0010
Inc Reg 0001.0101 RRRR.0011
Neg Reg 0001.0101 RRRR.0100
Not Reg 0001.0101 RRRR.0101
Rotiere Links mit Carry 0001.0101 RRRR.0110
Rotiere links ohne Carry 0001.0101 RRRR.0111
Rotiere rechts mit Carry 0001.0101 RRRR.1000
Rotiere rechts ohne Carry 0001.0101 RRRR.1001
Schiebe links mit Carry 0001.0101 RRRR.1010
Schiebe links ohne Carry 0001.0101 RRRR.1011
Schiebe rechts mit Carry 0001.0101 RRRR.1100
Schiebe rechts ohne Carry 0001.0101 RRRR.1101
Sprünge


Jp (Reg) 0001.0101 RRRR.1110
Call (reg) 0001.0101 RRRR.1111
Call Cond 0001.0110 AAAA.AAAA AAAA.AAAA
Call Short,Cond 0001.0111 AAAA.AAAA
Call Short 0001.1000 AAAA.AAAA
Call Adr 0001.1001 AAAA.AAAA AAAA.AAAA
Call (Adr) 0001.1010 AAAA.AAAA AAAA.AAAA
Interrupt Adr 0001.1011 AAAA.AAAA
Jp Cond,Adr 0001.1100 AAAA.AAAA AAAA.AAAA
Jp Short Cond,Adr 0001.1101 AAAA.AAAA
Jp Adr 0001.1110 AAAA.AAAA AAAA.AAAA
Jp (Adr) 0001.1111 AAAA.AAAA AAAA.AAAA
Decrement Reg Jumpz,Short 0010.RRRR AAAA.AAAA
Ret 0101.1010 0000.1011
Ret Cond 0101.1010 0000.1100
IRet cond 0101.1010 0000.1101

Iret Cond 0101.1010 0000.1110

Ladebefehle


Ld (Adr),Reg 0011.RRRR AAAA.AAAA AAAA.AAAA
Ld Reg,(Adr) 0001.RRRR AAAA.AAAA AAAA.AAAA
Ld Reg,Konstant 0010.RRRR AAAA.AAAA AAAA.AAAA
Ld (Reg+C),reg 0011.RRRR RRRR.CCCC CCCC.CCCC
Ld Reg,(Reg+C) 0100.RRRR RRRR.CCCC CCCC.CCCC
Ld Reg,Reg 0101.0000 RRRR.RRRR
Ld (reg),Reg 0101.0001 RRRR.RRRR
Ld Reg,(reg) 0101.0010 RRRR.RRRR
Ld Reg,(Reg)+Reg 0101.0011 RRRR.RRRR RRRR.0000
Ld (Reg)+Reg,Reg 0101.0011 RRRR.RRRR RRRR.0001
Ld Reg,((Reg)) 0101.0100 RRRR.RRRR
Ld ((Reg)),Reg 0101.0101 RRRR.RRRR
Stackoperationen


Pop Flags 0101.1010 0000.0000
Pop Instruction Pointer 0101.1010 0000.0001
Pop Reg 0101.1010 0001.RRRR
Pop Stackpoointer 0101.1010 0000.0010
Push Flags 0101.1010 0000.0011
Push Instruction Pointer 0101.1010 0000.0100
Push Reg 0101.1010 0010.RRRR
Push Stackpointer 0101.1010 0000.0101
Ein/Ausgabe


In Reg,Adr 0110.RRRR AAAA.AAAA AAAA.AAAA
Out Reg,Adr 0111.RRRR AAAA.AAAA AAAA.AAAA
In Rg,(Reg) 0101.1011 RRRR.RRRR
Out (reg),Reg 0101.1100 RRRR.RRRR
Sonstiges


Di 0101.1010 0000.0110
EI 0101.1010 0000.0111
Halt 0101.1010 0000.1000
Nop 0000.0000

Set InterruptMask,Reg 0101.1010 0011.RRRR
Read Reg,InterruptMask 0101.1010 0100.RRRR
Complement Carry 0101.1010 0000.1001
Set Carry Flag 0101.1010 0000.1010
Frei für Erweiterungen 0101.1011 1111.1111


Sitemap Kontakt Neues Impressum / Datenschutz Hier werben / Your advertisment here Buchshop Bücher vom Autor Top 99