You are not logged in.

WTE

Master

  • "WTE" is male
  • »WTE« is a verified user
  • "WTE" started this thread

Posts: 1,903

Date of registration: Feb 11th 2005

Location: Deutschland

  • Send private message

member since 90 month member since 90 month member since 90 month member since 90 month member since 90 month

1

Sunday, November 6th 2011, 5:22pm

SID am C128 abspielen - Speichernutzung von SIDs

Isch hätt da gern mal ein Problem... so als totaler SID Newbie.

Ich arbeite an einer Lösung um SID-Dateien (HVSC-Format) am C128 abzuspielen. - NEIN, nicht im C64-Modus!

Ein paar eigene Experimente habe ich schon gemacht: http://blog.c128.net/archives/604

Im Prinzip bin ich schon ein gutes Stück weiter und kann jetzt in Einzelfällen (ca. 20% der getesteten SID-Files mit Ladeadresse $1000) SIDs ab $1000 laden und mit der jeweils im SID-File-Header angegebenen INIT- und PLAY-Adresse am C128 abspielen. Viele Tunes versagen jedoch ihren Dienst. Bei der Analyse der SID-Files ist mir aufgefallen, dass manche den RAM-Bereich des C64-Kasettenbuffers für Daten nutzt. Am C128 ein tödliches Unterfangen. Bei anderen bleibt mir das Versagen rätselhaft. Jetzt frage ich mich: welche "Schweinereien" sind denn bei den SID-Playern so üblich? Muss man mit Einsprüngen in C64-ROM-Routinen rechnen? Was könnte das Abspielen sonst noch erschweren? Vielleicht gibt es hier ja einen Experten, der sich da auskennt...

Gruß WTE

WTE

Master

  • "WTE" is male
  • »WTE« is a verified user
  • "WTE" started this thread

Posts: 1,903

Date of registration: Feb 11th 2005

Location: Deutschland

  • Send private message

member since 90 month member since 90 month member since 90 month member since 90 month member since 90 month

2

Monday, November 7th 2011, 10:04pm

Jetzt hab ich ein Tune, das spielt ganz nett, schaltet aber bei der Initialisierung immer die Farbe auf Rot um. Sehr amüsant. Verwendet offenbar $f1 in der Zeropage. Besondere Rücksichtnahme auf den Rest des C64 scheint unter SID-Musikern nicht weit verbreitet zu sein ;)

sauhund

ist falsch abgebogen

  • "sauhund" is male

Posts: 20,374

Date of registration: Jul 16th 2005

Location: zuhause

  • Send private message

member since 90 month member since 90 month member since 90 month member since 90 month member since 90 month

3

Tuesday, November 8th 2011, 2:06am

da der grossteil der tunes ja nicht dazu gedacht war/ist alleine abgespielt zu werden und/oder rücksicht auf irgendwas anderes (gar den systeminterrupt oder den basicinterpreter) zu nehmen musst du mit allem rechnen. potentiell wird der komplette speicher benutzt, roms ein- und ausgeblendet und teilweise auch angesprungen. manche tunes benutzen gar offenen i/o bereich und hören auf zu funktionieren wenn sie da keine grütze sehen. oder schreiben munter in die sid mirrors statt d4xx. oder das halbe spiel ist noch im schlecht gerippten sid file, oder das halbe demo. oh, und garnicht wenige sind auch derartig kaputt das man sie auf nem c64 garnicht abspielen kann, weil zb am ende der stackpointer nicht mehr stimmt oder so.

um einen halbwechs universellen .sid player hinzukriegen muss man daher vmtl erstmal ein framework basteln in dem man dann eine komplette 64k bank beliebig nutzen kann... und in der dann so gut es geht den speicheraufbau des c64 nachahmen (viele gametunes zb funktionieren nicht richtig wenn nicht zeropage und/oder $200-$400 mit den default werten initialisiert sind). ausserdem ist es ratsam vor dem starten jeweils alle i/o bausteine in den zustand zu versetzen in den es auch die resetroutine des c64 kernals macht. dann bleibt am ende "nur" das problem einen im speicher frei verschiebbaren kleinen player zu basteln, und einen freien bereich zu finden wo man einen screen ablegen kann (sofern man denn irgendwas anzeigen möchte). wobei beides vmtl auf dem c128 dank der zweiten bank vmtl nicht gar so schwierig ist.

