Musik mit 8 Bit Computer abspielen

B

BennIY

.
Guten Abend liebe Techniker und Musiker,

ich möchte mit meinem selbstgebauten 8-Bit Computer Musik abspielen, da in der Schule solche komplexen Themen nicht besprochen werden, muss ich mein Wissen anderswo erlangen.
Ich suche Informationsquellen, bei den man lernt, wie man Musik speichert und diese auch abspielt. Ganz besonders interessiere ich mich für Chiptune und Bitpop.
Kennt jemand gute Quellen, Internetseiten villeicht auch E-Books. Ich möchten den Weg des Stroms natürlich nicht nur oberflächlich erklärt haben, nein ich möchte den Stromfluss bis auf den letzten Transistor kennen.
Nun gibt es in Foren viele die sagen:
"Sowas ist viel zu viel"
"Das schaffst du nicht"
oder "Das zeugt nicht von Reife"

auf solche Antworten möchte ich eigentlich nicht stoßen da ich mir der Sache bewusst bin.
Mein Computer soll das Spiel Tetris, ausführen können, natürlich auf 8-Bit basis.
Der Processor besitzt 8 Register und ein 8kb starken RAM. Wo erlene ich das Speichern und Abspielen von Musik
(Ich lerne schnell)

Mit freundlichen grüßen
Benjamin Stern
 
Der Processor ist von mir selbst gebaut Sprich aus Transistoren, ich kann dir den Befehlssatz nennen aber es ist kein nachbau eines bestimmten Processors, es ist mein eigener, er Taktet mit ca. 10MHz.
Und eben den Soundchip will ich bauen, nun kann man zwar sagen ein Soundchip ist riesig und komplex doch mein Processor ist es ebenfalls, also wie gesagt es ist kein nachbau eines Processors sondern mein eigener. Das Wissen um diesen zu bauen fand ich auf Youtube und verschiedene Seiten im netz zu D-Flipflops und Voll Addierern und so möchte ich nun auch ein Soundchip bauen.
 
:D mehr oder weniger kann ich das noch nicht, der Processor ist im ramen eines Schulprojekts bei meinem Freund ( Wir bauen zu 3. für die Fächerübergreifende Kompetenzprüfung ein Rechenwerk sprich eine ALU) nach der Prüfung werden mein Freund ich ich aus Interesse weiter bauen mit dem endziel einestages tetris spielen zu können, was wir bisher besitzen ist die ALU und die Registersteuerung aber im Simulationsprogramm Logisim und im Schaltplan Programm LTSpice ist der rechnerische teil fertig, da arbeite ich momentan am RAM.
Die befehle, die er ausführen kann sind diese:
ADD //Addieren
SUB // Subtrahieren
AND // Inputs gleichsetzen
XOR // Inputs auf ungleichheit prüfen
MOVR // Zahl Ins register laden
MOVN // registerwert duplizieren
OR // Ja oder halt ^^
STAL // untere Hälfte des Adressregisters für Ram beschreiben 1024B = 10 Adressbits
STAH // Oberehälfte beschreiben
DSTAL // das selbe nur wird in Spitzenbedingung ein schritt übersprungen und eine Taktrate gespart
DSTAH //
SPR // Sprungbefehle wie ==, <,>,<=, >=

Division und Addition kommt noch und es gibt mehr befehle als oben genannt.
Wie gesagt, in Simulationsprogrammen rechnet das ding schon um sein Leben nun muss es nurnoch gebaut werden und Paralell dazu möchte ich einen Soundchip entwickeln, es geht mir nicht darum die neusten Soundtreiber zu beanspruchen sondern zu lernen, wie der strom fließt, dass ist auch der Grund warum wir beim Bau des Processors Möglichst auf fertige Teile versichten und so viel wie möchlich aus dem Grundbaustein dem Transistor bauen.

//EDIT: der Ram kann auch größer als 1kb sein, da wir diesen Als IC Kaufen ( ich bau doch keine 1024 8bit register ^^)
villeicht 2kb das Maximale an Adressen, die der Adressbus aufnimmt sind 64kb (16bit)

//EDIT 2: Eben für solche Dinge frag ich hier, wenn ihr sagt mir reicht 1 kb nicht, dann ist das schonmal ein anhaltspunkt etwas zu verändern, für tTetris reicht 1 kB da ich aber MINDESTENS die Tetrismelodie abspielen will, frag ich euch, ihr habt die Ahnung ich den Plan
 
