Entwickler-Ecke

Freeware Projekte - MY CPU Turingmaschine


catweasel - Di 16.03.04 20:54
Titel: MY CPU Turingmaschine
Hi,

vor einiger Zeit hatte ich ja mal diesen Thread hier http://www.delphi-forum.de/viewtopic.php?t=22659 gestartet...
Ich hab mich jetzt mal darangemacht mir eine kleine CPU selber zu basteln ;-)
Man hat also eine Konstruktion wie bei einer echten CPU und steuert deren Zustand mit Hilfe von
Assembleranweisungen....
Manche nennen sowas auch Turingmaschine, oder von-Neumann Rechner.. Ich weiss zwar nicht was der Unterschied zwischen beiden ist und daher auch nicht, ob ich eher eine Turingmachine oder einen von-Neumann Rechner gebastelt habe... ;-)

Das Programm ist dabei dem von Popov nicht unähnlich. (Hatte er auch mal hier veröffentlicht und ist im
anderen Thread verlinkt).
Danke für die Inspiration ;-)

DOWNLOADLINK BITTE *RECHTE* MAUSTASTE ZUM DOWNLOADEN BENUTZEN
http://de.geocities.com/catweedzel/dat/MY_CPU.zip


So, aber nun mal ein paar Worte zum Programm:

Obwohl das Form, notgedrungen, etwas grösser ist als dem Einen oder Anderen vielleicht lieb, habe ich
versucht ein paar der früheren Fehler zu vermeiden. DAs Formular ist nun nach rechts und unten
"klappbar". Sollte jemand trotzdem noch Probleme mit der Formulargrösse haben, bitte mailen. Ich lege
auch mal ein paar ScreenShots bei, wie es auf meinem Monitor aussieht...
Ich habe auch versucht die Hile zu dem Programm so ausführlich wie möglich zu gestalten. Sollte etwas
wesentliches fehlen, bitte Feedback!
Es werden, unter Anderem, folgende Features geboten: :-)


CPU
------

- Es gibt 8 Register mit 32 bit Breite. (Im Momoent jedoch ausschliesslich nur als 32bit ansprechbar).
- Zero-Flag für bedingte Sprünge
- 12 verschiedene OpCodes (Assemblerbefehle)
- Interrupts für Bildschirm Ein/Ausgabe und Tastatureingabe
- Sprungreferenzierung durch selbstdefinierte Labels
- Bedingtes "Compilieren" des Assemblercodes (z.b. Sprunglabels werden in fixe Adressen aufgelöst)
- Es steht ein Stackspeicher zur Verfügung
- Es steht ein Hauptspeicher zur Verfügung


HARDWARE
-------------

- Monitor. Kann schon durch Interrupts angesprochen werden.


Schaut euch einfach mal an. Bei Fragen einfach melden :-)


Catweasel


Moritz M. - Mi 17.03.04 15:18

Fehler 404: Seite kann nicht gefunden werden


Christian S. - Mi 17.03.04 15:24

Ähm, ist das jetzt ein Gemeinschafts- oder ein Freeware-Projekt? Je nachdem würde ich die beiden Threads dann in der einen oder anderen Sparte zusammenführen. Ein Thread pro Projekt sollte nämlich reichen. :-)


toms - Mi 17.03.04 15:56

Zitat:
Fehler 404: Seite kann nicht gefunden werden


Probier's mal mit der Rechten Maustaste und "Ziel speichern unter..." (o.ä)


catweasel - Mi 17.03.04 19:56

Zitat:
Ähm, ist das jetzt ein Gemeinschafts- oder ein Freeware-Projekt? Je nachdem würde ich die beiden Threads dann in der einen oder anderen Sparte zusammenführen. Ein Thread pro Projekt sollte nämlich reichen.

Also da ansonsten, bisher, niemand Interesse an der Mitentwicklung hat, habe ich es als FreeWare Projekt veröffentlicht...
Der andere Thread ist also im Prinzip "geschlossen"
Ich wollte den Thread im anderen Bereich aber stehen lassen, da dort viele Links enthalten sind und ich mich auch in diesem Thread auf den Anderen beziehe.

Catweasel


ps:
Hab schon nen Schock bekommen, weil ich dachte die haben mir schon wieder den Webspace gecancelt.. :shock:
Das speichern geht tatsächlich nur mit der rechten Maustaste... :D