das gesagt, tunes die sich jetzt grad nicht mit der default speicherbelegung des c128 beissen (was ist mit futurecomposer:$1800- oder soundmonitor:$c000- zb ?) sollten aber imho einfach funktionieren, von eventuellen konflikten in der zeropage mal abgesehen - sich aber nur zeigen sollten wenn man in den systemirq zurückspringt (und an der stelle gibts auch auf dem c64 bei durchaus vielen tunes probleme. die beiden genannten gehen aber wärend basic läuft :)).
http://www.hitmen-console.org http://magicdisk.untergrund.net
Die Furcht vor der freimütigen Antwort kann auch robuste Charaktere befallen.

WTE

Master

  • "WTE" is male
  • »WTE« is a verified user
  • "WTE" started this thread

Posts: 1,903

Date of registration: Feb 11th 2005

Location: Deutschland

  • Send private message

member since 90 month member since 90 month member since 90 month member since 90 month member since 90 month

4

Wednesday, November 9th 2011, 1:52am

Danke für die Hinweise.

Dass mit den SID-Mirrors hatte ich befürchtet. Hoffe aber mal, dass das nicht die Regel ist ...
Das mit den Grützewerten klingt hingegen gruselig.

Der Hinweis auf den futurecomposer ist interessant. Im Augenblick arbeite ich aber erstmal an einer "universelleren" Lösung. Das mit einer freien 64k-Bank läßt sich ja zum Glück in Bank 1 realisieren (da liegt ja sonst auch der C64). Ich habe jetzt einen Player bei $c00 installiert. Sowohl in Bank 0 als auch in Bank 1 (so eine Art Sandwitch ohne was dazwischen); somit kann ich auch im Interrupt direkt ohne Umweg die Bank wechseln und die Common Area deaktivieren (damit habe ich eine eigene Zeropage und eigenen Stack). In Bank 1 ist die Anzeige und ggf. Grafik etc. C64-Defaultwerte von 0000 bis 03ff hatte ich bisher noch nicht auf dem Radar. Das wäre aber, denk ich mal, ohne große Probleme realisierbar. Das mit der ROM-Umschaltung wird aber nicht funktionieren, denn die läuft ja beim C128 über die MMU.

Mein Player bei $C00 sollte eigentlich die meisten Fälle abdecken. Unter $1000 erwarte ich eigentlich keine SIDs (oder nur wenige). Und zwischen $800 und $fff sollte eigentlich in den meisten Fällen "Ruhe" herrschen. (Frommer Wunsch?)

Ein paar andere Probleme (mit Abstürzen oder Kricke-Knacke-Knartsch-Geräuschen) haben ich schon gelöst. Man darf sich nicht auf den Default-Tune verlassen. Es wird in den meisten Fällen nicht abgeprüft, ob die übergebene Tune-Nummer zulässig ist. Zufällig hatte ich mit einem "ordentlichen" SID experimentiert, das alle Nummern akzeptierte. Andere waren da zimperlicher. Als ich dann kapiert hatte, dass das 1. Tune immer die Nummer #0 und nicht #1 hat (GASCH!) waren viele Probleme wie weggeblasen. Das hätte ich mir allerdings auch gleich denken können. Jetzt laufen >90% der geprüften Tunes (Zufallsauswahl) mit Ladeadresse $1000 mehr oder weniger sauber.

Probleme habe ich mit einem NTSC-Tune (zu langsam), wohl nicht zu ändern und auch kein Drama. und mit zwei Tunes, die mir im Interrupt (a) die Farbe und (b) die Bildschirmdarstellung (NoScroll/Fenster) zerschießen. Wie das gehen kann, wo ich die Common Area im Interrupt deaktiviere, ist mir noch vollkommen schleierhaft.

Als nächstes mache ich mich mal an eine Verscheiberoutine ran, um Tunes jenseits der $1000 spielen zu können. Das ist ja keine Hexerei.