Hallo Besucher, der Thread wurde 44k mal aufgerufen und enthält 169 Antworten

letzter Beitrag von InsertDisk2 am

Fragen zu Exomizer

  • Hab mal ne Frage zu exodecrs. Ich wollte damit diverse Screens im laufenden C64-prg entpacken, aber wie kann ich einstellen, WOHIN entpackt wird? Rufe Exomizer folgendermaßen auf:

    Code
    1. exomizer mem -l none unpacked.prg -o packed.prg

    Bei .prgs nimmt er die Adresse aus dem Header der ungepackten Datei, nehme ich mal an. Aber wie kann ich eine Reihe von Screens (als .bin) einzelnd packen, die ggfs. auch an unterschiedlichen Stellen HIN (!) entpackt werden sollen?


    Gibt es dafür eine Pack-Option? *find"brettvormkopf"-smileynicht*

    Die letzten zwei Bytes in den gepackten Daten definieren die Endadresse (+1) wo er es auspackt. Wenn du zum Beispiel eine Datei packst die ihre Startadresse bei $C000 hat und 628 ($274) Byte lang ist, dann steht im von Exomizer erzeugten File zuletzt 74 C2, d.h. die Datei wird dann rückwärts von $C274 aus entpackt.
    Wenn du die beiden Bytes überschreibst, entweder schon im File oder im Speicher nach dem Laden des gepackten Files entpackt exomizer die Daten entsprechend an eine andere Stelle. Wird in obigem Beispiel 74 C2 zum Beispiel mit 00 D0 ersetzt, dann landen die Daten nach dem Auspacken im Bereich von $CD8C bis ausschließlich $D000 .

  • Blöde Frage: Wenn man mehrere Blöcke an verschiedene Speicheradressen platziert, dann scheint der Entpacker die freien Bereiche dazwischen auszunullen. So zumindest meine Feststellung nach Debuggen mit Store-Breakpoints auf der Suche nach dem verschwundenen Loader-Code.


    Kann man das irgendwie abstellen?

  • Naja sfx taugt ja echt nur für was fertiges "mal eben" packen. Habe ich so noch nie in nem eigenen Projekt verwendet, ist viel zu unflexibel. Den decruncher hat man ja schnell included und aufgerufen, man muss nur die Routine schreiben, die die komprimierten Bytes liefert (was im einfachsten Fall wenige instructions sind).


    Damit kann man dann nette sachen machen, z.b. von diskette "on-the-fly" decrunchen oder auch während des entpackens schon was halbwegs interessantes tun (ist in meinem letzten werk, das excess/abyss invitro, so drin). sfx sehe ich eher für schnelle tests oder kram, den man gar nicht selbst gecodet hat :)

  • Gibt es irgendwo ne verständliche (anfängerfreundliche) Erklärung wie ich die Entpackroutine in meinem Programm nutzen kann? Ich hab mir das Archiv vom Exomizer angesehen, verstehe aber nur Bahnhof, kommt wahrscheinlich auch dazu, da ich C64Studio verwende und der Code mit anderen Tools geschrieben wurde.


    Ich hab mir das hier angeschaut aber da bleibt dann die Frage offen, wo bitte ist die erwähnte warp.s? Wäre die überhaupt noch aktuell?

  • Die Quelltextdatei wrap.s wurde wohl wegerfunden, aber sie ist in früheren Versionen enthalten.


    Wie man sieht, wird da die Unterroutine definiert, die ein gepacktes Byte einliest und den Lesezeiger rückwärts weiterschiebt.


    Das ist eigentlich auch das, was man primär zur Benutzung machen muss.

    Code
    1. ; -------------------------------------------------------------------
    2. ; The decruncher jsr:s to the exod_get_crunched_byte address when it wants to
    3. ; read a crunched byte into A. This subroutine has to preserve X and Y
    4. ; register and must not modify the state of the carry nor the overflow flag.
    5. ; -------------------------------------------------------------------


    Vor dem Aufruf der eigentlichen Entpackroutine die korrekte Endadresse im Wrapper-Callback setzen, und los geht's. =)


    (Ich werde aber nicht müde zu erwähnen, dass Exomizer im Vergleich ziemlich langsam ist, dann kommt auch noch ein Unterroutinen-Aufruf pro Eingabebyte dazu, während es andere Cruncher gibt, die im Mittel genausogut packen, aber deutlich schneller beim Auspacken bei kleinerer Entpackroutine sind.)

  • Ich werde aber nicht müde zu erwähnen, dass Exomizer im Vergleich ziemlich langsam ist, dann kommt auch noch ein Unterroutinen-Aufruf pro Eingabebyte dazu, während es andere Cruncher gibt, die im Mittel genausogut packen, aber deutlich schneller beim Auspacken bei kleinerer Entpackroutine sind.

    Oh das schaut, für mein Vorhaben, viel besser geeignet! Vielen Dank für den Tip.

    Ich werde dann bei Problemen und Fragen diesbezüglich einen neuen Thread aufmachen.