Christian S. - Mi 17.03.04 19:59

Ich habe den Thread dann mal "richtig" geschlossen, aber stehen gelassen. :-)


catweasel - Do 18.03.04 22:32

Hmmm keiner der das mal tesen mag... :?: :-(

Catweasel

ps: Peter meinte mit dem Schliessen den anderen Thread ;-)


Lunzen - Fr 19.03.04 10:57

Onz hat folgendes geschrieben:
Fehler 404: Seite kann nicht gefunden werden


funzt bei mir auch nicht ... :(


Jack Falworth - Fr 19.03.04 11:05

Würde das Prog gerne mal anschauen, da ich gerade selbst an einer Turing Maschine schreibe,
aber leider kommt bei mir auch nur die GeoCities Seite mit der Bemerkung -> Nicht verfügbar!

MfG

Jack Falworth

Edit:
Unterschied Neumann - Turing:
Der Neumann Rechner besteht aus fünf Funktionseinheiten, dem Steuerwerk, dem Rechenwerk, dem Speicher, dem Eingabewerk und dem Ausgabewerk. Man hat also einen Speicher in dem die Zwischen-, Endergebnisse gespeichert werden. Das ist bei der Turing Maschine anders. Der Aufbau ist um einiges komplexer als der bei einer Turing Maschine.
Diese besteht aus einem unendlichen Band von Speicherzellen, in die geschrieben werden können und von denen gelesen werden können. Eine Steuerungsunit lenkt einen beweglichen Lese-Schreib Kopf, der über das Band fährt. Dieser ließt Werte aus, leitet die an die Steuerungsunit weiter, die gibt einen Rückgabewert zurück, der wieder auf das Band geschrieben wird. So wird das Eingabewort abgearbeitet. Das Band wird also sowohl für Eingabe als auch für Ausgabe benutzt. Das ist der Hauptunterschied.

Das ganze ist jetzt sehr grob vereinfacht. Es gibt natürlich auch noch andere Aspekte zu nennen.

Edit2:
Was mir noch gerade aufgefallen ist.
Hast du wirklich einen Compiler integriert? Ich sehs immer wieder, dass Leute davon sprechen, dass sie einen Mordscompiler integriert haben, dabei ist das meistens noch nicht mal ein Interpreter.
Ein Compiler führt eine lexikalische, syntaktische und semantische Analyse durch und erzeugt (wenn kein Fehler vorliegt) irgendeinen Maschinencode.
Das ist jetzt nichts gegen dich, sondern allgemein sollte man mit so Begriffen nicht zu freigiebig sein.
Wenn ich dir jetzt Unrecht getan habe, dann entschuldige ich mich natürlich dafür.


catweasel - Fr 19.03.04 11:08

Das Problem hatte schonmal jemand hier im Thread...

Bitte die rechte mAustaste zum Downloaden benutzen...

Catweasel

ps: Bald kommt auch ne neue Version Online mit emulierter Festplatte und einem primitiven Kompiler für eine noch primitivere Hochsprache die auf diesem MyCpu Assembler aufsetzen wird.
Aber testet bitte erstmal diese Version ;-)

Catweasel


Jack Falworth - Fr 19.03.04 11:26

Mit der rechten Maustaste funktioniert es bei mir auch nicht. Egal was ich auswähle.
Er speichert höchstens die htm seite, aber ist nicht unbedingt der sinn der sache.

MfG

Jack Falworth


catweasel - Fr 19.03.04 11:51

Zitat:
Mit der rechten Maustaste funktioniert es bei mir auch nicht. Egal was ich auswähle.
Er speichert höchstens die htm seite, aber ist nicht unbedingt der sinn der sache.

Hmm :-( Habs selber gerade nochmal probiert, geht bei mir (IE 6; WINXP).

Oder PN mir mal deine email adresse, ich schicks dann per email....

Catweasel..

ps : Zu dem Compiler sag ich gleich mal was, muss aber erstmal was essen ;-)


Delete - Fr 19.03.04 11:51

IE, rechte Maustaste, "Ziel speichern unter...". Klappt bei mir einwandfrei.

Wenn ein paar Beispielprogramme dabei wären, könnte ich es auch testen. :?


catweasel - Fr 19.03.04 11:54

Zitat:
Wenn ein paar Beispielprogramme dabei wären, könnte ich es auch testen.

