Musik mit 8 Bit Computer abspielen

Dieses Thema im Forum "Lötkunst" wurde erstellt von BennIY, 24. Januar 2013.

  1. BennIY

    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
     
  2. dbra

    dbra Ehrenpräsident des Technofreunde Ohlenburg e.V.

    Also, da würde mich als erstes interessieren, was da für ein Prozessor und Soundchip drin ist. Die 6502-CPU und den 6581-SID kenne ich noch dunkel von früher. :)
     
  3. BennIY

    BennIY -

    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.
     
  4. dbra

    dbra Ehrenpräsident des Technofreunde Ohlenburg e.V.

    Du hast also deine eigene Instruction Set Architecture entwickelt? Und alles aus Transistoren aufgebaut? Respekt! :supi: Kannste mal 'n Foto posten?
     
  5. swissdoc

    swissdoc back on duty

  6. dbra

    dbra Ehrenpräsident des Technofreunde Ohlenburg e.V.

    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.
     
  7. BennIY

    BennIY -

    :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
     
  8. dbra

    dbra Ehrenpräsident des Technofreunde Ohlenburg e.V.

    Die Soundroutine von Galway auf dem C64 ist sicher nicht der neuste Soundtreiber. :) Was die Löterei und den Hardwareentwurf angeht, kann ich dir leider nicht helfen. Ich kenne mich aber noch mit 6502-Assembler aus. Wie viele Register hat euer Prozessor? Bei den Befehlen fehlt mir noch was für die indizierte Adressierung, ebenso wie Stack-Befehle.
     
  9. BennIY

    BennIY -

    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
     
  10. Summa

    Summa wibbly wobbly timey wimey

  11. dbra

    dbra Ehrenpräsident des Technofreunde Ohlenburg e.V.

    Sowas wie JSR und RTS gibt's nicht? Würde ich dringend noch einbauen, sonst wird das nix mit Tetris. Da brauchst du aber auch noch ein Stack-Register, kannst dafür aber eins der regulären abzweigen, z.B. HX. Aber 8 Register sind schon großzügig für einen 8-Bit-Prozessor. :) Ich hab allerdings den Unterschied von STA und DSTA noch nicht verstanden.
     
  12. dbra

    dbra Ehrenpräsident des Technofreunde Ohlenburg e.V.

    Also mit JSR meine ich Program Counter auf den Stack retten und verzweigen, mit RTS Program Counter vom Stack holen und dahin verzweigen.
     
  13. dbra

    dbra Ehrenpräsident des Technofreunde Ohlenburg e.V.

    Also hab jetzt doch nochmal nachgedacht. Um wirklich nur die Tetris-Melodie zu spielen, wirst du wohl doch keinen Stack brauchen (Wenn du die Soundroutine als eine einzige, große Schleife programmierst). Aber die indizierte Adressierung wäre doch sehr praktisch um die Musikdaten einzulesen.
     
  14. comboy

    comboy aktiviert

    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
     
  15. swissdoc

    swissdoc back on duty

    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.
     
  16. dbra

    dbra Ehrenpräsident des Technofreunde Ohlenburg e.V.

    Na die Musikdaten könnte man ja sehr simpel aufbauen (wenn es nur einstimmig sein soll)
    Einfach die drei Datenfelder Frequenz, Lautstärke, Dauer für den Song hintereinanderpappen. Wobei man der Einfachheit halber die Lautstärke auch weglassen könnte. Die Frequenz könnte auch ein Initalwert für eine innerste Warteschleife sein, dann braucht das nicht mehr umgerechnet werden. Die Dauer dann ein Initialwert für eine äußere Schleife. In einer inneren Schleife dann immer ein Bit toggeln (für ein Rechtecksignal) und das von außen irgendwie abgreifen.
     
  17. dbra

    dbra Ehrenpräsident des Technofreunde Ohlenburg e.V.

    Um eine Pause zu spielen, könnte ein spezieller Frequenzwert benutzt werden, z.B. 0. Oder man setzt die Lautstärke auf 0.
     
  18. psicolor

    psicolor Busfahrer und Bademeister

    Geil geil geil! Ein richtiges Nerd Projekt!
    Ich will FOTOOOOOOOS!!!! Natürlich auch von euch, aber in erster Linie von eurer Kiste!
     
  19. BennIY

    BennIY -

    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.

    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.
    Ich möchte B einen SoundMakrochip ;-) da die CPU anderstwo gut gebraucht wird.
     
  20. dbra

    dbra Ehrenpräsident des Technofreunde Ohlenburg e.V.

  21. BennIY

    BennIY -

    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 ?
     
  22. dbra

    dbra Ehrenpräsident des Technofreunde Ohlenburg e.V.

    Möchtest du wirklich Tetris *spielen* oder nur die Musik abspielen? Wenn du ein richtig lauffähiges Tetris haben möchtest, brauchst du mehr Speicher, so Pi mal Daumen 4K. Du brauchst dann ja auch noch einen Videochip und Bildschirmspeicher.
     
  23. BennIY

    BennIY -

    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.
     
  24. dbra

    dbra Ehrenpräsident des Technofreunde Ohlenburg e.V.

    Dann verbau doch mehrere kleine RAMs. Aber das geht schon wieder in die Hardwarebastelei rein, da kenne ich mich nicht so richtig aus (abgesehen vom Funktionsprinzip)

    Mit PC-Speaker-Technik meine ich, das der Prozessor für die eigentliche Oszillation verantwortlich ist. Aber das möchtest du ja nicht, das ginge auch garnicht, wenn du nebenbei auch noch spielen möchtest. (außer evtl. über Timer-Interrupts) Interrupts gibt's bei deinem Design auch noch nicht? (Geht auch nicht ohne Stack)
     
  25. BennIY

    BennIY -

    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.
     
  26. dbra

    dbra Ehrenpräsident des Technofreunde Ohlenburg e.V.

    Bei der ALU würde ich Multiplizieren und Dividieren weglassen, das kannst du auch in Software machen. Stattdessen würde ich lieber noch einen right-shift-Befehl einbauen. Left-shift kannst du ja bereits durch addieren realisieren. Wie realisierst du die bedingen Sprünge? Gibt's sowas wie ein Condition-Code-Register?
     
  27. BennIY

    BennIY -

    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.
     
  28. 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:
     
  29. BennIY

    BennIY -

    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.
     
  30. Auja!!!
    Mich würde der Schaltplan interessieren stell ihn bitte online.
     

Diese Seite empfehlen