Exomizer als "Linker"?

Es gibt 11 Antworten in diesem Thema, welches 2.048 mal aufgerufen wurde. Der letzte Beitrag (13. Dezember 2012 um 22:07) ist von Barschel2004.

  • Mahlzeit...
    Irgendwie werde ich aus dem bisher gelesenen nicht schlau... :(
    Gibt es eine Möglichkeit, Programme via Exomizer zu linken?!

    Ich habe ein kleines Intro, beginnend ab 0801 (mit Basicstart), das, nach Tastendruck, den Speicher von $3200 nach $0800 verschiebt...
    Wie also kann ich dem Exomizer "befehlen", ein zweites File direkt nach $3200 zu laden???

    Thanx in advance... :)

  • Dreckige Lösung: Pack dein zweites Prg mit Exomizer bei $3200, häng das gepackte als !Bin bei $3200 in den Quellcode deines Intros und jmp dann einfach hin. Dann brauchst auch nicht den Speicher verschieben, Exomizers sfx packt´s schon an die richtige Stelle.
    Um Exomizer an eine bestimmte Stelle packen zu lassen mußt du, glaube ich so früh am morgen jedenfalls, " -Di_load_addr=$3200" eintippen... :roll:

  • Danke!
    Klingt logisch, ist aber irgendwie wirklich "dreckig" ;)

    Gibt es da nicht auch was von Ratiopharm? :)

  • is ganz einfach:

    Code
    exomizer sfx sys -o out.prg in1.prg in2.prg

    wobei in1/in2.prg deine programm teile sind, mit natuerlich je der ladeaddresse davor. (wenn es ein echtes basic programm ist dann basic statt sys, wenn du gar keinen basic loader "10sys2061" hast dann schreib da die sprungaddresse hin.) (intern werden einfach alle luecken mit nullen gefuellt)

    ich fuer meinen teil nutze "exomizer mem ..." um die einelnen bestandteile einzupacken und habe den decruncher (source ist im zip) in einen eigenen loader eingebaut (der z.B. bei Space Lords den ladebalken anzeigt).

  • Ja, schon...
    ABER: Wenn "in2.prg" jetzt eigentlich bei $0801 beginnt und nach $3200 geladen werden SOLL,
    wie sähe denn dann die Kommandozeile aus?

    Ich dachte an sowas wie ... sfx sys inprg.1@x$0801 inprg2.prg@x$3200... (Aber das war jetzt nur so eine Idee von mir)...

  • nee, bei "exomizer sfx" steht dass man hinter die datei ein komma und die adresse schreiben soll wo das hin soll und nicht die ladeadresse genommen werden soll (weiss aber nicht ob er dann die ersten beiden bytes mit packt oder ignoriert, und weiss auch nicht ob adressen hex/dez/oct/... angegeben werden muessen/sollen/koennen/...

  • ich würde vermuten das die werte per strtoul gewandelt werden, und somit die bei C üblichen prefixe funktionieren

  • Dreckige Lösung: Pack dein zweites Prg mit Exomizer bei $3200, häng das gepackte als !Bin bei $3200 in den Quellcode deines Intros und jmp dann einfach hin.


    Ich habe einige Erfahrung mit dieser "dreckigen" Lösung, geht eigentlich in vielen Fällen gut. Z.T. muss man aber aufpassen, weil nach dem ersten Decrunchen einiges in der Zero-Page verändert wird, im Zweifelsfall irgendwo eine "default" Zeropage hinkopieren, um die ZP wieder zu "initialisieren" vor dem zweiten Decrunchen, sonst crasht es beim zweiten Decrunchen womöglich.

    Besser, das hier mal lesen:
    Bitte melde dich an, um diesen Link zu sehen.

    oder einen Punkt tiefer folgende Schlüsselstelle lesen, klauen und hoffentlich verstehen:

    Code
    exomizer sfx $XXXX foo-in.prg -o foo-out.prg -n -Di_load_addr=$YYYY
    Zitat

    - $XXXX Sprungadresse in HEX, hier wird nach dem Decrunchen hingesprungen
    - $YYYY Ladeadresse in HEX, zugleich die Adresse, die zum Decrunchen aufgerufen werden muss

  • Nun gut!
    Erst einmal vielen Dank!

    Ich nehme also einstweilen mit der "dreckigen" Lösung vorlieb, und wenn da etwas nicht funzen sollte, gibt es ja immer noch den ECA-Linker oder Sledgehammer2... ;)

  • Klar kann man mit Exomizer linken. Wenn alle Programmteile eine Startadr. haben, einfach mit Exomizer sfx $xxxx Prog1 Prog2 Prog3 packen oder falls die Programmteile keine Startadr. haben Exomizer sfx $xxxx Prog1,$0801 Prog2,$3200.

    Es ist praktisch unmöglich, ein schnelles Programm zu schreiben, wenn man es in Basic programmiert.

  • Geilomat, Acorn...
    Das funktioniert hervorragend...

    You made my day!!! :=)