Ja, Sorry, ich hab die Beispielprogramme verloren, als ich deren Dateiformat reformiert habe :?
Bei der nächsten Release (heute abend schätze ich) werden wieder welche dabei sein...
Abeer schau dir ruhig mal die OpCodes an. Vielleicht schaffst du ja die Addition selbst ;-)

Catweasel..

ne Weile später ...

Hab gerade eins zusammengehackt...:

Müsste in der zur Verfügung stehenden Version so schon funktionieren...

Das Programm gibt ein Zeichen auf dem Bildschirm aus.

MyCPU Quellcode:


Quelltext
1:
2:
3:
4:
5:
6:
MOV    EAX    103                // Der Wert 103 wird in EAX geschrieben
STOR  5        EAX              // Der Wert von EAX wird in Speicheradresse 5 geschrieben
MOV   SI       5                 // Das SI Register zeigt nun auf Spiecherzelle 5 mit unserem abgelegten Wert
MOV   IR       2                 // Der Bildschirminterrupt erwartet für die Zeichenausgabe den Parameter IR=2
INT    0                          // Interrzpt 0 ist der Bildschirminterrupt.
HLT                              // Programmende (OpCode optional).


Der Interrupt 0 führt also dazu, falls IR=2 ist, (IR bedeutet Interruptregister ;-) ), das Der Wert der Speicherstelle auf die SI zeigt als Zeichen ausgegeben wird...

Catweasel

ps: Muss nochmal kurz weg, aber ich erkläre dann anhand dieses Quellcodes wie mein "Compiler" arbeiten soll...


Jack Falworth - Fr 19.03.04 15:54

also ich hab den neuesten Opera und da gehts nicht.

Hab dir mal ne PN mit meiner E-Mail Addy geschickt, dann kannste mir das Prog schicken wenn du Zeit und Lust hast.

MfG

Jack Falworth


Delete - Fr 19.03.04 16:58

Mozilla, rechte Maustaste auf Link, "Save linktarget as...". Sag mal könnt ihr alle eure Browser nicht bedienen? :roll:


Christian S. - Fr 19.03.04 17:02

Auch in der Version 7.32 von Opera kann man mit "Save Target as ..." diese Datei speichern ... :roll:


catweasel - Fr 19.03.04 18:15

S :

Die neue Version ist da...

Downloadlink ist derselbe und funktioniert sogar (mit rechter Maustaste ;-) )

Catweasel


Jack Falworth - Fr 19.03.04 21:18

@Peter Lustig: Ja jetzt geht es bei mir auch. Aber heute mittag ging da noch gar nichts. :?

MfG

Jack Falworth


tommie-lie - Fr 19.03.04 22:16

Ist aber ein reines Server-Problem. Der Geocities-Server macht sich anscheinend die Mühe den Referrer auszulesen. Bei mir geht's auch perfekt mit Linksklick, bis ich meinen Webwasher deaktiviere, der sonst den Referrer filtert.


catweasel - Do 25.03.04 23:32

@ Jack Falworth
Zitat:
Würde das Prog gerne mal anschauen, da ich gerade selbst an einer Turing Maschine schreibe

Na, hast du dir (oder sonst wer) schon einen Eindruck verschaffen können ?

Catweasel


Jack Falworth - Fr 26.03.04 16:43

War gerade 3 Tage aufm Jufo Wettbewerb und hatte kein INet zu Hause. Deshalb schreibe ich erst jetzt.

Hab nur kurz drübergeschaut. Das Programm erinnert mich irgendwie an das Programm, das glaub ich Popov mal vorgestellt hat. Hab nicht so viel Ahnung über Assembler, daher kann ich dazu nichts sagen. Nur soweit. Das ganze ist weder ne Turing Maschine noch kann ich da irgendwo nen Compiler erkennen. Die Befehle sind ja schon vorgegeben und man muss sie ja nur noch über Listboxen auswählen.

Allgemein wäre es vielleicht nicht schlecht, wenn es ne kleine anleitung gäbe wie man das programm benutzt, ich blick da auf die schnelle irgendwie nicht so richtig durch.

MfG

Jack Falworth


catweasel - Fr 26.03.04 18:25

Hi,

Das das Programm dem von Popov nicht unähnlich ist hab ich ja in meinem ersten Posting schon erwähnt...