Unser Processor hat 8byte Register, und wir verwenden einen 11 Bit Befehlsinput hier der Opcode:
Ein Befehl wäre z.b. 00001 001 010 Addiert BX mit CX und speichert in BX
AX = 000
BX = 001
CX = 010
DX = 011
EX = 100
FX = 101
GX = 110
HX = 111

NOP = 00000 Leerlauf
ADD = 00001 [drain][source]
SUB = 00010 [drain][source]
AND = 00011 [drain][source]
XOR = 00100 [drain][source]
XNOR = 00101 [drain][source]
NOT = 00110 [drain][source]
MOVR = 00111 [drain][source]
MOVN = 01000 [drain] 000
OR = 01001 [drain][source]
STAL = 01010 000 [source] 0-7 Bit
STAH = 01011 000[source] 8+9 Bit
DSTAL = 01100 000 [source] 0-7 Bit
DSTAH = 01101 000[source] 8+9 Bit
SPR = 01110
 
da gibt es viele möglichkeiten. wobei bei deinem projekt ja nicht besonders viel speicher vorhanden ist.
damit fällt ja einfaches wav files abspielen (PCM) schonmal weg.

willst du
a) einen softsynth auf deiner cpu laufen lassen -> CPU erzeugt den sound im sourcecode
b) einen externen soundchip?

ich denke mal wenn wir beim thema 8-bit rechner sind wäre auch eine interne simple 8 bit sounderzeugung schön.

am einfachsten wäre da nur eine rechteck wellenform an einem pin ausgeben. damit lassen sich schon melodien spielen. das ist ja nur einen pin in der richtigen frequenz toggeln. da brauch man auch keinen DAC

nächst komplizierter schritt wäre einen pin als PWM ausgang zu benutzen. da brauch man dann eben eine timerroutine (hw od. sw)
http://www.mikrocontroller.net/articles ... eugung#PWM
damit lassen sich beliebige wellenformen und auch verschiedene lautstärken ausgeben

zum musik speichern. Ohne zusätzlichen speicher wird das wohl auf was algorythmisches rauslaufen. also ein stück programmcode der dann die noten etc berechnet. oder eben nur eine sehr kurze melodie
wie wäre es mitr sowas ;-)
http://countercomplex.blogspot.de/2011/ ... ne-of.html

viele grüße,
comboy
 
dbra schrieb:
swissdoc schrieb:
Hier mal 2 Startpunkte, von denen Du weitergraben kannst.

http://de.wikipedia.org/wiki/Soundmonitor
http://de.wikipedia.org/wiki/Tracker_(Musik)

Ob Du mit Deiner Hardware allerdings mehr als nur ein paar Rechteck-Tonfolgen erzeugen kannst, ist mir nicht klar.
C64 und 8-Bit Konsorten hatten i.d.R. einen dedizierten Sound-Chip und auch mehr als 1kb RAM.

Naja, mit solchen Programmen wird das wohl nichts werden. Allein der Videospeicher für eine 40x25 Bildschirmseite braucht fast 1KB Speicher.

Aber vielleicht kannst du dir ja mal die Soundroutine von Martin Galway auf dem C64 ansehen. (War IMHO viel besser als die von Hülsbeck ;-) ) Vielleicht findest du die ja irgendwo.

Es zeigt aber das Konzept. Man braucht eine Routine, die Töne in unterschiedlichen Höhen und Längen abspielen kann, wenn möglich noch Optionen für Klang, Lautstärke, etc. verwalten kann.
Dazu eine Liste mit Daten, die diese Werte vorgeben und durch die mit einstellbarem Tempo durchgestept wird.
 
Geil geil geil! Ein richtiges Nerd Projekt!
Ich will FOTOOOOOOOS!!!! Natürlich auch von euch, aber in erster Linie von eurer Kiste!
 
Also zu DSTAL und STAL, ich fande es komisch, warum man den wert um ihn ins Adressregister ladenzukönnen, warum dieser wert vorher ins Register muss. Da ich mir ja keine Ramadresse ausrechnen möchte habe ich 2 Befehle gemacht, einmal die Adresse aus einem Register zu laden und mit DSTAL[Direkt] Ladt ich die Adresse vom DatenInput in das Adressregister, somit spar ich mir die zwischenspeicherung und verschwend kein register für Temporäre Zahlen.

