Posts by BIF

    Hallo, ich glaube mal in dem Listing ist ein Fehler.

    In Zeile 11 sollte ein :poke1,54: stehen.
    Mit poke1,54 oder poke1,53 wird das RAM-BASIC eingeschaltet.


    10 :poke56334,.:poke1,51:fori=88to91:pokei,.:next:poke781,97:poke782,.:sys41971

    11 :poke1,54:poke648,204:sys65374:sys58692:poke56576,4:poke53272,54

    12 :print"basic-erweiterung":poke43039,122:poke43041,0:poke43043,123:restore

    13 :a=48979:fori=atoa+18:readb:pokei,b:next:sys(a)41018,82,191

    14 :data32,36,184,32,6,226,132,9,32,155,183,138,164,9,200,145,20,208,240


    Schönen Gruß.

    TurboMicha: Ja, mit ROM-RAM kann man praktisch alles machen, was man in der Standard-Konfig nicht machen konnte.
    JeeK: Interessante Seite.


    Die Vorteile des Ketten-Pokes sind natürlich die hohe Geschwindigkeit im Vergleich zu READ-DATA, die Code-Ersparnis, die einfache Handhabung und gute Lesbarkeit. Mit dem Ketten-Poke eröffnen sich natürlich für den Basic-Programmierer viele neue Möglichkeiten.

    1. Schnelles und einfaches 2-Byte-Poke.
    z.B. :pokea,b,b/256


    2. Schnelle Installation von Maschinen-Codes:
    z.B. :a=512:pokea,234,234,96:sysa

    3. Schnelles installieren von Zusatz-Zeichen:
    z.B. :pokea,1,2,3,4,5,6,7,8

    4. Schnelle Sprite-Installation

    5. Schnelles Poken von Grafik-Elementen.


    6. Einfaches Farb-Poken:
    co=53280:pokecolor,0,1,2,3,4


    7. Geschwindigkeitsgewinne beim Sprite-Setzen.

    8. Und auch bei SID-Pokes.


    Schönen Gruß.

    ROM-RAM: BEFEHLS-ERWEITERUNG

    KETTEN-POKE


    10 :poke56334,.:poke1,51:fori=88to91:pokei,.:next:poke781,97:poke782,.:sys41971

    11 :poke1,55:poke648,204:sys65374:sys58692:poke56576,4:poke53272,54

    12 :print"basic-erweiterung":poke43039,122:poke43041,0:poke43043,123:restore

    13 :a=48979:fori=atoa+18:readb:pokei,b:next:sys(a)41018,82,191
    14 :data32,36,184,32,6,226,132,9,32,155,183,138,164,9,200,145,20,208,240


    Damit findet dann der Übergang zu RAM-BASIC/2 statt.
    Statt der Installation mit READ:DATA kann man dann die Binärwerte direkt ins RAM poken, was um einiges schneller und einfacher ist.

    Syntax: poke 2,2,3,4,5

    oder bei 2 Byte: pokea,b,b/256: (in Kombination mit RAM-BASIC/1)


    Schönen Gruß.

    Das man die ROM-Zeichensätze in Bank 0 und 2 nicht ausschalten kann ist natürlich unschön. Ideal wäre es naürlich gewesen, man setzt irgendwo ein Bit und man kann den ROM-Zeichensatz ein oder ausschalten.


    Mit ROM-RAM-Kopy, Basic-Thread Tricks mit ROM-RAM, kann man allerdings problemlos die oberen 16 kB, Bank.3 in Basic und Assembler für alle Daten nutzen und man hat keine Speicherüberschneidungen, wie in Bank 0/1/2 .


    Schönen Gruß.

    Außerdem kann man mit String-Unterprogrammen die Selbstmodifikation umgehen, also, daß bei bestimmten Tricks erforderlich ist, daß das Haupt-Programm sich selbst modifiziert.

    Wie z.B. bei der Anzeige von Variablen. Das kann man dann in den String auslagern.
    Und damit wird das Hauptprogramm nicht angetastet und die Adressberechnung übernimmt die Stringverwaltung.



    Schönen Gruß.

    Die größte Bedeutung liegt wohl darin, daß man mit den Strings den Direktmodus simmulieren kann und Strings-Unterprogramme zusammensetzen, benutzen und sogar laden kann.
    Auch die Simulation eines Spiele-Charakters mit einem Varablenstring ist damit denkbar.


    Schönen Gruß.

    Ja, wie versprochen völlig neue Möglichkeiten.

    Selbstmodifizierende Strings, die sogar wachsen uns sich vermehren können !!!

    Schönen Gruß.

    Hallo,


    Hier noch mal ein Programmcode für schnelles Laden und Speichern.


    Speichern:
    10 :a=1024:e=a+100:rem---speichern

    11 :open1,8,1,"@0:name":a%=a/256
    12 :cmd1,chr$(a-a%*256)chr$(a%);:rem--ladeadresse abspeichern
    13 :fori=atoe:printchr$(peek(i));:next:print#1,;:close1:rem--prg speichern

    19 :

    Laden:
    20 :rem---laden
    21 :ifc=0then:c=1:load"name",8,1

    Schönen Gruß.

    Ja, der mathematische Anwendungsbereich wurde wahrscheinlich noch nicht entdeckt.
    Ich persönlich hab mich ehrlicherweise immer mehr für Funktionsgrafik interessiert.
    Fraktale wirken auf mich etwas wie Esotherik.

    Schönen Gruß.

    Also binäres Speichern auf Diskette.

    z.B.

    10 :open1,8,1,"name":cmd1:fori=atoe:printchr$(peek(i));:next:print#1,;:close1
    oder
    10 :open8,1,1"name":cmd1:fori=atoe:reada:printchr$(a);:next:geta$:close1

    Also wenn du die Daten binär in eine Datei schreiben willst, dann mußt du sie als Zeichen abspeichern.
    Und beim Lesen der Datei die Daten zeichenweise mit get oder get# einlesen.


    Schönen Gruß.

    Ein Mandelbrot-Experte bin ich zugegebenermaßen nicht.
    Ich denke mal, das ist auch eine mathematische Sache.
    Wozu benutzt man die Mandelbrot-Mathematik eigentlich ?

    Oder ist das mehr eine künstlerische Sache ?


    Schönen Gruß.

    Tja, das Leben und der Computer ist natürlich auch ein Lernprozess.
    Und es bedarf natürlich auch einer gewissen Übung oder Kenntnisse um die Hidden Codes überhaupt als Versteckte Codes zu erkennen.

    Grundsätzlich ist es natürlich auch ein neues Tipps und Tricks Feld Basic-Code in Strings und als Strings zusammenzusetzen. Damit hat man gewissermaßen eine Art von Basic-Assembler. Und es sind völlig neue Programmiertechniken möglich.


    Schönen Gruß.

    WebFritzi:
    Du meinst vermutlich als Bytes. INTEGER Variablen haben 2 Byte, und BYTES 1 Byte.
    Für das Laden ist ROM-RAM natürlich ideal, da du die Datei direkt nach 49152 ins obere RAM, außerhalb des Basic-RAM´s laden kannst.
    Die Sprites sind dann auch gleich installiert und du mußt nur noch die Spritepointer setzen.
    Ansonsten hat Mikes Methode natürlich den gleichen Vorteil, daß die Installation entfällt und die Sprites nur noch durch Setzen der Pointer übernommen werden.
    Das ist technisch betrachtet auch schon optimal.
    ROM-RAM bietet natürlich die weitere Möglichkeit zusätzlilch eigene Zeichen zu installieren z.B. Deutsche Umlaute oder Sonstiges.


    Schönen Gruß.

    Wenn du die binären Data-Pokes auch binär abspeicherst, solltest du eigentlich schon ein gute Kompression haben.

    Mit ROM-RAM ist allerdings eine Kompression überflüssig, da du den gesamten Basic-Programmspeicher nutzen kannst und die Grafikangelegenheiten in den oberen 16 kB des C64, also außerhalb des Programm-RAMS stattfinden. Wenn die Daten binär, z.B. im Anhang, vorliegen ist aber natürlich die Installation einfacher und schneller.


    Schönen Gruß.

    WebFritzi:
    Aber da steht etwas von Hidden Codes.
    [I] ist das Steuerzeichen REVERS-SHIFT-I.
    Der Sprung in #1 geht übrigens nach Zeile 100.
    Wenn du genau hinguckst.
    Des Rätsels Lösung ist natürlich, daß [I] vom Interpreter als GOTO angesehen wird.

    Schönen Gruß.

    ROM-RAM-TRICK
    SPRITES INSTALLIEREN:

    Folgendes Listing zeigt, wie man Sprites im Oberen RAM installiert.

    0 :goto10:---sprites im oberen ram

    10 :rem-rom/ram,schirm:52224,satz:53248

    11 :poke56334,.:poke1,51:forj=88to91:pokej,.:next:poke781,97:poke782,.:sys41971

    12 :poke1,53:poke648,204:sys65374:sys58692:poke56576,4:poke53272,54

    19 :

    20 :print"sprite-demo:"

    21 :vb=49152:va=53248:sp=peek(648)*256+1016:bk=0:s=0

    22 :a=vb+bk*64:fora=atoa+63:pokea,254:next:pokesp+s,bk:rem--install

    29 :

    30 :x=50:y=70:rem--sprite.setzen

    31 :a=va+s*2:pokea,x:pokeva+16,-(x>255):pokea+1,y:rem-set x,y

    32 :a=va+39+s:pokea,3:rem--farbe

    33 :pokeva+21,1:rem-sprite.an

    40 :wait198,7:geta$:pokeva+21,.:list10-


    Variablen:

    vb= Vic-Basis-Adresse = Spriteblock 0

    va= Vic-Adresse

    sp= Sprite-Pointer

    bk= Sprite-Block

    s= Sprite Nummer

    x= x-Position

    y= y-Position


    Natürlich kann man ROM-RAM und damit die oberen 16 KiloByte auch für Sprites nutzen.
    Zu beachten dabei ist nur, daß SpriteBlock Null nun bei vb=49152 beginnt.
    Und natürlich, daß die Sprite-Pointer Hinter dem neuen Bildschirm ab 52224, also ab Adresse 52224+1016 stehen.

    Man kann von Block.0 bis Block.47 48 Sprites installieren.
    Will man mehr Sprites muß man Konfig 1,54 oder 1,55 einschalten.
    Nun kann man natürlich auch noch die 8 KB ab 57344 (Block.128-Block255) für Sprites oder anderes nutzen.
    Die Länge der VIC-Bank ist 64*256=16384=16kB. Man kann mit ROM-RAM also theoretisch 256 Sprites nutzen.


    Schönen Gruß.

    Files

    Also wenn du 4 Sprites hast, macht das 64*4=256, also exakt ein Block Anhanggröße.
    Wenn du den Bildschirm verlegst, mußt du natürlich nicht nur den VIC, sondern auch die Ausgabeadresse in 648 setzen.
    Die Spritepointer berechnet man allgemein mit
    a=peek(648)*256+1016+i:

    Mit ROM-RAM(2-Zeiler) ist natürlich die Bereichsanpassung schon gemacht.
    Und die Sprites können ab 49152 außerhalb des Basic-Programm RAMs installiert oder geladen werden ohne die Länge des Basic-Programms einzuschränken.


    Die Frage, die noch offen wäre, wäre wohl wie lang dein Programm eigentlich ist ?


    Schönen Gruß.