Zitat:
Maschine noch kann ich da irgendwo nen Compiler erkennen. Die Befehle sind ja schon vorgegeben und man muss sie ja nur noch über Listboxen auswählen.

Häh?... Bei nem IBM Rechner sind die Befehle doch auch schon vorgegeben.. ein PUSH/POP heissen eben PUSH un POP und nich PISH und SEX ;-)
Der "Compiler" ist in der nächsten Version dabei.....
Das einzige was der "Compiler" in der aktuell upgeloadedten Version macht ist das Aufösen der Labels in feste Sprungadressen...
Ich bin gerade dabei eine art "BAsic" zu schreiben, wo die Befehle dann eben in diesen hausgemachten Assembler compiliert werden.
Dabei fin ich mit der lexikalischen Analyse fast durch un hab schon einen primitiven Automaten für die Syntaxprüfung......
Im Moment findet nur ein just-in-time Syntaxprüfung während der Laufzeit und eine Prüfung auf korrektes Labeling vor Programmstart statt..
Ich gebe aber zu: An der Semantik werd ich mir woh loder übel die Zähne ausbeissen....

Was ist an meinem Programm keine Turingmaschine ?

Naja, eine kleine Kurzdoku ist ja dabei...
Oder lade einfach mal das Additions Beispielprogramm....

Catweasel


Jack Falworth - Fr 26.03.04 20:25

catweasel hat folgendes geschrieben:

Häh?... Bei nem IBM Rechner sind die Befehle doch auch schon vorgegeben.. ein PUSH/POP heissen eben PUSH un POP und nich PISH und SEX ;-)


Das mit dem "vorgegeben" hab ich im Zusammenhang mit Compiler gebraucht.
Und ich finde, dass das kein Compiler ist. Die lexikalische Analyse kann man ja einfach umgehen, weil man theoretisch nur prüfen muss, was in der jeweiligen Box drinsteht. Bei der Syntax kann man auch nicht viel falsch machen, weil ja alles schon vorgegeben ist, also das zuerst der Befehl steht und dann der Parameter.

catweasel hat folgendes geschrieben:

Was ist an meinem Programm keine Turingmaschine ?


Definition nach Alan Turing

Eine Turingmaschine ist ein 7-Tupel T = ( X, B, Z, q, b, z0, Ze), wobei gilt:

- X ist eine nichtleere, endliche Menge, das Eingabealphabet,
- X Teilmenge/gleich B ist eine nichtleere, endliche Menge, das Bandalphabet,
- Z ist eine nichtleere, endliche Menge, die Zustandsmenge,
- q: (Z/Ze) x B -> B x {L, N, R} x Z ist eine Funktion, die Überführungsfunktion, welche jedem Paar (Zustand,
gelesenes Zeichen) ein Tripel (zu schreibendes Zeichen, Kopfbewegung, Folgezustand) zuordnet,
- b Element B \ X ist das Leerzeichen oder Blank,
- z0 Element Z ist der Anfangszustand
- Ze Teilmenge/gleich ist die Endzustandsmenge


oder für den Durchschnittsbürger:

Eine TURING-Maschine läßt sich wie folgt beschreiben:
ein beidseitig unbegrenztes Band, das in Felder aufgeteilt ist.
Jedes Feld kann ein Zeichen aus einem endlichen Alphabet oder ein Leerzeichen aufnehmen.
Auf dem Band bewegt sich ein Schreib-Lesekopf, dabei kann genau das Feld unter dem Kopf gelesen oder beschrieben werden; Danach bewegt sich der Kopf maximal um eine Position nach links oder rechts.
Ein Programm gibt die Berechnungsschritte an. Bei der Berechnung kann nur eine endliche Menge von Zuständen angenommen werden.


Frage beantwortet?


MfG

Jack Falworth


catweasel - Fr 26.03.04 20:50

Zitat:
ein beidseitig unbegrenztes Band, das in Felder aufgeteilt ist.
Jedes Feld kann ein Zeichen aus einem endlichen Alphabet oder ein Leerzeichen aufnehmen.
Auf dem Band bewegt sich ein Schreib-Lesekopf, dabei kann genau das Feld unter dem Kopf gelesen oder beschrieben werden; Danach bewegt sich der Kopf maximal um eine Position nach links oder rechts.
Ein Programm gibt die Berechnungsschritte an. Bei der Berechnung kann nur eine endliche Menge von Zuständen angenommen werden

