BASIC ohne Zeilennummern schreiben

Es gibt 37 Antworten in diesem Thema, welches 22.579 mal aufgerufen wurde. Der letzte Beitrag (20. Januar 2020 um 08:40) ist von Larry.

  • Hier mal ein einfacher BASIC-Präprozessor, der in Verbindung mit petcat das Entwickeln von Basic-Programmen am PC vereinfachen kann.

    Statt Zeilennummern zu verwenden kann man damit Basic auch so schreiben:

    Datei "example.bpp":

    Datei "screen.bpp":

    Code
    clear: print "{clr}";: return
    theme: poke53280,0: poke53281,0: poke646,5: return

    Aufruf:

    Code
    $ bpp < example.bpp

    Erzeugt:

    Mit dem folgenden Aufruf kann aus dem ursprünglichen Dateien direkt ein PRG erzeugt werden:

    Code
    $ bpp < example.bpp | petcat -w2 > example.prg

    Es können übrigens auch Binärdateien direkt als DATA-Zeilen eingebunden werden:

    Code
    !include data "sprite.bin"

    Der Präprozessor ist als einfacher Filter implementiert (Standard Ein/Ausgabe) und in ruby programmiert.

    Bei Interesse findet ihr alles weitere auf Bitte melde dich an, um diesen Link zu sehen.

  • Das ist ja mal eine witzige Idee! :ilikeit:

    Wem ein leeres EPROM fehlt, braucht ein EPROM-Lösch-Gerät

    Mein GitHub: Bitte melde dich an, um diesen Link zu sehen.
    EasyFlash3 DIY: Bitte melde dich an, um diesen Link zu sehen.

    Mein Discogs: Bitte melde dich an, um diesen Link zu sehen.

  • Ich wär ja dafür, GOTO zu enfernen und dafür Strukturmakros hinzuzufügen (die dann natürlich u.U. auch zu GOTOs konvertiert würden), dann wird aus den Basic-Programmierern vielleicht doch noch was... :whistling:

    Disclaimer: Ja, mir ist durchaus bewusst, dass GOTO auch in höheren Programmiersprachen mal sinnvoll eingesetzt werden kann.

    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..

  • Der Präprozessor weiß von Basic eigentlich nur, dass es zeilenbasiert ist, wie die Schlüsselworte heißen (d.h. welche Worte nicht als Labels gelten dürfen) und dass es aus String-Literalen und irgendwelchen anderen Zeichen ("Code") aufgebaut ist und an welchen Stellen in diesem "Code" (on/goto/gosub/then) Labels stehen könnten, die dann aufzulösen sind. Er würde also auch fröhlich irgendwelchen Klumpatsch parsen, durchnummerieren und ausgeben, solange er alle Label-Referenzen, die er darin zu finden glaubt, zu Zeilennummern auflösen kann.

    Es ist also lange kein vollständiger Basic-Parser und er weiß daher auch garnicht, was ein "goto" im Gegensatz zu einem "gosub" überhaupt im Hinblick auf den Programmfluß bedeutet und welche gotos u.U. daher überflüssig wären. Ist halt "nur" ein kleiner Präprozessor, der diese fürchterlichen Zeilennummern überflüssig macht :)

  • Jetzt fehlt nur noch, dass der "goto" in diesem Fall wegoptimiert wird ;

    Code
    26 print"cheer up!":goto27
    27 return


    ("Compileroption" -O2 ? ;) )

    Das hier ist auch ziemlich sinnbefreit...

    Code
    0 goto3
    1 print"{clr}";:return
    2 poke53280,0:poke53281,0:poke646,5:return
    3 gosub1
    4 gosub2
    5 ...

    Mal hier, mal da, mal dort. Aber auf jeden Fall auf der Bitte melde dich an, um diesen Link zu sehen.! Und hier Bitte melde dich an, um diesen Link zu sehen.!

  • Man könnte es ja kaschieren, in dem man jeweils einen Doppelpunkt hinter die Zeilennummer setzt. Das wirkt dann gleich viel stimmiger :bgdev

    Trotzdem: ich finde den Ansatz gut!

    Wissen ist das einzige Gut, das sich beim Teilen vermehrt. Also seid vorsichtig damit!


  • Das hier ist auch ziemlich sinnbefreit...

    Code
    0 goto3
    1 print"{clr}";:return
    2 poke53280,0:poke53281,0:poke646,5:return
    3 gosub1
    4 gosub2
    5 ...


    Natürlich ist das sinnfrei, es handelt sich ja auch um ein Beispiel. Es sollte damit nur gezeigt werden, wie eine externe Datei als Bibliothek von Subroutinen in einen beliebigen Namensraum eingebunden werden kann.

  • In Bitte melde dich an, um diesen Link zu sehen. kann man das fast genauso hinkriegen (das Nachladen ins Programm ginge auch: per Bitte melde dich an, um diesen Link zu sehen., hab ich hier aber mal weggelassen). Die etwas modifizierten Labelnamen müssen sein, da ein Label in TSB nicht mit einer TSB-Kommando-Bezeichnung anfangen darf. Eine CASE-Konstruktion per ON geht auch nicht, da muss ich auf Einzelvergleiche runtergehen. Kommt dann das dabei raus:

    Das hier soll nicht heißen, dass ich Hennings Idee blöd finde, im Gegenteil! :ilikeit: Ich wollte nur sagen, dass es BASIC-Dialekte gibt, die sich über die Zurückdrängung der Zeilennummern auch schon mal halbwegs erfolgreich Gedanken gemacht haben. :)

    Arndt

    (Edit)

    GoDot C64 Image Processing
    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. - Bitte melde dich an, um diesen Link zu sehen. - Bitte melde dich an, um diesen Link zu sehen.

  • Sehr schön (beide) :dafuer: .

    is'error


    Mit was würde sich das denn 'beißen'? Finde da keinen passenden Befehl zu... ?(

    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.

    Ex-TLI (The Level 99 Industries) & Ex-TNP (The New Patriots) & Ex-TEA (The East Agents) & ?


  • Mit was würde sich das denn 'beißen'? Finde da keinen passenden Befehl zu... ?(


    Mit Bitte melde dich an, um diesen Link zu sehen.... :gruebel

    Arndt

    GoDot C64 Image Processing
    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. - Bitte melde dich an, um diesen Link zu sehen. - Bitte melde dich an, um diesen Link zu sehen.

  • Mit ERROR


    Echt? Oder zweifelst du selber gerade?

    Würde ja heißen, auch z. B. keine "AT", "DO", "DIR", "LIN" irgendwo IM Label...? Hmm, muss man dann ja etwas aufpassen.

    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.

    Ex-TLI (The Level 99 Industries) & Ex-TNP (The New Patriots) & Ex-TEA (The East Agents) & ?

  • GoDot: Interessant, das TSB kannte ich bisher noch nicht. Ich habe auch erhlich gesagt nicht weiter geguckt, ob es schon ähnliche Ansätze gibt, die Idee kam mir, als ich mal etwas mit petcat rumgespielt habe. Vorteil gegenüber TSB ist natürlich, dass einfach normales Basic erzeugt wird und keine speziellen ROMs benötigt werden.


  • Echt? Oder zweifelst du selber gerade?

    Würde ja heißen, auch z. B. keine "AT", "DO", "DIR", "LIN" irgendwo IM Label...? Hmm, muss man dann ja etwas aufpassen.


    Nein, nein, kein Zweifel! Ein Schlüsselwort darf nur nicht am Anfang des Labels stehen! Bei dem Label "done" von Henning musste ich ja auch "d'one" draus machen. Das ON in der Mitte stört dann nicht mehr. Hennings Label "one" ging wiederum nicht, daraus wurde also "'one".

    Bei AT ist die folgende Klammer Teil des Schlüsselworts (diese Tatsache muss ich mal im C64-Wiki ergänzen, fällt mir dabei auf, eine Leertaste zwischen AT und Klammer ist ein Syntax-Fehler!), AT allein reicht nicht zur Token-Umwandlung.

    @Henning: Deine Idee ist super! Ein bisschen so wie ein Precompiler für strukturierte Programmierung! :thumbsup:

    Arndt

    Edit: Ich hätte besser überall nur ein Apostroph davorsetzen sollen, das reicht ja völlig: also 'error, 'done, 'one... Ja, ja, die Kleinigkeiten, die das Leben einfacher machen... :)

    GoDot C64 Image Processing
    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. - Bitte melde dich an, um diesen Link zu sehen. - Bitte melde dich an, um diesen Link zu sehen.

  • Hallo zusammen,

    ich bin gerade über den BPP gestolpert auf der Suche nach genau so einem Tool, ohne auf Windows zurückgreifen zu müssen.
    Allerdings habe ich folgendes Problem mit bpp:

    Ich habe einen etwas längeren BASIC Code mittels PETCAT in ein Text File umgewandelt um dann am PC damit arbeiten zu können.
    Die BASIC Zeilennummern wurden entfernt und GOTO / GOSUB Adressen durch Labels ersetzt.
    Kommentare sind per Semikolon in eigenen Zeilen eingefügt worden.
    Das bearbeitete File ist als blabla.bpp gespeichert.

    Dann auf der Kommandozeile: bpp < blabla.bpp
    Dann tut sich scheinbar nicht mehr viel. Cursor erscheint und ich kann wie in einem Texteditor schreiben. Mit STRG+C komme ich wieder raus.
    Per bpp < blabla.bpp | petcat -w2 > blabla.prg
    wird ein prg File mit 0 Bytes erzeugt.
    Woran kann es liegen, dass bpp hängt ?

    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

  • Erstaunlich das BIF hier noch nichts beigetragen hat. :whistling:

    Systemshock war eines meiner ersten Computerspiele auf CD-Rom, welches mich sehr gefesselt hat. Wer oder was ist SHODAN: Bitte melde dich an, um diesen Link zu sehen.

  • Na wenn er etwas sinnvolles zu meiner Frage betragen kann ist er, wie jeder andere, willkommen sich zu äußern....

    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

  • Hmm sonst kann keiner etwas hierzu beitragen ?

    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