psicolor schrieb:
Geil geil geil! Ein richtiges Nerd Projekt!
Ich will FOTOOOOOOOS!!!! Natürlich auch von euch, aber in erster Linie von eurer Kiste!
Auf deine FOTOOOOOOOS musst du vorerst leider verzichten, da es auser ein gefräßten Prototyp eines XORS und eines DFlipFlops erstmal alles vom Computer berechnet wird. Ich bau ja nicht wild drauf los um dann festzustellen, dass 1kb Ram nicht reicht. Und da wär ich schon beim RAM, wie gesagt mein verfügbarer Ramspeicher ist nur dadurch begrenzt, wie viel ich dafür ausgeben will und wie viel das IC her gibt. Über die mehrstimmigkeit der Musikdatein muss ich noch nachdenken, das werde ich überlegen, sobald ich mehr Ahnung von diesem Thema hab.
comboy schrieb:
da gibt es viele möglichkeiten. wobei bei deinem projekt ja nicht besonders viel speicher vorhanden ist.
damit fällt ja einfaches wav files abspielen (PCM) schonmal weg.

willst du
a) einen softsynth auf deiner cpu laufen lassen -> CPU erzeugt den sound im sourcecode
b) einen externen soundchip?

Ich möchte B einen SoundMakrochip ;-) da die CPU anderstwo gut gebraucht wird.
 
Was meinst du mit PC Speakter technik ?
Ein Stack wird so oder so noch dazu kommen, wie gesagt ich habe nun erstmal am Ram und dafür ist es wichtig wie viel kb Speicher ich brauch nicht nur für Musik sondern natürlich auch Tetris, Phone und diverse andere Spiele die ich Programmieren werde, mein Freund hat gemeint, ich würde für Tetris mit 1kb ausreichen er wusste alelrdings net, dass dazu auch eine Tetris melodie gehört.
Alles in einem möchte ich micht auf Tetris versteifen, dass war so ein beispiel für ein Ziel.
Also wie viel RAM haltet ihr für sinnvoll ?
 
Jap ich möchte tetris spielen, in Bild, nicht unbedingt in Farbe :D Habe mich nun umgesehen nach RAM IC´s und bin auch bereit 16kb RAM zu verbauen, das Problem ist, dass die IC´s sehr klein sind ich ich Löte mit der Hand darum sind bei größeren RAM modulen zu viele Pins zusammen.
Interessant fand ich diesen hier: Ein sehr langer Link
Soblad ich nach einem IC schau, dass z.B. 16kB hat, sind die Pins zu eng beieinander und der Datenbuss hat auch unnötige 16bit.
 
Das verbauen mehrerer Rams ist garnichtmal so dumm :D auf die einfachste Lösung kommt man immer erst zum schluss. Das werde ich machen, ich klär das nun schnell mit meinem Freund dann verbauen wir ca 8 - 16 kB Ram.
Mit der CPU Will ich spielen, sprich ich schreib mir im Assambler Spiele wie Phong, Tetris, TicTacToe und möchte NEBENBEI musik abspielen lassen.
EDIT: Wie gesagt, der Stack kommt noch, heute bau ich den Arbeitsspeicher fertig dieser wird vorrausichtlich 8kb speicher haben, das sollte dann reichen.
Nach dem Ram kommt der Stack, und weitere Befehle für die alu, da kommt mir das Wochenende gerade recht.
 
Die Sprungbedingungen werden von der ALU geprüft und kommen in 3 RS Register G E L, von dort kann der warheitsstatus geprüft werden.
Multiplikation und Division muss ich nicht machen, ich erspar mir nur ein paar Taktflanken ist aber momentahn noch nicht in Arbeit.
 
Ich kann dir zwar leider bei deinem Problem nicht weiterhelfen, wäre aber auch sehr interessiert, wenn du deine Zwischenerfolge dokumentieren würdest. Das hört sich nach einem richtig spannenden (vermutlich nur für Nerds wie uns :mrgreen: ) Projekt an, also toi toi toi!! :phat:
 
Gerne, sehr gerne, schön das ich hier richtig bin bei den nerds :D :D
also ich Poste was ich kann und wer sich meine Probleme durchlesen will, darf diesen Thread gerne abbonieren und das ist auch genau die Motivation, weiter zu machen :D
Bisher kann ich nicht viel zeigen, auser den schaltkreis in Logisim falls jemand Logisim hat.
 
