C64 Kurze Listings

Es gibt 78 Antworten in diesem Thema, welches 23.689 mal aufgerufen wurde. Der letzte Beitrag (1. Juni 2025 um 18:23) ist von _Joey_.

  • Hallo C64 und Basic machen auch nach einer langen Zeit Spaß .

    Leider habe Ich nicht viel in Netz gefunden und vielleicht können wir hier viele Listings zusammen tragen .

    Vielleicht findet wer was in Netz oder hat auch selbst was geschrieben etc ,

    Dann hier Posten :wink:

  • Code
    10 PRINT "{CLR}PREISFRAGE!"
    20 PRINT "{DOWN}WIE BESCHAEFTIGT MAN EINEN OSRFRIESEN?"
    30 PRINT "{DOWN}LOESUNG: BITTE F1 DRUECKEN!"
    40 GET A$: IF A$<>CHR$(133) THEN 40
    50 PRINT "{DOWN}WIE BESCHAEFTIGT MAN EINEN OSRFRIESEN?"
    60 PRINT "{DOWN}LOESUNG: BITTE F3 DRUECKEN!"
    70 GET A$: IF A$<>CHR$(134) THEN 70
    80 GOTO 20
  • Ich erinnere mich düster, das mal in meiner Jugend hingehackt zu haben.

  • Da stellt sich narürlich erst einmal die Frage wie kurz oder lang?

    Schönen Gruß.

    Wie Du möchtest nur Ich denke mal zu lang wird es keiner Abtippen oder du Speicherst gleich auch noch das Fertig Listing als Prg ab .

    @Bitte melde dich an, um diesen Link zu sehen. Robo Das ist ja mal Cool :thumbsup:

  • Ein schönes Programm aus der Transformer, 1983.

    Zeile 1 habe ich noch hinzugefügt, um die Einstellungen etwas anzupassen (und um die Ausführung ein wenig zu beschleunigen). Es entsteht eine Hommage an einen bekannten Kinofilm!

    Enjoy! :popcorn:

    Code
    1 cl(0)=5:s1=1024:s2=2024:fori=0to999:poke55296+i,cl(iand2):next:poke53281,0
    2 c=32:forn=1to41:c=192-c:fora=0ton:forb=s1+atos2stepn:pokeb,c:nextb,a,n

    Dateien

    Bitte melde dich an, um diesen Link zu sehen. - Ratespiel • Bitte melde dich an, um diesen Link zu sehen. - BASIC-Erweiterung • Bitte melde dich an, um diesen Link zu sehen. - Sprite-Editor • Bitte melde dich an, um diesen Link zu sehen. - Zeichensatz-Editor Bitte melde dich an, um diesen Link zu sehen. - 2048 Blöcke

  • Mal eine Frage:

    Code
    10 print "Lade Verzeichnis"
    20 load "$",8
    30 list
    40 poke 53280,0

    Warum Funktioniert es nicht wird das Listing ab Zeile 20 dann vergessen und nicht ausgeführt weil es geladen wird mit zeile 20 ?

    Also ab zeile 30 geht nichts mehr .

  • Weil du dein eigenes Programm mit dem geladenen Directory überschreibst.

    Das ist nur die halbe Antwort... ;)

    Nach einem LOAD aus einem Programm heraus wird nach dem Laden ein GOTO 0 ausgeführt. D.h., das neu geladene Programm wird "fast" so ausgeführt, als ob es mit RUN neu gestartet worden wäre.

    Wieso "fast"? Weil die Variablen erhalten bleiben. Das klappt aber nur, wenn das neu geladene Programm nicht länger ist als die orginale, sonst werden die Variablen von dem neuen Programm überschrieben.

    Damit das alles mit den Variablen klappt wird auch das BASIC-Ende nicht neu gesetzt (sonst wären die Variablen woanders zu suchen). D.h., lädt man mit so etwas ein neues Programm ein und speichert man es damit mit "SAVE", wird nicht das gesamte Programm abgespeichert --> es droht Datenverlust!

    Auch die Variablen, die erhalten bleiben, sind nicht ganz "ungefährlich". String-Variablen, die im Programm vorkamen (A$="MEIN TEXT") verweisen nämlich auf den Code im Programm. Den gibt es aber gar nicht mehr, so dass die Variable nicht mehr gültig ist. Das gleiche gilt für mit DEF FN definierte Funktionen.

    Also, kurzum: LOAD in einem Programm ist gefährlich und sollte man nur benutzen, wenn

    • man genau weiß, was man da tut (also fast nie), oder
    • man es nur nutzt, um Binärdateien/Maschinenspracheroutinen nachzuladen, die nicht im BASIC-Speicher stehen (mit dem "typischen" 10 IF A>0 GOTO 40 - 20 A = 1 - 30 LOAD"ROUTINE",8,1 - 40 ..." Code
  • Hier ein kurzes Listing, was das Directory in BASIC anzeigt, ohne alles zu zerstören:

    Code
    10 gosub 10000:end
    10000 ep$=chr$(0):open 1,8,0,"$"
    10010 poke 781,1:sys 65478:get a$,a$
    10020 get a$,a$,h$,l$:if st then sys 65484:close 1:return
    10030 print asc(h$+ep$)+256*asc(l$+ep$);
    10040 get a$,b$:if b$ then print a$b$;:if st=0 then 10040
    10050 print a$:goto 10020

    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.

  • Hier ein kurzes Listing, was das Directory in BASIC anzeigt, ohne alles zu zerstören

    Welchen Sinn macht es, CHKIN aufzurufen und dann mit GET zu arbeiten und am Ende CLRCHN, anstatt direkt mit GET# zu arbeiten?

    Nur wegen des kleinen Geschwindigkeitsvorteils?

  • Ja. So klein ist der gar nicht.

    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.

  • Nur wegen des kleinen Geschwindigkeitsvorteils?

    Habe es mal mit einem etwas längeres Verzeichnis gemessen: Es sind knapp 15% Unterschied.

    Edit: Im Interpreter. Compiliert sind es sogar knapp 40%.

    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.

    2 Mal editiert, zuletzt von EgonOlsen71 (2. Februar 2022 um 07:39)

  • Code
    104 input"diskname:";a$
    106 input"disk-id:";b$
    
    107 print "diskname:a$:id:b$"
    
    118 open 15,8,15:print# 15,"n:a$,b$"
    120 close15

    Ich Spiel mit diesen listing aber Ich verstehe nicht warum der Name und die ID ( A$ und B$ ) in Zeile 118 bei FORMATIEREN nicht übernommenen wird ?

    Alles was Später nach der Formatierung steht als Name " a$ " als ID " b$"


    Habe es mal geändert a$=i$ , b$=o$ aber das selbe

    Bitte melde dich an, um diesen Anhang zu sehen.

  • Das ist nicht PHP oder javaScript. Alles, was innerhalb der Anführungszeichen steht, ist einfach nur Text. Wenn du Strings einfügen willst, musst du das explizit machen:

    107 print "diskname:"a$":id:"b$

    118 open15,8,15:printBitte melde dich an, um diesen Link zu sehen.,"n:"a$","b$

    C64Studio: Bitte melde dich an, um diesen Link zu sehen. - Bitte melde dich an, um diesen Link zu sehen. --- C64Studio WIP: 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.

  • 118 open 15,8,15:print# 15,"n:a$,b$"

    Geht auch als:

    Code
    118 open15,8,15,"n:name,id"

    Mit den Variablen dann:

    Code
    118 open15,8,15,"n:"+a$+","+b$

    Der Open-Befehl benötigt die + unbedingt, der PRINT-Befehl nicht (weil er bei fehlenden Zeichen ein Semikolon annimmt).

    Ob das dann aber noch schneller ist als

    118 open 15,8,15:printBitte melde dich an, um diesen Link zu sehen.,"n:"a$","b$

    bezweifle ich allerdings, weil der Interpreter beim "+" erst den fertigen String aufbaut, bevor er ihn ausgibt, was beim PRINT ohne "+" nicht erfolgt. Ich bezweifle aber, dass es hier auf die Geschwindigkeit ankommt.

    Ich hatte mir übrigens immer angewöhnt, die Laufwerksnummer mitzuschreiben, also:

    "n0:" ..

    Beim LOAD-Befehl kann das ja durchaus wichtig sein (LOAD"*",8 vs. ":*" oder "0:*")