Musik mit 8 Bit Computer abspielen

Solangsahm Fängt LTSpice an extremst zu laggen, habe graden den Full Adder gebaut und Simuliert, er funktioniert einwandfrei und wenn LTSpice das sagt, ist das auch so, da das Programm alles auf den pA genau berechnet.
Hier ein Schönes Foto, auch auf facebook: http://img217.imageshack.us/img217/17/alug.png
 
mit MOVR verschieb eine Zahl in ein anderes register z.B. ich habe ein Wert in AX und brauch diesen Wert in DX
Dann mach ich MOVR AX DX und nun hab ich den wert von AX AUCH in DX
MOVN damit schieb ich eine Zahl die vom Inputbus kommt in ein Register
MOVN AX schiebt die Zahl, die grad ein kommt in AX

//EDIT: Ansich fällt mir nun auchnicht mehr genau ein für welchen Inputbus MOVN war, also wars nicht wichtig, für den 0 Setzbefehl gibt es ZRO.
 
Ich hatte den Ram noch nicht fertig darum Fehlt STORE und LOAD, die 00 war ein fail von mir, ich mein LOAD AX Die 00 stand fürs sourceregister, habs ausversehen an die stelle von drain gesetzt.
Ich werde nun sowieso nochmal neu anfangen mit der CPU, darum öndert sich der Opcode noch ein bisschen, Anstelle von Logisim bau ich nun in LTSpice weiter, da kann ich Transistor für Transistor bauen und (Ironie an) habe sogar noch den Spaß widerstände berechnen zu dürfen (Ironie aus) und ich erkenne besser wenn was nicht funktioniert denn da LTSpice alles viel zu genau nimmt kann ich mir sicher sein, wenn es in LTSpice geht, geht es auch in echt. Ist halt ein Professioneles Simulationstool.
 
Zm glück kenn ich das x86 zugs net :D auf das Programmieren freu ich mich auch schon ich habe wie gesagt vor solche Spiele wie Phong Tetris <3 und sowas am laufen zu halten. Natürlich auch mit Musik. Was meinst du mit mehr Register, mehr als 8 ? Das Problem ist, die Multiplexer von denen die Register zur ALU gelangen sind riesig.
 
Ich programmiere ständig zum test, ob alles so läuft wie ich das möchte, immerhin bin ich derjenige, der dem Strom zeigt wos lang geht :D .
Der befehlsopcode hat max 4Bit d.H. ich hab platz für 16 Befehle die ich mir gut überlegen muss.
 
Also ich mach ein ADD befehl, ein SUB befehl aber ich habe das ADC und ABC noch net gerafft. Wie setz ich die Carry flag.
 
Die aus meiner Liste haben sich ein bisschen verringert, wenn du meinst dann werd ich ein 5Bit befehlsbuss bauen, nun habe ich Platz für 32 Befehle.
Erklär mir doch bitte nochmal ADC und SBC
 
:D ich kann kein assembler :O
Ok, dein Code hab ich sopweit verstanden, doch wie setz ich das in Hardware um, also was passirt bei ADC und bei SBC auser das die ADD/SUB funktion an geht und wie speicher ich die CarryFlag
 
Ich mach nun ein ADC befehl aber ich weis nicht ob ich SBC machen kann, da FullAdder und Subtrahierer eins sind. Um SBC bauen zu können muss ich glaub ich ein Subtrahierer bauen und das wäre nochmal die Arbeit und transistoren, wie im Adder schon sind. ist SBC so unglaublich wichtig ?
 
Also ich kann mim FullAdder addieren und subtrahieren aber nur ADC, denn beim Adder kann ich den Carry an machen aber es gibt halt ein Borrow
 
