Spielzeug: "Prozessor" in Reaktor
Moderator: herw
-
- user
- Beiträge: 10
- Registriert: 29. November 2009, 21:37
Spielzeug: "Prozessor" in Reaktor
Hi Ho ^^
Ich bin recht neu hier im Forum, aber mit Reaktor bastel ich schon seit gut 2-3 Jahren herum.
Nun hab ich ein kleines Spielzeug gebastelt, was ich euch nicht vorenthalten möchte (vielleicht kanns ja jemand gebrauchen)
Hierbei handelt es sich um ein "Prozessor", das Teil hat eine Art Romtable und ein kleines Ram, was ihm ermöglicht selbst geschriebene Programme auszuführen und/oder Dinge zu berechnen.
Bis jetzt ist er noch nicht in die Endphase vorgedrungen, aber das Zwischenergebniss kann sich schonmal sehen lassen.
Das Teil wird im Dezimalsystem addressiert und beruht auf single Commands (also jeder Befehl benötigt bis jetzt 2 Zyklen zum berechnen).
Die Addressierung des Peripheriebus, aus dem "ROM", ist ähnlich der Z80.
Screenies:
Im Off-Zustand Beim TestProgramm Technische Daten:
-1 Hilfsregister (Accu)
-3 Internerne Register (X,Y,Z)
-2 Busregister umexterne Eingaben abzufragen
-Copy Commands für die Register untereinander
-SprungCommando
-Vergleichs und Verzweigungscommando
-FPU die leider noch recht umständlich addressiert werden muss
-Einen externen Taktgeber um die Befehle auszuführen
-Geschwindigkeit ist variabel im Programm steuerbar (von 1HZ bis x)
Der Download: Das wars erstmal fürs erste...
LG GiR-Zippo
Ich bin recht neu hier im Forum, aber mit Reaktor bastel ich schon seit gut 2-3 Jahren herum.
Nun hab ich ein kleines Spielzeug gebastelt, was ich euch nicht vorenthalten möchte (vielleicht kanns ja jemand gebrauchen)
Hierbei handelt es sich um ein "Prozessor", das Teil hat eine Art Romtable und ein kleines Ram, was ihm ermöglicht selbst geschriebene Programme auszuführen und/oder Dinge zu berechnen.
Bis jetzt ist er noch nicht in die Endphase vorgedrungen, aber das Zwischenergebniss kann sich schonmal sehen lassen.
Das Teil wird im Dezimalsystem addressiert und beruht auf single Commands (also jeder Befehl benötigt bis jetzt 2 Zyklen zum berechnen).
Die Addressierung des Peripheriebus, aus dem "ROM", ist ähnlich der Z80.
Screenies:
Im Off-Zustand Beim TestProgramm Technische Daten:
-1 Hilfsregister (Accu)
-3 Internerne Register (X,Y,Z)
-2 Busregister umexterne Eingaben abzufragen
-Copy Commands für die Register untereinander
-SprungCommando
-Vergleichs und Verzweigungscommando
-FPU die leider noch recht umständlich addressiert werden muss
-Einen externen Taktgeber um die Befehle auszuführen
-Geschwindigkeit ist variabel im Programm steuerbar (von 1HZ bis x)
Der Download: Das wars erstmal fürs erste...
LG GiR-Zippo
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
- herw
- moderator
- Beiträge: 3123
- Registriert: 13. März 2006, 18:28
- Wohnort: Dortmund
Re: Spielzeug: "Prozessor" in Reaktor
Hallo Zippo,
ein witziges Projekt. Wie programmiert man denn das ganze?
ciao herw
PS: ich habe übrigens Deine Bilddateien und Dein Ensemble direkt in Deine Post eingebunden, damit sie nicht verloren gehen, wenn Du die Originallinks löschst. Ich hoffe, das ist ok.
Du scheinst ja einen riesigen Monitor zu besitzen. Ich habe die Bilddateien von den unnötigen breiten weißen Rändern befreit. Durch das direkte Einbinden hier in Deine Post, kann man die Bilder auch scrollen und dadurch in ihrer Gesamtheit sehen.
ein witziges Projekt. Wie programmiert man denn das ganze?
ciao herw
PS: ich habe übrigens Deine Bilddateien und Dein Ensemble direkt in Deine Post eingebunden, damit sie nicht verloren gehen, wenn Du die Originallinks löschst. Ich hoffe, das ist ok.
Du scheinst ja einen riesigen Monitor zu besitzen. Ich habe die Bilddateien von den unnötigen breiten weißen Rändern befreit. Durch das direkte Einbinden hier in Deine Post, kann man die Bilder auch scrollen und dadurch in ihrer Gesamtheit sehen.
-
- user
- Beiträge: 10
- Registriert: 29. November 2009, 21:37
Re: Spielzeug: "Prozessor" in Reaktor
Thanks for welcome.
Keine Angst, die Sourcen lösche ich nicht so schnell, liegen zzt auf dem Root von der netten Community, wo ich grad RootAdmin bin
Der Bildschirm ist nen standart LappyMonitor (1440x900) nur Paint mag Screenies nicht so
Hier die Commandreferenz:
Das anschalten des Prozzis:
Ja das ist ein kleines leidiges Thema was mir am Anfang böses Hinzermartern gekostet hat wie man alles Syncon starten kann (Prozzi, Peripherie), doch die Lösung ist einfach:
Einfach Rektor aus- und anschalten (der Powerbutton im Reaktorpanel), nun hat er seinen Reset, dann einfach den rechten Button im Prozzipanel anklicken und schon arbeitet er
Im Testprogramm was im Speicher ist, macht er nen CLS des Bildschirms, anschliessend ein paar RND-Bilder und anschliessend zauber er ein Hallo auf dieses.
Programmiert wird er so:
Das ROM ist in der Corecell "MMU" drinnen. Dort befindet sich auch eine Corecell mit dem Namen "ROM". Da drinnen ist ein Table und der ist quasi das "Rom" xD
Dieses gibbed sowohl im Prozzi selber und auch im Grafik_Prozessor (wobei der noch von mir überarbeitet wird, so das man ihn nur noch per Software vom Hauptprogramm ansteuern kann/muss. Doch dazu brauch ich entweder noch ne Steuerleitung oder einfach nen RAM was er nach seinem ROM liest um Befehle zu schaufeln).
Der kleine hat 2 Takte standartmäßig auf 1Hz als Vorlauf um seine eigendlich Frequenz einzulesen, diese muss auch unverzüglich am Anfang des Programms stehen.
Nehmen wir an, wir haben einen Takt von 200kHz dann schreiben wir einfach am Anfang:
Und schon steht er mit einer Taktung von 200KHZ betriebsbereit da, um seine Befehle abzuarbeiten die dannach kommen.
--- Wird fortgesetzt ---
Leider hat er einen kleinen Fehler im Aufbau...
Die FPU versteht sich als eigene Einheit und muss leider auch so programmiert werden.
z.b. 100+200 mit Copy ins X-Register sieht so aus:
Ich hab noch keine Möglichkeit eingebunden um Register in die FPU-Reister zu schreiben, nur umgekehrt -.-
LG GiR-Zippo
PS.:
Hab noch schnell ne A+ Funktion hinzugefügt (dient einfach zum Addieren des Accus +1 je Zyklus) und ne kleine Funktion um die Accuwerte den Datenbus einer bestimmten Addresse weiterzugeben (wird für nen kleinen "fading" Effekt missbraucht werden).
Keine Angst, die Sourcen lösche ich nicht so schnell, liegen zzt auf dem Root von der netten Community, wo ich grad RootAdmin bin
Der Bildschirm ist nen standart LappyMonitor (1440x900) nur Paint mag Screenies nicht so
Hier die Commandreferenz:
Code: Alles auswählen
1 FPA Schreibt Register A der FPU
2 FPB Schreibt Re
3 FPC Schreibt Register C der FPU
4 FPD Schreibt Register D der FPU
5 RechenOperationen
FDAD 1 Addiere A-D
FPS 2 Subtrahiere A-D
FPM 3 Multipliziere A-D
FPDV 4 Dividiere A/B
6 LDX Schreibe X Register
7 LDY Schreibe Y Register
8 LDZ Schreibe Z Register
9 LDBI Schreibe BusI Register
10 LDBII Schreibe BusII Register
11 LDA Schreibe Accumulator
12 CPX Copy X Register nach
0 1 Y
0 2 Z
0 3 BI
0 4 BII
0 5 Accu
13 CPY Copy Y Register nach:
0 1 X
0 2 Y
0 3 Z
0 4 BI
0 5 Accu
14 CPZ Copy Z Register nach:
0 1 X
0 2
0 3 Z
0 4 BI
0 5 Accu
15 CPBI Copy BusRegister I nach:
0 1 X
0 2 Y
0 3 Z
0 4 BII
0 5 Accu
16 CPBII Copy BusII nach:
0 1 X
0 2 Y
0 3 Z
0 4 BI
0 5 Accu
17 Copy Accu nach:
0 1 X
0 2 Y
0 3 Z
0 4 BI
0 5 BII
18 CFPU Copy FPU nach:
0 1 X
0 2 Y
0 3 Z
0 4 BI
0 5 BII
0 6 Accu
19 JMP Springe nach Speicherstelle
20 BNEX Vergleiche Accu+X-Register und springe
21 BNEY
22 BNEY Vergleiche Accu+Z-Register und springe
23 BNEBI Vergleiche Accu+BI-Register und springe
24 BNEBII Vergleiche Accu+BII-Register und springe
25 ADAC Erhöhe Accu um 1
26 CAD Schreibe Accu auf Datenbus
Ja das ist ein kleines leidiges Thema was mir am Anfang böses Hinzermartern gekostet hat wie man alles Syncon starten kann (Prozzi, Peripherie), doch die Lösung ist einfach:
Einfach Rektor aus- und anschalten (der Powerbutton im Reaktorpanel), nun hat er seinen Reset, dann einfach den rechten Button im Prozzipanel anklicken und schon arbeitet er
Im Testprogramm was im Speicher ist, macht er nen CLS des Bildschirms, anschliessend ein paar RND-Bilder und anschliessend zauber er ein Hallo auf dieses.
Programmiert wird er so:
Das ROM ist in der Corecell "MMU" drinnen. Dort befindet sich auch eine Corecell mit dem Namen "ROM". Da drinnen ist ein Table und der ist quasi das "Rom" xD
Dieses gibbed sowohl im Prozzi selber und auch im Grafik_Prozessor (wobei der noch von mir überarbeitet wird, so das man ihn nur noch per Software vom Hauptprogramm ansteuern kann/muss. Doch dazu brauch ich entweder noch ne Steuerleitung oder einfach nen RAM was er nach seinem ROM liest um Befehle zu schaufeln).
Der kleine hat 2 Takte standartmäßig auf 1Hz als Vorlauf um seine eigendlich Frequenz einzulesen, diese muss auch unverzüglich am Anfang des Programms stehen.
Nehmen wir an, wir haben einen Takt von 200kHz dann schreiben wir einfach am Anfang:
Code: Alles auswählen
255
200000
--- Wird fortgesetzt ---
Leider hat er einen kleinen Fehler im Aufbau...
Die FPU versteht sich als eigene Einheit und muss leider auch so programmiert werden.
z.b. 100+200 mit Copy ins X-Register sieht so aus:
Code: Alles auswählen
255
200000
1
100
2
200
5
1
18
1
255
0
LG GiR-Zippo
PS.:
Hab noch schnell ne A+ Funktion hinzugefügt (dient einfach zum Addieren des Accus +1 je Zyklus) und ne kleine Funktion um die Accuwerte den Datenbus einer bestimmten Addresse weiterzugeben (wird für nen kleinen "fading" Effekt missbraucht werden).
Zuletzt geändert von Zippo am 2. Dezember 2009, 09:06, insgesamt 2-mal geändert.
- herw
- moderator
- Beiträge: 3123
- Registriert: 13. März 2006, 18:28
- Wohnort: Dortmund
-
- user
- Beiträge: 10
- Registriert: 29. November 2009, 21:37
Re: Spielzeug: "Prozessor" in Reaktor
Endlich bin ich mal wieder dazu gekommen den Prozzi unter die Lupe zu nehmen.
(Bin grad zusehr mit C++ und Clustern von WoW-EMu-Cores beschäftigt -.- )
Im Prozzi hab ich nen bösen Designfehler entdeckt:
Er ist in sich stabil, was schlecht für Register ist, die geflushed werden müssen.
Deswegen hat der Accu nicht richtig gezählt, das ganze wurde dann mit mit einem Gate an der Clock und nen Adder im Accumulator gelöst.
Nun zählt er richtig
Hier das ENS:
http://188.40.108.8/MyOwn/Processor/ProzziTest.ens
Werd mich mal die Tage drann machen und Memmory commands einbauen (diese werden wichtig werden für den GrafikProzzi um Zeichensätze in den Ram zu legen und dort zu lesen).
(Bin grad zusehr mit C++ und Clustern von WoW-EMu-Cores beschäftigt -.- )
Im Prozzi hab ich nen bösen Designfehler entdeckt:
Er ist in sich stabil, was schlecht für Register ist, die geflushed werden müssen.
Deswegen hat der Accu nicht richtig gezählt, das ganze wurde dann mit mit einem Gate an der Clock und nen Adder im Accumulator gelöst.
Nun zählt er richtig
Hier das ENS:
http://188.40.108.8/MyOwn/Processor/ProzziTest.ens
Werd mich mal die Tage drann machen und Memmory commands einbauen (diese werden wichtig werden für den GrafikProzzi um Zeichensätze in den Ram zu legen und dort zu lesen).
Zuletzt geändert von Zippo am 6. Juli 2010, 23:09, insgesamt 1-mal geändert.
- Snafic
- user
- Beiträge: 40
- Registriert: 10. Mai 2006, 16:54
- Wohnort: Bodensee
- Kontaktdaten:
Re: Spielzeug: "Prozessor" in Reaktor
Kannst du dazu noch passende Einsteigerlektüre empfehlen oder Links? Jetzt speziell auf dein Prozessording natürlich.
Interessiert mich sehr, probiere das noch aus aber vermutlich ist mir das zu hoch.
Interessiert mich sehr, probiere das noch aus aber vermutlich ist mir das zu hoch.
-
- user
- Beiträge: 10
- Registriert: 29. November 2009, 21:37
Re: Spielzeug: "Prozessor" in Reaktor
Eine direkte Lektüre gibt es leider nicht, weil das Teil ne komplette Eigenentwicklung ist.
Aber ich kann versuchen zu erklären wie es funktioniert und wie man ihn Programmiert.
Fangen wir gleich mal mit dem Grundaufbau an
Zur Funktionsweise:
Der Prozzi und auch der Grafik-Prozzi sind beide in sich stabile Prozessoren.
Sie haben nicht wie Prozzessoren im PC einen Ozillator um den Stromkreis zu unterbrechen sondern hier dient der Ozillator dazu, um ihn dazu zu überreden dass er sich immer den nächsten Address- und Daten-Befehl aus dem Speicher holt, der ja leider sequenziell ist.
Das ganze geht dann so:
Als erstes hat der Prozzi 2 Takte auf 1hz Vorlauf, das ist wichtig, damit er seine Arbeitsgeschwindigkeit bekommt, welche wir immer am Anfang des Programmes setzen müssen.
Steht der Ozillator auf 1 gibts eine Adresse, steht er auf 0 kommen die Daten.
Die Taktleitung hier heisst MainClock, sie steuert alles Syncron.
Die RamClock wird gebraucht um ein Read zu erzeugen, ob es nun gebraucht wird oder nicht.
Sie muss IMMER etwas höher als die MainClock stehen, sonst liest er nüx.
Der Prozzi teilt das intern dann mit einem FlipFlop und einem kleinen Speicher auf (deswegen auch insich stabil, weil er die Daten und Addressen bis zum nächsten überschreiben nicht verliert).
In einer AddressMatrix werden die ankommenden Daten dann fein säuberlich auf die jeweiligen Addressen zugeteilt.
Mehr ist dort nicht drinnen xD
Zur Programmierung:
Der Prozessor verarbeitet pro Zyklus einen Befehl, welcher auch nur einen Zyklus braucht um verarbeitet zu werden (nicht wie bei einem PC, der je nachdem 1-4 Zyklen pro Command braucht).
Programmiert wird er mit dem ROM-Table, was in der MMU zu finden ist und hat in der default Einstellung ein Länge 1kB (Kann größer gemacht werden).
Die Art der Programmierung allerdings ist etwas verzwickter als ein normaler PC, aber auch nicht unverständlicher
Das erste was geschehen muss ist erstmal dem Prozessor seine Startgeschwindigkeit zu geben, was wir dann so bewerkstelligen:
Wenn man das eingibt, hat man aber nur die GEschwindigkeit auf 100Herz gestetzt, aber ohne Programm ist das ganze recht witzlos, also schreiben wir uns eine kleine Routine um einen DrehRegler auszulesen.
Nur was brauchen wir alles dazu (abgesehen vom Drehregler)?
Einen Anschluss am Prozessor, einen Speicher wo die Werte rein sollen und achja ein Programm... und etwas, was damit auch ausgelöst werden soll
Da trifft sich hier sehr, das der Prozzi einen kleinen Vorrat an sog. Registern hat, wo er Werte zwischenspeichern kann.
Die nennen sich:
Accumuluator = Dieses ist ein Sonderfall und hat kleine Möglichkeiten zur Manipulation und wird als Hilfregister benutzt. Also nur mit vorsicht setzen.
X = Das Typische X Register, kann man für verschiedenes nutzen
Y = Wie das X
Z = Das gleiche wie X
BI = Dieses ist ein sog. Busregister, was direkt von aussen gesteuert werden kann, an sonsten kann man es auch wie das X-Regi nutzen.
BII = Gleiches wie BI
Dann wollen wir mal mit dem Grundaufbau beginnen, wir nehmen unseren Prozzi, und klemmen alles wie hier auf dem Bild an:
Nun das Proggy:
Zum laufen bringen wir es über den PowerKnopf in der Reaktor Menüleiste, der muss OFF und wieder ON geschaltet werden um einen Reset zu erzeugen.
Anschliessend bitte den Rechten Butten im ProzziPanel anklicken und schon sollte alles laufen.
Was macht das ganze hier nun?
Einfach erklärt:
255 (ProzziSpeed setzen)
5 (5hz)
11 (Schreibe in den Accu...)
12 (...Die Ziffer 12)
23 (Vergleiche BI mit dem Accu-Inhalt)
8 (Und springe zu stelle 8 wenn BI eine 12 beinhaltet)
19 (Springe)
4 (zu Stelle 4, um eine Schleife zu erzeugen, damit er den Vergleich solange macht, bis er eintritt)
10 (Schreibe in BII)
15 (eine 15)
19 (Sprung)
8 (Auf 8)
19
8 (Brauchen wir noch wegen einem kleinen Fehler, den ich noch ausbügeln muss, sry)
Das ist der Grundversuch I
Muss noch schnell was einkaufen, dann kanns weiter gehen xD
Lg GiR-Blunti-Zippo
Aber ich kann versuchen zu erklären wie es funktioniert und wie man ihn Programmiert.
Fangen wir gleich mal mit dem Grundaufbau an
Zur Funktionsweise:
Der Prozzi und auch der Grafik-Prozzi sind beide in sich stabile Prozessoren.
Sie haben nicht wie Prozzessoren im PC einen Ozillator um den Stromkreis zu unterbrechen sondern hier dient der Ozillator dazu, um ihn dazu zu überreden dass er sich immer den nächsten Address- und Daten-Befehl aus dem Speicher holt, der ja leider sequenziell ist.
Das ganze geht dann so:
Als erstes hat der Prozzi 2 Takte auf 1hz Vorlauf, das ist wichtig, damit er seine Arbeitsgeschwindigkeit bekommt, welche wir immer am Anfang des Programmes setzen müssen.
Steht der Ozillator auf 1 gibts eine Adresse, steht er auf 0 kommen die Daten.
Die Taktleitung hier heisst MainClock, sie steuert alles Syncron.
Die RamClock wird gebraucht um ein Read zu erzeugen, ob es nun gebraucht wird oder nicht.
Sie muss IMMER etwas höher als die MainClock stehen, sonst liest er nüx.
Der Prozzi teilt das intern dann mit einem FlipFlop und einem kleinen Speicher auf (deswegen auch insich stabil, weil er die Daten und Addressen bis zum nächsten überschreiben nicht verliert).
In einer AddressMatrix werden die ankommenden Daten dann fein säuberlich auf die jeweiligen Addressen zugeteilt.
Mehr ist dort nicht drinnen xD
Zur Programmierung:
Der Prozessor verarbeitet pro Zyklus einen Befehl, welcher auch nur einen Zyklus braucht um verarbeitet zu werden (nicht wie bei einem PC, der je nachdem 1-4 Zyklen pro Command braucht).
Programmiert wird er mit dem ROM-Table, was in der MMU zu finden ist und hat in der default Einstellung ein Länge 1kB (Kann größer gemacht werden).
Die Art der Programmierung allerdings ist etwas verzwickter als ein normaler PC, aber auch nicht unverständlicher
Das erste was geschehen muss ist erstmal dem Prozessor seine Startgeschwindigkeit zu geben, was wir dann so bewerkstelligen:
Code: Alles auswählen
255 (Die Addy für Speed setzen)
100 (Sind 100hz zum arbeiten, wobei alles auch schneller gemacht werden kann)
Nur was brauchen wir alles dazu (abgesehen vom Drehregler)?
Einen Anschluss am Prozessor, einen Speicher wo die Werte rein sollen und achja ein Programm... und etwas, was damit auch ausgelöst werden soll
Da trifft sich hier sehr, das der Prozzi einen kleinen Vorrat an sog. Registern hat, wo er Werte zwischenspeichern kann.
Die nennen sich:
Accumuluator = Dieses ist ein Sonderfall und hat kleine Möglichkeiten zur Manipulation und wird als Hilfregister benutzt. Also nur mit vorsicht setzen.
X = Das Typische X Register, kann man für verschiedenes nutzen
Y = Wie das X
Z = Das gleiche wie X
BI = Dieses ist ein sog. Busregister, was direkt von aussen gesteuert werden kann, an sonsten kann man es auch wie das X-Regi nutzen.
BII = Gleiches wie BI
Dann wollen wir mal mit dem Grundaufbau beginnen, wir nehmen unseren Prozzi, und klemmen alles wie hier auf dem Bild an:
Nun das Proggy:
Code: Alles auswählen
255
5
11
12
23
8
19
4
10
15
19
8
19
8
Anschliessend bitte den Rechten Butten im ProzziPanel anklicken und schon sollte alles laufen.
Was macht das ganze hier nun?
Einfach erklärt:
255 (ProzziSpeed setzen)
5 (5hz)
11 (Schreibe in den Accu...)
12 (...Die Ziffer 12)
23 (Vergleiche BI mit dem Accu-Inhalt)
8 (Und springe zu stelle 8 wenn BI eine 12 beinhaltet)
19 (Springe)
4 (zu Stelle 4, um eine Schleife zu erzeugen, damit er den Vergleich solange macht, bis er eintritt)
10 (Schreibe in BII)
15 (eine 15)
19 (Sprung)
8 (Auf 8)
19
8 (Brauchen wir noch wegen einem kleinen Fehler, den ich noch ausbügeln muss, sry)
Das ist der Grundversuch I
Muss noch schnell was einkaufen, dann kanns weiter gehen xD
Lg GiR-Blunti-Zippo
Zuletzt geändert von Zippo am 10. Juli 2010, 20:29, insgesamt 1-mal geändert.
- herw
- moderator
- Beiträge: 3123
- Registriert: 13. März 2006, 18:28
- Wohnort: Dortmund
Re: Spielzeug: "Prozessor" in Reaktor
ui - viel Arbeit; da müsste ich mich erstmal in lang vergangene Schullektüre einlesen (Aufbau von Mehradressrechnern gehörte zum Informatikunterricht).
[Lobmodus]Ich finde solche Projekte einfach köstlich verrückt und entrückt [/Lobmodus].
ciao herw
[Lobmodus]Ich finde solche Projekte einfach köstlich verrückt und entrückt [/Lobmodus].
ciao herw
- Snafic
- user
- Beiträge: 40
- Registriert: 10. Mai 2006, 16:54
- Wohnort: Bodensee
- Kontaktdaten:
Re: Spielzeug: "Prozessor" in Reaktor
So wars gemeint.Zippo hat geschrieben:Eine direkte Lektüre gibt es leider nicht, weil das Teil ne komplette Eigenentwicklung ist.
Aber ich kann versuchen zu erklären wie es funktioniert und wie man ihn Programmiert.
Schliesse mich dem Lob von Herw an, ich missbrauche generell auch gerne Reaktor für Sachen die er nicht vorrangig "gebaut" wurde. Reaktor ist auch das letzte an Musiksoftware auf die ich verzichten möchte. Reaktor ist Forschung, Diagnose, Musik und vieles mehr.
Deinen Prozessor werde ich mir auf jeden Fall in Zukunft noch genau anschauen und nebenher noch etwas Fachlektüre lesen, im voraus Danke für das zukünftige Wissen das ich mir aneignen werde. (Geht auch an andere hier natürlich)
- KlangRaum
- synth guru
- Beiträge: 647
- Registriert: 1. August 2006, 12:55
-
- user
- Beiträge: 10
- Registriert: 29. November 2009, 21:37
Re: Spielzeug: "Prozessor" in Reaktor
Einkauf brachte nicht viel erfolg, aber dafür eine interressante Idee:
Ich schaffe mir grade noch ein Device Register, so das der Prozzi durch ne Art Bios die Geräte erkennt und nutzen kann.
Nur leider muss ich dann auch ne Art Bios bauen...
Ich schaffe mir grade noch ein Device Register, so das der Prozzi durch ne Art Bios die Geräte erkennt und nutzen kann.
Nur leider muss ich dann auch ne Art Bios bauen...
-
- user
- Beiträge: 10
- Registriert: 29. November 2009, 21:37
Re: Spielzeug: "Prozessor" in Reaktor
Sodele weil man mich auf "meinem" Server ausgesperrt hat, hab ich nun alles auf https://bitbucket.org/zippo/reaktorfiles verstaut, alle meine Updates gehen nun in die Repo xD
LG GiR-Blunti/Zippo
LG GiR-Blunti/Zippo
- herw
- moderator
- Beiträge: 3123
- Registriert: 13. März 2006, 18:28
- Wohnort: Dortmund
Re: Spielzeug: "Prozessor" in Reaktor
Hallo Zippo,Zippo hat geschrieben:Sodele weil man mich auf "meinem" Server ausgesperrt hat, hab ich nun alles auf https://bitbucket.org/zippo/reaktorfiles verstaut, alle meine Updates gehen nun in die Repo xD
LG GiR-Blunti/Zippo
kannst Du deine Bilder mir nummeriert noch mal in einer PM zuschicken , dann kann ich sie nachträglich hier wieder einbauen. Es wäre schade, wenn dadurch deine Postings unverständlich würden.
ciao herw
-
- user
- Beiträge: 10
- Registriert: 29. November 2009, 21:37
Re: Spielzeug: "Prozessor" in Reaktor
Nach einer längeren Auszeit hab ich mich mal wieder ein bisschen mit dem Prozzi beschäftigt und bin bei dem Eintippen der ganzen Zahlen für größere Programme fast dusselig im Kopf geworden -.-
Denn nun ist der JSR und RTS Code hinzugekommen, d.h. der Prozessor kann in Subroutinen einfacher Tiefe springen und findet seinen Weg zurück.
Ferner habe ich auch ein paar ganz böse Überraschungen beim JMP erlebt.
Denn die Kiste springt nicht in die absolute Addresse, sondern addiert einfach drauf (besonders wenn ein BEQ davor gesetzt wurde).
Jetzt hab ich ne nette Lösung für gefunden: Merge und nicht OR
Ab jetzt springt alles in die absolute Addresse und das so wie es sein sollte.
Dennoch blieb das Problem der riesen Zahlenkolonnen...
Um dieser etwas Herr zu werden hab ich mein altes VB.net ausgebuddelt und nen kleinen Assembler geschrieben.
Der ist zwar Alpha und kann bei weitem nicht alles was der Prozzi kann, aber das wichtigste hat er schonmal drinnen.
Features des ASM:
-Labels für Sprungziele (JSR,BEQ,JMP)
-Hex und Dec addressierung
-6510 / x86 Codemix
Neue Features des Prozzis:
-Instant Start
*keine Umständliche Startvorbereitung mehr, einfach Reaktor starten und schon sollte es los gehen. War für mich wichtig, weil ich vor habe einen Synthi mit dem Teil auszurüsten
-JSR und RTS
-Anfängliche Ramunterstützung
Wie dem auch sei... Um den Assembler einmal an einem praktischen Beispiel näher zu bringen, schnapp ich mir mal den Grundversuch I den ich weiter oben genutzt hatte.
Auf dem Panel hab ich meinen kleinen Drehregler eingebaut, eine Range bis 10 hat.
Das Display besteht hier aus einer einfachen LED, die nur dann reagiert wenn BUS-Register-B (BB) auf 10 steht.
Um das ganze zum laufen zu bringen musste man nun folgende Zahlenkolonne die MMU tippen.
Dank des Assemblers hat sich alles etwas vereinfacht:
Ich weiß kann man Effektiver machen, wollte aber noch unbedingt die JSR drinnen haben xD
MAIN: ist die eigentlich eine Loop um einen JSR für den INPUT_Check zu machen, verläuft der positiv (also der Regler auf 10 gedreht) hüpft die CPU nun in die LED_ON Routine und die LED geht an.
Weil ich aber BB in der MainLoop wieder auf 0 stelle ist aber sobald der JMP MAIN erfolgt wie Schluss mit Licht an und das Teil geht aus.
Auf die Weise kann man nun komplexe Panels bauen und diese einfach an den Prozzi hängen.
BA und BB sind eh und je so geschaltet das Signale von aussen Vorrang haben und fröhlich von Event von aussen übergeschrieben werden.
Wenn man nun ein kleines Programm dazu schreibt hat man schon ein kleines Menü.
Hier noch schnell die Befehlsreferenz für den ASM, damit auch was mit Anfangen kann
Das war eine kleine Übersicht über die Commandreferenz...
Werde mal schauen ob der LD Command demnächst komplett wegfällt und stattdesen der mov erweitert wird, dann hat man nen kleinen kompakten ASM.
Wenn man nun Blut geleckt hat und sich selbst mal an dem Teil austoben möchte so kann man sich das Ensamble und den .Net-Quellcode des ASM hier herunterladen.
http://188.40.108.8/MyOwn/Processor/ProzziTest_2.ens
http://188.40.108.8/MyOwn/Processor/asm.rar
Es steht jeden frei das ganze nach Belieben abzuändern xD
Aber Vorsicht der Prozzi kann bei zuvielen herumschrauben in seinem Innenleben ganz böse Nebenwirkungen haben und den Takt invertieren oder Sprünge falsch ansetzen...
LG GiR-Zippo
PS:
Der ASM unterstützt noch keine Leerzeilen für Dekozwecke, das kommt später.
Der Prozzi hat schon elementare Befehle um im Ram zu schreiben, nur fürs lesen hab ich mir noch nix einfallen lassen, denn erst möchte ich für das Teil ne Blit-CoreCell basteln um größere Blöche an einem Stück im Speicher hin un her schubsen zu können.
Auch gedenke ich ein kleines TapeDeck zu nutzen damit man eigene Patches, Programme und Speicherauszüge ins Ram laden kann, ohne umständlich im Rom herumzuwühlen...
Aber das ist erstmal Zukunft...
Denn nun ist der JSR und RTS Code hinzugekommen, d.h. der Prozessor kann in Subroutinen einfacher Tiefe springen und findet seinen Weg zurück.
Ferner habe ich auch ein paar ganz böse Überraschungen beim JMP erlebt.
Denn die Kiste springt nicht in die absolute Addresse, sondern addiert einfach drauf (besonders wenn ein BEQ davor gesetzt wurde).
Jetzt hab ich ne nette Lösung für gefunden: Merge und nicht OR
Ab jetzt springt alles in die absolute Addresse und das so wie es sein sollte.
Dennoch blieb das Problem der riesen Zahlenkolonnen...
Um dieser etwas Herr zu werden hab ich mein altes VB.net ausgebuddelt und nen kleinen Assembler geschrieben.
Der ist zwar Alpha und kann bei weitem nicht alles was der Prozzi kann, aber das wichtigste hat er schonmal drinnen.
Features des ASM:
-Labels für Sprungziele (JSR,BEQ,JMP)
-Hex und Dec addressierung
-6510 / x86 Codemix
Neue Features des Prozzis:
-Instant Start
*keine Umständliche Startvorbereitung mehr, einfach Reaktor starten und schon sollte es los gehen. War für mich wichtig, weil ich vor habe einen Synthi mit dem Teil auszurüsten
-JSR und RTS
-Anfängliche Ramunterstützung
Wie dem auch sei... Um den Assembler einmal an einem praktischen Beispiel näher zu bringen, schnapp ich mir mal den Grundversuch I den ich weiter oben genutzt hatte.
Auf dem Panel hab ich meinen kleinen Drehregler eingebaut, eine Range bis 10 hat.
Das Display besteht hier aus einer einfachen LED, die nur dann reagiert wenn BUS-Register-B (BB) auf 10 steht.
Um das ganze zum laufen zu bringen musste man nun folgende Zahlenkolonne die MMU tippen.
Code: Alles auswählen
0
10
0
27
7
19
1
11
10
23
13
28
1
10
10
19
1
Dank des Assemblers hat sich alles etwas vereinfacht:
Code: Alles auswählen
MAIN:
ldbrb #00
jsr INPUT
jmp MAIN
INPUT:
lda #10
BEQ ba,LED_ON
rts
LED_ON:
ldbrb #10
jmp MAIN
MAIN: ist die eigentlich eine Loop um einen JSR für den INPUT_Check zu machen, verläuft der positiv (also der Regler auf 10 gedreht) hüpft die CPU nun in die LED_ON Routine und die LED geht an.
Weil ich aber BB in der MainLoop wieder auf 0 stelle ist aber sobald der JMP MAIN erfolgt wie Schluss mit Licht an und das Teil geht aus.
Auf die Weise kann man nun komplexe Panels bauen und diese einfach an den Prozzi hängen.
BA und BB sind eh und je so geschaltet das Signale von aussen Vorrang haben und fröhlich von Event von aussen übergeschrieben werden.
Wenn man nun ein kleines Programm dazu schreibt hat man schon ein kleines Menü.
Hier noch schnell die Befehlsreferenz für den ASM, damit auch was mit Anfangen kann
Code: Alles auswählen
REGISTER:
A = Accumulator
X = X-Register
Y = Y-Register
Z = Z-Register
BA = BusRegi-I
BB = BusRegi-II
LDA = Load Accu
LDX = Load X-Rgister
LDY = Load Y-Register
LDZ = Load Z-Register
LDBRA = Load BusRegister-I //Kann von aussen überschrieben werden
LDBRB = Load BusRegister-II //Kann von aussen überschrieben werden
BSP: LDA #$ff oder LDA #255 | 255 in den Accu schreiben
Register können zzt nur direkt beschrieben werden, d.h. keine Werte aus dem Speicher annehmen
Labels hab ich mit eingebaut, denn es ist sehr besch. sich alle Addressen merken zu müssen, besonders weil der ASM viele Pseudoopcodes verwendet die der Prozzi so garnicht kennt (mov besonders).
Ein Label setzt man so:
MEINLABEL:
Wichtig Doppelpunkt am Ende muss sein, wenn man das Label hingegen anspringen möchte muss man nur MEINLABEL angeben.
JMP $1224 oder JMP LABEL_BLUBB
JSR $1244 oder JSR LABEL_BLUBB
Springe zu Addy hex1224 oder zum LABEL_BLUBB
RTS = Rücksprung von der Subroutine die vorher mit JSR angesprungen wurde
MOV SRC,DEST = Kopiere Register SRC (A,X,Y,Z,BA,BB) nach DEST (A,X,Y,Z,BA,BB)
BEQ SRC, LABEL/DEST = Verzweige nach DEST wenn SRC (X,..,BB) gleich des Accuinhalts ist.
Wenn man also BEQ nutzen möchte muss man vorher den Accu mit der Zahl füttern mit der verglichen werden soll.
OUT ADDRESS, DATA= Schreibe direkt auf dem Bus
OUT a, ADDRESS= Schreibe den Inhalt des Accus auf den Bus
Werde mal schauen ob der LD Command demnächst komplett wegfällt und stattdesen der mov erweitert wird, dann hat man nen kleinen kompakten ASM.
Wenn man nun Blut geleckt hat und sich selbst mal an dem Teil austoben möchte so kann man sich das Ensamble und den .Net-Quellcode des ASM hier herunterladen.
http://188.40.108.8/MyOwn/Processor/ProzziTest_2.ens
http://188.40.108.8/MyOwn/Processor/asm.rar
Es steht jeden frei das ganze nach Belieben abzuändern xD
Aber Vorsicht der Prozzi kann bei zuvielen herumschrauben in seinem Innenleben ganz böse Nebenwirkungen haben und den Takt invertieren oder Sprünge falsch ansetzen...
LG GiR-Zippo
PS:
Der ASM unterstützt noch keine Leerzeilen für Dekozwecke, das kommt später.
Der Prozzi hat schon elementare Befehle um im Ram zu schreiben, nur fürs lesen hab ich mir noch nix einfallen lassen, denn erst möchte ich für das Teil ne Blit-CoreCell basteln um größere Blöche an einem Stück im Speicher hin un her schubsen zu können.
Auch gedenke ich ein kleines TapeDeck zu nutzen damit man eigene Patches, Programme und Speicherauszüge ins Ram laden kann, ohne umständlich im Rom herumzuwühlen...
Aber das ist erstmal Zukunft...
- herw
- moderator
- Beiträge: 3123
- Registriert: 13. März 2006, 18:28
- Wohnort: Dortmund
Re: Spielzeug: "Prozessor" in Reaktor
Hallo Zippo,
ich finde es absolut witzig, wie du REAKTOR zweckentfremdest . Wenn ich nur etwas mehr Zeit hätte, mich mit den Datensträngen und der Implementierung zu beschäftigen.
ciao herw
ich finde es absolut witzig, wie du REAKTOR zweckentfremdest . Wenn ich nur etwas mehr Zeit hätte, mich mit den Datensträngen und der Implementierung zu beschäftigen.
ciao herw