Abgesehen von dem unbegrenzten Band macht mein Programm das doch alles, oder ? Das Band ist bei eben begrenzt .. Eigentlich hab ich sogar 3 Bänder.. Bildschirm, Festplatte, Hauptspeicher... Der Stack ist ein weiteres einseitig unbegrenztes Band...

Zitat:
Die lexikalische Analyse kann man ja einfach umgehen, weil man theoretisch nur prüfen muss, was in der jeweiligen Box drinsteht. Bei der Syntax kann man auch nicht viel falsch machen, weil ja alles schon vorgegeben ist,

Oh doch kann man....
Man kann beispiesweise zu einer nicht vorhandenen Zeilennummer/Label springen wollen..
Naja, alles was vorgegeben ist, ist der Name des Opcode... Ich habe lediglich eine Combobox draus gemacht für etwas mehr Komfort.. (Wer will schon ewig ne Liste aller Opcodes neben dem Rechner liegen haben)....
Bei Popov kannst du alles per Combobox auswählen, da sind keine grossartigen Fehler möglich..
Bei mir müssen aber alle Operanden per hand eingegeben werden und es muss geprüft werden was in den Feldern steht, z.b. ob SDX ein gültiger Registername ist oder nur ein Schreibfehler.....
Man kann bei meinem Assembler auch z.b. einen Wert nur per PUSH in den Speicher schieben der aus einem Register kommt..
ein PUSH 5 11 (würde den Wert 11 an Speicherstelle 5 schreiben wenns ginge ;-) ) geht also nicht... es müsste heissen z.b.
MOV EAX 11
PUSH 5 EAX
Also mann kann sehr viel falsch machen und das wird eben schon teilweise gecheckt...

Catweasel


Jack Falworth - Sa 27.03.04 13:36

ich glaub ich gebs auf.

Schau dir einfach mal ein Turing Simulator an, dann weißt du was ich meine.

Es ist einfach kein Compiler, aber ich hab keine Lust mehr mit dir weiter zu streiten.
Nur soviel: Na klar kann man in deinem Prog viel falsch machen. Du meinst damit aber nur die Reihenfolge der Befehle. Das ist aber nur für die semantische Analyse von Bedeutung. Man kann keine Befehle falsch schreiben oder falsche Parameter angeben (Zeichen, Symbole). Das ist normalerweise die Aufgabe eines Lexers und Parsers. Token, die nicht in die Syntax passen aufzufinden und den Anwender dann zu informieren. Das gibt es einfach in deinem Prog nicht. Also ist es kein Compiler, weil über die Hälfte fehlt!

MfG

Jack Falworth


catweasel - Sa 27.03.04 15:03

Zitat:
ich glaub ich gebs auf.

Na was denn ? so schnell ;-)

Zitat:
Nur soviel: Na klar kann man in deinem Prog viel falsch machen. Du meinst damit aber nur die Reihenfolge der Befehle. Das ist aber nur für die semantische Analyse von Bedeutung. Man kann keine Befehle falsch schreiben oder falsche Parameter angeben (Zeichen, Symbole).

Natürlich kann man... Niemand hindert dich daran MOF einzugeben anstelle von MOV und das hat nix mit der Reihenfolge von Befehlen zu tun...

Zitat:
Also ist es kein Compiler, weil über die Hälfte fehlt!

Das Fehlen einiger Dinge in dieser Version wurde von mir schon an unzähligen Stellen hingewiesen....

Catweasel

ps: Lass mich raten.. Deine Sigantur hängt auch bei dir überm Bett... handgehäkelt.... ;-)

pps: Das wir steiten wusste ich gar nicht.. Hättest du auch mal früher sagen können :D


Jack Falworth - Sa 27.03.04 16:22

catweasel hat folgendes geschrieben:
ps: Lass mich raten.. Deine Sigantur hängt auch bei dir überm Bett... handgehäkelt.... ;)


Das ist alles Teil meiner genialen "Im Stillen unbemerkt die Welt an mich reißen" Taktik
und es macht natürlich auch unheimlich spaß :D

catweasel hat folgendes geschrieben:

pps: Das wir steiten wusste ich gar nicht.. Hättest du auch mal früher sagen können :D


Aneinander vorbeireden wäre vielleicht der bessere Ausdruck ;)

MfG

Jack Falworth