Ich hab gemeint, dass Ich ein Addierer habe, der duch verschiedene NOT Operatoren auch Subtrahieren kann, aber eigentlich ist es ein ADDIERER, ein Subtrahierer siehst nämich anderst aus.
Folgendes:
Hier der Schaltplan eines Subtrahierers: http://ustudy.in/sites/default/files/fullsub.gif
Hier der eines Adders: http://ustudy.in/sites/default/files/55 ... y.svg_.png
Wie du siehst ist Subtrahierer und Adder 2 Verschiedene Dinge, ich habe allerdings mein Adder so umgebaut, dass er AUCH subtrahieren kann. Allerdings, da es nach wie vor ein Adder ist, hat er kein Borrow sondern ein Carry und dieser Carry ist nur zum Addieren. Darum kann ich zwar ADC machen indem ich den Carry anschmeiß aber da der Adder kein Borrow hat, hab ich nichts womit ich SBC ausführ, wenn ich ADC und SBC brauch muss ich evt ein Subtrahierer bauen und dieser ist nochmal so groß wie der Adder.
 
Lange Rege kurzer Sinn, SUB kann ich auch in Software machen aber bei SBC bin ich mir ned sicher.
Ich setze bei einer Addition IMMER das Carry Flag in einem RS FF, dann gibt es ein ADD befehl und ein ADC Befehl, somit spar ich mit das Setzen und zurücksetzen der Carryflag, gesetzt wirds automatisch und möcht ich mit Carryflag rechnen dann ADC, möchte ich ohne rechnen mach ich ADD und bei jeder Addition wird sie automatisch gesetzt
 
Ich kann dir auch sagen, dass ich kein Subtrahierer brauch das hat vor und nachteile, mit dem Addierer kann ich zwar auch Subtrahieren aber da ich kein Borrow hab, geht SBB nicht. Der Addierer hat nur ein Carry Sprich mit dem Addierer kann ich ADD,SUB und ADC. In dem Artikel steht A + NOT(B) + 1 und damit Subtrahier ich aber da ich kein Borrow hab Geht SBB nicht.
 
Das macht natürlich sinn, aber durch diese Befehlssparerei brauchen wir irgendwann pro Befehl 3 Taktflanken, lohnt sich das denn ?
 
Also es ist sehr viel Möglich, durch den Fehlenden Subtrahierer Spar ich ca 300 Bauteile darunter 120 Transistoren.
Ich kann beim Subtrahiren Input B auf Not umstellen, damit spar ich mir den NOT Zwischenschritt in den Registern in dem ich das vor der Alu schnell mach.
Ich kann aber auch das endergebnis NOT ich weis nun nicht genau was du meinst mit jeden Bit Invertieren.





Für alle die diesen Thread gespannt verfolgen, habe ich mir nun ein kleinen FullAdder gebaut zum testen. Das scematic gibts zum Download.
Besucht mich auf Facebook: http://www.facebook.com/pages/Project-8 ... 021?ref=hl
 

Anhänge

  • ALU.zip
    2,9 KB · Aufrufe: 0
Das ist möglich, dann brauch ich nur den Befehl, wann Binput genottet wird. Das wäre ein SUB Befehl und dann kann/muss ich gleichzeitig den carry anschmeißen, ob carryflag oder nicht, bei SUB mim Adder mUSS der carry an.
AHHHHH Grad geht mir ein Riesen Licht auf, ich hab verstanden, wie dus meinst und bau das Grad in Logisim nach, natürlich kann ich den B Input Notten wie gesagt dann brauch ich Dafür ein Befehl der das register Nottet. Ich bau das nun mal im Fulladder nach und teste.
 
Also ich hab nochmal nachgedacht, ich Spare 32 Transistoren, wenn ich den B Input Nicht notte allerdings brauch ich dann eine Taktflange mehr.
 
Jap, ich bin nun dabei, ein befehl zu erstellen für NOT [drain] dann kann rechnen, wie du oben aufgeführt hast.
Dann gibt es die Befehle NOT, ADD, und ADC für normales SUB muss man also NOT(B) dann STC für carryflag dann A + B dann Carryflag weg nehmen, was 4 Taktflanken sind.
Für SBB muss man NOT(B), NOT(D), STC, A + B[Carryflag wird gesichert], [Carryflag wird geladen] C + D, Carryflag zurücksetzen. Das sind dann 6 Taktflanken.
 
Eins nach dem anderen, immerhin muss ich noch paar widerstände berechnen und das Zimmer hier aufräumen, ich mache nun erstmal die befehle ADD, NOT ADC STC und DTC um den Carry zu löschen.
 
