Hallo Besucher, der Thread wurde 2,8k mal aufgerufen und enthält 17 Antworten

letzter Beitrag von LilaQ am

SID - Sync Bit

  • Hallo zusammen,


    bin grade dabei Sound in meinen Emulator zu bringen. Bin jetzt beim SYNC Bit angekommen. So ~in etwa~ verstehe ich was ich dazu lese, allerdings wirklich klar ist es mir nicht.

    Kann mir eventuell jemand genau erklären was das SYNC Bit tut, und vor allem, eventuell ein kleines Testprogramm schreiben wo ich es dran hören kann? (Am liebsten ASM, nehme aber auch Basic ;-) )

    Alles was ich versucht habe zu testen klang leider gleich, deswegen mache ich vermutlich was falsch, und bräuchte mal Hilfe von einem Experten hier! :)


    Vielen Dank im Voraus!
    LilaQ

  • Ganz grob, je Kanal hast du ja einen Zähler, der für die Frequenz zuständig ist.

    Bei gesetztem SYNC-Bit wird der entsprechende Zähler auf "0" (oder was auch

    immer) zurückgesetzt, wenn der "davorliegende" Kanal einen Überlauf hat.

    (soweit ich mich erinnern kann, bei Kanal 1 ist es Kanal 3, bei 2 Kanal 1, etc.).

    Im Prinzip ganz einfach, probier's mal im Vice aus, setze dazu die Frequenz

    von Kanal 1 auch eine mittlere Grösse und die von Kanal 3 auf einen ein wenig

    grösseren Wert. Dann hörst du (oder falls du eine Oszi hast, siehst du) den

    Effekt.

    Beispiel: Kanal 1 mit Dreick, Kanal 3 mit Rechteck. Dann wird das Dreieckssignal

    immer zurückgesetzt, wenn Kanal 3 eine positive Flanke durchläuft.


    P.s.: kann auch sein, dass 1 durch 2 statt 3 synchronisirt wird, bin mir bei der

    Reihenfolge nach langer Zeit nicht mehr so sicher. Du wirst es aber im VICE

    sehen.

  • kann auch sein, dass 1 durch 2 statt 3 synchronisirt wird, bin mir bei der

    Reihenfolge nach langer Zeit nicht mehr so sicher.

    Die Abhängigkeiten werden z.B. hier beschrieben. Für das SYNC-Bit von Stimme 1 lautet die Beschreibung dort:


    Synchronisiert die Grundfrequenz von Oszillator 1 mit Osc. 3. Um einen hörbaren Effekt zu erziehlen muss Osc.3 auf eine niedrigere Frequenz (!=0) als Osc.1 gesetzt sein.

  • Ok, hatte nur noch die zyklische Abhängigkeit in Erinnerung, also 1 wird von 3

    synchronisiert, 2 von 1 etc.


    Das Frequenz von Kanal 3 wesentlich höher sein muss als die von Kanal 1

    stimmt nicht unbedingt: Ist F3 >> F1, dann hat Kanal 3 selten einen Einfluss

    auf Kanal 1, d.h. man hört nur ab und zu ein z.B. Knacken, mehr nicht. Aber

    mit einem Oszi kann der Effekt gut beobachtet werden.

  • Mhm, habt ihr da eventuell einen Beispielcode für mich? Wenn ich die beiden Kanäle setze, und das SYNC bit schalte höre ich keinen Unterschied (bin allerdings auch ein wenig geschädigt an den Ohren).


    Deswegen, falls da jemand einen ganz kurzen Code aufsetzen könnte (vllt für einen Dauerton oder sowas) dann wäre ich sehr dankbar, dann kann ich da darauf verlassen dass es wirklich so eingestellt ist wie es soll.

  • kann auch sein, dass 1 durch 2 statt 3 synchronisirt wird, bin mir bei der

    Reihenfolge nach langer Zeit nicht mehr so sicher.

    Die Abhängigkeiten werden z.B. hier beschrieben. Für das SYNC-Bit von Stimme 1 lautet die Beschreibung dort:


    Synchronisiert die Grundfrequenz von Oszillator 1 mit Osc. 3. Um einen hörbaren Effekt zu erziehlen muss Osc.3 auf eine niedrigere Frequenz (!=0) als Osc.1 gesetzt sein.

    Der Quelle kann ich nicht mehr so wirklich trauen, da dort auch die Bits für Sawtooth und Pulse channels vertauscht sind :/

  • [...] da dort auch die Bits für Sawtooth und Pulse channels vertauscht sind :/

    Oh, stimmt! :(


    Zitat von x3works.de

    Synchronisiert die Grundfrequenz von Oszillator 1 mit Osc. 3. Um einen hörbaren Effekt zu erziehlen muss Osc.3 auf eine niedrigere Frequenz (!=0) als Osc.1 gesetzt sein.

    Dieser Teil ist laut "Alles über den C64" korrekt (anklicken für Vollansicht):



    Ein Hörbeispiel für den Hardsync-Effekt findest du übrigens in der Demo Comaland beim ersten Part, der zum Diskwechsel auffordert. Dieser Link startet das Video kurz vor der entsprechenden Stelle (3:25):

  • Sehr lieb mit dem Link, allerdings bin ich tatsächlich so unmusikalisch dass ich nicht ausmachen kann was davon jetzt genau das SYNC ist ;(


    Deswegen war die Idee mit dem Dauerton in einem abgekapselten Code, damit ich wirklich unmissverständlich verstehe was gemeint ist. Sorry für die Umstände, Audio ist nicht wirklich mein Kompetenzgebiet .. :/

  • [...] allerdings bin ich tatsächlich so unmusikalisch dass ich nicht ausmachen kann was davon jetzt genau das SYNC ist ;(

    Och, das hat mit unmusikalisch nichts zu tun, denke ich. Der Hardsync-Effekt ist nun mal einfach nichts, was mensch als Musiker auf dem SID unbedingt verwenden müsste. In dem erwähnten Diskwechselpart hörst du den Effekt z.B. in der Melodie.

  • Das ist es ja, ich weiß nicht genau was an der Melodie der Effekt ist :/


    Und für meinen Emulator will ich natürlich sämtliches Verhalten auch originalgetreu darstellen können.

    In VICE bekomme ich nur abgehackte Töne hin wenn ich mit dem SYNC-Bit spiele - irgendwas mache ich falsch :(

  • Das ist es ja, ich weiß nicht genau was an der Melodie der Effekt ist :/

    Heraushören im Sinne von "ja klar, da hört man eindeutig einen Hardsync" wird wohl eher nicht möglich sein, nehme ich an.


    Taxim to the rescue! Kannst du vielleicht helfen?


    LilaQ , evtl. könntest du im Lemon64-Forum oder im CSDb-Forum mehr Infos zum Thema bekommen. Bei der CSDb muss mensch sich für einen Account "bewerben". Wenn du dein Anliegen schilderst, wirst du vermutlich einen bekommen.


    Und für meinen Emulator will ich natürlich sämtliches Verhalten auch originalgetreu darstellen können.

    In VICE bekomme ich nur abgehackte Töne hin wenn ich mit dem SYNC-Bit spiele - irgendwas mache ich falsch :(

    Bei Code ist es ja immer gut, den zu posten, damit jemand mit Kompetenz (also nicht ich) mal drüberschauen kann. ;)

    • Hilfreich

    .. und noch ein kleines BASIC-Programm dazu: es werden 2 Kanäle,

    Voice1 und Voice3 gesetzt, und beim Abspielen Voice1 abwechselnd

    mit Voice3 synchronisiert. Der Code müsste eiglich selbsterklärend

    sein.


    Viel Spass


    Edit: die Frequenz von Voice3 sollte nicht nur kleiner als die von

    Voice1 sein, nach Möglichkeit sollten die Frequenzen auch teilerfremd

    sein (sonst fällt ja das Ende einer Periode von Voice3 mit dem

    Ende der Periode von Voice1 zusammen und man hört nichts. Kann

    man ja im Code ausprobieren).

  • Perfekt! Danke dir!
    Ich glaube ich konnte es jetzt endlich richtig umsetzen! :)


    Hast du eventuell den Quellcode von dem kleinen Programm auch für mich? Dann würde ich es gerne in meine kleine Testsuite mit übernehmen (hauptsächlich wegen dem Wechsel und der Textanzeige, ich bin nicht sonderlich gut im eigentlich programmieren im 6510 :whistling::saint:)

    Danke! :)

  • Hast du eventuell den Quellcode von dem kleinen Programm auch für mich?

    Ist doch ein einfaches BASIC-Programm, im Prinzip nur Pokes.


    Und noch ein kleiner Hinweis zum Programm: in Zeile 235

    wird in SID+2*7+4 64 geschrieben, genauso gut kann 16, 32

    oder 128 geschrieben werden. Und hier ist auch wichtig,

    dass das Gate-Bit nicht gesetzt wird. Damit wird Stimme 3

    nicht auf den Ausgang gelegt, d.h. Stimme 3 ist nicht zu hören.


    Umsetzung in Assembler:


    Clear SID:

    lda #$00

    ldx #$18

    loop1:

    sta $d400,x

    bpl loop1


    Set Register Value:

    lda #value

    sta $d400+reg


    damit lässt sich leicht obiges BASIC-Programm in Assembler übersetzen.

  • :S Total an mir vorbeigegangen - ich dachte es wäre in ASM geschrieben.


    Genau, wollte ich noch gefragt haben - ist die Stimme des Master-Oszillators dann überhaupt relevant? Ich habe an 1-2 Stellen gelesen dass außer der Frequenz nichts weiter Einfluss nehmen würde und (soweit ich das verstehe) das würde ja auch Sinn machen, weil der Slave-Oszillator Zyklus immer dann zurückgesetzt wird, wenn der Master einen Zyklus vollendet hat, ist das soweit richtig? :huh:

  • Meinst du mit Master in meinem Beispiel Voice3 (und mit Slave Voice1), mit Stimme

    die Waveform (Triangle,Saw,etc)?

    Falls ja: es ist tatsächlich so, dass die Waveform von Voice3 total unwichtig ist, es

    ist ja auch unwichtig, ob für Voice3 GATE "on"=1 oder "off"=0 gesetzt ist, es zählt

    nur die Frequenz.


    Noch zu meinem Programm/meinen Bemerkungen: ich habe das Programm nebenbei

    geschrieben, z.B. fehlt ja Register 2, für das Beispiel aber irrelevant. Du kannst ja

    für eine Stimme die Registerwerte in Form eines Septetts angeben

    (0:FreqLO,1:FreqHI2:,PWMLO,3:PWMHI,etc), dann ist eine Stimme besser

    beschreibbar.

    Und ich hatte geschrieben, dass die Frequenz von Voice3 grösser sein muss als die

    von Voice1. Ich hab's mir mal mit verschiedenen Frequenz-Paaren angehört, aber

    bilde dir am Besten deine Eigene Meinung zu dem, was man hört und nicht so gut

    hört.

    Anbei noch ein Waveform-Diagramm: Voice1 mit Triangle, Voice2 mit kleinerer

    Frequenz. Man sieht deutlich, dass die Dreiecke von Voice1 nur "selten" unterbrochen

    werden.

  • Taxim to the rescue! Kannst du vielleicht helfen?

    :emojiSmiley-51: Eben erst gesehen. Aber Jotta hat das ja nun gut erklärt.

    Ich hänge noch eine alte Sync-Orgie von mir an, damit LilaQ ne Idee davon bekommt, was man mit Sync so anstellen kann. In diesem Fall hab ich damit u.a. eine E-Gitarre simuliert (unter Hinzunahme des Tiefpass-Filters). Ich glaube, man kann das erkennen. Ansonsten, LilaQ: Es ist der laute Klang, der von Sekunde null in deinen Ohren sägt.