Tagesarchive: 6.11.2011

C128 SID-Player (1)

Der C128 bietet zwar ein erweitertes BASIC 7.0 das (mit PLAY & SOUND) eine komfortable Programmierung des SID erlaubt, doch reicht das eben nur für einfache Melodien und Klänge. Richtige SID-Tunes abzuspielen, wie man sie von der High Voltage SID Collection (HVSC) kennt, ist jedoch nicht möglich, denn diese wurden ja auf einem C64 für den C64 erstellt und haben eine integrierte Abspielroutine.

Für mein derzeitiges Dauerprojekt hilft mir der übliche Hinweis: „willste SID-Musik, schalte einfach den C64-Modus an“ recht wenig. Ich brauche SID-Musik im C128-Modus! Bleibt die Option: selber machen! Damit ergeben sich gleich mehrere Probleme: Erstens gibt es kein geeginetes Tool um SID-Musik für den C128 zu erstellen; alles konzentriert sich auf den C64 (High Voltage Music Engine Collection) und der C128 Music Maker, falls er denn geeignet wäre, läßt sich im Web nicht aufspüren. Zweitens habe ich kein Talent als Komponist oder Musiker. Drittens keine Zeit, um mich da einzuarbeiten.

Diese Erkenntnisse vor Augen konnte es nur heißen: Alles zurück auf Start, die Situation neu analysieren! Ein SID-Tune liegt in der Regel (mit vielen Ausnahmen) ab $1000 im Speicher eines C64. Das ist bei einem Commodore 128 ein ziemlich blöder Platz, liegen hier doch nicht ganz unwichtige Systemvariable, die Daten der Funktionstastenbelegung und der DOS-Kommandopuffer. Frei verfügbar ist das RAM erst ab $1300.

In mein Programm bot sich der freie Bereich ab $2000 an und ein Programm von $1000 nach $2000 zu verschieben, erschien mir als ein lösbares Problem. Für die praktische Umsetzung suchte ich mir ein geeignetes SID-File entfernte den SID-Header änderte die Startadresse auf $2000 und korrigierte im Monitor alle Sprünge und Adressen von $1XXX zu $2XXX. Es gab dann noch ein paar Tabellen für indirekte Adressierungen, die ebenfalls angepasst werden mussten. Das ganze dauerte etwa zwei Stunden.

Als nächstes benötigte ich eine kleine Initialisierungsroutine für den im SID-File integrierten Player. Dazu modifizierte ich ein passendes Code-Beispiel von C64 Codebase. Neben den neuen Einsprungadressen musste ich dem C128 mitteilen, dass sein BASIC-IRQ, mit dem er neben PLAY und SOUND auch diverse SPRITE- und GRAPHIC-Befehle steuert, nun unerwünscht sei. Dies erledigte folgendes Code-Schnipsel:

lda #$ff
sta $d8 ; deaktiviert BASIC IRQ
lda #$c0
sta $0a04 ; deaktiviert VIC Updates

Die Stunde der Wahrheit rückte näher. Der modifizierte SID-File wurde nach $2000 geladen und die spezielle Initialisierungsroutine gestartet. Das Ergebnis war: Nix! Irgendwo in den Tiefen der Play-Routine mussten mir ein paar umzustellende Adressen entgangen sein. Die Vermutung, dass das Tabellen betraf, lag nahe. An dieser Stelle wurde mir klar, dass der Aufwand für die Umstellung eines SID-Tunes erheblich war und eine vollständige Code-Analyse erforderte. Sowas kann man einmal machen, aber da es jede Menge unterschiedlicher Play-Routinen in SID-Files gibt, würde diese Aufgabe für jedes File aufs Neue erforderlich sein und somit ein ziemlich mühseliges Unterfangen darstellen.

An dieser Stelle wurde klar: Es ist dringend geboten eine bessere, allgemeingültige Lösung anzustreben. Die könnte in einem universellen Code-Relocator (ich höre schon die Leser lachen) oder einem grundsätzlich anderen Problemlösungsansatz bestehen. Doch dazu später mehr.

Veröffentlicht unter C128, Music | Schreib einen Kommentar