Listschutz

Es gibt 41 Antworten in diesem Thema, welches 7.481 mal aufgerufen wurde. Der letzte Beitrag (29. Juli 2011 um 08:30) ist von Paradroid.

  • Nun, auch was die Größe des Kompilats angeht, weiß ich z.T. gerade erst, was ich nicht weiß. Mit Austro und vielen anderen habe ich noch wenig Erfahrungen, bei Blitz vs. Boss habe ich momentan den Eindruck, es gibt eine kritische Masse, ab welcher der Boss gegen Blitz abstinkt. Auf der anderen Seite habe ich den Verdacht, dass der Boss (braucht definitiv nicht zwingend Basic-ROM, hat eine ALLRAM-Routine) dafür auch einiges mehr optimiert, während Blitz-Kompilate scheinbar das Basic-ROM brauchen und immer irgendwo am Basicstart landen. Mehr auch hier: Bitte melde dich an, um diesen Link zu sehen.

    Aber Listschutz ist wirklich der imho unbedeutendste Effekt des Compilings. Und trotz der anderen Vorteile (Performance, Einbindung in Assembler) ersetze ich ich mittlerweile vieles direkt durch bei $C000 abgelegte Assembler-Routinen, weil es eben doch deutlich schneller in Assembler als in (kompiliertem) Basic geht, z.B. mal ein komplettes Screen samt Farbram mit Assembler von A nach B zu poken. Was ich im Moment mache, ist also eigentlich schon ziemliches Pseudo-Basic, weshalb dann überhaupt noch Basic, würde Sauhund fragen, und ich würde antworten: Aus Jux und Dollerei.

    BTT zum Thema Listschutz - warum eigentlich? Wer noch nie eine Zeile Code "geklaut" hat, der werfe den ersten Stein. Ohne fremden Source ist jegliches Erlernen irgendeiner Sprache sehr mühsam, wenn alle englischsprachigen Texte verschlüsselt wären, würden Lerner auch dabei enorm größere Schwierigkeiten haben. Interessant wird es ohnehin erst dann, wenn man das "Geklaute" umbauen muss, denn 1:1 das, was man will, machen die Fundstücke ja doch nicht, so dass man eigentlich irgendwann mal verstehen muss, was in dem "Geklauten" passiert, damit man daran herum feilen kann. Für mich gehört das zum Lernprozess dazu. Gerade hier im Forum hat es sich für manche User schon mal gelohnt, Source zu posten, weil dann ein Sensei einen auf Denkfehler aufmerksam machen kann bzw. einem evtl. zeigt, an welcher Stelle man noch unnötig kompliziert arbeitet. Trotzdem finde ich es nun auch nicht superbeklagenswert, wenn jemand seinen Code "schützt" - egal wie effektiv. Denn es gibt bereits viel mehr ungeschützten Basic-Code als ich je zu studieren bereit wäre. Der auf den ersten Blick vielleicht beeindruckende Kram wie Pirates! hilft vielleicht schon wegen des Umfangs weniger beim Lernen als die IIRC komplett listbaren Competition-Beiträge aus unserer Basic-Ecke, da sind schon etliche Sachen ziemlich High-End, hier z.B. ganz heißer Shice:
    Bitte melde dich an, um diesen Link zu sehen.

  • Die sind ja eher noch harmlos, wenn man sich sowas ansieht:
    Bitte melde dich an, um diesen Link zu sehen.

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

  • Stimmt, daran erinner ich mich auch, da fiel die Kinnlade ganz schön runter damals :)

  • Beim Überfliegen von diesem Thread bin ich auf den REM <shift-L> Trick gestoßen den ich selber damals genutzt habe.
    Warum kommt es dabei eigentlich zum Syntax Error?

  • Afaik ist das Problem dass der Interpreter beim Listen geshiftete Buchstaben in REM-Zeilen als Basic-Token interpretiert. Das kannst du zB sehen wenn du Grafiksymbole in REM-Zeilen setzt und dann listest. Ich hab auch mal gelesem warum ein Syntaxerror bei SHIFT/L vorkommt - irgendwas wird da verbogen bzw. läuft über... aber frag mich nicht mehr was.

  • Afaik ist das Problem dass der Interpreter beim Listen geshiftete Buchstaben in REM-Zeilen als Basic-Token interpretiert. Das kannst du zB sehen wenn du Grafiksymbole in REM-Zeilen setzt und dann listest. Ich hab auch mal gelesem warum ein Syntaxerror bei SHIFT/L vorkommt - irgendwas wird da verbogen bzw. läuft über... aber frag mich nicht mehr was.

    Hilft nicht, Programm auf einem C16 oder Plus/4 laden (Bei reinem BASIC kein Problem) und schon ist es listbar. Aus dem SHIFT-L wird dort das Token für 'RGR' und das Listing funktioniert wie gewünscht.

  • Hilft nicht, Programm auf einem C16 oder Plus/4 laden (Bei reinem BASIC kein Problem)


    Ist denn das BASIC-Ram eines C16/+4 generell groß genug für sowas...?

  • <shift-l> ist ja auch nur dazu gedacht die List-Routine im C64 zu überlisten. Alles Bytes mit gesetzem Bit 7 werden grundsätzlich als Tokens betrachtet (außer $ff) - allerdings ist da bei $cb Schluß und <shift-l> ist eben $cc. Also zumindest behauptet das das Data Becker Commodore 64 Intern, das ja sicherlich viele Fehler hat, aber da wird zumindest die grobe Richtung stimmen, wie die Praxis zeigt.

    Deswegen wird es dann auch ohne Probleme am +4 gelistet.

  • Ist denn das BASIC-Ram eines C16/+4 generell groß genug für sowas...?

    Ob's wirklich hilft, kann ich nicht beurteilen. Der plus/4 hat jedenfalls von Haus aus 60671 "(BASIC) BYTES FREE" (im Gegensatz zu 38911 beim C64). Bei C16 und C116 sind's dagegen standardmäßig nur 12277. Allerdings ist die Startadresse des BASIC-RAM beim C64 anders als bei C16, C116, plus/4, was aber kein Problem bei LOAD ohne Sekundäradresse sein sollte.

  • Aber eigentlich driften wir ja ganz schön vom Topic ab. Der Kollege wollte wissen wie man einen Listschutz realisieren kann und wir haben etwa 234 Gründe durchdiskutiert warum man keinen brauch oder auch vielleicht doch.....
    Vielleicht hat ja noch jemand ein paar originelle anzubieten. (Fand meinen ganz witzig)

  • Wenn Fantomas' Link aufs Wiki, Rolands Tip, es stecken zu lassen, mein Ansatz zu kompilieren oder verschrobene C16/+4 Wege (ich denke übrigens, das RAM sollte reichen ;)), Euch nicht gut genug sind, bitter sehr, hier habt Ihr auch noch alles, was auf emu-ecke.de, jetzt retro-donald.de zum Thema zu finden ist,
    Bitte melde dich an, um diesen Link zu sehen.


    "zeilenweise" hatten wir glaube ich so ähnlich, das meiste sonstige ist ohne Auto-Start imho witz- und wirkungslos, es sei denn man bringt den User dazu, vor dem LIST die Pokes selbst einzugeben.

    Wenn die ganzen Vorschläge nun nicht reichen, um den kostbaren Code unlistbar zu machen, sollte man vielleicht hinterher noch die Files auf der Disk verbergen oder einen Selbstzerstörungsmechanismus einbauen (LIST führt zu sofortigem Formatieren). ;) Damit sollten wir es erschöpfend erörtert haben.

  • Frag mich sowieso immer noch, was der Compiler alles mit da rein fuhrwerkt, so groß wie ein lumpiges "Hello World" ist (immerhin 19 Blocks!). Der packt da wohl den halben Kernel-Code mit rein, oder was?

    p-code-Interpreter und Laufzeitbibliothek für erweiterte Befehle. Womit klar wäre, daß ein Compiler als Listschutz für kleinere Programme eher ungeeignet ist.

    KI-Verwendung in diesem Posting: Rechtschreibkontrolle des Browsers.
    Abweichungen aufgrund des technischen Fortschritts oder individueller Vorlieben vorbehalten.

  • Würde der "Shift-L" Listschutz nicht ohnehin versagen, sobald man die betreffende Zeile einfach - Achtung: Wortspiel - über"listet" ? Also "list 110-", wenn man die betreffende Rem-Zeile bei 100 vermutet..?

  • Ja, das ist so. Deshalb kam ja auch schon der Vorschlag, an jedes Zeilenende ein Shift-L zu setzen:

    Ein einfacher Listschutz ist auch folgendermassen zu machen: Schliesse einfach jede Zeile mit REM(Shift+L) ab. Nach diesem Befehl bricht der List Befehl mit Syntax Error ab

    Um dann den kompletten Code zu sehen, müsste man mit LIST jede Zeile einzeln ansteuern. Und es macht jede Zeile um 3 Bytes länger, super Methode zum Aufblasen eines Programms, yeah! ;)

  • Einfach eine Zeilennummer großer 63999 nehmen und die mit Rem Shift/L versehen..

  • Und den Dirmaster lässt das auch kalt. Was genau soll das denn bringen? Ist nett mal zu sehen was so gibt, aber aus praktischer Sicht nützt es einfach nichts. Wenn jemand ernsthaft an den Code kommen will, tut er das auch.

    p-code-Interpreter und Laufzeitbibliothek für erweiterte Befehle.

    Heißt im eigentlichen Sinne kein Compiler, mehr ein Interpreterbausatz? Ist ja gut zu wissen.

    12345678901234567890123456789012345678901234567890
    12345678901234567890123456789012345678901234567890
    12345678901234567890123456789012345678901234567890

  • Ich hab auch noch einen. Kein "Schutz", kann aber immerhin ein bisschen Verwirrung stiften:

    Code
    10 gosub 100
    20 print "{clr}hallo welt": end
    100 for i = 2065 to 2074: read a: poke i,a: next i
    150 return
    200 data 70,73,67,75,32,68,73,67,72,33


    :P