BASIC Programme - wie dürfen sie aufgebaut sein?

Es gibt 30 Antworten in diesem Thema, welches 5.859 mal aufgerufen wurde. Der letzte Beitrag (12. September 2013 um 23:01) ist von BIF.

  • Die Erklärung für die 63999 findet sich hier (Offenbar ein Bug, der nicht zwingend hätte sein müssen):

    Bitte melde dich an, um diesen Link zu sehen.

    Nach "Q $0E1)" suchen.

    Gruß Dirk


    Edit: Hier noch ein passender Screenshot dazu:
    Bitte melde dich an, um diesen Anhang zu sehen.

  • Zitat von sauhund


    ernsthaft? das klingt schon fast esoterisch =)


    Hier hab' ich was gefunden: Bitte melde dich an, um diesen Link zu sehen., Camputer Lynx 48/96/128:

    Zitat

    Die britische Firma Camputer produzierte in den Jahren 1983 bis 1984 eine Serie interessanter Homecomputer auf Basis einer Z80 CPU. Kurz vor dem finanziellen Ende der Firma wurde das Modell 128 vorgestellt. Im Gegensatz zu seinen Vorgängern nicht nur mit einem größeren Arbeitsspeicher, auch die grafischen Fähigkeiten des Systems wurden überarbeitet. War ausreichend Arbeitsspeicher installiert, so konnten die Rechner, von denen laut Quellen nur wenige verkauft wurden, das 8-Bit Standardbetriebssystem CP/M verwenden. Kurioserweise erlaubte der BASIC-Dialekt der Lynx Serie Zeilennummern im Fließkommaformat. Im Juni 1984 wurde die Firma aufgrund Liquiditätsschwierigkeiten für immer geschlossen.

  • das ist ja mal extrem wirr =) wenn man da auch noch sowas wie goto <variable> machen kann.... kann man sicher "tollen" code fabrizieren =)

  • Ich habe ja verstanden, dass das intensive Nutzen von GOTO unwartbaren Spaghetticode produziert.

    Aber für 'mal eben was programmieren', also kleinere Aufgaben und Gedankenexperimente, oder überhaupt fürs zum-Spaß-programmieren ist BASIC doch fein, gerade wegen der Freiheit von Strukturierungszwang.

    -

    Zur Original-Frage: Commodore's 8-Bitter akzeptieren BASIC-Zeilen bis etwa 250 Bytes. Ein paar gehen nämlich für interne Verwaltungsaufgaben -zB. für das Finden der jeweils nächsten Zeile- drauf.

    Knapp 250 Bytes, von denen viele die BASIC-Tokens sind. Wenn die Monsterzeile also gelistet wird, kann die auch 330 oder mehr Zeichen lang sein, theoretisch sogar tausend oder mehr, wenn das kein funktioneller Code sein muss (zB. ??? -> PRINTPRINTPRINT)

    Der Interpreter akzeptiert solche überlangen Zeilen, aber wie man die erzeugt, ist eine andere Frage. Mit ganz normal im Birdschirmeditor eingeben ist beim C64 nach zwei Bildschirmzeilen (=80 Zeichen) Schluss. Für VC20/c128/264 gelten andere Werte, hab ich gerade nicht im Kopf. Kannst du leicht selbst rauskriegen, mit VICE.

    Man kann da ein bisschen mehr rausholen, durch Abkürzungen. Bekanntestes Beispiel ist ?=PRINT, aber fast alle Befehle haben Abkürzungen. Ergebnis ist jedoch, dass die Zeile schlecht editierbar wird, da LIST die Befehle ausschreibt und der Eingabemodus einfach nach 80 Zeichen abschneidet.

    Ich hoffe sehr, dass bald die Ergebnisse des Oneliner-Wettbewerbs erscheinen, da werden wir solche Monsterzeilen zu sehen bekommen.

  • Die Erklärung für die 63999 findet sich hier (Offenbar ein Bug, der nicht zwingend hätte sein müssen)

    Der Bug hat damit nix zu tun. IIRC besagt ein High-Byte der aktuellen Zeilennummer von 255, daß es sich um ein direkt eingegebenes Kommando handelt. Zudem ist der Test unscharf, weil er schon vor dem Hinzufügen der letzten Stelle testet. Um das zu ändern müßte man erst auf einen Überlauf des Zwischenergebnisses testen und dann auf ein High-Byte von 255. Oder man führt ein separates 'direct mode' Flag ein. Oder man begrenzt Zeilennummern auf vier Stellen und nimmt die Zeile 0 für Direkteingaben.

    (GOTO variable ist übrigens Unsinn. GOTO beliebiger_numerischer_ausdruck ist schick. GOTO 1000+select*200 oder gar GOSUB befehle(asc(select$)-65) reguliert...)

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

  • Aber für 'mal eben was programmieren', also kleinere Aufgaben und Gedankenexperimente, oder überhaupt fürs zum-Spaß-programmieren ist BASIC doch fein, gerade wegen der Freiheit von Strukturierungszwang.


    Es mag mit moderneren BASIC-Varianten besser geworden sein, aber das C64-BASIC wäre mir auch zum "eben mal schnell was hinkritzeln" zu nervig - kryptisch kurze Variablennamen, keinerlei Scoping und keine vernünftige Parameter- und Rückgabewert-Übergabe für Prozeduren/Funktionen stören einfach viel zu sehr.

    (GOTO variable ist übrigens Unsinn. GOTO beliebiger_numerischer_ausdruck ist schick. GOTO 1000+select*200 oder gar GOSUB befehle(asc(select$)-65) reguliert...)


    Das ist unglaublich schmerzhaft wenn man auf dem Code irgendwelche statischen Analysen machen will.

    10 x=rnd(-1963):fori=1to81:y=rnd(1):next
    20 forj=1to5:printchr$(rnd(1)*16+70);:next
    30 printint(rnd(1)*328)-217

    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.

  • 80 Zeichen je Listingzeile

    Naja, mit ein paar tricks kriegt man leicht mehr rein, Beispiel für satte 241 Zeichen

    Das mit den Fließkommazahlen ist ja ein Heidenspaß, praktisch, wenn man mal irgendwo einen Befehl vergessen und keinen Platz mehr hat :thumbsup:

  • Das schöne am BASIC wie in den 8Bit-Rechnern ist doch, daß man nur einschalten muss und gleich loslegen kann. Keine Warterei auf das System bis es gebootet hat. Auch gibt es keine Wartezeiten auf Compiler, man muss sich nicht erst in x Libraries einarbeiten usw.

    Ideal zum kurz mal was probieren, speziell wenn es ein besseres BASIC als V2 ist. Die Nachteile sind auch klar, aber für Kleinkram nicht relevant.

    Ich programmiere auf neueren Systemen eigentlich nur noch PERL und Shellscripte, beides Interpretersprachen die zwar komplexe Projekte erlauben, aber eben auch mal einen schnellen Hack und ausserdem iterative Programmentwicklung (*) erlauben.

    (*) Man schreibt wie man meint, daß es funktionieren könnte und nähert sich dann Schritt für Schritt der korrekten Funktion an. :)

  • Naja, mit ein paar tricks kriegt man leicht mehr rein, Beispiel für satte 241 Zeichen (...)


    OK, hier ist ein weiteres Beispiel, das man leicht am C64 eintippen kann:

    Code
    new
    10 restore
    poke46,9:clr
    fori=6to254:poke2048+i,140:next
    poke2303,0:poke2304,0:poke2305,0
    poke2049,255


    Damit erzeugt man eine einzige BASIC-Zeile, die aus sehr vielen RESTORE-Befehlen besteht (ohne Doppelpunkte; d.h. das Programm ist also nicht lauffähig).
    Gibt man LIST ein, ist die ausgedruckte Zeile 1753 Zeichen lang! Sie passt also nicht mal komplett auf den ganzen Bildschirm. :)

  • 's' ja herrlich, wie hier eine Diskuss entbrennt! Dabei hatte ich nur ein theoretisches Interesse - und ob das je in Anspruch käme ist fraglich!

  • Ich habe einmal gelesen, daß man mit poke213,88: die Eingabezeile auf 88 Zeichen erhöhen kann, da der Eingabepuffer ebenfalls 88 Byte lang ist.


    Schönen Gruß.