Hello, Guest the thread was called3k times and contains 55 replays

last post from BIF at the

TRICKS mit ROM-RAM

  • 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ß.

  • Der Ketten-Poke funktioniert bei mir nicht, ich bekomme beim RUN den Fehler: Syntax error in 13. Liegt das an sys(a)41018?


    Z.B. was in Basic immer ewig dauert, das Füllen des Bildschirms mit bestimmten Zeichen.

    Das geht damit nicht schneller, weil man dann 1000 zahlen hinter das Poke schreiben müsste. Das eignet sich, wie oben gezeigt, dann, wenn man einige Speicherstellen, die hintereinander liegen, mit Werten füllen will. Z. B. kann man mit poke 53280,0,0 die Rahmen- und Hintergrundfarbe quasi gleichzeitig setzen. (Nur funktioniert das bei mir nicht, s. o.)


    Andere Frage, wo liegt denn nach dem Anwenden der Bildschirmspeicher?


    Edit: Sorry, steht in #1: 52224.

  • weil man dann 1000 zahlen hinter das Poke schreiben müsste. Das eignet sich, wie oben gezeigt, dann, wenn man einige Speicherstellen, die hintereinander liegen

    Also wird immer zwischen den Kommas die Speicherstelle (z.B Bildschirmspeicher 52224) "automatisch" um +1 erhöht und dann das Zeichen nach dem Komma mit dem entsprechenden Code (z.b. 10 = "J") ausgegeben?


    Man spart sich also for/next Schleifen?

  • 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ß.

  • ROM-RAM ist im Prinzip ein Zweizeiler und eine Speichererweiterung, da man nun die oberen 16 kB für Grafik-Daten, Sprites, Zeichensätze, Bildschirme oder Bitmaps nutzen kann.

    Also, den Bereich $E000-$E4D2 sollte man aber nicht überschreiben, weil dort noch der BASIC-Interpreter sitzt. Und wie ist es mit dem restlichen Kernal? Benutzt BASIC nicht auch Teile daraus (z.B. CHRIN und CHROUT)? Ansonsten befinden sich in der oberen VIC-Bank ja noch die Schnittstellen zu VIC, SID und den CIAs. Das Farb-RAM kann auch nicht genutzt werden. Man muss schon ziemlich aufpassen, wo man was speichert.


    Oder sehe ich irgendwas falsch?


    Ansonsten finde ich deine Hacks ziemlich cool. Vor allem der Kettenpoke ist knorke.


    Noch ne Frage: ich verstehe nicht ganz, warum du bei der Installation von ROM-RAM die Bytes 88-91 mit Nullen füllst. Ist wohl für die Kopierroutine. Ist das irgendwie ein Spezialfall? Eigentlich sollten ja dort Start- und Endadresse hinterlegt werden. Dazu hast du leider nichts erklärt.

  • Quote

    Vor allem der Kettenpoke ist knorke.

    der ist cool. Gab's Anno glaub 93 in einer 64'ervon Nikolaus Heusler ohne ROM Kopie.


    Quote

    Also, den Bereich $E000-$E4D2 sollte man aber nicht überschreiben, weil dort noch der BASIC-Interpreter sitzt. Und wie ist es mit dem restlichen Kernal? Benutzt BASIC nicht auch Teile daraus (z.B. CHRIN und CHROUT)? Ansonsten befinden sich in der oberen VIC-Bank ja noch die Schnittstellen zu VIC, SID und den CIAs. Das Farb-RAM kann auch nicht genutzt werden. Man muss schon ziemlich aufpassen, wo man was speichert.



    Oder sehe ich irgendwas falsch?

    Edit: das Kernal bleibt dabei im ROM.

  • Ja, das Füllen mit Nullen, ist für die Kopier-Routine.
    Damit wird der Startzeiger auf 0=65536 gesetzt.
    Ansonsten kann der Nuzter die Konfig mit poke :1,48: bis :poke1,53:poke1,54 oder poke1,55: frei wählen.
    Bei poke1,53 kann man auch das Kernal-ROM ändern.
    Mit poke1,54 werden nur die Änderungen im BASIC-ROM benutzt/angeschaltet.
    Daher kann man die obernen 16 kB dann auch für Grafik oder sonstiges nutzen.
    Bei poke1,53 kann man nur die ersten 3kB ab 49152 frei nutzen. z.B. für einen Zeichensatz oder Sprites.


    Schönen Gruß.

  • ROM-RAM-TRICK
    TASTENBELEGUNG ÄNDERN:

    Die Felder für die Tastendekodierung befinden sich natürlich im ROM-Code und haben eine Länge von 65 Byte:


    Tastenfeld-Adressen: 60281,60283,60285,60287

    Norm-Tasten : 60289

    Shift-Tasten : 60354

    CBM-Taste : 60419

    CTRL-Tasten : 60536


    peek(203): Tastencode der gedrückten Taste

    peek(654): Shift/CBM/CTRL-Taste


    peek(655)ßpeek(656)*256: Adresse der Tastendekodier-Routine

    z.B. poke655,118: Dekodierung aus.


    Mit den oben angeführten Adressen kann die Tastenbelegung im RAM direkt geändert werden oder man verbiegt die Vektoren für die Tastenfelder ab 60281.
    Man kann aber auch mit dem Vektor(655/656) eine anderes Tastendecodierprogramm einbinden.

    Schönen Gruß.