FPGASID Register Map

  • LogicDeLuxe schrieb:

    Mit welcher Frequenz wird den gesampelt?
    1 MHz. So schnell kannst du das gar nicht auslesen. Man kann einfach so schnell auslesen, wie man es benötigt. Allerdings hilft es, wenn das externe Signal bereits durch einen Tiefpass geschickt wurde. Der interne Tiefpass geht bis ca 30kHz und man müsste also mit 60kHz abtasten, um das Nyquist Kriterium einzuhalten. Wenn mann z.B. mit 16kHz abtasten will, sollte man schauen, dass das Eingangssignal keine Frequenzen jenseits der 8kHz enthält.
  • spiceminer schrieb:

    Dann könnte man die FPGASID auch zur Datenerfassung nutzen, z.B. mit 12 bit Temperaturen erfassen von einem Pt100?
    Dein PT100-Beispiel ist jetzt nicht sooo passend, aufgrund der notwendigen externen hardwaremäßigen Aufbereitung des Widerstandswertes eines PT100 zu dem benötigten Spannungssignal.

    Aber: Ja, prinzipiell können (kleine) Spannungen gemessen werden... (Sofern ich das richtig dem Schaltplan entnehmen kann.) :)

    Gruß,
    Thomas
  • na ihr habt ja Sachen vor! Pt100 könnte mit entsprechender Beschaltung gehen. Der Eingang ist DC coupled damit
    auch ein extern drangebastelter digifix funktioniert (ja, an sowas habe ich auch gedacht!).
    auslesen lassen sich dann aber nur 8 bit, da das Register nicht breier ist.

    Die potx und poty Eingänge sollten eine 1531 verdauen. Ich habe eine 1531 kompatible Maus, damit ging es. Aber Sinn des Alphatests ist es ja sowas zu checken. Beim SID laufen die potiregister mit ca 2000 Hz. Für eine temperaturmessung per NTC reicht das evtl auch schon.

    Ich hab einen Grossteil dieser features heute eingebaut. Pseudostereo ist nett und samples klappern auch in Register 29.

    EDIT: hier noch die aktuelle Registermap:


    habe in register 31 noch die bitrot Einstellungen ein bisschen durchgepuzzelt und es gibt jetzt ein identify bit.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von andi6510 () aus folgendem Grund: Registermap hinzugefügt

  • Reset Wert ist grundsätzlich $00 für alle Register.

    Ein Hardware-reset setzt die Register wieder alle auf 0. Man muss die Konfiguration dann neu laden.
    Einen Software-reset (sys64738) überleben sie aber, Wenn der Magic wert auf 0 gesetzt wurde um die Register vor dem Überschreiben zu schützen.

    Ich habe im Moment kleine Basic Progrämmchen mit den wichtigsten Einstellungen. Die lade ich kurz um ein Setting zu setzen und starte dann das eigentliche Programm. Geht sehr flott so.

    Samples über digifix gehen jetzt auch.

    In register 31 gehen nur die obersten beiden Bits. Der Rest ist nicht funktional bis völlig kaputt. Darum kümmere ich mich später...
  • andi6510 schrieb:

    Reset Wert ist grundsätzlich $00 für alle Register.
    Also steht alles auf 6581, aber der Digifix ist aus. Wäre es nicht sinnvoll, ein eigenes Digi-Bit zu nehmen? Z.B. Bit 3 in Register 31? Dann hätte man alle 6581-spezifischen Eigenschaften beisammen und unabhängig voneinander konfigurierbar. Also in etwa "$Dx18 digis, 0:on (6581), 1:off (8580)".
  • nMorgen!

    Eventuell ist es nur ein Benennungsproblem.

    Der 6581 braucht keinen Digifix, weil dort digis über D418 immer schon abgespielt wurden. Das liegt an der analogen Schaltung um die Filter herum. Wenn ich also will, dass keine Digis über D418 abgespielt werden, dann musss ich das bit0 in Register31 setzen. Dann wird die analoge Schaltung des 8580 modelliert und Digis über D418 funktionieren nicht mehr.

    Die oberen beiden bits in Reg31 sind nur eine Quellenumschaltung für den extin Eingang. Entweder kommt das Signal tatsächlich vom extin pin, oder eben aus Register 29 (oder von den beiden anderen Quellen).

    Register 29 kann man nun wie einen externen Digifix benutzen, indem einfach ein fester Wert dort reingeschrieben wird, oder eben zur Wiedergabe von Digis indem dort samples schnell genug rein geschrieben werden. Das ist aber unabhängig vom Filtermodus in bit0.
  • andi6510 schrieb:

    Register 29 kann man nun wie einen externen Digifix benutzen, indem einfach ein fester Wert dort reingeschrieben wird, oder eben zur Wiedergabe von Digis indem dort samples schnell genug rein geschrieben werden.
    was passiert dann, wenn man einen SID tune mit digi stimme abspielt und gleichzeitig 8bit samples abspielen will?

    ist der digifix wert ebenfalls 8 bit?

    p.s.: ich finde das projekt mittlerweile oberscharf und auch fuer die zukunft extrem wichtig. KUDOS!
  • everslick schrieb:

    was passiert dann, wenn man einen SID tune mit digi stimme abspielt und gleichzeitig 8bit samples abspielen will?

    ist der digifix wert ebenfalls 8 bit?

    p.s.: ich finde das projekt mittlerweile oberscharf und auch fuer die zukunft extrem wichtig. KUDOS!
    Digis über D418 und 8-bit Digis über das Register 29 sind zwei mehr oder weniger unterschiedliche Mechanismen. Wenn man also beides gleichzeitig macht, kommen auch beide gleichzeitig raus. Da beides aber nicht ganz unabhängig voneinander ist, kann es sein, dass das Ergebnis nicht ganz zufriedenstellend klingt.

    Das Register 29 hat 8 Bit. Es dient dazu einen Digifix-Wert fest einzustellen, damit die D418 Samples auch im 8580 Modus hörbar sind. Eigentlich hatte ich vor diesen Wert intern fest zu verdrahten, aber ich habe ihn jetzt auf ein Register gelegt. Jetzt kann man den Wert nicht nur verändern, sondern ihn auch missbrauchen um damit Samples abzuspielen.

    Das ist alles noch eher als experimentell anzusehen. Ich kann es auch gar nicht im Detail testen, weil 1. der 8580 Filter momentan kaputt ist und 2. ich erst mal ein Programm schreiben müsste um Digis abzuspielen. Zumindest Punkt 2 ist gerade nicht mein Fokus.
  • andi6510 schrieb:

    Das liegt an der analogen Schaltung um die Filter herum.
    Das sollte man dann evtl. in der Tabelle ergänzen. Z.B. könnte das Bit 0 heißen: "Filter mode & $Dx18 digis". Dann wird es offensichtlich, womit das zusammen hängt.

    andi6510 schrieb:

    Die oberen beiden bits in Reg31 sind nur eine Quellenumschaltung für den extin Eingang. Entweder kommt das Signal tatsächlich vom extin pin, oder eben aus Register 29 (oder von den beiden anderen Quellen).
    Dann sollte es statt "11: Digifix (8580)" evtl. besser "11: use Reg 29" heißen. Dann wird es auch hier offensichtlich, was es tut. Den Zusatz "(8580)" finde ich ohnehin unnötig, da man die Digifix-Schaltung prinzipiell auch am 6581 vornehmen kann, auch wenn das wohl niemand macht.

    Und wenn man Register 29 auch zum Samples Spielen verwenden können soll, dann muß natürlich mehr Headroom im Mixer sein, als es ein echter SID hat. Bei einem echten Digifix kommt man doch schnell in den Clipping-Bereich, wenn man den Widerstand zu weit runter dreht.

    andi6510 schrieb:

    Register 27,28 und 29 möchte ich später benutzen, um die internen lookup-Tabellen mit neuen Werten zu laden und auf diese Weise neue SID-Profile in FPGASID zu laden. Hierzu brauche ich eine Adresse (16 bit) und ein byte für die Daten. Daher 3 Bytes.
    Solltest Du auch mal in Deiner Tabelle berücksichtigen. Register 29 wäre dann ja schon doppelt belegt. Sollte aber wohl kein Problem sein, da der Digifix nicht immer aktiviert ist.

    Aber besteht da überhaupt Bedarf, die Lookup-Tabellen zu ändern? Für Kompositionen speziell für den FPGA-SID wäre wohl eher eine Möglichkeit praktisch, die ADSR-Generatoren zu resetten, finde ich.

    andi6510 schrieb:

    und 2. ich erst mal ein Programm schreiben müsste um Digis abzuspielen. Zumindest Punkt 2 ist gerade nicht mein Fokus.
    Evtl. wäre sogar eine Sampleroutine vom DTV kompatibel:

    Jeri schrieb:

    $D41D Writes to voice 1’s upper 8 bits of waveform accumulator.
    ...
    Writing to voice 1’s waveform
    accumulator when frequency is set to 0
    can be used for 8 bit digital sample
    playback.
  • so, jetzt komme ich auch mal dazu das zu beantworten. Bin gerade leider etwas

    und verbringe daher die meiste Zeit schlafend auf dem Sofa. Sorry also, wenn Fragen nicht immer sofort beantwortet werden ...



    LogicDeLuxe schrieb:

    Das sollte man dann evtl. in der Tabelle ergänzen. Z.B. könnte das Bit 0 heißen: "Filter mode & $Dx18 digis". Dann wird es offensichtlich, womit das zusammen hängt.
    wie wäre es mit

    analog circuit:
    0: 6581
    1: 8580


    LogicDeLuxe schrieb:

    Solltest Du auch mal in Deiner Tabelle berücksichtigen. Register 29 wäre dann ja schon doppelt belegt. Sollte aber wohl kein Problem sein, da der Digifix nicht immer aktiviert ist.
    ich schreibe mal sowas wie "reserverd for future use" hinein


    LogicDeLuxe schrieb:

    Aber besteht da überhaupt Bedarf, die Lookup-Tabellen zu ändern? Für Kompositionen speziell für den FPGA-SID wäre wohl eher eine Möglichkeit praktisch, die ADSR-Generatoren zu resetten, finde ich.
    Ohja! Das ist ein viel verlangtes feature: Es geht darum den SID (vor allem den 6581) auf verschiedene Profile umzumappen. Also sowas wie "6581AR4 Hülsbeck" oder "6581-rev2 Hubbard". Damit kann man dann die Sids so abspielen, wie es der Komponist ursprünglich gehört hat. Damit soll dann die große Variationsbreite der SID chips abgebildet werden.
    Es gibt nämlich 6581er und Lieblings-6581er :)
    Leider ist momentan noch sehr viel fest verdrahtet. Da muss noch einiges an Arbeit rein gesteckt werden.


    LogicDeLuxe schrieb:

    Evtl. wäre sogar eine Sampleroutine vom DTV kompatibel:

    Jeri schrieb:
    $D41D Writes to voice 1’s upper 8 bits of waveform accumulator.
    ...
    Writing to voice 1’s waveform
    accumulator when frequency is set to 0
    can be used for 8 bit digital sample
    playback.

    Cool, das ist jetzt reiner Zufall. Allerdings sind die samples im FPGASID im signed Format. Man wird also mindestens noch das obere Bit invertieren müssen.
    Der Einwand mit dem headroom ist valide. Ich muss mir nochmal die Pegel anschauen. Vermutlich darf man die 8-bit momentan nicht voll aussteuern.

    So, das Sofa ruft...
  • andi6510 schrieb:

    Ohja! Das ist ein viel verlangtes feature: Es geht darum den SID (vor allem den 6581) auf verschiedene Profile umzumappen. Also sowas wie "6581AR4 Hülsbeck" oder "6581-rev2 Hubbard". Damit kann man dann die Sids so abspielen, wie es der Komponist ursprünglich gehört hat. Damit soll dann die große Variationsbreite der SID chips abgebildet werden.
    Ich dachte, die Lookup-Tabellen wären für die ADSR-Parameter und sind in allen SID-Chips identisch. Die großen Unterschiede liegen doch in den Filtern.
    Das man Filterprofile konfigurieren kann, da bin ich natürlich dafür. Und auch unter den 8580'ern gibt es erhebliche Unterschiede bei den Filtern.

    Aber wie willst Du ermitteln, was der Komponist ursprünglich gehört hat? Gibt es überhaupt irgendwelche Aufnahmen, wo der Komponist was an der Originalmaschine mitgeschnitten hat? Oder ist irgendein SID-Chip zugänglich, von dem Bekannt ist, wer darauf komponiert hat? Am ehesten könnte ich mir da noch Fälle aus der Demo-Scene vorstellen. Manche sind ja noch aktiv und haben bestimmt auch ihren Lieblings-SID aufbewahrt, der mit gut Glück auch noch funktionieren könnte. Aber bei den großen Spielekomponisten aus den 80'ern sehe ich da eher keine Chance.
  • LogicDeLuxe schrieb:

    Aber wie willst Du ermitteln, was der Komponist ursprünglich gehört hat?
    Das ist Aufgabe der Menschen mit besseren Ohren als meine. Ich denke schon, dass man an den Filtern merkt, dass der SID auf dem das ursprünglich komponiert wurde, eher eine hohe oder eine tiefe Filterfrequenz hatte. Bei moderneren Stücken ist das ja zum Teil auch vom Komponisten dokumentiert worden. Was die alten Sachen angeht, so ist es vermutlich eher Geschmackssache, was man persönlich besser findet. Ich glaube auch nicht, dass Ron Hubbards SID-chip noch irgendwo existiert bzw. genau zuzuordnen ist, mit welchem SID er seine Stücke komponiert hat.
  • andi6510 schrieb:

    LogicDeLuxe schrieb:

    Aber wie willst Du ermitteln, was der Komponist ursprünglich gehört hat?
    Das ist Aufgabe der Menschen mit besseren Ohren als meine. Ich denke schon, dass man an den Filtern merkt, dass der SID auf dem das ursprünglich komponiert wurde, eher eine hohe oder eine tiefe Filterfrequenz hatte. Bei moderneren Stücken ist das ja zum Teil auch vom Komponisten dokumentiert worden. Was die alten Sachen angeht, so ist es vermutlich eher Geschmackssache, was man persönlich besser findet. Ich glaube auch nicht, dass Ron Hubbards SID-chip noch irgendwo existiert bzw. genau zuzuordnen ist, mit welchem SID er seine Stücke komponiert hat.

    Der SID Chip von Martin Galway ist noch "am Leben" und wurde benutzt um seine Tunes auf CD aufzunehmen:

    lynnemusic.com/project-galway.html


    Wo man die noch bekommt, weiß ich nicht... aber ich würde mal bei c64audio.com nachfragen. Da war die
    damals im Shop gelistet.

    Ab und zu taucht auch mal eine in der Bucht auf:

    ebay.de/itm/371859637350

  • Vielleicht wäre es sinnvoll, für die Registermap möglichst früh eine Dokumentation zu schreiben. Mir schwebt da sowas ähnliches wie in den Datenblättern der AVR-Controller vor:

    * Dort wird erstmal jedes Register grafisch dargestellt, mit Registeradresse und Registernamen, sowie die Namen der jeweiligen Bits (Bit 7 links, Bit 0 rechts).
    * Dann folgenden die Resetwerte der jeweiligen Bits.
    * Und letztlich immer eine ausführliche Beschreibung der Bitfunktion.

    Nur so als Idee...


    andi6510 schrieb:

    Reset Wert ist grundsätzlich $00 für alle Register.

    Ein Hardware-reset setzt die Register wieder alle auf 0. Man muss die Konfiguration dann neu laden.
    Einen Software-reset (sys64738) überleben sie aber, Wenn der Magic wert auf 0 gesetzt wurde um die Register vor dem Überschreiben zu schützen.

    Ich habe im Moment kleine Basic Progrämmchen mit den wichtigsten Einstellungen. Die lade ich kurz um ein Setting zu setzen und starte dann das eigentliche Programm. Geht sehr flott so.

    Mir geistert diese Bedienung nun schon zwei Tage im Kopf herum... Was Du beschreibst, bedeutet ja jedes Mal nach einem Hardware-Reset ein neues Laden der Settings (in den letzten drei Registern). Wie verträgt sich das mit Erweiterungen am Expansionsport (speziell die 1541U2)? Die bedient doch auch die Resetleitung, oder? (<-- werde ich mal am Wochenende checken...)


    Ich hätte da eine Idee, wobei ich weder weiß, ob sie umsetzbar ist, noch ob Du an ihr Gefallen findest.

    Aufteilen des Resets in zwei Prioritäten:

    Einschaltreset: Setzt alle SID-Register auf $00 und initialisiert die drei letzten Register (Reg 29 bis Reg 31) mit sinnvollen Werten.

    Reset auf der Resetleitung: Setzt alle SID-Register auf $00 und lässt Reg 29 bis Reg 31 unangetastet.

    So könnte ich auf der Kiste rumkloppen/resetten wie ich will und würde meine SID-Einstellungen erst mit dem Ausschalten verlieren.

    Am elegantesten wäre für mich ein Speichern der letzten drei Register in einem nichtflüchtigen Speicher, welcher beim Einschalten in die letzten drei Register kopiert wird. Aber darüber verfügt das FPGA glaube ich nicht (außer für dessen Konfiguration...).

    Gruß,
    Thomas