SID kompatibler Synthesizer in TTL

  • Einfach mal in den Raum geworfen:

    Der SID gat ja 3 getrennte Wellenform Generatoren. Jeder Gen. hat eine 16bit Addiereinheit und einen angeschlossenen 8bit Zähler (wie 74ls590), von 0-255 hochzählt. Mit 4x 74LS283 4-Addierern und 4x74ls373 Latches und am Ende der 74ls590-Zähler kann man den ersten Teil des Gen. realisieren. Dazu dann noch ein Rom für die Wellenformen und einen DAC für das Umsetzten in analoge Spannungen. Über den Referenz-Eingang des DAC kann man die 'Lautstärke' verändern. Das sind dann schonmal 11 ICs pro Generator (=33 für 3). Dabei ist jetzt noch nicht PWM, Filter, ASDR oder Rauschgenerator realisiert. Mir ist schon klar, dass das im SID ein wenig anders (ohne ROM) realisiert ist aber es geht ja um SID-kompatibel...


    Ich sehe vor allem in den 4-bit Addierern das Problem, dass die keinen Takteingang oder Enable haben. Die Latches könnten das kompensieren aber eventuell passt das nicht mit den Timings zusammen. Immerhin müsste man 4 von den 283 hintereinanderschalten, was mit jeweils ca. 24ns max zu knapp bei 1Mhz Basistakt werden könnte.


    Glaubt ihr, dass ein SID-ähnlicher Synth so möglich ist?


    Mir fehlen vor allem mit dem 74283 die Erfahrungen um das Verhalten einzuschätzen. Rein theoretisch sollte ein pinkompatibler SID-like Synth möglich sein, der natürlich wesentlich größer als das original ausfallen würde ;)


    Eventuell mache ich mich daran so etwas zu basteln, wenn ich mit den Apple Synth-Sachen durch bin.


    -Jonas

    • Offizieller Beitrag

    Immerhin müsste man 4 von den 283 hintereinanderschalten, was mit jeweils ca. 24ns max zu knapp bei 1Mhz Basistakt werden könnte.

    Wieso willst du die Addierer hintereinander schalten?

    Fuer 16bit schaltest du doch 4 4bit Addierer parallel.


    Klar, die Laufzeit von den Bit 0 Inputs zu den Bit 15 Outputs ueber die CarryIn/Out addieren sich.


    Bei 4 mal 24ns komme ich auf 100ns (gerundet). 1MHz sind aber 1000ns. Sollte zeitlich doch dicke passen.

    Oder hab ich etwas falsch verstanden?


    Viel Erfolg

  • Schon klar, dass 100ns eigentlich passen sollten. Dazu kommen dann aber noch die Latches und ich muss ja mit jeden Takt eine Addition machen. Dazu muss ich 2 Latches für den Operanden (16 bit) mit Eingang A der 4 Addierer verbinden und die Ausgänge der Addierer über 2 Latches mit Eingang B koppeln. Im Kopf passt das zwar aber ob die Timings dann noch ok sind ist eine andere Frage. Zudem muss ich 2 Schritte in einem Takt durchführen: Latch für Eingang B auf OE setzen und dann während das Ergebnis ausgegeben wird OE vom Latch deaktivieren und gleichzeitig den Latch mit dem Ergebnis setzen. Das letzte Carry-Out ist dann der Takteingang für den 8bit Zähler, der die Adressen für das Rom mit f*256 hochzählt.


    Mit dem Ansatz kann man wie in SID in ca. 0,0587hz Schritten genau eine Frequenz einstellen. Das ist ein besserer Ansatz als einen Teiler auf die Frequenz zu verwenden.


    EDIT: ich müsste wohl den 74LS374 verwenden. clock:low = OE, clock->high = Latch. Es kommt darauf an, dass der 283 träge genug ist um den Zustand lange genug zu halten, bis das Latch erfolgreich gesetzt ist. Aber das ist mir ein wenig zu undefiniert.


    -Jonas

  • Wie willst Du denn den ANALOGEN Teil realisieren?

    -------------------------------------------------------------------------------
    Suche Rechentechnik aus Deutschland, bzw. Computer Deutscher Hersteller - z.B.

    ANKER, AKKORD, CTM (CTM 70, CTM 9000, CTM 9032), DIEHL/ DDS, DIETZ, FEILER, ISE,
    HOHNER GDC, KIENZLE, KRANTZ, NIXDORF, OLYMPIA, PCS/CADMUS, RUF, SALOTA, S.E.I.,
    SIEMAG, SIEMENS, TAYLORIX, TRIUMPH ADLER - TA, WAGNER, WALTHER, WANDERER,...

    -------------------------------------------------------------------------------

  • Wie willst Du denn den ANALOGEN Teil realisieren?

    :) experimentieren...

    Hochpass, Tiefpass und Bandpass lassen sich mit ein paar LM324 realisieren.

    Ebenso kann man die ASDR mit Opamps umsetzen. Der LFO wird etwas tricky aber mal sehen...


    Zudem gibt es ja Beschreibungen und einen Scan sowie eine Analyse des chips.

    Aber man kann je schrittweise vorgehen und Funktion um Funktion implementieren.


    2019 habe ich wohl noch keine Zeit dafür.


    -Jonas

    • Offizieller Beitrag

    Da ich keine Ahnung von dem SID habe, habe ich auch gerade kein Blockschaltbold davon im Kopf. Daher kann ich dir leider nicht ganz folgen.


    Wenn ich das so hoere, wuerde ich mir ueberlegen die interne Verarbeitung mit einem hoeheren Takt zu machen.

  • Da ich keine Ahnung von dem SID habe, habe ich auch gerade kein Blockschaltbold davon im Kopf. Daher kann ich dir leider nicht ganz folgen.


    Wenn ich das so hoere, wuerde ich mir ueberlegen die interne Verarbeitung mit einem hoeheren Takt zu machen.

    http://oms.wmhost.com/misc/


    Aber so nah wollte ich mich nicht am SID orientieren.

    Eher Funktionsähnlich mit Pin- und Register-kompatibilität.

    Also so was wie ein SID-like synthesizer.


    Da das Ganze aber wohl in Richtung 50+ Chips gehen würde, ist das keine Kleinigkeit ;)


    An 2Mhz Basistakt hatte ich auch schon gedacht.


    -Jonas

    • Offizieller Beitrag

    An 2Mhz Basistakt hatte ich auch schon gedacht.

    Ich dachte mehr so an 8 - 16 fachen Bustakt.

    Dann kannst du die Gesamtopertion in genug kleine Teile zerlegen.

  • EDIT: ich müsste wohl den 74LS374 verwenden. clock:low = OE, clock->high = Latch. Es kommt darauf an, dass der 283 träge genug ist um den Zustand lange genug zu halten, bis das Latch erfolgreich gesetzt ist. Aber das ist mir ein wenig zu undefiniert.


    Leite Dir einfach vom Bustakt mittels 74LS31 ein paar verzögerte Clockleitungen ab - zusammen mit den dann invertierten Clocksignalen sollte sich dann eigentlich immer eine Clock finden, die für eine bestimmte Aktion passt.

  • EDIT: ich müsste wohl den 74LS374 verwenden. clock:low = OE, clock->high = Latch. Es kommt darauf an, dass der 283 träge genug ist um den Zustand lange genug zu halten, bis das Latch erfolgreich gesetzt ist. Aber das ist mir ein wenig zu undefiniert.


    Leite Dir einfach vom Bustakt mittels 74LS31 ein paar verzögerte Clockleitungen ab - zusammen mit den dann invertierten Clocksignalen sollte sich dann eigentlich immer eine Clock finden, die für eine bestimmte Aktion passt.

    Ich würde wohl mit einem Takt auskommen. Die Beispielschaltung für einen Phasen-Accumulator zeigt das eigentlich ganz gut.


    Tatsächlich sind eine ganze menge Sachen möglich, die im SID nicht realisiert wurden. zB. hätte man die PWM mit einem der anderen Wellenformen koppeln können. Auch hätte man die Accumulatoren und Wellenform arithmetisch koppeln können (add, sub usw.). Ebenso hätte man die Wellenformen in einem Rom oder Ram ablegen können um mehr Vielfalt in der Klangerzeugung zu haben.

    Im SID war wohl einfach kein Platz mehr...


    Das Funktionsprinzip des Phasen-Accumulators stammt übrigens aus dem CPU-Design. Es ist der Timer/Teiler Methode in den PSG (ay3-8910, SN76489 usw.) zwar deutlich überlegen aber erfordert sehr viele zusätzliche Komponenten. Auch erreicht der SID nur knapp 3800hz max. Frequenz, dafür aber 0,058Hz minimal (17 sek pro Wellenform) und macht somit einen eigenen LFO überflüssig.


    Man könnte übrigens per multiplexing alle 3 Stimmen des SID mit nur einem Accumulator realisieren. Leider würde das ein paar Ram-chips benötigen um die jeweiligen zustände abzuspeichern und zusätzlich einen eigenen multiplen Takt. Im synclavier wurde das wohl so gemacht. Die accu-Schaltung an sich erlaubt wohl mind. 8 Kanäle per multiplexing zu realisieren. mit schnelleren '283 (F, AS) sind wohl bis zu um die 30-40Mhz drin (>30 Kanäle).


    -Jonas