Hallo Leute,
um die Wartezeit auf die Ankunft der FPGASID Prototypen gut zu nutzen, habe ich mir über die Registerbelegung des FPGASID noch ein paar Gedanken gemacht. Vor allem um die Sonderregister, mit denen man die Spezialfunktionen des FPGASID aktivieren kann. Die momentane Registerbelegung ist nicht gerade optimal und ich möchte das quasi vor dem ersten offiziellen Release noch gerade ziehen.
Da ich mir in einigen Punkten noch nicht ganz sicher bin, möchte ich das hier zur Diskussion stellen:
FPGASID beinhaltet 2 komplette SIDs. Ein einzelner SID belegt prinzipiell 31 Register 0...31.
Die Register 0...24 sind exakt genau so wie beim originalen SID.
Register 25:
read: paddle x
write: $81 - magic_low
Register 26:
read: paddle y
write: $65 - magic_high
Man kann also in die Paddle Register hinein schreiben. Sobald der geschriebene Wert magic = $6581 ist, werden die Spezialregister aktiviert. Sie sind dann schreibbar. Wenn magic != $6581 ist, behalten die Spezialregister ihren aktuellen Wert bei, sind aber schreibgeschützt. Auf diese Weise können andere Programme, die z.B. den SID von Adresse 0...31 einfach mit Nullen löschen, diese Register nicht überschreiben und die momentane Konfiguration bleibt so erhalten. Dies ist prinzipiell für beide SIDs im FPGASID so, es können also mit wenigen Ausnahmen alle Settings für beide SIDs separat eingestellt werden.
Folgende Register sind also nur im Magic-Modus verfügbar: (magic = $6581)
Register 25: Revision Platine (also nicht mehr paddle x)
Register 26: Revision FPGA (also nicht mehr paddle y)
Register 30:
bits 0..2: Adresse des zweiten SID
bit 0: d420
bit 1: d500
bit 2: de00
Wenn alle bits 000 sind, dann liegt der zweite SID auf d400. Das ist mehr oder weniger ein mono-mode bzw Pseudeo-Stereo mode (siehe später)
Man kann auch mehrere bits setzen, also z.B. D420 und D500. Dann liegt der zweite SID an beiden Adressen und man muss nicht immer umkonfigurieren, wenn man andere Stereo-tunes mit anderer Belegung verwendet.
Wichtig: Diese bits sollten nur im ersten SID verändert werden und sie wirken sich auf die Adresse des zweiten SIDs aus. Ein Beschreiben der bits im zweiten SID hat keine Auswirkung.
Register 31:
bit 0: Filter Modus: 0=6581, 1=8580
bit 1: DAC-Modus: 0=crunchy (6581), 1=clean (8580)
bit 2-3: Quelle für EXTIN:
00: analoger Eingang
01: deaktiviert
10: der jeweils andere SID
11: digifix (8580)
bit 4: Stimme 1 deaktivieren
bit 5: Stimme 2 deaktivieren
bit 6: Stimme 3 deaktivieren
mit den bits 4, 5 und 6 kann man jeweils pro SID einzelne Stimmen deaktivieren. Wenn man bei jedem SID andere Stimmen deaktiviert, dann verteilen sich die Stimmen entsprechend auf beide SIDs und man hat Stereoklang auch bei mono-SID-Tunes. Man kann also z. Stimme 1+2 links und Stimme 2+3 rechts haben. Das ist der erwähnte Pseudostereo-Effekt.
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.
Was meint Ihr? Ist die Registeraufteilung so sinnvoll? Fehlt noch was Wichtiges? Ich lasse mir hier gerne auch noch ein paar neue Features vorschlagen, wenn sie sich ohne große Umbauten erledigen lassen. Was ich hier aufgeführt habe funktioniert auch noch nicht alles komplett, ist aber so weit, dass ich mich traue das hier schon anzukündigen.
Meinen momentanen Stand habe ich hier nochmal als Tabelle rein kopiert. Sonderfunktionen in blau. Ist evtl. etwas übersichtlicher: