 Mein Name ist Mario Keller. Ich bin unter anderem auch Mitglied im Verein zum Erhalt klassischer Computer und auch hier an der HU an ein, zwei Projekten beteiligt, dort allerdings eher so als externer Mittäter. Und ich möchte jetzt in der nächsten Stunde, anderthalb Stunden mal schauen, wie lang es dauert, etwas über ein Hardware-Projekt erzählen, das ich umgesetzt habe, und zwar ein eigener 8-Bit Mikrocomputer auf Basis der 65-C02-CPU. So, ja, wenn man sich auf der Veranstaltung hier so umguckt, binden sich Computer jedweder Komplexität, größer Architektur, jedweder Alters, da fragt man sich natürlich als erstes, warum baut jemand noch ein Computer, wenn es doch schon so viele gibt. Das haben eine ganze Menge Leute gemacht, von daher kann das natürlich nur jeder für sich beantworten. Bei mir war es so, weil ich vor 30 Jahren die Idee dazu hatte. So, das impliziert natürlich gleich die nächste Frage. Warum hat das jetzt 30 Jahre gedauert? Da hole ich kurz aus, links nicht so weit, also es wird keine 30 Jahre dauern. Ich bin auf der östlichen Seite des, also in Vorhangs groß geworden in der DDR, da gab es zwar auch Computer und auch richtig gute. Das Problem war nur, da war es ziemlich schwer, da die Finger draufzukriegen oder dranzukriegen. Und der Traum, einen eigenen Computer zu haben, der war halt doch relativ schnell ziemlich stark und die Idee, sich so ein Ding selber zu bauen, lag da auch ziemlich nah. Was mir damals fehlte, war sowohl das Wissen, die Möglichkeiten als halt auch das Material. Es gab jede Menge Papier, was man lesen konnte, wie man sowas baut, aber das war halt ein Projekt, das war zur damaligen Zeit für mich einfach zu groß. Und ja, danach passierte ja erstmal so das Leben, da haben wir ganze Menge Sachen. Ich habe weiter mit Computern gearbeitet, das mache ich auch heute noch. Und vor ein paar Jahren habe ich dann wieder angefangen, mich mit Elektronik auseinanderzusetzen und dann kam auch schnell die Idee, den eigenen Computer zu bauen wieder hoch. Das ist halt so was Allgemeines. Ja, ich baue mir ein Computer, das ist irgendwie toll. Aber die Frage ist natürlich auch für jeden persönlich. Was ist denn für mich ein Computer oder die andere Frage? Wann ist das Projekt für mich denn in einem Zustand, wo ich sage, ja, jetzt ist das, was ich haben wollte, geschafft? Also, was ist für ein Computer für mich in dem Fall? Und zum einen, ja, hardwaretechnisch, ja, Klassiker, es gibt eine CPU, es gibt irgendwas wie ROM, es gibt sowas wie RAM und irgendeine Möglichkeit, mit der Umwelt zu interagieren, I.O. im weitesten Sinne. Dazu kommt softwaretechnisch für mich persönlich, war ein Ziel, der sollte von sich aus programmierbar sein. Das heißt, ich möchte eine Programmiersprache haben, die auf dem Computer selber läuft und mit der ich Programme schreiben kann, sodass ich keine externen Geräte, Tools oder sowas brauchen, um das Software aufzukriegen. Das war ein persönliches Ziel für mich. Dann ist natürlich die Frage, klar, das Ziel ist klar, wie fängt man da eigentlich an? Und für mich war es so, erstmal überlegen, welche CPU nimmt man, ganz viele Leute haben, mit einem Xilox Z80 gebaut, mit dem 6502, mit dem 8609, einige auch mit 16-bit-Systemen, gibt es ganz tolle Projekte. Für mich war relativ schnell klar, ich werde den 6502 nehmen als Prozessor, weil ich damit schon Erfahrung hatte. Irgendwann hatte ich auch mal ein C64, da habe ich ein bisschen mit rumgespielt und da war der Einstieg relativ, die Einstiegshörde relativ gering. Zumal es für diese CPU im Netz sehr gute Seite gibt, inklusive einem sehr guten Forum. Da sind weltweit eine ganze Menge Leute aktiv, was sehr praktisch ist, wenn man da eine Frage stellt, irgendeiner ist immer wach und antwortet. Das ist sehr hilfreich und verkürzt Frage-Antwort-Spielchen dramatisch und die haben auch ein unheimliches Fachwissen. Das sind Leute, die sind teilweise sehr viel älter als ich, da sind Leute dabei, die sind sehr viel jünger als ich und die Bandbreite macht halt sozusagen dort diese Community aus. Das ist sehr angenehm. So, hallo. Die CPU, nicht nur ob das eine sind Vorkenntnisse, okay, ich kannte die CPU schon ein bisschen, wie programmiert man die. Es gibt weitere Vorteile, die es sehr einfach machen, mit dieser CPU ein System zu bauen. Sie braucht einen einfachen symmetrischen Takt, wenn man sich zum Beispiel mal so in den Intel 8080 oder 8080 anschaut, was der für ein komplexes Takt-Gefühl gebraucht, damit er überhaupt irgendwas Sinnvolles tut. Das ist dann schon sehr charmant, wenn man das nicht benötigt. Genauso braucht diese CPU oder hat keinen multiplexen PINs. Zum Beispiel beim Z80 ist es so, wenn ich mich recht in Sinne, da sind einige PINs mehrfach belegt. Und je nachdem, in welchem Zustand die CPU ist oder was die gerade tut, welche Befehle sie ausführt, haben bestimmte PINs unterschiedliche Bedeutung. Das macht es wieder komplexer, die ganze Logik, die man rumbauen muss, damit Ramm, Romm und was ich sonst noch an Peripherie habe, damit klar kommen, einfach viel umständlicher zu bauen. Wir brauchen nur fünf Volt Spannung. Das ist auch sehr angenehm. Stimmsten Fall kann man das Ganze nämlich mit einem USB-Port betreiben. Andere CPUs aus der Zeit der 6502, also zumindest aus den ersten Generationen, die brauchten dann deutlich mehr, die brauchten irgendwie noch 12 Volt und minus 12 und was weiß ich, irgendwelche grubben Sachen. Und ja, haben wir da nicht. Und sie wird immer noch produziert. Das ist halt das Spannende daran. Es gibt eine Firma in den USA, Western Digital Design Center, heißen die, die auch die Rechte daran haben, soweit ich weiß. Es gibt es als Softcore für FPGAs, aber auch noch als echte Hardware. Die Zemos-Variante, mittlerweile mit bis zu 14 Megahertz Taktbau und so, kann man schon ganz gut basteln mit. So. Und es gibt so, sagen wir mal, eine gewisse Roadmap. Ich bin ja nicht der erste, der sich auf die tolle Idee gekommen ist, so ein System zu bauen, die sich fast implizit irgendwo ergibt, wie man davor geht. Und das erste, was man halt irgendwie braucht, ist ein Takt. Also irgendwo muss die CPU, braucht halt von außen jemanden, der den Takt vorgibt, so ein Vortraumler, der sagt, jetzt mach das, jetzt mach das. Und das ist in meinem Fall relativ einfach. Das ist ein einfacher Oscillator. Der hat genau drei wichtige Pins. Einmal fünf Volt plus einmal Masse und einen Ausgang und der erzeugt, wie man da schön sieht. So ein schönes Rechtex-Signal. Irgendwo steht dann auch. Das war da irgendwie ein Megaherz-Hamballa. Und damit habe ich halt angefangen. Das nächste, was sich so logisch anschließt, was man dann tut, ist ein sogenannter Free Run. Was bedeutet das? Im Prinzipiell hat jede CPU einen Befehl, der sagt, mach nix. Das ist meistens so ein Beid. Zumindest ist es bei der 65002 der Fall. Der Obgrund ist EA in Hex. Und wenn die CPU den liest als Befehl, macht sie genau nichts, zwei Takte lang und liest dann den nächsten Befehl. Und der Trick dabei ist, dass man den Datenbus, den die CPU hat, so beschaltet, dass genau dieser Wert an dem Datenbus anliegt. Und wenn das der Fall ist, und ansonsten bleibt alles unbeschaltet. Also der Adressbus, der ist völlig egal an der Stelle. Es gibt so ein paar, sieht man da an der Seite, noch so ein paar Widerstände, ein paar Signaleitungen, muss man auf einen definierten Pegel setzen. Sonst passiert sowieso ganz seltsame Sachen oder überhaupt nix. Und dann macht die CPU im Prinzip Folgendes. Die kommt aus dem Reset, liest den ersten Befehl. Das ist ein No-Op. Sagt sie, ah, okay, super. Kenne ich, mache ich zwei Takte jetzt nix und dann hole ich mir den nächsten Befehl. Und da der Datenbus fest verdrahtet ist, steht da wieder ein No-Op. Also rennt sie eigentlich ohne etwas zu tun, also aktiv, ohne etwas zu tun, durch ihren gesamten Speicher und führt immer so ein No-Op aus. Das ist so ein Free-Run. Wenn man ein Oscilloscope hat oder ein Logic Analyzer, kann man sich an den Adressleitungen, die die CPU hat, dann relativ schön angucken, sich dann so durch den Speicher fressen. Und das ist so der erste Schritt. Dann hat man eine CPU, die schon mal irgendwas tut. So, auch wenn es erstmal nichts ist, aber wie gesagt ein aktives Nichts. Also eins vergessen, die Reset-Logik. Damit die CPU in einem definierten Zustand ist, nach einem Einschalten ist es mal gut, so ein Reset auszulösen. Das ist ein Eingang, der einmal für eine bestimmte Zeit gegen Masse geschaltet werden sollte und dann führt die CPU intern so ein paar Initialisierungen aus und macht sich bereit dafür, die Welt zu erobern. Und in unserem Fall ist das ein, den sieht man hier ganz ganz, ein kleines bisschen vielleicht, so ein ganz kleiner IC mit drei Beinchen, der, wenn man den kurz auf Masse schaltet, einfach für 100 Millisekunden dafür sorgt, dass die Leitung auf Masse gezogen ist und man definiertes Reset-Signal hat. So, nachdem die CPU schon mal irgendwas tut, sollte sie ein bisschen mehr als nur irgendwas tun und da war der einfachste Schritt, ein E-Prom zu nehmen, da Daten drauf zu packen, kleines Programm drauf zu packen, das 1 zu 1 mit der CPU zu verdrahten. Wir werden auch im weiteren Verlauf des Vortrags sehen, dass diese Breadboard-Variante immer weiter wächst. Das ist also einmal angefangen, baut man einfach immer so Schritt vor Schritt Dinge dazu und was ich gemacht habe, ich habe mir ein E-Prom mit Daten programmiert. Ich habe die Adressleitungen 1 zu 1 verbunden zwischen CPU und E-Prom. Ich habe den Datenbus, die Datenleitungen verbunden. Der E-Prom hat so eine Read-Walt-Leitung, die ihm sagt, ob er jetzt Daten geschrieben oder gelesen werden soll. Die kann man an die CPU packen, kann man auch fest verdrahten, weil ich ja sowieso nur lesen will und muss dafür sorgen, dass der E-Prom, der Meinung ist, er ist aktiv und wird gebraucht. Das sind die sogenannten Chip- und Output-Enable-Signale. Komme ich später noch zu, wofür die wichtig und gut sind und das war es letztendlich schon, was die Verkabelung angeht. Jetzt möchte ich natürlich auch sehen, dass das, was ich da gebaut habe, auch funktioniert. Ich hoffe, man kann das lesen, das ist relativ klein, aber um die ganzen Details hier müssen wir uns jetzt gar nicht kümmern. Am Ende ist es so, wenn man sich die Adressleitung von der CPU anschaut und so verschiedene Adressen, die wir haben, 60 Kilowatt-Adressieren, 16 Bit sind das, haben wir, wenn wir uns die Adresse E000 und F000 anschauen, das sind so quasi Basisadressen für mein Programm hier, komme ich gleich zu, sieht man, dass sie sich in genau einem Bit unterscheiden, nämlich die Adressleitung 12. Also wenn man bei 0 anfängt zu zählen, machen Informatiker aus unerfindlichen Gründen immer so, die fangen wir bei 0 an. Wir haben 16-Bit-Adressleitung, zählen aber nur bis 15. Das heißt, wir sehen genau da, wenn ich diese beiden Adressen anspreche, ändert sich genau ein Bit. Was ich dann gemacht habe, ich habe mal ein Programm geschrieben, das ist eine Zählschleife, die einfach nur 65.535 Mal zählt und am Ende zu der nächsten Schleife springt und das sind genau die Anfangserdressen von diesen Stückchen Programm, ist jeweils genau das E000 und F000. Ansonsten ist das beides hier identisch und was passiert ist, die CPU kommt aus dem Reset, merkt, bei E00 fange ich jetzt an zu arbeiten, da steht ein bisschen Programm, das führe ich aus, zählt da so 65.000 Mal, findet einmal den Sprung so, jetzt springe ich zu F000, dann macht sie das gleiche und springt wieder zurück und mit ein bisschen Mathematik, also wenn die ganzen Befehle haben, ganz definierte Ausführungszeiten, wie viel Taktzyklen sie brauchen, bis sie abgearbeitet werden, dann kann man halt anfangen zu rechnen, die größere Schleife, wenn das alles so zusammenaddiert, kommt man auf 460.547 Taktzyklen, die das Ganze brauchen, ausgeführt zu werden. Dabei das Ganze mit einem Megahertz getaktet haben, wären das also 460.000 durch eine Million, kommen wir auf 0,46 Sekunden, was sozusagen einen so einen schleifen Durchlauf, also einen kompletten Durchlauf hier benötigt. Was wir also erwarten würden, wäre, dass die Adressleitung 12, wenn man da so ein Oszilloskop dran hängt, alle knapp 0,5 Sekunden den Zustand wechselt, von 0 auf 1, von 1 auf 0, immer hin und her. Bisschen alle Ewigkeit, solange Strom da ist. Das kann man sich dann angucken. Das habe ich mit einem Logic Analyzer gemacht, das ist leider relativ dunkel, man sieht jetzt hier die Linie leider gar nicht, das ist ein bisschen schade, aber dann müsst ihr mir das einfach mal glauben. Das Erste, was halt passiert ist, dass tatsächlich diese Adressleitung, das ist hier als 12, den Zustand wechselt regelmäßig und die Software von dem Logic Analyzer ist so nett auch noch auszurechnen, wie lange die einzelnen Takte sind und hier kommen dann genau die 0,46 Sekunden raus, die wir vorhin ausgerechnet haben. Das heißt also nicht nur das Programm, tut was es soll, sondern auch die ganze Rechnerei stimmt, passt. Damit war sozusagen der nächste Meilenstein geschafft, das heißt die CPU hat das erste Mal externen Code ausgeführt. Das ist von der Sache her schon ganz gut, im Großen und Ganzen. Das ist ja jetzt nicht nur eine Frage, ich sage ja, ich habe da Daten auf den E-Prom gepackt, das ist toll. Wie eigentlich? Das führt jetzt so ein bisschen in dieses Thema Bootstrapping, wenn man sich mal überlegt, irgendjemand hat mal den ersten Computer gebaut, wie hat denn der da Daten reingekriegt? Weil ich brauche ja irgendwie ein Computer, damit ich ein E-Prom programmieren kann und dann habe ich so ein Hennerei-Problem, das ist so ein bisschen doof. Da gebe ich zu, ich habe ein bisschen getrickst, weil ich habe ja hier so ein Computer, der irgendwie so eine Million mal schneller ist und das sah dann so aus, auch ein bisschen dunkel, das ist mein E-Prom da, der da, noch zwei Schieberregister und ein Arduino, mit dem ich halt dann sozusagen mit Hilfe des Arduino die Daten auf den E-Prom geschrieben habe. Und weil das Ganze etwas fummelig ist, weil den E-Prom programmieren, da muss man den da reinkriegen, möglichst ohne irgendwelche Träte rauszureißen, das Ganze dann wieder rausprockeln, war halt schon ziemlich umständlich. Plan B war dann das, das Ganze auf einer Protoplatine, sieht zwar nicht schick aus, hat aber relativ gut funktioniert. Was man da oben in der Ecke sieht, ist dann noch so ein kleiner Bus-Sniffer, den ich mir gebaut habe, das ist einfach nur eine Schaltung, die hat 16 LEDs, mit so ein paar Treiber-ICs, wo man halt schauen kann, ich kann den einfach an eine Datenleitung dranhängen und wenn die LED leuchtet, dann ist die auf High und wenn sie nicht leuchtet, ist sie auf Low. Damit kann man relativ schnell mal schauen, wie die Leitung so los ist. Wenn man mit solchen Projekten anfängt, die auch über eine gewisse Zeit laufen, hat man irgendwann so eine ganze Menge, so von kleinen Gadgets und Tools, die man sich so rundherum baut, mit dem man dann irgendwie sich die Arbeit erleichtert. Wie gesagt, der E-Prom ist eins davon und dieser kleine Bus-Sniffer, den habe ich mir auch gebaut, bevor ich mir den Logic-Analyzer geleistet habe. Der ist halt aber so, mit einem momentanen Zustand, zu sehen, was passiert denn so über die Zeit gesehen? Außer man kann sich sehr gut blinkende LEDs merken und kann sehr schnell zählen. So, das Ganze wurde dann plötzlich zu einem kleinen Selbstläufer, dann habe ich das in einem Forum gepostet und irgendwie Leute fanden das toll, dass man plötzlich sehr preiswert E-Proms programmieren konnte und dann hat sich ein netter Amerikaner hingesetzt, hat ein Shield für den Arduino gebaut, sodass das Ganze noch richtig schick daherkommt. Das Ganze ist ein Open-Source-Projekt, kann man unter GitHub auch sich angucken, sodass man sozusagen für einen schmalen Taler in der Lage ist, zumindest einfache E-Proms zu programmieren. Und dann gibt es dann auch so ein Java-Tool, was sozusagen dann die PC-Seite abdeckt und ein Plattform unnachmittig ist, sodass man unter macOS, unter Linux, unter Windows halt damit arbeiten kann. Wenn man es dann schafft, die RX-TX-Library zu installieren, das ist so ein bisschen der Pferde-Fuß an der ganzen Geschichte, weil die ist ein bisschen fummelig auf einigen Systemen, aber wenn man es da geschafft hat, dann funktioniert der relativ gut. So, toll, jetzt habe ich Daten auf den E-Proms gebrannt, das sind irgendwie Binärdaten, wie komme ich denn zu denen jetzt eigentlich? Irgendwo habe ich ja Assembler, das haben wir ja gesehen, diese grüne Folie da, lauter schicke Assembler-Obcodes, was man da so macht mit... Na, Entschuldigung, ich bin aus dem Bild gelaufen, das will man natürlich nicht. Da habe ich mich für einen Assembler entschieden, einen Cross-Assembler namens Office. Auch wieder schön platformunabhängig, der ist in Python geschrieben, das heißt, der läuft auch wieder unter allen möglichen Systemen. Der kennt verschiedene Varianten dieser CPU, unter anderem auch die Variante, für die ich mich entschieden habe. Die CMOS-Variante 65102 hat einige zusätzliche Befehle und ein paar Adressierungsarten mehr. Was das Schreiben von Software etwas einfacher macht, eleganter, kürzeren Code erzeugt. Und ja, deshalb war es sehr schön, dass der sozusagen auch das unterstützt. Auch die Organisation der eigenen Programme wird unterstützt durch lokale Label, globale Label, Makros, die man definieren kann. Wenn später noch ein bisschen Zeit ist, kann ich das in einer kleinen Live-Demo dann mal zeigen. Und ja, und ihr ist sehr gut dokumentiert. Das ist auch mal ein ganz wichtiger Fakt bei solchen Tools. Und das Zweite ist, woher weiß ich denn jetzt, dass das funktioniert, was ich da geschrieben habe. Natürlich kann ich das auf den E-Prom-Rennen, kann das ausführen und dann mich ärgern, dass es nicht funktioniert. Und dann, ja, wie sehe ich denn, wo hängt das denn jetzt? Der Logic Analyzer ist dann nur bedingt hilfreich, weil man muss dann mal genau gucken, was passiert, wo, überlegen, wie hängen die Sachen zusammen, was könnte der Fehler sein. Das wäre natürlich schon sehr schön, wenn man sich das Ganze angucken könnte, bevor man es sozusagen auf der Bastelmaschine hat. Auch da gibt es wieder ein schönes Python-Tool namens Pi65. Der emuliert genau diese CPU und so Speicher und Rom und so Geschichten, ohne großartige Peripherie, sodass man da einfache Tools Software so ein bisschen testen kann. Natürlich keine komplexen Sachen, weil er halt die ganze Hardware nicht wirklich nachbildet. Aber halt mal zu schauen, macht mein Programm denn im Grunde überhaupt das, was ich möchte. Ich kann da in einzelnen Steps durchgehen, kann mir anschauen, wie sehen die Register aus, wer landen die Daten da, wo sie hin sollen. Sehr charmant. Und der ist auch fast gut dokumentiert. Die Dokumentation ist sehr umfangreich. Es gibt zwei Punkte, die leider nirgendwo stehen, zumindest nicht in der Dokumentation. Das ist sehr schade, nämlich, wie ich Daten ein- und ausgebe mit meiner virtuellen CPU. Da muss man entweder in den Source-Code gucken oder in die Paispiele. Das war ein bisschen anstrengend, das rauszufinden, aber wenn man es einmal weiß, ist das auch ein super Tool, mit dem man halt sehr gut arbeiten kann. Und, ja, jetzt würde ich natürlich nicht nur rommen. An meiner CPU haben, das war ja sehr einfach, eins zu eins verdratet, alles schick, macht irgendwas. Ich möchte natürlich mehr Peripherie haben. Ich möchte eine Arbeitsspeicher haben, den ich beschreiben und lesen kann. Ich möchte vielleicht ein Baustein haben, wo ich Daten nach außen ausgeben kann, entweder parallel, seriell, von mir aus, was ich in Soundchip, Grafikchip, was auch immer man sich ausdenken möchte. Da ist dann ein bisschen mehr nötig, als einfach nur das irgendwie mit der CPU zu verdraten. Wir kommen zum Thema Addressdekudierung. Das kann jetzt sehr technisch werden, ist aber leider sehr notwendig. Wenn man das nicht verstanden hat, kann man eigentlich kein Computer bauen. Ganz vereinfacht ausgedrückt. Wir sehen hier ein Ausschnitt von dem tatsächlichen Schema, so wie beim Computer jetzt gerade gebaut ist. Was man sieht ist, dass alle Datenleitungen eins zu eins miteinander verbunden sind. Man macht das in solchen Schaltplänen so, dass man jede Leitung einzeln zeichnet, weil dann sieht man vor lauter Strichen irgendwann gar nichts mehr. Man fasst das einfach, was zusammengehört zu einem großen, dicken Bus zusammen. Aber alles, was gleich heißt, ist auch miteinander verbunden. Wir sehen, wir haben hier unsere CPU. Wir haben ein E-Prom und wir haben einen Rammbaustein. Dass das so ist, müsst ihr mir jetzt einfach mal glauben. Am Ende beweisen das sozusagen die Namen, an denen die an den Teilen dran stehen. Das heißt, wir haben die Datenleitungen eins zu eins miteinander verbunden und die Adressleitungen eins zu eins miteinander verbunden. Wenn wir nur das tun, ohne zusätzliche Logik ringsrum, passiert jetzt Folgendes. Die CPU führt einen Befehlaus und sagt, ich möchte jetzt das Beid aus der Adresse 1f78 laden. Dann setzt sie den Adressbus auf die entsprechende Adresse und setzt ihre ReadWide-Leitung. Die haben wir hier auch irgendwo rumliegen. Sagt hier, ich möchte lesen. Dann kommt von mir aus der Ramm und sagt, oh cool, die Adresse kenne ich, da steht bei mir das Beid 0f. Das packe ich jetzt auf den Datenbus. Ich soll ja gelesen werden, ich fühle mich angesprochen, mache ich jetzt mal. Dann kommt der Ramm und denkt sie so, oh cool, die Adresse kenne ich, bei mir steht der F0 an der Stelle. Das packe ich jetzt auch auf den Datenbus. Dann haben wir ein Problem. Dann sagt der eine, die unteren 4-Bits von meinem Datenbus, die muss ich jetzt auf 5V, auf High schalten und die oberen 4-Bits schalte ich auf Low, auf 0V. Der andere Baustein sagt genau das Gegenteil. Die unteren, die muss ich jetzt auf 0V schalten und die oberen haben wir, das geht kaputt. Das ist irgendwie so 0,5V geht nicht, so die Hälfte, sein Mittelwert. Da passieren dann also ganz seltsame Dinge. Man muss also mit Logik irgendwie dafür sorgen, dass immer nur der aktiv ist, der auch wirklich gemeint ist. Das versteht man in diesem Zusammenhang unter MemoryMap.io. Ich zerlege meinen Speicher, den ich habe, 64 KB, in logische Stückchen und sage, welcher Baustein, der an meinem Bus hängt, ist denn dafür zuständig. Die ganz einfachste Lösung, wenn wir nur dieses Bild haben, wir haben eine CPU-Rom und RAM, könnte so aussehen, weil wenn man sich, da könnte man ja zurückplättern, aber ich lasse das jetzt mal, wenn man sich die Adressleitung und die adressierten Speicherbereiche anguckt, ist die Adressleitung 15, die Höchste. recht interessant. Wenn die 0 ist, sind genau die unteren 32 KB meines Speichers adressiert und wenn die 1 ist, sind die oberen 32 KB meines Speichers adressiert. Ich könnte jetzt also hergehen und sagen, denn jeder dieser Chips hat sogenannte ChipEnable oder ChipSelect-Signale, die ihm sagen, wenn die auf 0 Volt geschaltet sind, dann bist du aktiv. Liegen da 5 Volt an, interessiert sich der Chip nicht für das, was da auf dem Bus passiert, dann ist er inaktiv und wartet darauf, bis ihm irgendeiner sagt, jetzt bist du dran. Wir können also dieses A15 nehmen, wenn das low ist. Das ist sehr praktisch, wenn wir das sozusagen auf unseren RAM, wir möchten die unteren 32 KB, möchten wir jetzt mit den RAM vorsehen und die oberen 32 KB für den ROM. Wenn das A15 low ist, haben wir genau das, was wir haben wollen. Das ChipSelect-Signal vom RAM ist low, der sagt auch cool, bin ich aktiv, funktioniert. Leider wäre aber auch das für den eProm low. Das heißt, der wäre da auch wieder in der Meinung, dass er aktiv ist. Das müssen wir also einmal rumdrehen, da kann man eine ganz einfache logische Funktion nehmen. Das ist so ein Not-Gutter, dass einfach das einkommende Signal einmal rumdreht. Wenn low vorne reingeht, kommt hinten ein High raus. Wenn ein High reingeht, kommt ein low raus. Dann haben wir eigentlich eine ganz simple Adresse-Dekodierung, die schon ausreicht, dass ich zwei Bausteine an den Bus hängen kann, weil es A15 High, das heißt, wir adressieren die oberen 32 Kilometer, wird hier ein low draus durch den Inverter und der ROM wird aktiv. Da das Ding High ist, kommt ein High beim RAM an und der, sagt man, interessiert mich nicht, ist irgendjemand anders dran. Und umgedreht genauso, haben wir ein low, geht es direkt durch, sondern zum RAM, der ist aktiv, hier kommt ein High raus, der ROM ist inaktiv. Das kann man dann beliebig komplex gestalten. In meinem Fall sieht das Ganze dann so aus. Was wir hier wiederfinden, ist genau das A15 und das negierte. Unnegiert geht es auf den RAM. Einmal rumgedreht, wenn da High ist, kommt der low raus, umgedreht auch. Geht hier auf den zusätzlichen Chip, der dafür sorgt, dass ich mir diese 32 Kilobytes, die ich im oberen Freicherbereich habe, noch mal zerlege. Ich habe einen Baustein, der für die serielle Schnittstelle zuständig ist und ich habe mir noch zwei Ports dazu gebaut, die ich variabel verwenden kann und ganz oben, den oberen 8 Kilobytes, da soll mein E-Prom leben. Das hat auch technische Hintergründe für die 6502 CPU, ist es so, dass sie ihren Stack, den sie quasi im RAM hält, fest verdratet hat, auf die Adressen 0100 bis 01FF, das sind 256 bytes. Die erwartet, dass sie braucht in den unteren Speicherbereich einfach RAM, damit man den Stack benutzen kann. In dem ganz oberen Speicherbereich gibt es drei Adressen, die Fragen machen wir später, sonst wird es, glaube ich, zu kompliziert mit dem. Nein, der wächst von groß nach klein. Der fängt oben an und der Counter, also die Frage war, falls man das jetzt nicht gehört hat, damit das für die Zuschauer auch nicht live dabei sind, ob der Stack bei der CPU von oben nach unten oder von unten nach oben wächst, ist in dem Fall so, der wächst von oben nach unten. Das fängt bei einer großen Adresse an und jedes Mal, wenn ich was auf den Stack lege, mit irgendwelchen Befehlen, dann wird der Stack-Pointer verringert und zeigt auf eine Adresse, die kleiner ist. So, und beim ROM war ich stehen geblieben, der muss in dem oberen Speicherbereich deshalb liegen. Es gibt ein paar definierte Adressen, an denen sogenannte Sprogenvektoren liegen. Definierte Adressen, die sagen, wenn die CPU ein Reset auslöst, an welche Adresse soll sie springen, wenn ein Interrupt ausgelöst wird, wohin soll sie springen und so weiter. Das ist fest definiert und das liegt an den Adressen, ich glaube, FFA bis FFF sind das dann so drei Stück, die da verbaut sind, 16-Bit und deshalb ist der klassische Aufbau, man kann es auch anders machen, und der untere Teil der Schaltung, der ist dazu da, das ganze Lesen und Schreiben noch ein bisschen effektiver zu machen, führt jetzt aber zu sehr ins Detail. Wichtig ist für uns einfach dieser obere Teil, wir finden die ganz einfache Adress-Logik den Teil, finden wir wieder und wir sind es in der Lage, unseren Speicher in fünf praktische Häppchen zu zerteilen. Wir haben 32 Kilobyte dran und jeweils 8 Kilobyte für Referiergeräte, so. Und wir haben jetzt mehrere Geräte gleichzeitig betreiben können oder zumindest an den Bus hängen können. Die Frage, was mache ich denn jetzt mit Kommunikation, wie möchte ich mit der Außenwelt in Kontakt treten, weil nur Software ausführen ist ein bisschen langweilig, wenn man da nichts sieht, ist halt irgendwie so ein bisschen doof. Da gibt es halt auch tausend Möglichkeiten, mit dreien habe ich angefangen zu spielen, der aller einfachste Fall, das ist der erste Punkt, das ist ein Chip, der hat einfach acht Eingangsleitungen und kriegt dann merkt er sich, was an den Eingängen anlag und behält das auch, auch wenn sozusagen die Eingänge anders beschaltet sind, sodass man da ganz einfach auf den Datenbus sagt, ich will jetzt ein bestimmtes Bitmuster da drauflegen, dann kriegt er einmal so sein Chipselect-Signal und dann kann ich damit Ausgänge schalten, was ich zum Beispiel LED ist, irgendwelche Schalter, damit könnte man schon irgendwas steuern. Ganz einfache symptomte Form ist nur ein einziger kleiner IC, so ein kleiner Käfer, das ist nicht super viel, aber wäre schon mal so eine Art von Kommunikation, das geht auch in die Gegenrichtung mit einem anderen Chip, sozusagen als Eingang. Das zweite ist ein etwas älteres Modell von Chip, das aber zu dieser 65er-Familie dazugehört, der ist zum Beispiel in der VC2600 verbaut, der fast mehrere Funktionen zusammen, der hat ganze fulminante 128 Byte RAM, die man benutzen kann, hat zwei 8-Bit IO Ports, die ich beliebig als einen Ausgang benutzen kann und der hat ein Timer, der hat ja auch den gleichen System-Takt, wie die CPU zum Beispiel, und der ist in der Lage, über ein Timer interabts auszulösen, so dass sich zeitbasiert Dinge auslösen kann und wenn ich immer mitzählen muss, wie viele Takte habe ich, wie viele Befehle habe ich den gerade ausgeführt, muss ich gerade was anderes machen. Wenn man ein Timer produziert, die kann man noch irgendwie, bei einigen Händlern kriegt man die noch zu kaufen, das ist halt relativ schwer, da ich einen solchen zur Verfügung habe, habe ich natürlich damit auch mal rumgespielt und so richtig IO, so interaktiv ist natürlich schön, wenn man irgendwo was eingeben kann, was ausgegeben bekommt und der ist die einfachste Variante, man nimmt eine seriöle Schindstelle, also einen Baustein, der halt indem man Daten reinkippen kann zur Verfügung stellt, so dass man ein einfaches IO-System bauen kann. Man sieht, dass Breadboard wächst. Der linke Teil ist aber noch gleich geblieben, ganz oben haben wir unseren Taktgenerator, die Reset-Logik, die CPU, darunter ist mein Rom, dann haben wir die Adress-Logik, die eben beschriebene, die aus da zur Zeit noch aus 3 ICs besteht, das ist dann sogar später noch einer weniger geworden und hier haben wir genau diesen ersten Baustein, wo man einfach nur Daten ausgibt. Erkennen wir an meinem kleinen Bustniffer, da kann man wieder LEDs ein- und ausschalten, ich habe dann ein Programm geschrieben, das einfach nur irgendein Beid von 0 bis 255 hochzählt und man kann halt schön sich das Wittmuster an der Ausgabe angucken. Also Kommunikation, zumindest von drinnen nach draußen, funktioniert das schon mal. Das zweite war dann den 6532 damit dazuzubauen, die Adress-Logik ist jetzt hier so ein bisschen verdeckt, aber der Aufbau ist immer noch dergleiche, Takt, CPU, Rom und der Riot-Baustein, der halt dann auch wieder die 8 IO-Ports, die habe ich dann wieder an meinem Bustniffer gehängt. Das Ganze war an dem Fall glaube ich sogar mit Interab gesteuert, dass er quasi so durch den Interab immer wieder was hochgezählt hat und dann Ausgaben erzeugt hat. Auch schon sehr schön, blinken lights, ist das mal so ein Anfang, das erste macht irgendeine LED leuchtet oder blinkt und das ist so der Anfang. Das ist so das Hello World, der Hardware Bastillei so ein bisschen und dem wäre dann genüge getan, also der logische Vollgeschritt, da ist zwar der 6532 noch auf dem Wordboard drauf, aber nicht mehr verschaltet, wir bauen uns eine serielle Schönstelle dazu und das blaue da rechts auf der Seite, das ist so ein Adapter der das Ganze dann auf USB meppt, so dass man halt die Möglichkeit hat an einem normalen Computer PC, Laptop, was auch immer ein Terminal-Programm zu starten und halt mit dem BigMessOfWire was man da so sieht zu kommunizieren. Der Rest ist ein bisschen Software das heißt ein bisschen ist dann Software schreiben und ausprobieren, das war dann so eigentlich der Punkt wo ich sage, jetzt ist es ein Computer ich hab, ach so, ein bisschen geschwindelt ist ein bisschen versteckt hier, wenn man genau hinguckt sieht nicht mehr zwei ICs sind, sondern drei da sind nämlich noch 32K RAM dazugekommen, die hab ich dann quasi dann noch heimlich mit dazugemogelt auf die linke Seite, so dass wir jetzt tatsächlich aus meiner Sicht, was ich vorhin beschrieben hatte, was für mich ein Computer ist einen vollständigen Computer haben, zumindest was die Hardware angeht, wir haben eine CPU wir haben RAM, wir haben ROM und wir haben eine Möglichkeit mit der Außenwelt zu kommunizieren. So gut, das ist so, das war dann so ungefähr anderthalb Jahren, hab ich dann so diesen Zustand erreicht dann lag das eine ganze Weile rum, dann hat man ein bisschen Software programmiert und dann war geguckt, ja, eine Ausgabe wie kann ich irgendwie Befehle pasen, die ich eingebe damit da irgendwas passiert, das ist schick aber so richtig schön fand ich das nicht, wenn man den auch mit hinnehmen wollte oder man spülen wollte, dann musste man, ah, hat man immer diesen E-Prom den man da irgendwie aus diesen ganzen Kabeln rausfrickeln muss immer aufpassen, dass man den nicht falsch rum einsetzt dass man den nicht versetzt reinsteckt oder überhaupt irgendwie in der Kabel mit rausreißt, das ist alles irgendwie ziemlich fragil das war jetzt nicht so richtig befriedigend von der Hardware Seite, das irgendwie als Endergebnis zu betrachten also kam dann irgendwann die Idee, jetzt machen wir das mal so in Hardware und richtig so weil das erste war ein Fail, leider so, Rückschläge gehören ja irgendwie zum Erfolg dazu, in dem Fall war es so ich hab mir so eine Prototypenplatine genommen, hab da Sockel drauf gelötet und hab unter der Platine, das ist so peinlich, dass ich das nicht zeige wild verdratet so die einzelnen Pins untereinander das hat bis zum Gewissen grad auch irgendwann funktioniert, aber je mehr Bauteil dazukam, dass zur Stimme wurde, dass dann irgendwann war es nicht mehr händelbar das da gab es dann Fehler, dann haben sich mal irgendwelche Lootstellen gelöst und dann ja, wenn man sich auch mal vertan, für irgendwo verzählt weil, auch wenn ich so schöne Label habe die ich auf so ein Chip draufkleben kann das nützt mir nix, wenn ich die Vertratung unten drunter mache dann muss man auch noch umdenken dann ist es so verkehrt und naja, also viele Worte, kurze Story es ging halt irgendwie gar nicht mehr also, Plan B zweiter Versuch, diesmal richtig mittlerweile auch ein bisschen mehr Erfahrung was so das Zeichnen von Schaltplänen und Designen von Platinen angeht, gesammelt durch andere Projekte also einmal richtig aufgemalt das ganze, und zwar bevor man irgendwas anfängt zu löten zu bauen, zu machen sondern erst mal in Plan das ist auch sehr hilfreich, besagtes Forum was am Eingang erwähnt wurde, da kann man dann so was hinschicken hier, Leute, guckt mal drauf, sieht das für euch sinnvoll aus oder seht ihr irgendwas, was da total kaputt ist ganz kaputt war es nicht aber ich habe dann noch den ein oder anderen Hinweis bekommen was man besser machen könnte und am Ende hat man dann halt so ein Schema wir sehen das, was wir eben schon hatten CPU-ROM-RAM dann kommt noch unsere serielle Schinstelle dazu und der Rest ist so die sogenannte Glue-Logic, das ist halt alles was man irgendwie noch braucht damit das ganze am Ende so halbwegs sinnvoll funktioniert unsere Reset-Logic finden wir hier, unsere Adress-Logic und das Takt erzeugen so was dann passiert ist irgendwie sehr viel Fluchen malen, Leiterbaren löschen, wieder neu malen Bauteile hin und her schieben, das ist eher so eine Art Puzzle also wer sowas mag, das ist toll wenn man so ein Ziel vor Augen hat und einer möchte, dass es funktioniert ist das ziemlich anstrengend sich da durchzukämpfen also war es zumindest für mich in den weiteren Tagen mehrmals wegschmeißen, wieder neu anfangen gab es dann halt so ein zweiseitiges Platin-Layout wo halt alles irgendwie so miteinander verbunden war wie es sein sollte und das erzeugt dann einen Format, das kann man an eine Firma geben weil wie man hier sieht, gehen hier auch Leiterbaren zwischen den Pins durch das war mir persönlich dann zum selber machen zufommelig weil wenn es da nicht geht, weiß man nicht habe ich es einfach noch schlecht produziert oder geht es wirklich nicht ich habe dann gesagt, ok da tue ich das mal, ich bestelle mir eine Platine das hat dann acht Tage gedauert bange es warten Anbieter war sehr schön, die schicken zwischendrin immer so Fotos, wo sie gerade sind, jetzt ist es geätzt jetzt ist es gebohrt, jetzt ist es verzinnend jetzt kommt der Bestückungsdruck drauf und so das ist dann schon ganz spannend, man sieht so toll, da passiert was dann habe ich die eigentlich in den Händen irgendwann hat sich sie dann in den Händen natürlich ganz toll gleich hingesetzt alles draufgelöte, draufgesteckt und natürlich funktioniert es nicht das war dann so ein Abend wo ich dachte, ok jetzt packst du das erst mal hin egal, eine Nacht drüber schlafen wenn du jetzt anfängst da rum zu suchen, das geht sowieso schief und dann bist du irgendwann total frustriert lass es mal einen halben Tag liegen und dann setze ich nochmal ran und gucke und dann habe ich die zwei Fehler auch nach einigen Suchen gefunden ich hatte einfach vergessen zwei Leiterbahnen noch mit einzumalen die zwar im Schema existierten das Tool was ich benutzt habe um das Ganze zu designen ist ein Freeware-Tool namens Kiket das ist sehr gut wenn man weiß wie man damit umgeht an der Stelle hatte ich das Problem dass ich ein paar Leiterbahnen zwar physisch verbunden hatte aber Kiket der Meinung war diese nicht verbunden da gab es jede Menge Fehlermeldung die ich natürlich dann geflissentlich ignoriert habe wird schon irgendwie schief gehen ging auch schief, hat ja geklappt dann habe ich genau die zwei die tatsächlich nicht verbunden waren nicht gesehen nachdem die gefunden waren das Ganze gefixt, Rom drauf und das Ding lief das war dann so der magic moment jetzt ist fertig eigentlich dachte ich so, nee war es natürlich nicht weil wenn man sich erinnert was ich am Anfang gesagt habe für mich war ja wichtig, für mich ist dann ein Computer, wenn ich ihn von sich aus programmieren kann also da ist irgendwas drauf wo ich sagen kann, ich gebe dann ein Programm ein und dann passiert da was das fehlte alles noch also Software irgendwie muss da Software drauf um zu überlegen so was brauche ich da eigentlich was mache ich da wie zerlege ich mir das sinnvoll in Sachen die ich immer wieder brauche was sind Programme die ich vielleicht mal haben will aber auch nicht immer haben möchte und ergibt sich dann so eine logische Struktur beim PC heißt es BIOS für Basic Input Output System bei mir ist es ein MIOS ein Minimal Input Output System weil es tatsächlich nur das abbildet was ich unbedingt brauche das kann ich vielleicht noch zeigen da ist noch gar kein Code dahinter der sagt einfach nur wenn ich diese Zeile an die Stelle schreibe dann packt er folgende 20 Code Zeilen hin dann brauche ich einen Treiber also sozusagen ein Stückchen Software Funktionen die ich anspringen kann um meine Serial-Schnittstelle zu initialisieren eine Funktion um zu sagen gib ein Byte aus oder guck ob da einer was eingegeben hat ja das ganze Hochdrabendkörneln wer irgendwie mit Betriebssystemen zu tun hat oder der Kern der für das ganze Dispatching und zuständig ist damit alle sozusagen mitreden können und dass irgendwie alles läuft klingt sehr hochdrabend sind mir einfach nur so ein paar Funktionen die sagen gib mir ein Zeichen aus und zwar unabhängig davon ob das jetzt eine Serial-Schnittstelle ist oder irgendwas anderes so diese High-Level Funktionen die man sich dann baut damit man ein Software schreiben kann und sagt ich will mich gar nicht darum kümmern wer das macht ich möchte sagen ich schreibe irgendwas auf irgendwo hin wie gesagt das ganze Ding heißt ja Maus in der Grund der der Namen gab es auch natürlich bevor es ein Stück Hardware gab wie das bei solchen Projekten üblich ist dann kriegt man sich so ein Fancy Name aus Maus ist bei mir Marius on Unix Single Board Engine ich lange überlegt bis ich auf Maus gekommen bin weil keine Ahnung wo das her kam aber ja war so ne dann baut man sich halt so ein ein Hauptprogramm und ein kleines Monitor-Programm mit dem man so ein bisschen arbeiten kann und die eigentliche Software ist dann von mir gewesen und man muss das Rad ja nicht immer neu erfinden es gibt ja ganze Menge Leute die schon mit solchen CPUs gebastelt haben da gibt es dann so Programme die ich dann nur adaptiert habe damit die mit meinem System funktionieren das ist eine Programmierstraße ans VTL klingt spannend ist es auch steht für Very Tiny Language das ist sie sowohl im Sprachumfang als auch in der Größe die ist mich kleiner als 1 Kilobyte sehr praktisch wenn man nur 8 Kilobyte Rom hat wo das ganze rein muss dann ein Micro-Chess das ist das Schachprogramm das ursprünglich mal für den Kim das ist die 1. Platini die für die 6502 existierte die die Firma Most Technology die den Prozesse ursprünglich produziert hat mal so als Demo-Baud quasi mit rausgegeben hat um zu zeigen wie toll der Prozessor ist da hat irgendwann mal ein Schachprogramm geschrieben das ist auch nur ein 2 Kilobyte groß das habe ich irgendwie zum Laufen gekriegt und am Ende so ein Disassembler wenn ich da so Bytecode in meinem Speicher stehen habe mal anzuzeigen was ist denn da, steht da ein Assembler dahinter so das war es dann so im Großen und Ganzen, wenn man so ein Terminal hat da sieht das ganze dann so aus ich gucke gleich mal wenn wir es schaffen dann zeitmäßig sind wir ja ganz gut wenn ich da so gucke, können wir quasi noch so eine kleine Live-Demo machen wenn der Interesse besteht wenn hier alle schon so am Wecknicken sind kann ich natürlich auch aufhören aber das ist kein Wecknicken so viel zum Vortrag viel lang für eure Geduld ich würde sagen Fragen machen wir vielleicht gleich und wenn da noch Zeit ist kann ich hier vorne umspielen ja, natürlich können wir machen, keine Kabel abreißen das wäre schade sieht man das denn irgendwo wie gut sieht man es ja ganz schuld da sind sogar nur ein Fädeldraht drauf das andere sind zum Glück zwei Pins gewesen die direkt nebeneinander legen, die konnte ich dann mit einem so großen Lid-Clex reparieren und wir müssen gucken vom Licht, weil das ist natürlich wenn es halt so top produziert ist ist dann so richtig schönes glänzendes Zinn drauf das kann jetzt natürlich sein, dass ihr da nur irgendein glänzendes Fleck seht von dem ich behaupte, das ist ein Computer gerade? ja? perfekt, ich bin begeistert so ja, sieht zwar nicht so aus aber es ist tatsächlich ein Computer so, gut dann, ich switch jetzt mal zu einem anderen Mikro weil dann brauche ich das nicht festhalten dann kann ich mit zwei Fingern arbeiten, das macht es ein bisschen einfacher so, Technik behauptet in 2, 3, Test, Test scheint zu klappen so, dann 1, 2, Test ja, passt ok, dann einmal unser Terminal da sieht man es ganz gut, das ist toll weil ich sehe hier relativ wenig, weil das ist eine riesige Auflösung passt schon, machen wir erstmal einmal im Groß so, dann da auch was das Connect und einmal Connect der kann ja gar nicht so groß, das ist ja spannend na gut, so einmal Reset und da sind wir ja, wie sagt das erste was ich halt angefangen habe zu schreiben ist so ein kleines Monitoring Programm wo man sagen kann, ich kann einfach erstmal machen mal ein Helb gucken zum Beispiel, was steht denn so in meinem Speicher ach, das war jetzt Blödsinn da passiert jetzt auch gleich Blödsinn so, nochmal das Ganze so, einmal so schön den Hex ausgegeben da findet man auch den Text zum Beispiel wieder das liegt ja auch natürlich irgendwo im Raum um wir können das Ganze natürlich auch in Hex ausgeben dann sieht es ganz so spannend aus, das sind jetzt die gleichen Daten am Ende ja was können wir noch machen wir können so ein Reset auslösen das ist ja so, ich kann auch auf den Knopf drücken aber wenn ich zu voll bin, bleibe ich an der Tastatur dann machen wir halt das ja, der Plan war ja ich möchte es programmieren können ich möchte halt irgendeine Sprache haben mit der Sprache, das kann das ist dann besagtes VTL 2 adaptiert das ist eine interpreter Sprache das ist so ein bisschen basic like, aber noch simpler sehen wir gleich, ich kann einmal so ein ganz kleines Demo schreiben, mal gucken ob ich das so auf die schnelle hinkriege wir haben Variate zur Verfügung die kann ich setzen ich kann Ausgaben machen, da gibt es so einen tollen Befehl, wie ich das Frage zeichne der dient sowohl als Input als auch als Output wie nachdem auf welcher Seite der Gleichung er sozusagen steht, wenn ich sage Fragezeichen ist gleich dann ist es eine Ausgabe wenn ich irgendeine Variable gleich Fragezeichen mache dann ist es eine Eingabe so wir wollen eine Schleife bauen, möchte ich das mal 10 mal ausgeben ich kann bedingte Sprünge machen, kann mir damit auch Schleifen bauen es gibt eine ganz spezielle Variable bei dieser Sprache das ist das Hash das entspricht ja aktuellen Zeilennummer die ich ausführen möchte oder wo ich gerade bin oder die ich setzen möchte damit kann man so bedingte Sprünge machen da sieht es ein bisschen grude aus, aber von der Sache eigentlich ganz logisch mach mal einen Ausdruck nämlich wenn A kleiner als 10 ist so das ist ein logischer Ausdruck, der ist immer 0 oder 1 das wird halt so ausgewert, da kommt 0 oder 1 raus es gibt ein Strick von links nach rechts Auswertung, außer das sind Klammern gesetzt so und jetzt sage ich um die Zeilennummer zu setzen hier haben wir, solange das war es kommt eine 1 raus und ich möchte zur Zeilennummer 20 also sagen wir einfach mal 20, weil was passiert ist eine Rechenoperation entweder das Ding ist 0 dann kommt hier 0 raus 0 hat eine Sonderbedeutung, die Zeilen nur 0 gibt es nicht wenn es 0 ist, ignoriert er das Ganze und wenn der 1 raus kommt wenn ich es mit 20 mutte, tut ich immer auf die 20 ich spreng halt wieder da oben hoch da ich das Ganze interaktiv mache kann ich halt sagen ich möchte zur Zeilennummer 10 springen und dann gebe ich 10 mal meinen String aus so damit ist genau das, was ich haben wollte ich habe eine Programmiersprache die ist zwar super simpel aber ich kann Programme schreiben damit da kann man sogar Spiele schreiben mit guck mal, ob ich das jetzt auf die Schnelle hinkriege da gibt es so einen schönen, so einen Hula-Länder das Ganze ist jetzt so ein bisschen wer man als admin gearbeitet hat der weiß das, ein Copy-Paste ist eines der wichtigsten Funktionen die man braucht so das ist das Schöne am Terminal, ich kann halt per Copy-Paste einfach meine Eingabe simulieren das heißt, ich kann mir das speichern speichern, das einfach kopieren, irgendwo hinpacken in ein Texteditor wieder reinladen, ist halt einfach Copy-Paste und ins Terminal so, und jetzt müssen wir mal gucken nee, da ist was kaputt gegangen das sieht nicht gut aus da habe ich, glaube ich, Blödsinn ver da ist irgendwas beim Kopieren schiefgegangen ach, er hat zu viel kopiert das ist natürlich nicht gut wir wollen das hier haben so, sag auch mal beim Terminal noch dass das ein bisschen Zeit mit einplanen soll wenn es Dinge nee, das nicht na, wie die Option so transmitten, wie macht er das okay und noch mal das ganze gucken wir mal, in welcher Zeit er das anfängt bei der 10, warum auch immer das ist natürlich jetzt der Vorfall-Effekt ich habe es heute ein paar mal ausprobiert, da hat das super funktioniert das sieht das gar nicht gut aus gerade das ist aus irgendeinem mir nicht erklärlichen Kunden gerade kaputt, der Funktionär ist Copy-Paste irgendwie nicht, so viel zum Thema wichtiges Tool ähm ja, müssen wir den Teil leider weglassen aber wir haben hier noch ein bisschen mehr zu zeigen, mal mal ein Reset wieder rauszukommen also, was wenn wir nicht noch haben ist, das besagt also nehmen wir mal den Disassembler der ist glaube ich relativ schnell gezeigt ich sage mal, fangen wir an der Adresse an und dann kann man sozusagen da fängt das ganze Ding an zu arbeiten wenn ich ein Reset mache dann habe ich da, was steht im Speichel welcher Obgrund ist das, was passiert da und irgendwie in ein paar Sprünge, in irgendwelche Unterprogramme zum Initialisieren von zum Beispiel der Serien-Schittstelle und so weiter das ist so der, der Quot, da kann man sich dann so langsam durchblättern relativ simple Sache so, viel spannender ist dann so was, das Micro-Chess wie gesagt, nicht auf mein Mist gewachsen, was ich heute mal ausprobiert habe das war ganz spannend, wir haben ja bei uns am Stand auch noch die VC4000 das ist eine alte Spielkonsole auch aus den 70ern, da gibt es einen Schachmodul für, wir haben ja ein Multiromodul gebaut für die, für die Konsole ich habe die mal gegeneinander Schach spielen lassen gewonnen hat dann das Micro-Chess, also sprich Maus durch technischen KO, glaube ich in Runde 23 nachdem die Spielkonsole irgendwie dreimal den gleichen Zug gemacht hat also quasi die war dann immer unter Druck war Stand im Schach, hat dann den König wieder nach links nach links, nach rechts und irgendwann sagt man halt ja, das war es, man hat keine Idee mehr ein technisches KO so, jetzt kann ich hier sagen, ich möchte Schach spielen Schach spielen bin kein guter Schachspieler, wir machen mal einfach irgendeinen kurmen Zug VC4, VC4 so, ziehen wir den Bauer mal dahin mal einmal Play und dann fängt er an zu denken, dann sind sie auch grafisch visuell super aufbereitet, dass man sieht, da passiert auch irgendwas ein technisches Detail vielleicht noch, wenn man so eine serielle Schinstelle hat, man braucht ja eine bestimmte Bautrater, also eine bestimmte Takt mit denen die Datenserie übertragen werden das passiert bei dem Chip, den ich verwendet dadurch, dass der ein Systemtakt genommen wird und einfach geteilt wird in dem Fall habe ich einen 1,8432 Megahertz Quartz genommen oder Oscillator genommen, der wenn man das durch 64 oder 16 teilt kommen genau die 115.200 Baut oder 57.600 Baut raus die man zum Beispiel auch von Modem Einstellung und so was kennt, also genau das, was man haben möchte, damit man mit einem Terminal sinnvoll arbeiten kann und so ok, der Kollege hat geantwortet keine Ahnung wie gesagt, bin ein schlechter Schachspieler erst mal den Bauer mal dahin dann werden wir wahrscheinlich gleich sehen, dass der geschlagen wird ok, also Spielen geht auch wie gesagt jetzt müssen wir mal schauen warum das Copy gerade nicht so wollte wie es gedacht ist ist natürlich jetzt noch nicht schön es gibt jede Menge Raum für Erweiterung das ist ein minimales Set, aber ich hab 6 ICs im Prinzip die am Ende einen ganzen Computer ausmachen was ich gelernt habe dabei sind so, sind natürlich viele Dinge, aber so ein paar grundlegende Sachen, das eine ist, tatsächlich wenn man so ein großes Projekt ist das über längere Zeit läuft kleine Schritte machen einzelne Sachen sich vornehmen, gucken wenn die funktionieren dann den nächsten, wenn man so einen ganzen großen Teil anfängt, die Wahrscheinlichkeit dass es funktioniert ist äußerst gering und die Frustration ist natürlich entsprechend groß aber wo fange ich jetzt an zu suchen wenn ich so kleine Stückchen habe, ich schaffe mehr Erfolge und ich kann Schritt für Schritt baue ich das Ganze auf und wenn es von mir aus wie in meinem Fall 30 Jahre dauert, bis man dann irgendwas funktionieren ist auf dem Tisch stehen hat das ist halt die eine Sache das andere ist der, wie soll ich sagen der Respekt den Leuten die das Ganze vor 30 oder 40 Jahren gebaut haben ich meine, ich habe ein Logic Analyzer der ist irgendwie mit, keine Ahnung, 100 Mal so schnell wie die ganze Kiste die da läuft ich habe ein PC mit lauter Tools mit denen ich Sachen testen kann mit denen ich Sachen bauen kann das gab es damals, die hatte vielleicht ein Auszuleskop das war so knapp 10 Mal so schnell wie der Takt von einem Rechner den man gebaut hat und die Möglichkeiten die man hatte auch was das Software schreibt teilweise wurde Kot über irgendwelche Schalter in irgendein Ram geschrieben ein Bootluder hatte um ein System erstmal laufen zu kriegen also der Respekt für den Leuten die sowas gebaut haben der ist immens gestiegen, wenn man es erstmal selber gemacht hat und sieht an welchen kleinen Dingen man teilweise schon scheitert und wenn es irgendwelche nicht miteinander verbunden in Leitung sind das ist halt schon beeindruckend wenn man sieht was andere Leute da so gebaut haben und wer noch Detailfragen hat eine Fragerunde machen wir jetzt denke ich ich bin noch eine Weile am Stand da kann man sicherlich auch nochmal einen genauen Blick die werde ich glaube ich jetzt nicht brauchen aber wir können jetzt gerne eine Fragerunde machen also wer Fragen hat oder etwas loswerden möchte was er schon immer mal sagen wollte dann bitte jetzt wir haben auch ein Mikro das können wir rumreichen ich muss dann weiter einschalten dann mach ich mal kurz den Anfang du hast gesagt nichts ist passiert nichts ist passiert als du das Board in deinen Händen gehalten hast und bestückt hast dadurch dass du deine eigene Software noch nicht hättest hätte ja nicht viel passieren können doch die Software war ja schon da ich hab ja die Breadboard Variante gab es ja schon die ist ja geblieben die ist auch nahezu 1 zu 1 das was ich dann in Hardware gebaut habe die Logik ist ein kleines bisschen anders aber vom Grunde her war es das das heißt also die Software hätte übertragen den Rom einfach umstecken um zu funktionieren sollen und was war zuerst das habe ich vielleicht nicht ganz mitbekommen also hast du zuerst die Software für ein bestehendes System gebaut oder hast du mit einer anderen Software vorher deine Hardware validiert das war so ein iterativer Prozess es ist ja auf dem Breadboard die Schaltung ja immer komplexer geworden bis ich irgendwann die Variante hatte das möchte ich jetzt auf einer Platine haben und dafür habe ich natürlich auch schon Software entwickelt da gab es dann schon einfache Routinen mit denen ich ein Text ausgeben konnte mit dem man mal irgendwo eingeben konnte der so einen Rom Dump gemacht hat das funktionierte schon das war so das erste so ein Hello World einfach wenn ich jetzt hier ein Reset drücke meldet sich der Kollege ja mit so na wer bin ich, was mache ich und in welcher Version gibt es mich das hätte zumindest Initial funktionieren sollen und das war genau was eben da passierte halt gar nichts dann habe ich den Logic Analyzer dran geklemmt und halt gesehen dass da ganz wilde Dinge auf dem Bus passieren der Adressbus der Sprangen zwischen Ramm und Rom hin und her, obwohl zum Schluss habe ich dann angefangen zu sagen ich schreib mir jetzt eine ganz kleine Schleife das sind nur drei Beide ich fange an zu arbeiten und springe auf mich selber zurück so und guck was passiert denn da auf dem Bus und selbst da sprang der plötzlich irgendwann im Ramm hin und her das ist irgendwie ganz komisch der Fehler der sich dann ausgestellt hat dass ich genau was diese Adresslogik angehen genau eine Leitung vergessen hatte die dann halt dafür gesorgt hat dass da ganz wilde Dinge passierten nachdem das gefunden war, das sieht man auch es gibt einen Draht drunter das ist sozusagen die Reparaturleitung da war dann die große Hoffnung aber jetzt müsste es funktionieren Tat ist aber immer noch nicht bzw. Tat ist aber immer nur ganz kurz und dann passierten wieder ganz seltsame Dinge dann hat man Resort gemacht, dann blieb es seltsam dann hat man die Daten neu auf den E-Prom geschrieben hat den drauf gepackt, also ganz frisch programmiert dann funktioniert es wieder ganz kurz und dann war es wieder kaputt und irgendwann habe ich dann den E-Prom nicht nur programmiert sein ich habe ihn auch mal ausgelesen und gesehen da stehen plötzlich Daten an Stellen wo nix hingehört die müssten leer sein die Stellen da also wenn man den programmiert, dann sind halt alles 0,0 was irgendwo nicht gebraucht wird und das war schon ein bisschen seltsam, dann können wir mal so der E-Prom hat eine Read-Wide Leitung die ist laut Schaltplan eigentlich so verschaltet, dass er nie geschrieben werden kann, dass er immer nur gelesen wird und dann habe ich chemisch herausgefunden dass ich gar vergessen habe die zu verbinden die waren nicht verbunden, die hingen in der Luft so was dann passiert ist rein technisch, die funktioniert wie eine Antenne und fängt halt irgendwelche Bits auf, die da von den Pins nebenan so rumfliegen und irgendwann ist das halt auch mal in einem Zustand weil er sagt ok, da schreibe ich jetzt so was auch gerade auf dem Bus passiert also hat er sich dann irgendwann durch Zufall selbst kaputt gemacht zum Glück, das waren dann genau die beiden benachbarten Leitungen, die 5 Volt die ich dafür brauche, um dafür zu sorgen, dass er nie geschrieben hat die sind direkt daneben das heißt, da war dann ein großer Lötklex mit lauter Verzweiflung einmal drauf geträufelt und das war dann auch tatsächlich der letzte Schritt, der fehlte und dann Rom neu programmiert reingesteckt und dann meldete sich das System genau so wie man es hier jetzt sieht mit ich bin Maus, ich bin an 65102 Computer tu was mit mir ja, ich wollte nochmal fragen, wegen deinem T-Shirt hast du vor, ein Forf zu implementieren für deinen selbst gebautes System es soll ein Forf geben, es gibt auch schon ein Forf für den 6502 leider ist das größer als das, was im Rom noch übrig ist, reinpasst und ich könnte das nochmal zurückplättern auf das Adressschema, ich habe eigentlich was so geplant dass ich einen zweiten Rom vor den ersten Rom vorpacken kann, dass ich ihn so mit 16 KB zusammenhängt Rom habe da habe ich mich da dann ein bisschen vertan ich habe dann zwei Adressleitungen mit tauschen was dann dafür sorgt, dass ich 8 KB Rom habe dann kommt irgendwann nix und dann kommt wieder 8 KB Rom das macht es natürlich ziemlich schwierig so ein System so auseinander zu dividieren dass das trotzdem irgendwie zusammenspielt von daher wird es wahrscheinlich eine weitere Riteration geben von dem Board oder irgendwas anderes, dann soll es auch an Forf geben oder ich finde eines, dass so klein ist dass der Forfkörne so klein ist dass der Rest dann quasi im Ramm mit irgendwelchen Forf wird dann nachgebaut gibt es noch andere Ideen, die du hast für weitere Entwicklungen deines Systems? ja, das ist so der Anfang das ist das, was ich bauen möchte das ist das, was ich mir vor 30 Jahren vorgestellt habe was ich gerne hätte, minimal ja, jetzt kann man natürlich anfangen, riesen Luftflöster zu bauen ich hätte gerne irgendwie eine grafische Einausgabe das wäre toll so ein bisschen Grafik oder irgendwas, was man nunfalls über eine serielle Schichtstelle ansteuert ein Soundchip wäre natürlich cool und ansonsten eventuell das Ganze auf mehrere Boards verteilen, dass man so ein CPU Board hat dass man idealerweise vielleicht sogar so ein Euro-Bus oder ein S100-Bus man kann auch mal mit anderer Hardware, die schon da ist einfach rumspielen das wären so Ideen, die mir so im Kopf rumspugen, man sagen kann das wird zumindest nicht so der letzte Schritt sein sagen, okay, abgehakt wieder so ein Haken in der Liste des Lebens von Dingen, die man unbedingt tun möchte ich denke schon, dass ich da weiter basten werde auf jeden Fall ja, eine Frage zu den Speichern warum nur 8 Kilobytes vor 30 Jahren war das vielleicht ein Kostenfaktor, aber heute kosten 64 Kilobytes auch nicht mehr wie 8 ja, das ist eine Designentscheidung an der Stelle, die 8 Kilobytee-Proms sind einfach zu beschaffen gibt es in der Diebauweise also mir war halt wichtig, dass das alles also ich möglichst keine SMD-Bau-Teile habe sondern alles wirklich bedrohtet und ein 32 Kilobyte, so ein 28C 256 zum Beispiel so ein Baustein, den kriegt man einfach zu kaufen auf der anderen Seite ich muss ja meinen Speicher sowieso so minimal segmentieren mit einer minimalen Logik und da ist halt so dieses 32K und dann 8K-Blöcke am einfachsten umzusetzen deshalb auch dann so ein 8K-E-Prom selbst wenn ich einen größeren nehmen würde der würde auch da reinpassen, aber ich könnte halt immer nur 8K davon benutzen könnte nur maximal mit einem Jumper zum Beispiel dafür sorgen, dass ich unterschiedliche Blöcke dafür benutze was ich umschalte von Fourth auf Basic oder so Geschichten, das würde zum Beispiel ja gut, das hätte ein paar Gatter noch erfordert um die Adressdekodierung jetzt mal wirklich minimales System zu sagen es soll funktionieren dann kann ich anfangen, mich mit Software zu beschäftigen zu überlegen, ok wie sieht das Ganze aus und dann kann man es immer noch größer bauen so keep it simple ist so das Motto dabei weil einfach anfangen kompliziert wird meistens von ganz alleine wollen die natürlich alle jetzt nachbauen wie geht das? gibt es die Ships alle zu sind die im freien Handel und die Schaltpläne die Schaltpläne noch nicht aber irgendwo ich habe so ein Github-Account der ist ja für den E-Promer sowieso schon die Folien wird es auch zum runterladen glaube ich irgendwo geben dann hier auf der Seite da wird es sicherlich landen wenn ich mir sicher bin, dass es in einem sage ich mal auch detaillierten für den detaillierten Blick vorzeitbaren Zustand ist zurzeit habe ich selber die Finger dran ich weiß wo die Pitfalls sind das heißt ich kann die auch umschiffen also bis auf das Copy-Paste-Problem zum Beispiel gerade aber das ist keine Raketentechnologie wo ich sagen kann da soll keiner draufgucken wie gesagt das haben eine ganze Menge andere Leute auch schon gebaut mir war auch wichtig dass alles was ich für Bauer auch noch zu kaufen ist wie gesagt die CPU selber wird noch produziert die kann man kaufen SRAM Bausteine kann man kaufen also wenn man sich mal was ich lahm nenne ist mal ein bisschen blöd aber irgendwie so bei diversen Internet-Händlern mal umschaut nach SRAM suchen und nach da sowieso die gibt es auf alle Fälle die E-Proms gibt es zu kaufen das ist keine Hürde sozusagen das Wichtigste wäre jetzt natürlich die Platine ja also man macht es halt so wie ich angefangen habe erstmal auf einem Redboard oder gibt sich ein bisschen mehr Mühe was ich halt nicht getan habe auf so einer Protoplatine das geht auch das haben auch schon Leute getan das ist nicht so das es nicht geht ich habe mich einfach nur so düsselig angestellt ich wollte es halt schnell fertig haben irgendwann geht das dann und dann wird man halt schneller und unkonzentriert und macht halt Fehler und dann ja weil jetzt ich wiederholt es nochmal für die Videoaufnahme wenn man es auf einer Protoplatine macht hat man keine Durchkontaktierung wird es lötenkomplizierter sehe ich nicht so weil ich keine Drähte beliebig übereinanderlegen was ich hier mit einer 2-seitigen Platine habe wo ich immer gucken muss wo kreuzen sich Leitungen wo muss ich irgendwelche Umwege gehen damit ich keine Kursflüsse produziere kann ich einen beliebig dicken Kabelwust einfach nehmen an so ein Chip dranlöten und was ich so 10cm weiter an den nächsten Chip dranlöten solange ich dabei sorgfältig vorgehe und nicht einfach und es auch überprüfe was ich da tue ist das prinzipiell sogar einfacher aber das ist glaube ich eine Glaubensfrage also man kann auch durchaus wenn man mal die Google-Wildersuche benutzt und so nach Prototypen Platinen, Homebrew-Computern und so sucht da gibt es sehr spannende Sachen so Punkt für Punkt-Vertratung wo man einfach vor lauter Kabeln oder vor lauter Drähten gar keine Platine mehr sieht da sind ja noch irgendwelche Decoupling-Capacitor-Snap wir haben die Kondensatoren noch irgendwo so mit der so fein reingelötet und so das sieht dann so sehr spannend aus das hat eher was von Stricken für fortgeschritten und nicht mehr mit löten aber das funktioniert und zwar auch nachhaltig erstaunlicherweise also das geht schon denke ich da ist natürlich cooler wenn man so eine tolle Platine hat aber es halt warten und es kostet auch Geld das darf man halt auch nicht unterschätzen mal einfach so einen Prototypen der da nicht funktioniert wenn man da so 70-80 Euro für ausgegeben hat das ist natürlich schon frustrierend ja, aber es geht halt alles je nachdem wie kompliziert oder wie schnell man das Ganze haben möchte ok, dann ja, vielen Dank fürs Zuhören vielleicht steht der von euch nächstes Jahr einer hier und erzählt was er gebotet hat muss ja nicht immer 30 Jahre dauern ok