Hello, Guest the thread was called374 times and contains 14 replays

last post from BIF at the

Z10: ZEICHEN-EDITOR

  • Zeichen-Editor in 10 Zeilen:


    Hallo, hier habe ich mal versucht in 10 Zeilen einen Zeichen-Editor zu programmieren.

    Die Funktionen sind

    -Zeichen-Edit im Editierfeld mit Leertaste.

    -Zeichauswahl im Auswahlfeld mit Cursor und Return.

    - Laden mit "L"

    -Speichern mit "S"

    Geladen und gespeichert wird die Datei als USR-DATEI "ZS-0,U" .


    Schönen Gruß und viel Spaß.

  • Hier kommt noch mal das Listing zum Zeichen-Editor:


    0 :a=48:poke90,.:poke91,224:poke88,.:poke89,a:poke781,17:poke782,.:poke56334,.

    1 poke1,51:sys41971:poke1,55:sys65374:n=8192:poken-1,192:poken-2,.:poke53272,24

    2 print"[clr,weiß,rev-an]zeichen-edit:' load/save":a$(.)="[dunkelgrau,rev-an] [weiß,rev-aus]":a$(1)="[gelb,rev-an] [weiß,rev-aus]":a=n

    3 :print"[home]":forj=atoa+7:forb=-128to-1:printa$(sgn(peek(j)and-b));:b=b/2-1:next:print:next

    4 :close8:z$="@0:zs-0,u":poke780,.:ife=.thenfori=.to255:poke1424+i,i:next:e=204

    5 sys43847:pokee,.:wait198,7:sys61758:b=peek(780):poke205,2:wait207,1,1:pokee,1

    6 :y=peek(214)-1:x=pos(.):z=notxand7:c=peek(206):ify>7andb=13then:a=n+c*8:goto3

    7 ifb=32andx<8thenb=c=160:c=2^z:printa$(-b);:pokea+y,peek(a+y)andnotcorc*-b:goto4

    8 ifb=76then:poke52,159:open8,8,0,z$:fori=n-2toi+2049:get#8,a$:pokei,peek(512):next:a=n:goto3

    9 on-(b<>83)goto5:open8,8,1,z$:cmd8,;:fori=n-2toi+2049:printchr$(peek(i));:next:print#8,;:goto4



    Schönen Gruß.

  • Hallo hier noch mal der Basic-Code für das Laden und Anschalten des neuen Zeichensatzes.


    0 :ifa=0then:a=1:load"zs-0,u",8,1

    1 :poke648,204:print"[clr]neuer satz:":poke56576,4:poke53272,48:


    Mit load am Anfang wird der neue Zeichensatz automatisch nach 49152 ins obere RAM geladen und mit Zeile 1 dann eingeschaltet.


    Und schon hat man den Zeichensatz ohne Einbußen oder Überschneidungen an Basic-Programm-RAM installiert.


    Schönen Gruß.

  • Hallo, ich hab noch mal ausprobiert, ob man beim Ladecode noch die Variable a weglassen kann: Also man kann a auch durch st ersetzen.


    0 :ifst=0then:load"zs-0,u",8,1

    1 :poke648,204:print"[clr]neuer satz:":poke56576,4:poke53272,48:


    Schönen Gruß.

  • Also man kann a auch durch st ersetzen

    Wieder was gelernt ^^. ST kannte ich noch nicht, oder zumindest nicht mehr. Die Bekanntschaft in freier Wildbahn macht man damit eher, wenn eine harmlose Variable wie START oder STOP einen Syntax Error produziert. Dabei ein Newbie-Tip aufgrund eigener Erfahrung: Variablennamen auf dem C64 nicht länger als 2 Zeichen definieren. Nur die ersten 2 Zeichen werden registriert. Für den C64 ist also z.B. "FIELD" und "FILE" dieselbe Variable. Wenn man längere Variablennamen verwendet und nicht aufpasst, kann das fiese Bug-Suche nach sich ziehen.


    Wenn ich nach eigenere Recherche ST bzw. STATUS kurz erläutern darf... ST ist eine Systemvariable unter BASIC und widerspiegelt den Status eines I/O Zugriffs z.B. über Datasette, Diskettenlaufwerk, Drucker oder RS-232. Bei Start des C64 ist der Wert von ST auf 0. Sobald ein File geladen wird, werden dadurch die Statusbits gesetzt und sind somit nicht mehr 0. Deshalb kann man das im BIF-Falle so machen. Aber Achtung: bei erneutem Ausführen von RUN wird ST nicht wieder zurückgesetzt. In dem Fall von Char-File laden kann das aber sogar ganz praktisch sein, weil wenn mal im Speicher, dann muss das ja nicht nochmal geladen werden. Ist m.E. aber nur für Zehnzeiler als cooler Trick zu empfehlen. Nicht zu Hause nachmachen, Kinder oder dann nur auf eigene Gefahr.


    Hier mehr Infos zu ST: https://www.c64-wiki.de/wiki/STATUS


    edit: BIF : Doofe Frage. Wenn ich das BASIC-Programm z.B. von Disk lade, welches sich auf ST bezieht, dann ist doch ST bereits gesetzt, oder etwa nicht?

  • Ja, ich denke wizball6502 hat recht.

    Ich habe den Code am EMU mit Lademenue getestet und da funktioniert er.

    Wenn man aber ohne Lademenue lädt geht´s nicht.

    Beim normalen Laden wird st=64 gesetzt, für erfolgreiches Laden.
    Wenn man das Programm also normal von Komandozeile aus läd ist st=64.

    Und anscheinend wird st bei Run nicht auf 0 gesetzt.


    Daher ist der Lader aus Post 7 wohl doch die bessere Alternative.
    Und der Lader aus Post 10 läuft nur eingeschränkt.
    Die Variable a sollte also drin bleiben.


    Schönen Gruß.

  • ZEICHEN-EDIT+:



    Hallo, hier kommt noch mal ein Update zum Z10:Zeichen-Editor:

    -Mit Schnelllade/speicher-funktion,

    -Anzeige des Dateinamen

    -Verbessertes Editieren/Invertieren.


    Listing:


    0 :a=48:poke90,.:poke91,224:poke88,.:poke89,a:poke781,17:poke782,.:poke56334,.

    1 :poke1,51:sys41971:poke1,55:sys65374:n=8192:poken-1,192:poken-2,.:poke53272,24

    2 :z$="@0:zs-0,u":a=n:print"[clr]zeichen:' "z$" l/s":a$(.)="[dunkelgrau,rev-an] [weiß,rev-aus]":a$(1)="[gelb,rev-an] [weiß,rev-aus]"

    3 :print"[clr]":forj=atoa+7:forb=-128to-1:printa$(sgn(peek(j)and-b));:b=b/2-1:next:print:next

    4 :close8:k=780:pokek,.:sys65484:ife=.then:fori=.to255:poke1424+i,i:next:e=204

    5 :sys43847:pokee,.:wait198,7:g=61758:sysg:b=peek(k):poke205,2:wait207,1,1:pokee,1

    6 :y=peek(214)-1:x=pos(.):z=notxand7:j=a+y:ify>7andb=13then:a=n+peek(206)*8:goto3

    7 :ifb=32andx<8andy<8thenc=2^z:b=notpeek(j)andc:printa$(b/c);:pokej,peek(j)andnotcorb:goto4

    8 :ifb=76thenopen8,8,0,z$:poke781,8:sys65478:fori=n-2toi+2049:sysg:pokei,peek(k):next:a=n:goto3

    9 :on-(b<>83)goto5:open8,8,1,z$:cmd8,;:fori=n-2toi+2049:printchr$(peek(i));:next:print#8,;:goto4


    Schönen Gruß.

  • Mal wieder erstaunlich, was man in 10 Zeilen so machen kann.


    Der Editor erlaubt sogar sich eigende Objekte zusammenzustellen.

    Wie z.B. Tiles. Damit sieht man dann sogar sofort das Ergebnis.


    ab

    cd


    Einen Fehler habe ich allerdings bei der Zusammenarbeit mit dem Disklader/2 entdeckt.

    Daher sollte der Disklader/2 noch durch ein :CLOSE8: ergänzt werden.

    Dann funktioniert es auch damit.


    Schönen Gruß.