Beiträge von TheRyk im Thema „SID rumpelt im selbstgebastelten Player“

    Speicherinitialisierungsproblem


    Das war gar nicht sooo abwegig, aber darauf komme ich auch manchmal zuletzt :)

    2. Ergebnis: entweder initialisiert VICE den Speicher "falsch" oder es gibt verschiedene ROM-Versionen mit unterschiedlichen Initialisierungen beim C128 und ich habe gerade die unpassende.


    Bei VICE kann man AFAIK einstellen, ob der den Speicher initialisiert oder nicht. In ersterem Fall initialisiert er allerdings deutlich anders als die meiste Hardware (z.B. wird vieles mit $FF oder $00 gefüllt IIRC, was bei einem echten Einschalten je nach ROM mal so, mal so ist)

    Fazit: Ich muss den gesamten "unbenutzten" Speicher zuvor initzialisierten. Am besten mit 64-Byte-Blöcken wie beim C64. So ein Dreck!

    Schau nochmal in den KERNEL-ROM-Plan, das erleichtert evt. manches.

    Na, immerhin ist das Mysterium gelöst.


    :thumbsup:

    EDIT

    Zitat

    Hmm, da fällt mir ein, dass mein C128 jeweils inmitten der $ff ein einsames $00 anzeigte. Der Wert läßt sich mit $ff überschreiben und bleibt auch stabil. Kann man das erklären oder darf ich die RAMs als defekt ansehen und muss sie austauschen?


    Wenn Du es überschreiben kannst, ist das RAM an der Stelle nicht defekt, sondern wird nur anders initialisiert (ob nun aus gutem Grund oder aus Zufall bzw. weil die ROMs in diesem Gerät es so wollen) Wenn Du Zweifel hast, nimm einen RAM-Tester, kA, was es da speziell für den C128 gibt, wenn es nur um das C64RAM geht, gibt es massenhaft Tools dafür.

    Zitat

    <> 0


    > ! ;)

    Und ja $D400 bis $D417 auf Null vor dem Initialisieren, wie Fröhn sagte.

    Noch was fällt mir ein aus TheRyk's Fehlerkiste (vor einem gutem Jahr): Beendest Du etwaige IRQs korrekt? Wenn die Abspielroutine in einer IRQ liegt würde ich diese sauber beenden, bevor ich wieder eine neue Musik-IRQ (bzw. die gleiche mit modifiziertem Inhalt bei self-modyfing code) aufrufe. Wenn IRQ2 aufgerufen wird, während IRQ1 noch irgendwo rumhampelt, kann es durchaus zu Missklängen kommen.

    Und NOCH was/Idee für Patch/Workaround: Du sagst, Du initialisierst ZP und SID. Vielleicht etwas abwegig, aber vielleicht wäre es einen Versuch wert, den Stack
    a) auch mal zu initialisieren oder
    b) mal ZP, STACK und SID Werte bei dem Fall zu sichern, in dem es geht (also nach dem Abspielen von Tune A). Entweder Du nimmst diese Werte einfach als neue Ini-Werte für die fraglichen Register oder Du studierst die mal genauer und schaust, ob/was auffällt.

    Das mit dem Initialisiert lässt sich zumindest noch leichter checken als nicht-initialisiert, indem man mal Teile der Reset-Routine nachbildet (eine kleine Kernel-Jump-Combo vor dem Initialisieren des Tunes).

    Aber ich bin schon beim Erstellen von NeoTunes an vielen Stücken verzweifelt und verzweifle noch heute manchmal, bei SID-Tunes gibt es dolle Überraschungen bzw. Sachen, die man so einfach nicht ahnt. Es gibt z.B. SIDs, die zwar unterm Basic-ROM oder noch höher liegen, aber fleißig in einen ganz anderen Speicherbereich schreiben und auch von dort lesen (Beispiel: Terra Cresta, liegt so von $9xxx bis $axxx, schreibt nach bzw. liest von $0400 ff., ist mir nur deshalb aufgefallen, weil man es sehen kann). Das muss man z.T. wissen, um zu entscheiden, in welcher VIC-Bank man das Screen oder auch Code/Daten besser nicht unterbringt.

    Mir hat damals das hier ganz gut geholfen, heißer Tipp von unserem anderen Groepaz ;)
    Bitte melde dich an, um diesen Link zu sehen.

    Damit kann man für einen ziemlichen Haufen Tunes checken, was während des Abspielens wo genau im Speicher passiert.

    Noch ein Tipp: Mal in der CSDb schauen, ob irgendein Release den SID verwendet. Vor und beim Abspielen in den Speicher schauen (mit VICE-Monitor oder so). Ich hatte dort schon oft Glück, dass ich eine schon relozierte und unproblematische Version rausrippen konnte oder vom freundlichen Coder aus den 1980ern gleich die richtigen Initialisierungswerte im Scrolltext erhalten habe, Geheimtipps, die aus den HVSC-Daten (Ich sag nur Play-Address $0000 oder auch Werte von Akku, X und Y Register vor dem Initialisieren) oftmals so nicht hervorgehen.

    Ansonsten what Sauhund said, nicht zu viel graue Haare über einzelne Tunes wachsen lassen. Erstmal coden, was für >80% der Tunes läuft und um die Spezialfälle hinterher kümmern.