Beiträge von BIF

    Mit PEEK() ,POKE und SYS und USR() kann der C64-Programmierer die Grenzen des BasicV2 überschreiten.

    Also warum meckern, wenn etwas geht.

    Für mich galt immer das Nutzen, was im System möglich ist. Auch der Basic-Maschinencode ist ein Teil des Basic.

    Und natürlich kann man auch mit Basic Assembler-Code programmieren, z.B. durch String-Addition, also der String-Assembler.

    Das Basic hat viele Aspekte, die man alle nutzen kann. Und alles hat natürlich auch seine Fans.


    Schönen Gruß.

    Ansonsten sage ich einmal ohne Peek, Poke oder Sys oder LDA,STA und Usr funktioniert nun mal kein Computer.

    Der C64 arbeitet intern mit Zeigern, wie z.B. Ausgabe Zeiger, Programmzeiger, Variablenzeiger, Stringzeiger, Basic-Zeiger Bildschirm-Zeiger, DATA-Zeiger usw.

    Eleganter ist es natürlich wie ich es in RAM-BASIC/3 gemacht habe die Zeiger in Systemvariablen auslesbar zu machen, wie z.B. DATA-Zeiger =@d oder Cursor-Zeiger =@c oder x-Position =pos(0) = @x .


    Zum Thema POKE-Orgien vermeiden habe ich übrigens mit dem Listing PRINT POKE CODE ein Programm gepostet, das Pokes durch Print-Befehle ersetzt, wodurch man einiges an Speicherplatz und Geschwindigkeit sparen kann.


    Bei RAM-BASIC/3 hat man die Möglichkeit von Ketten-POKEs(1Byt,2Byte und Strings), was sowohl eine gute Lesbarkeit als auch Geschwindigkeit bringt.


    Schönen Gruß.

    Die Frage nach der Vollversion ist natürlich folgende:
    Es gibt bestenfalls eine immer vollere Version.
    Ich sage immer, was schon gut ist, kann meist auch noch verbessert oder erweitert werden.

    Ansonsten liefert das Spiel natürlich schon viel Unterhaltung und innovative Ansätze.


    Schönen Gruß.

    Wenn es Wiederholungen gibt, darf der Nutzer diese natürlich inteligent erkennen und falls er die richtige Lösung schon gezählt hat benutzen.

    Natürlich könnte ich auch versuchen Wiederholungen zu vermeiden.
    Werd mich mal ransetzen und eine 2. Version herausbringen.


    Schönen Gruß.

    Z10: ABC-ZAEHLER:




    Und hier kommt gleich eine Spiele-Demo, das eine Anwendung des Vorgängerprogramms zeigt.

    Installiert werden die 4 deutschen Umlaute ÄÖÜß.

    Durch ROM-RAM-Kopy und den String-Instaler hat man fast keine Installationszeiten mehr.


    Das Spiel ist einfach, aber eine echte Herausforderung, aufgelistet wird eine Zeile mit zufälligen Buchstaben, die man dann Zählen muß.

    Hat man bei allen 10 Fragen richtig gezählt, kommt man in den nächsten Level, es wird also noch anspruchsvoller und eine Zeile zugefügt.
    Die Idee kam aus einer Fernseh-Quiz-Show, wo die Kandidaten bei Wörtern dann z.B. die E´s zählen mußten.


    Schönen Gruß.

    Dateien

    • ABC-ZAEHLER.PRG

      (620 Byte, 2 Mal heruntergeladen, zuletzt: )

    Z10: POKE-CODES-PRINTEN:


    Und hier kommt natürlich bei den besten 10-Zeilern: Das automatische Wandeln von Poke-Codes in Print-Codes.

    Damit lassen sich Data-Installationen packen und beschleunigen, was für die Programmierung von 10-Zeilern natürlich auch vorteilhaft ist und neue kompaktere und schnellere Programm-Generationen zuläßt.


    Eingabe: Zeile, Anfang, Ende


    Als Zugabe habe ich noch ein Testprogramm ab Zeile.20 angehängt, das alle Zeichencodes von 0-255 auf den Bildschirm poke´t, dann ab Zeile 100 die Print-Codes erzeugt, die Installation printet und schließlich noch einen Codetest durchführt.


    Schönen Gruß.

    Kein Cursorblinken ist kein Problem, wenn man einen Cursor selbst programmiert.


    5 :a=peek(209)+peek(210)*256+pos(.):b=peek(a):pokea,b+128and255:wait198,7:geta$:pokea,b:


    Natürlich kann man auch Blinken oder andere Effekte programmieren.


    Schönen Gruß.

    Z10: PRINT-POKE-CODE: Update 2



    Und hier kommt noch mal ein weiteres Update:
    In dem ich noch eine automatische mathematische Begrenzung für e eingearbeitet habe.

    Außerdem ist das Programm jetzt Zeropage fähig, das heißt es kann komplett im Hintergrund in der Zeropage arbeiten. Mit :poke648,2: aktiviert.
    Mit Bild.2 kann man einen Blick in die Zeropage werfen und den String-Generator im Eingabepuffer(512) arbeiten sehen, wobei in der Folgezeile dann die Variablen Z,I,E gesetzt werden.
    Das Programm ist wieder mal ein tolles Beispiel für ein selbstmodifizierendes Programm, mit dem Speicherbereiche kompaktet und als Strings abgespeichert werden können.

    Aufbauend auf die FNSA() Formel mit der der Bildschirmcode nach ASCII-Code gewandelt wird.


    Schönen Gruß.

    Z10: PRINT-POKE-CODE: Update


    Hallo, ich hab noch mal überlegt, ob ich nicht einen Fehler eingebaut habe.

    Daher poste ich hier noch mal ein Update in dem ich in Zeile.7 chr$(20) durch chr$(157) ersetzt habe. Außerdem habe ich bei der Eingabe die Abfrage Z auf kleiner 10 gesezt, damit wird verhindert, daß man versehentlich das Programm überschreiben kann.


    Schönen Gruß.

    Z10: PRINT-POKE-CODE:



    Hallo, und hier kommt wieder mal ein 10-Zeiler Tool.
    Und zwar, wie gewünscht, das Wandeln von Poke-Codes in Print-Anweisungen.


    Eingabe(z,a,e): Startzeile, Start-Adresse,End-Adresse


    Die Datenmenge sollte bei einem Schreibvorgang 3 Blocks=3*256 Bytes nicht übersteigen. Bei tab(0) bis zu 999 Bytes. Ein Bildschirm=1000 Bytes, dann setzt das Scrollen ein.

    Falls größere Mengen vorhanden sind, kann man natürlich auch mehrere Schreibvorgänge machen.

    In der Startzeile wird die Anfang und Endadresse geschrieben und dazu die Bildschirmadresse in 648 gesetzt. mit Tab() wird dann an die Startadresse gesprungen.
    Danach wird geprintet.
    Man sollte also nach dem Printen die Bildschirmadresse zurücksetzen z.B. mit :
    :poke648,4: rem--bildschirm ab 1024

    Natürlich kann man bei Prints mit einer Programmzeile(80) auch den bekannten Adress-Print-Trick anwenden:
    :poke209,lb:poke210,hb:poke211,.:print"code"
    Mit :poke213,255: kann man allerdings die Zeilelänge auch noch verlängern.

    Schönen Gruß.

    Ich finde das Verhalten bei genauen Überlegen durchaus normal.

    Wenn man Runterzählen will muß eben -1 genommen werden, sonst wird raufgezählt.

    Schönen Gruß.

    Das next springt aus der Schleife raus, weil die Bedingung erfüllt ist, also, weil i größer 1 ist.


    for i=3 to 1:print i:next:


    Endlosschleifen sind kein Problem, da man i beschreiben kann.


    for i=0 to 1: i=peek(198):next:geta$:rem---warten auf tastendruck


    Schönen Gruß.

    Wie schon besprochen gibt es wohl einen Fehler bei der Multiplikationsroutine.

    Grundsätzlich kann man die mathematischen Sachen auch mit Strings machen.
    Eben so, wie man es in der Schule gelernt hat.

    Interessant wäre natürlich auch eine Liste mit allen Mathe-Fehlern.



    Schönen Gruß.

    Das ist natürlich genau das Anwendungsgebiet für ROM-RAM-Kopy

    Der VIC, Bildschirm, Zeichensätze, Sprites und Grafik werden dabei ins obere RAM verlegt.
    Und damit hat man 16kB-Grafikspeicher ab 49152-65535.


    150 :rem--rom/ram,bild:52224,satz:53248151 poke56334,0:poke1,51:fori=88to91:pokei,0:next:poke781,97:poke782,.:sys41971152 :poke53248+32*8+6,16:rem--zeichensatz-demo153 poke1,53:poke56334,1:poke648,204:sys58692:poke53272,52:poke56576,196:return


    Schönen Gruß.