Autor Thema: kleiner und etwas andera Logiksimulator  (Gelesen 9725 mal)

Osbios

  • Beiträge: 247
    • Profil anzeigen
Gespeichert
« am: 25. February 2007, 22:01 »
Auch auf die Gefahr hin, dass ich für verrückt gehalten werden...

Ich habe mal aus Spaß angefangen einen Simulator für logische Schaltungen zu proggen. Dieser verfügt jedoch nicht über eine IDE, sondern wird mit einem Bild in BMP Format gefüttert. :)

Beispiel (5 fach vergrößert): http://img222.imageshack.us/img222/3343/testfo6.png

Die obereen 2 Leitungen sind Eingänge. Der linke Eingang wird beim starten der Simulation einmalig aktiviert und der Recht soll Tastatureingaben in serieller Form übertragen (1 Startbit+8 Datenbits).
Unten gibt es einen Anschluss für die Textausgabe auf den Bildschirm. (auch 1 Startbit+8 Datenbits).
In der Mitte sind die beiden Schaltungensarten UND und XOR dargestellt, mit dennen man jede Logik darstellen kann. Schwarze Pixel dienen dabei als Leitung.

Zusätzlich sollen die Ränder links und rechts mit belibieg vielen Ein/-Ausgängen für einen Arbeitsspeicher dienen.

Damit könnte man sich dann eine ganze CPU zusammenbauen.  O.o

Speziel die Möglichkeit einen Arbeitsspeicher mit (theoretisch unbegrenzt viel) Speicher zu benutzen (was in fast allen Logik-Simulatoren fehlt) sollte doch großes Potenziall enthalten.

Frage: Was für Ein-/Ausgabemöglichkeiten könnte man noch einbauen wenn es fertig ist? Was haltet ihr davon?
db 0x55AA

kevin

  • Administrator
  • Beiträge: 2 767
    • Profil anzeigen
Gespeichert
« Antwort #1 am: 25. February 2007, 22:04 »
 :-o

Klingt leicht verrückt, aber doch irgendwie cool. :)
Thou shalt not follow the NULL pointer, for chaos and madness await thee at its end.

nooooooooos

  • Beiträge: 734
    • Profil anzeigen
Gespeichert
« Antwort #2 am: 25. February 2007, 22:14 »
Echt geil...Mal etwas anderes...

Soundausgabe wär noch irgendetwas...

Osbios

  • Beiträge: 247
    • Profil anzeigen
Gespeichert
« Antwort #3 am: 25. February 2007, 22:59 »
Um diese alles noch etwas näher zu bringen hier ein kleine Schaltung: http://img86.imageshack.us/img86/453/v2yb8.png

Das ganz gibt den Buchstaben A aus: 1 Startbit und 1-0-0-0-0-0-1-0 (kleine Bits werden zuerst gesendet, also 0x41)

funktioniert perfekt :]

PS: Das graue sind überlappungen von Leitungen die sich nicht berühren.
db 0x55AA

RedEagle

  • Beiträge: 244
    • Profil anzeigen
    • RedEagle-OperatingSystem - Projekt
Gespeichert
« Antwort #4 am: 26. February 2007, 16:44 »
Hi
Echt mal nen ganz anderer Ansatz, sowas zu realisieren :) ; gefällt mir
gibt es nur AND und XOR?? OR währe noch recht hilfreich, und ggf NAND/NOR

nooooooooos

  • Beiträge: 734
    • Profil anzeigen
Gespeichert
« Antwort #5 am: 26. February 2007, 20:34 »
nicht schlecht...nur ist mir noch nicht klar, welche Farbe für welche Logik steht und wie sich der ausgang von den eingängen unterscheidet.

Gruss
Nooooooooooos

Osbios

  • Beiträge: 247
    • Profil anzeigen
Gespeichert
« Antwort #6 am: 26. February 2007, 21:56 »
@RedEagle:

OR wird als bauteil nicht benötigt, da man ganz einfach mehrere Ausgangsleitungen verbinden kann, was das selbe bewirkt. (Ist ja nur Binärlogik und kein richtiger Stromfluss)

Ich hatte eigendlich vor auf die zwei grundlegenden Transistorschaltungen aufzubauen, und das sind UND und STOP (Hab ich mal so genannt).

Es gib jeweils ein zu steuerndes Signal (Eingang 1) das zum Ausgang geht und ein steuerndes Signal (Eingang 2).

Bei dem ersten Bauteil handelt es sich um das AND, also das gesteuerte Signal (Eingang 1) wird zum Ausgang durchgelassen wenn das steuernde Singal (Eingang 2) eingeschaltet ist.

Das zweite Bauteil invertiert die Funktion des Steuersignales. Das zu steuernde Signal (Eingang 1) wird also nur durchgelassen wenn das Steuersignal (Eingang 2) aus ist.
Da ich bei dieser Schaltung jedoch die beiden Eingänge unterscheiden müsste, habe ich mich dagegen entschieden und dafür XOR verwendet.

Aber AND und XOR reichen vollkommen aus. ;]



@noo...oos:

