Decompilertest an dem Programm Green Line 4 von Heureka Teachware

Es gibt 40 Antworten in diesem Thema, welches 5.490 mal aufgerufen wurde. Der letzte Beitrag (19. August 2019 um 16:52) ist von Larry.

  • Danke, aber MC Bacon hat gerade die Antwort gepostet.

    PS: Damit ist es klar, dass einige Decompiler einen funktionslosen Basic-Code erstellen.


    Moment:

    Mac Bacon

    Warum funktioniert das Decompilat.

    12336 open15,8,15

    12341 open5,8,5,"#"

    12348 cmd15,;

    12350 print"u1:";

    12355 print5;

    12357 print0;

    12359 print35;

    12362 printBitte melde dich an, um diesen Link zu sehen.,11

    12364 cmd15,;

    13000 close15:close5


    Deswegen kam ich ja so ins grübeln.

  • Warum muss der Befehl in einem Stück gesendet werden?

    Sonst wäre ja gar nicht definiert, wo ein Befehl aufhört und der nächste anfängt. Oder man hätte Start- und Ende-Codes definieren müssen, was aber spätestens bei den Binärdaten von "M-W" eklig wird.

    Yes, I'm the guy responsible for the Bitte melde dich an, um diesen Link zu sehen. cross assembler. And some Bitte melde dich an, um diesen Link zu sehen..

  • CMD macht Datei 15 (und damit Kanal 15 auf dem IEC-Bus-Gerät 8 ) zur Ausgabedatei und startet somit eine Bus-Transaktion. Alle weiteren PRINTs senden nur Daten, das Laufwerk bemerkt die "Grenzen" gar nicht.

    Am Ende von PRINT# wird ein CLRCHN ausgeführt und die Transaktion somit beendet.

    Yes, I'm the guy responsible for the Bitte melde dich an, um diesen Link zu sehen. cross assembler. And some Bitte melde dich an, um diesen Link zu sehen..

  • OK,wiedermal vielen Dank! :) Ich habe mir gerade "BASIC Programmierung für Anfänger" rausgesucht, um das Vergessene wieder Aufzufrischen.

    Im Übrigen, wollte ich die "CMD#" Sachen beim Decompilieren, vermeiden weil fast alle Decompiler das Decompilat damit zumüllen.

    Ein Neucompilieren mit den Austrocompiler erzeugt dann nur noch Mist.

  • Hier mal der Ausschnitt eines Decompilers. Die meisten machen das so. Der Code ist noch etwas länger, wiederholt sich aber.

    11431 gosub9127

    11434 cmd8,;

    11436 printBitte melde dich an, um diesen Link zu sehen.,cl

    11439 cmd8,;

    11441 printBitte melde dich an, um diesen Link zu sehen.,vi$

    11444 cmd8,;

    11446 printda$;

    Oder, der wilde Klammernsetzer. Machen auch viele Decompiler so, den Basic Code mit unnützen Klammern zumüllen.

    10334 o$=(((((((((((((((((((((((((na$+g$)+rn$)+g$)+str$(sl))+g$)+yl$)+g$)+pn$)+g$)+ct$)+g$)+bd$)+g$)+da$)+g$)+pa$)+g$)+str$(cd%))+g$)+str$(mw%))+g$)+str$(np%))+g$)+str$(cl%))+g$)

    10403 i$=(((((((((((((((((((o$+str$(cl))+g$)+str$(bu))+g$)+str$(bd))+g$)+u$(16))+g$)+str$(ju))+g$)+str$(fd%))+g$)+str$(fu%))+g$)+str$(ll%))+g$)+str$(rm%))+g$)+i$)

    10461 cmd8,;

  • Haha.. ja oder so'n Mist:

    13216 @chr$(13)+"

    13231 new

    13232 waitex$,0,vd%=0

    13234 ifvd%=0goto8265

    13239 inputvd%=0

    13240 rem 32

    13241 rem 65

    13242 rem 32

    13243 ti$=vd%=0

    13244 rem 65

    13245 wait0,vd%=0

    13246 stop

    13247 print#vd%=0

    13248 rem 32

    13249 ifvd%=0thenreturn

    13251 rem 67

    13252 rem 72

    13253 rem 65

    13254 new

    13255 e!"{CBM-N}G(13){CBM-N}G(13):

    Vorstellung Raveolution BBS -> Bitte melde dich an, um diesen Link zu sehen.
    Raveolution BBS -> raveolution.hopto.org:64128
    Raveolution Gopher Hole -> gopher://raveolution.hopto.org:70

  • Weil nach dem REM das BASIC in der Eingabe offenbar keine abgekürzten Befehle sucht, sondern das Eingegebene direkt speichert. Ein geshiftetes O entspricht anscheinend dem Token für den Data-Befehl, wodurch aus gO beim Listen eben gdata wird, weil hierbei unabhängig von einem REM alles Passende als Befehlstoken interpretiert wird.

  • Larry

    Das kommt, wenn im p-code extension oder umbekannte p-codes vorhanden sind. Damit bekommt man jeden decompiller zum müllcode maker.:)

    Das ist bei allen Heureka Teachware P-Codes so. Bei ALI v4 war sogar ein kleines Stück mit eine EORBitte melde dich an, um diesen Link zu sehen. verschlüsselt. Das hat gedauert, bis ich dahinter gekommen bin.

    Oder es hat jemand dem Austro-Comp Decompiler eine Austro-Speed Funktion hinzugefügt. In dem Fall nur die Offsetadresse $1F92.

    Die P-Code Syntax für eine FOR..Next Schleife sind beim Austro-Comp und beim Austro-Speed/Blitz unterschiedlich.


    Noch schlimmer ist sowas

    das ist richtig

    ----------------

    12428 getBitte melde dich an, um diesen Link zu sehen.,d$

    12432 close5

    12434 close15

    das ist grotten falsch

    ------------------------

    12428 getBitte melde dich an, um diesen Link zu sehen.,d$

    12432 close5

    12434 forclose15to5000

  • Bitte melde dich an, um diesen Link zu sehen.

    Die Frage hatte ich gestellt, weil ein Decompiler das Decompilat zuerst als Sequentielle Datei ablegt, welche nach dem Decompilieren in eine Programm-Datei gewandelt wird.

    Zeilenlänge in der SEQ-Datei ist 40 Zeichen. Bei Überlänge, wird der Rest der Zeile in einer darauffolgenden Zeilennummer hinter einer REM Zeile eingefügt.

    Alle Token hinter dem REM wurden falsch angezeigt und somit war das Decompilat unbrauchbar.

    Ich frage mich, ob überhaupt einer der ganzen Decompiler die es gibt, zu mindestens 95% brauchberen Basic Code erstellt.

  • Stephan Scheuer Was wir auch nochmal testen sollten sind Compilate mit DATA Zeilen mit ML Code.

    Vorstellung Raveolution BBS -> Bitte melde dich an, um diesen Link zu sehen.
    Raveolution BBS -> raveolution.hopto.org:64128
    Raveolution Gopher Hole -> gopher://raveolution.hopto.org:70

  • Ist im "Green Line 4" Decompilat enthalten. Siehe entfernte Basic Zeilen.

    Achja, wenn im P-Code, da wo die Datazeilem abgelegt werden, eine $00 vorkommt, stürzten viele Decompiler ab. Oder die Nummerischen Werte im Abgelegten Data-PCode länger als 5 Zahlen sind.

  • Ja aber da war doch kein ML Code mit drin, oder hab ich das übersehen ?

    Vorstellung Raveolution BBS -> Bitte melde dich an, um diesen Link zu sehen.
    Raveolution BBS -> raveolution.hopto.org:64128
    Raveolution Gopher Hole -> gopher://raveolution.hopto.org:70

  • Dann probier doch mal das hier.

    Das ist original:

    10 sys8192

    und dann bissel ML ab $2000 was den Border schwarz macht und einen kleinen Text ausgibt.

    Compilert mit Plum's Blitz!

  • Ach das meinst du. Sorry, das hatte ich nun völlig falsch verstanden.

    Die Austro- oder Blitzcompiler haben auch ML-Code am Ende. Das macht mein Decompiler noch nicht.:)

    Du hast dem ML-Code auch hinter den Variabeln Platziert. Das macht kein Decompiler. Die richten sich nach $1F93 (A8 1F A8 1F A8 1F 9F) und da ist ab $1FA8 Schluss mit dem Compilat.

  • Ich kann das ja nochmal mit dem ML code durch den compiler jagen und nochmal schicken.

    Allerdings bin ich glaube ich um diese Uhrzeit geistig nicht mehr in der lage das erfolgreich zu compilieren. Jedenfalls hat der Versuch gerade nicht funktioniert.

    Aber morgen ist auch noch ein Tag :wink:

    Vorstellung Raveolution BBS -> Bitte melde dich an, um diesen Link zu sehen.
    Raveolution BBS -> raveolution.hopto.org:64128
    Raveolution Gopher Hole -> gopher://raveolution.hopto.org:70

  • Das würde mich in der Tat wirklich interessieren, ob das im P-Code oder MC wirklich so "umständlich" drinnen steht oder der Decompiler zu einfach gestrickt ist?

    So etwas wie

    cmd8,;

    print#8,etwas

    könnte man ja gleich mit

    cmd8,etwas

    abbilden. Aber warum überhaupt mit cmd gearbeitet wird, lässt mich etwas rätseln. Wird da befürchtet, dass es PRINT-Aktionen gibt, die dann zwangsläufig über logisches File 8 gehen sollen? So wie man es dann bei Zeile 11446 sieht ... aber auch hier kann man das als cmd8,da$ schreiben ...

  • Das steht so nicht im P-Code. Fast alles Decompiler interpretieren das aber blöderweise so.

    Ganz schlim wird es, wenn das ein Compiler so erstellt.

    10296 printBitte melde dich an, um diesen Link zu sehen.,"b-a:";

    10304 printBitte melde dich an, um diesen Link zu sehen.,0;

    10306 printBitte melde dich an, um diesen Link zu sehen.,tr;

    10308 printBitte melde dich an, um diesen Link zu sehen.,s

    10310 printBitte melde dich an, um diesen Link zu sehen.,"u1:";

    10317 printBitte melde dich an, um diesen Link zu sehen.,2;

    10319 printBitte melde dich an, um diesen Link zu sehen.,0;

    10321 printBitte melde dich an, um diesen Link zu sehen.,tr;

    10323 printBitte melde dich an, um diesen Link zu sehen.,s

    Der Basic Code funktioniert so nicht. Der unten gelinkte micht das so immer.

    Bitte melde dich an, um diesen Link zu sehen.

    Oder das hier. lauter nutzlose Zeilen

    8270 i=0

    8271 fori=0to63

    12747 q=1

    12749 forq=1to8

    Andere Decompier mülllen den Basic Code mit unzähligen Klammern zu.