Increment und Decrement kommt natürlich dazu aber den ADD Befehl. Ein freund sag, dass ich ADC garnicht brauch, stattdessen INC dazu nehmen soll, nun bin ich mir nicht so ganz sicher, ein Befehl kostet 3 Transistoren.
 
Das macht sinn, ich habs ihm gedagt, also bleibts dabei ADD bleibt und ADC auch.
 
Ja ein Befehl kostet 3 Transistoren die in den Decoder müssen aber es müssen natürlich auch Leitungen zur ALU führen was platz kostet.
Ein SUB Befehl kann ich allerdings nicht machen, dafür Müsst ich das B Register inventrieren was 32 Transistoren kostet.
Ich habe also nun bisher folgenden neuen Befehlssatz:
STC Zum setzen der Carryflag,
DTC und Löschen der Carryflag,
ADD ( + NOT(B) = SUB)
ADC ( + NOT(B) + STC + DTC = SBB)
NOT
AND ( + NOT = NAND)
XOR ( + NOT = XNOR)
OR ( + NOT = NOR)
Alles noch ohne opcode ( den Decoder mach ich zum Schluss.)
 
Auf so eine Ähnliche IDEE kam ich auch, war mich aber nicht ganz so sicher ob ich das machen kann, jetzt wo dus erwähst wirds logisch sprich ich entferne STC und DTC und mache ein ADS an stelle.
 
Das ist richig, vielen Dank. Habe heute angefangen den Opcode zu erstellen zumindest auf dem Blatt und werd diesem heutbabend Posten, desweiteren mach ich am Schaltplan der ALU weiter, wenn es nun nichts mehr gibt möchte ich die abschließen die ALU.
 
Ich habe SBB immer mit SBC verwechselt ^^ Mache nun die ALU fertig und Post ie auf facebook
SBB ist doch SUB with Borrow, was ist SBC
 
OR ist nicht weggelassen, selbstverständlich nicht, aber es ist im Schaltplan noch nicht vorhaden, mach ich grad und clk :D das ist Clock der Takt aber den muss man noch manuell setzen natürlich wird CLK später vom basistakt ersetzt
 
Mit CLK Takt ich alle Register in der Simulation, im echten PC Takt ich natürlich nicht manuell 1´000´000 Mal die Sek ^^ das lass überlass ich meinem PC.

Wie gesagt, ich habe nun die ALU fertig, ich führe dir nochmal alles schnell auf, schau bitte mal drüber und sag mir, wenn ich was vergessen hab, du siehst das ganze auf Textbasis, ich seh nurnoch ein Leitungswirrwar. Auch wenn du villeicht kein Plan hast, ich mach das um die übersicht wieder zu finden und vielleicht erweckt das den eindruck ich würde was arbeiten ^^ :D

Also:
OR: Flagregister darf Takten; OR Befehl Enabled.
XOR: Flagregister darf Takten; XOR Befehl Enabled
AND: Flagregister darf Takten; AND Befehl Enabled
NOT: Flagregister darf Takten; NOT Befehl Enabled
CLK: Geht auf ALLE Register und Taktet diese, sofern diese zum Takt freigegeben sind. Der CLK Befehl wird nur in der Simulation gebraucht und ist nicht im OPCODE zu finden.
ADD: Flagregister darf Takten; ADD Befehl Enabled; Carry Flage wird beim Takt gespeichert.
ADC: Flagregister darf Takten; Carry In wird beachtet; Carry Flagge wird gesetzt.
ADS: Flagregister darf Takten; Carry In ist IMMER 1(HIGH); Carry Flagge wird gesetzt.

Das kann die ALU bisher, wenn was fehlt bitte Posten ansonsten Fang ich an die Widerstände zu berechnen denn das ist eine lästige sache bei der man nichts mehr ändern kann.
 
Ich soll also das Flagregister auch bei anderen Befehlen Takten, wiso? wenn die ALU doch eh aus ist. Zu dem anderen, das hätt ich fast veregssen wird gemacht.
 
AI AI sir ^^ aber nicht mehr heute, ich habe die Sprungbediunungen völlig vergessen und werd doch noch ein bsischen Zeit mit der ALU verbringen , müssen, meld mcih morgen . . .
 


Neueste Beiträge

Zurück
Oben