Grün steht für UND und rot für XOR.
Die Eingänge bzw. der Ausgang ergeben sich aus den Positionen der Leitungen.
Eingang --X-- Eingang
          |
          |
       Ausgang


Die 3 anschlüsse kann man natürlich nach beliben ausrichten:

Eingang
  |
  |
  X-- Ausgang
  |
  |
Eingang

Es müssen also immer genau 3 Leitungen zu einem Bauteil führen, wovon die "mittlere" Leitung der Ausgang ist.
db 0x55AA

nooooooooos

  • Beiträge: 734
    • Profil anzeigen
Gespeichert
« Antwort #7 am: 27. February 2007, 19:51 »
Ach so..Dann sind alle die XORs mit den abgeschnittenen Leitungen fürs Timing? Und wofür steht das Quadrat mit dem XOR in der Ecke? Dauer"strom"? Brauchts das für die Leitung nicht auch?

Gruss
Nooooooooooos

Osbios

  • Beiträge: 247
    • Profil anzeigen
Gespeichert
« Antwort #8 am: 27. February 2007, 20:09 »
Richtig erkannt, die durchleitenden XORs sind fürs Timing. Bei dem "Quadrat" handelt es sich aber um ein DauerWahr. Das ist ein kleiner Unterschied! ^^

Leider komme ich die Woche so gut wie garnicht zum programmieren. Mal schauen, wird wohl erst am WE fertig. :/
db 0x55AA

nooooooooos

  • Beiträge: 734
    • Profil anzeigen
Gespeichert
« Antwort #9 am: 28. February 2007, 13:56 »
Aber echt geil...Wieso braucht es denn am Anfang der "Steuer"leitung"" zwei XORs mit einer Falsch-leitung??

Geil wär auch noch, wenn man irgendwie andere Bilder in dieses Bild einbinden könnte, damit man sich z.B. ein Tastaturtreiber, ein Grafiktreiber, ein paar Register usw. einbinden könnte. Blöd ist nur das irgendwie mit dem Konzept vereinbart zu bekommen.


Gruss
Noooooooooooos

Osbios

  • Beiträge: 247
    • Profil anzeigen
Gespeichert
« Antwort #10 am: 28. February 2007, 18:17 »
Wieso soll das nicht ins Konzept passen? strg+c strg+v  :D

Man könnte natürlich auch das I/O Konzept auf Basis eines Bussystems aufbauen, an dem dann mehrere "Bitmaps" gleichzeitig betrieben werden. Die könnten dann miteinander kommunizieren. ^^
db 0x55AA

nooooooooos

  • Beiträge: 734
    • Profil anzeigen
Gespeichert
« Antwort #11 am: 28. February 2007, 19:50 »
jo...wie kann man eigentlich z.B. ein A LINKS UNTEN am Bildschrim ausgeben? Also eine Position angeben.

Gruss
Noooooooooooos

Osbios

  • Beiträge: 247
    • Profil anzeigen
Gespeichert
« Antwort #12 am: 28. February 2007, 21:12 »
Bis jetzt war nur eine serielle Ausgabe wie bei einer Konsolle vorgesehen. Aber später baue ich eine art Grafikkarte ein. So das man auch pixeln kann.
db 0x55AA

Osbios

  • Beiträge: 247
    • Profil anzeigen
Gespeichert
« Antwort #13 am: 11. March 2007, 19:16 »
OK, hier kommt die erste Beta:

http://ultrashare.net/hosting/fl/487c9e6ca8

Einen Namen hat das ganze noch nicht.


Die Anschlüsse funktioniert jetzt folgendermaßen:

An der linken seite am obersten Anschluss wird bestimmt ob man Speicher(0) oder einen Port(1) adressiert. Alle darauf folgenden Anschlüsse sind die Adressierungsbits. (momentan max. 32)

Gelesen wird mit dem oberen, gespeichert mit dem unteren Anschlüssen. Dabei ist der linke Anschluss jeweils zum auslösen des lesen/speichern. Es wird immer ein Byte gelesen/geschrieben, also jeweils 8 Anschlüsse für die Daten!

Rechts sind die Anschlüsse für IRQs. der Oberste wird einmalig beim starten aktiviert, der zweite für die Tastatur (1x beim drücken, 1x beim loslassen)

Jetzt noch die IO-Ports:
Der Bildschirm setzt sich aus 32 x 32 Zeichen zusammen und kann mit ASCII (original mit 127 Zeichen) direkt beschrieben werden. Dazu einfach auf die Ports von 0 bis 1024 schreiben.

Die gedrückten Tasten kann man von Port 0 lesen.
Das oberste Bit vom Scancode ist 0 bei gedrückten und 1 bei losgelassenen Tasten.
Der Puffer für Scancodes ist 16 Byte groß, wenn er voll ist werden keine IRQs für die Tastatur mehr erzeugt.

[edit]
Btw: das ganze benötigt jetzt SDL und SDL_image.

Außerdem ist eine kleine Testschaltung mit dabei (over.bmp), die zeigt wie umständlich komplex schon einfache Zählschaltungen werden. -_-
[/edit]
« Letzte Änderung: 11. March 2007, 19:18 von Osbios »
db 0x55AA

 

Einloggen