BASIC-WERKZEUGKASTEN

There are 34 replies in this Thread which has previously been viewed 4,477 times. The latest Post (May 28, 2025 at 1:59 AM) was by BIF.

  • ROLL-EDITOR:

    Please login to see this attachment.

    Hier startet der Thread Basic-Werkzeugkasten mit einen neuen Version des Basic-Scroll-Editors:

    Tasten:
    F1: Zeile Hoch-Rollen
    F3: Zeile Runter-Rollen
    F5: Leerzeile Einfügen

    Stop: Pos-0
    Shift+STOP: Basic-Editor-Modus

    Wenn man ein Programm editiert, sollte man als erstes einen Zeile 0 einfügen, damit der Editor nach Zeilen-Eingabe mit Return wieder startet.
    0 GOTO60000


    Das Programm kann an jedes Basic-Programm mit niederigeren Zeilennummern (kleiner 60000) angehängt werden.
    Abhängen/Löschen kann man den Editor mit :gosub61234:
    Speichern kann man den Editor mit :GOSUB61000

    Den Hochkommamodus habe ich übrigens gesperrt.
    Ein Sonderzeichen (1) kann mit dem INSERT-MODUS(SHIFT-DEL) eingefügt werden.

    Schönen Gruß.

  • LISTING DES ROLL-EDITORS:

    60000 POKE809,188:POKE808,54:SYS58451:OPEN3,3:REM---ROLL-EDIT

    60001 :DEFFNP(I)=PEEK(I)+PEEK(I+1)*256:GOSUB60028:FORC=.TO9:

    60002 I=FNP(209)+POS(.):C=PEEK(I):IFC=32THENPOKEI+55296-PEEK(648)*256,PEEK(646)

    60003 :POKEI,C+128AND255:WAIT198,15:GETA$:B=ASC(A$):POKEI,C:IFB=13GOTO60030

    60005 :ON-(B=135)-2*(B<4ORB=131)GOSUB60026,60028:IFB=131THEN:SYS64789:SYS42107

    60006 :I=FNP(209)+79:IFB=148THEN:POKE216,.:ON-(PEEK(213)=79)GOSUB60018:

    60007 :IFBAND96THEN:POKE216,.:ON-(POS(.)=79ANDPEEK(I+1)<>32)GOSUB60019

    60008 :POKE658,1:PRINTA$;:POKE212,.:POKE658,.:C=(B=133)-(B=134):IFC=.THENNEXT

    60009 :

    60010 :GOSUB60020,ZNR:A=B+C*SGN(B):GOSUB60021,ADR:IFA=BORPEEK(J+1)=.THENNEXT

    60011 :IFC>.THEN:FORI=-1TO.:PRINT:I=PEEK(FNP(209)-1)<>32:NEXT:REM-POS0

    60012 :POKE172,.:POKE173,.:POKE3,24:POKE4,76:POKE5,219:POKE6,252:REM-LISTLEN

    60013 :POKE806,3:POKE807,.:GOSUB60016:POKE806,202:POKE807,241:L=(FNP(172)-1)/40

    60014 :FORI=.TOL:GOSUB60026,ROLL:NEXT:POKE214,PEEK(214)-1AND255:GOSUB60016,LIST

    60015 :PRINTLEFT$("[8xHOCH]",L);:POKE211,.:NEXT

    60016 :POKE44,J/256:POKE43,J-PEEK(44)*256:POKE768,174:POKE769,167:I=FNP(J)+1

    60017 :H=PEEK(I):POKEI,.:LIST:POKE43,1:POKE44,PEEK(642):POKEI,H:SYS58451:RETURN

    60018 :IFNOT(PEEK(I)=32ANDPEEK(I-1)<>32ANDPEEK(I+1)<>32)THEN:RETURN

    60019 :I=POS(.):PRINT:GOSUB60026:PRINT""CHR$(145*-(I<40));:POKE211,I:RETURN

    60020 :GOSUB60028:GETPlease login to see this link.,A$,B$,C$,D$,E$:B=VAL(A$+B$+C$+D$+E$):POKE211,.:RETURN

    60021 :GOSUB60025:A=FNP(J+2):H=FNP(43):IFA<>BORJ=HTHEN:RETURN

    60022 :H=H-1:I=J-85:I=I*-(I>H)-H*(I<=H):FORI=ITOJ:IFPEEK(I)THENNEXT

    60023 :IFFNP(I+1)<>JTHEN:NEXT

    60024 :A=FNP(I+3):J=I+1:RETURN

    60025 POKE785,19:POKE786,166:SYS47083A,.:J=PEEK(USR(95))+PEEK(USR(96))*256:RETURN

    60026 POKE214,PEEK(214)-1AND255:SYS59749:PRINT:H=216+PEEK(214):POKEH,PEEK(H)OR128

    60027 :PRINT"[HOCH]";

    60028 :POKE212,.:POKE216,.:PRINTCHR$(145*-(POS(.)>39));:POKE211,.

    60029 :ON-(PEEK(FNP(209)-1)<>32ANDPEEK(214)>.)GOTO60027:RETURN

    60030 ::POKE211,.:GOSUB60031:POKE198,1:POKE631,13:SYS64789:SYS42115:-RETURN

    60031 :POKE768,42:POKE769,165:POKE770,177:POKE771,167:RETURN

    61000 :A$="0:ROLL-EDIT":OPEN1,8,15,"S"+A$:CLOSE1:SAVEA$,8:RETURN:

    61234 A=6E4:GOSUB60025:POKEJ,.:POKEJ+1,.:J=J+2:POKE9,J/256:POKE8,J-PEEK(9)*256

    61235 POKE45,PEEK(8):POKE46,PEEK(9):CLR

    Was gibt es für Neuerungen?

    -Neues LIST-Modul listet alle Zeilen, einschließlich Zeile 0
    -Relative Programmierung ohne Rücksprünge, mit NEXT
    -Neuer STARTCODE kann das Programm mit beliebiger Anfangszeile auch ohne Zeile 0 neustarten.
    -STOP-TASTE gesperrt, nun mit POS-0 belegt.
    -Mit SHIFT-STOP kommt man in den orginalen Basic-Editor Modus
    -Schnellere Zeilensuche mit Null-Code
    -Auch Zeilen mit Überlänge werden korrekt gelistet, Einbau eines Zählers spart Ausgabepuffer
    -FARBWAHL wird mit Cursor angezeigt, bei Leerzeichen
    -Bei Zeilenlänge 80 wird einen Leerzeile hinter der Zeile eingefügt.

    Schönen Gruß.

    Edited once, last by BIF (August 30, 2024 at 7:41 PM).

  • BASIC-PROGRAMME von DISKETTE LISTEN

    Please login to see this attachment.

    Hier habe ich noch mal in mehreren Reformschritten in 9 Zeilen ein kurzes, schnelles und komforables Listing entwickelt mit dem man Basic-PRG-Dateien direkt von Diskette listen kann.
    Mit Tastendruck kann man das Listen stoppen und erneut starten.
    STOP schließt die geöffnetet Datei.

    Schönen Gruß.

  • Übrigens habe ich in der Zwischenzeit noch eine kürzere und schnellere Version entwickelt.
    Beim Blättern im ROM-Listing bin ich auf einen 2-Byte-Code gestoßen:
    :y-:rts: den man natürlich auch in die Zeropage Poken kann.
    Und dann hab ich den END-Vektor darauf gesetzt und klappt.
    Damit hat man in der Ausgabeschleife dann nur noch zwei Befehle :sysg:syst: was natürlich dann noch mal merklich mehr Geschwindigkeit bringt.

    Schönen Gruß.

  • Directory und Basic-Programme Listen

    Please login to see this attachment.

    Hier hab ich mal ein Modul gecodet, mit dem man sowohl das Inhaltsverzeichnis, als auch Basic-Programme von Diskette listen kann.
    Standardmäßig wird das Disk-Inhaltsverzeichnis geladen, die Dateiauswahl erfolgt mit 2xReturn.
    Beim zweiten Return kann man dann den Cursor auf eine Datei steuern, die dann mit Return ausgewählt wird.
    2x Return: Dateiwahl
    F1- zurück zum Dir-Listen
    Stop: Prog. Abbruch
    Sonstige Tasten listen anhalten.


    Damit hat man dann ein Basic 10-Zeiler-Modul, mit dem man dann schon alles listen kann.
    Wer genau hinsieht, es ist ein 11-Zeiler.
    In Zeile 8 wird das Listen mit berechneter Zeilenlänge gezeigt
    in Zeile 9 das Listen ohne berechnete Zeilenlänge, Nullcode abhängig.
    Wenn man einen echten 10-Zeiler haben will, müßte man sich natürlich für eine Methode entscheiden.
    In dem Demo-Listing zeige ich beide Methoden, die Zeilenlängenberechnende Methode für das Listen von Basic-Programmen und die Null-Code-Methode zum Listen von Directorys/Disk-Verzeichnis.

    Grundsätzlich ist das Format eines Diskettenverzeichnis und eines Basic-Programm ähnlich, daher kann man natürlich ein Programm für beides benutzen.

    Schönen Gruß.

  • ohne Checksummer tipp ich das nicht ab 😌

    Arcade: Twinliner, Fashion Vision,
    "Cosmic Guerilla" cocktail table
    Pins: Scared Stiff + Getaway
    C64, C65, C66, Gammel+Mist...

  • ohne Checksummer tipp ich das nicht ab 😌

    Tja, ein Programm zum erzeugen der Listings mit Checksummen, wie sie immer in den Zeitschriften abgedruckt wurden, habe ich noch nie gesehen.

  • Wird nicht in den Weihnachtsheften ein Checksummer benutzt?

    Gab auch mal einen Thread dazu, der dann leider nach hinten hin etwas ausgefranst ist:

    Please login to see this link.

    Please login to see this link. - Ratespiel • Please login to see this link. - BASIC-Erweiterung • Please login to see this link. - Sprite-Editor • Please login to see this link. - Zeichensatz-Editor Please login to see this link. - 2048 Blöcke

  • Wer nicht abtippen will kann natürlich auch Runterladen, siehe unten.
    Abgesehen davon ist der Aufwand bei 10-Zeilern nicht so groß.
    Gemessen am Nutzen.
    Man bedenke auch den didaktischen Lerneffekt.

    Schönen Gruß.

  • Übrigens ist das Programm der Einstieg um nicht abtippen zu müssen.
    Weil man über das Auflisten am Bildschirm und Einlesen mit Return natürlich auch Programmzeilen ins Programm einfügen kann.

    Man kann natürlich mit dem Modul auch ganze Disketten durchsuchen, ohne ein Programm nachladen zu müssen.

    Schönen Gruß.

  • DIR+PRG-LISTER-Update

    Please login to see this attachment.

    Hier noch mal ein Update zum DIR+PRG-Lister.
    Da ich noch einen Fehler entdeckt habe, der das PRG zum Absturz bringen könnte, veröffentliche ich hier noch mal ein Update.
    Mit der Neunummerierung ab 62000 kann man das Modul nun an jedes Programm anhängen.
    Nun werden die User rätseln, welcher Fehler es nun war. Genaugenommen war es kein Fehler, sondern es ist eine Ergänzung. Der Fehler taucht auf, wenn in einem Listing z.B. :a$="a: auftaucht, also ein 2. Hochkomma fehlt.
    Daher habe ich noch ein :Poke15,0: ergänzt, da der Listbefehl anhand der Speicherstelle 15 feststellt ob ein Token oder ein Zeichencode ausgegeben wird.

    Damit hat man nun ein perfektes Modul mit dem man einen Bibliothekszugriff auf Disk realisieren kann.
    Und kann sowohl Disk-Inhaltsverzeichnis, als auch Basic-Dateien ohne Programmverlust listen.

    Gewissermaßen ein Datei-Browser in nur 10 bzw. 11 Zeilen.

    Schönen Gruß.

  • Wie oft kommt in dem Programm "SYS" vor? Also, mit BASIC hat das für mich nicht mehr viel zu tun.

    Please login to see this link. - Ratespiel • Please login to see this link. - BASIC-Erweiterung • Please login to see this link. - Sprite-Editor • Please login to see this link. - Zeichensatz-Editor Please login to see this link. - 2048 Blöcke

  • Basic-Code ist Basic-Code.
    Auch Maschinen-Sprache-Programmierung in Basic ist Basic.
    Ich nutze natürlich auch System-Routinen des Basic-Betriebssystems.
    Leider sind nicht alle Funktionen des Basic-Betriebssystems auch direkt in die Basic-Oberfläche integriert.
    Daher war es schon immer so, daß man auf Poke, Sys oder Usr() zurückgreifen mußte.
    z.B. Für das Setzen der Hintergrundfarbe, Rahmenfarbe, Sprites, Sounds, Bildschirmmodi, usw.
    Für mich ist das nie ein Problem gewesen auch System-Routinen von Basic aus zu nutzen.
    Ich mache es und alle anderen machen es auch.

    Der Unterschied bei SYS und JSR ist übrigens, daß man in Basic auch Dezimalzahlen, Variablen und Funktionen benutzen kann.

    Rein theoretisch könnte man beim Listen natürlich auch alle Tokens in Basic-Variablen ablegen.
    z.B. t$(0)="end":t$(1)="print"

    Dann kann man das gezeigte Programm aber natürlich nicht in 10 oder 11 Zeilen programmieren.

    Schönen Gruß.

    Edited 3 times, last by BIF (October 15, 2024 at 12:08 AM).

  • Dann kann man das gezeigte Programm aber natürlich nicht in 10 oder 11 Zeilen programmieren.

    Na DAS wäre aber doof 😐

    Aber Hallo !

    Arcade: Twinliner, Fashion Vision,
    "Cosmic Guerilla" cocktail table
    Pins: Scared Stiff + Getaway
    C64, C65, C66, Gammel+Mist...

  • Doof wäre das natürlich nicht, weil natürlich alle Ansätze auch ihre Daseinsberechtigung haben.

    Wer will kann das natürlich auch ohne SYS programmieren, z.B. mit :GETPlease login to see this link.,a$,b$:
    Ist aber langsamer, als mit dem Trick der Eingabekanal-Umschaltung.
    Nach der Eingabekanal-Umschaltung kann man übrigens auch mit :GETa$,b$: arbeiten.

    Übrigens könnte ich auch einen Maschinensprache-Kurs in Basic machen.

    Ich habe mal einen Assembler in Basic programmiert, der den Basic-Quelltext in ein Maschinenprogramm übersetzt.

    Maschinensprache und SYS-Sprünge sind natürlich auch kein Tabu-Thema für den Basic-Programmierer.

    SYS, POKE, PEEK und USR() gehören standardmäßig zum Basic Befehlswortschatz.

    Und man kann damit auch viele Prozesse vereinfachen und beschleunigen, bzw. Basic-Bugs und Fehlermeldungen umgehen.
    z.B. peek(512) statt asc(a$) bei GETa$:
    GET hat den Bug, daß es keine Nullcodes liest, bzw. statt Nullcode einen Leerstring liest und ASC() steigt bei einem Leerstring mit einem Fehler aus. Hätte nicht sein müssen, ist aber so.
    Leider sind einige Basic-Fehler-Meldungen/Ausstiege/Fehlerabfragen völlig sinnlos. Wie z.B. POKE2,-1: oder :POKE2,257:

    In dem Betriebssystem-Update RAM-BASIC/3 habe ich übrigens viele Fehlermeldungen abgeschaltet.
    Und alle Fehlermeldungscodes durch Programmcode ersetzt.
    Dann funktioniert auch ASC("") oder POKE2,257 problemlos oder auch ein Ketten-Poke usw.

    Schönen Gruß.

    Edited 6 times, last by BIF (October 15, 2024 at 3:43 PM).

  • Warum beginnst Du eigentliche jede Programmzeile mit einem Doppelpunkt?

    spart Rasterzeit 😌

    Arcade: Twinliner, Fashion Vision,
    "Cosmic Guerilla" cocktail table
    Pins: Scared Stiff + Getaway
    C64, C65, C66, Gammel+Mist...