BennIY schrieb:
Gerne, sehr gerne, schön das ich hier richtig bin bei den nerds :D :D
also ich Poste was ich kann und wer sich meine Probleme durchlesen will, darf diesen Thread gerne abbonieren und das ist auch genau die Motivation, weiter zu machen :D
Bisher kann ich nicht viel zeigen, auser den schaltkreis in Logisim falls jemand Logisim hat.

Auja!!!
Mich würde der Schaltplan interessieren stell ihn bitte online.
 
Vielleicht schaust Du Dir mal an, wie Apple das beim Apple II gelöst hat:

Rather than having a dedicated sound-synthesis chip, the Apple II had a toggle circuit that could only emit a click through a built-in speaker or a line out jack; all other sounds (including two, three and, eventually, four-voice music and playback of audio samples and speech synthesis) were generated entirely by software that clicked the speaker at just the right times
(Zitat: Wikipedia)
 
Ich hab auch schon gelesen, dass keine Akkorde sondern 3-Klänge verwendet wurden und der Hi-Hat als kurzes Rauschen generiert wurde was keinem auffält, wenn ich heute den RAM fertig habe, lade ich die CPU hoch, dann kann man sich besser unterhalten.
 
Ich weis leider nicht, wie schnell mein Basistakt sein wird, darauf bin ich am meisten gepannt :D
Achübrigens, betreiben werde ich das Ding mit meinem Alten 400W Netzteil. Sprich alles mit 5V Spannung.
 
Wie gesagt, jenachdem, wie viel es ist eine Spur zu erzeugen, mach ich mehrere villeicht 3.
 
Ich werde natürlich die schnellsten Transistoren und die schnellsten IC´s verwenden, die in den Geldbeutel passen jenachdem wie das Projekt wird, und wenn alle Simulationen abgeschlossen sind geh ich villeicht auf kickstarter.
 
Also ich präsentiere euch hier mein XOR Gate, dass zum einsatz kommen wird.
Alles wird mit einer Spannung von 5V betrieben. Am output ist die Spannung groß genug um ein weiteren Transistor anzubauen.
Die Transistoren 2N2222 sind die schnellsten, die ich bisher gesehen habe, allerdings auch teuer. Wer schnellere kennt, wird gezwungen, diesen zu nennen ;-) .
Das Scematic steht zum Download frei und ist für das Programm LTSpice, mit dazu ist das Bild in besserer Qualität um es problemlos in andere Programme abzubauen.
 

Anhänge

  • XOR.RAR
    53,4 KB · Aufrufe: 6
Also für die ALU Selbst, brauch ich nur ca. 200.
Ich habe beschlossen, die Platiene zu Ätzen bzw Bügeln wenn es soweit ist. aber mit 3510 kommt das ca hin Jenachdem wie viel IC´s ich verwende aber das sollen ja möglichst wenig sein.
 
Meint ihr es Lohnt sich eine Facebook seite zu erstellen, um meine Fortschritte zu präsentieren ?
 
:D ich bin schüler ich hab doch zeit :D
OK, heute im laufe des Tages mach ich das, hab nun auch schon bisschen Material gesammelt den Link findet ihr in meiner Signatur.
Fragen meinerseits kommen dann in diesen Thread und anderstrum auf Facebook.
 
Ähm ehrlich gesagt hab ich das nicht, Das ding wird aber glaub ich so groß, dass keine bzw nicht gleich Wasserkühlung notwendig ist. Ein einzelner Transistor erzeugt nicht viel Wärme, ja ich hab ca 3000 aber die sind denk ich soweit auseinander, dass 1-2 einfache 140mm Lüfter reichen werden.
Wie seht ihr das, wie warm das wird, ich hab dann doch keine Lust dass einer von 3k Transistoren durchbrennt und ich suchen darf, wie stellst du die eine Wasserkühlung vor ?
 
:D ja natürlich, nein ne Freundin besorg mir flüssig Helium für eine Optimale Kühlung.
 
Wie viel Register brauch ich, im Befehlssatz sind immernoch 8, was zwar ne tolle sache ist aber wie viel brauch ich wirklich ohne das es mir an registern mangelt ?
Hab grad den FullAdder fertiggestellt, er hat 109 Transistoren, 250 Widerstände und für die OR Gates bin ich auf Dioden umgestiegen. Eine Diode hat ja keine Latenz und ich Spar Geld und Strom.
 


News

Zurück
Oben