Ui, das hatte ich auch schon mal überlegt. Gibt es aber im C64Studio derzeit nicht.
Einen Code festlegen ist ja einfach (* = Adresse), aber den Rest drumherum "fliessen" lassen, ist nicht ohne. Wo kann man "sicher" schneiden? Woher weiß ich, dass ein RTS ein sicherer Schnittpunkt ist?
Wenn ich einen Block im Source mit !START NAME und !ENDE NAME definiere, dann ersetzt !ENDE NAME quasi die Suche nach einem RTS. Der Block soll ja unabhängig vom Programm nur fest im Speicher definiert ein. Wenn es eine Überlappung gibt dann müsste der Assembler ein JMP "zum Ende dieses Blockes" einbauen. Ich gebe zu, das ist eine echte Herausforderung.
Was wäre der Benefit? Ich habe einige (richtug gute) Programmschnipsel aus früheren Zeiten, in denen noch mit "schmutzigen" Tricks gearbeitet wurde. Zum Beispiel wurde gerne in dem in Bytes zwischen den Befehl gesprungen. Daraus ergab sich dann für die CPU ein ganz anderer Befehl. Auch selbst modifizierende Programme wurden gern genutzt. Das macht die Portierung oder Integration in anderen Programmen mit Crosscompilern sehr schwierig. So könnte ich den Source 1:1 stehen lassen. Ist nicht tragisch. Für mich sollte "nur" Zeit sparen.
Sicher schneiden wird man nie können, auch der Ansatz mit dem JMP xxxx erstmal gut klingt.
Was aber wenn kurz vor dem JMP xxxx ein BEQ kommt der sich auf eine Adresse nach dem JMP bezieht. Das wird dann in die Hose gehen. Auf der anderen Seite kann man dass aber dann schnell per Hand reparieren indem man aus dem BEQ ein bne + : JMP xxxx: + macht und schon läuft das wieder.
dg5kr Wieso disassemblierst du die entsprechenden Routine nicht und passt sie danach noch ein wenig an, wäre doch die sauberste Lösung?