TRICKS mit ROM-RAM

Es gibt 68 Antworten in diesem Thema, welches 16.834 mal aufgerufen wurde. Der letzte Beitrag (28. Januar 2023 um 13:38) ist von BIF.

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

  • Ich finde das ja alles Megaspannend, aber ich bräuchte mal ein Beispielprogramm um es zu verstehen!

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

    Wie sehe das Programm "5. Schnelles Poken von Grafik-Elementen." dann aus?

  • 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 Bitte melde dich an, um diesen Link zu sehen.: 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.

    Bitte melde dich an, um diesen Link zu sehen. (Bitte melde dich an, um diesen Link zu sehen.)Bitte melde dich an, um diesen Link zu sehen.Bitte melde dich an, um diesen Link zu sehen.

    Einmal editiert, zuletzt von WebFritzi (11. Oktober 2020 um 19:00)

  • Zitat

    Vor allem der Kettenpoke ist knorke.

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

    Zitat

    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.

  • Edit: das Kernal bleibt dabei im ROM.

    Das ist schon klar. Aber das ist ja ausgeblendet und wird deshalb von BASIC nicht mehr erreicht. Ich sehe das so, dass wir den Inhalt der ROMs ins RAM kopieren und dann sprichwörtlich die ROM-Chips wegschmeißen.

    Bitte melde dich an, um diesen Link zu sehen. (Bitte melde dich an, um diesen Link zu sehen.)Bitte melde dich an, um diesen Link zu sehen.Bitte melde dich an, um diesen Link zu sehen.
  • Nee durch Poker 1,54 wird nur das Basic ROM im RAM genutzt.

    Dann kann man aber oben nicht das RAM lesen. Um den Bereich geht es. Im Ausgangspost war es außerdem 53.

    Bitte melde dich an, um diesen Link zu sehen. (Bitte melde dich an, um diesen Link zu sehen.)Bitte melde dich an, um diesen Link zu sehen.Bitte melde dich an, um diesen Link zu sehen.
  • Poke 1,53 kommt Basic und Kernal aus dem RAM. Dann ist's mit umgeleiteten Vic natürlich nichts.

    Aber in seinen Anpassungen wurde nur im Interpreter rumgewurstelt.

  • Aber in seinen Anpassungen wurde nur im Interpreter rumgewurstelt.

    Darum geht es doch gar nicht. Es geht um die Aussage, dass man die oberen 16 kB so für alles Mögliche nutzen kann. Ich wollte mit meinem Post auf die Einschränkungen hinweisen.

    Bitte melde dich an, um diesen Link zu sehen. (Bitte melde dich an, um diesen Link zu sehen.)Bitte melde dich an, um diesen Link zu sehen.Bitte melde dich an, um diesen Link zu sehen.
  • Ok. Wenn man weiss was man macht geht das. Schau Mal im 64'er Sonderheft 4/86 Parserprogrammierung da wird gezeigt, wie man den C64 von Basic voll ausschöpft.

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

  • FCIII sagt mir so nichts, da ich es nicht habe.
    Grundsätzlich kann man den Code auch in anderen Speicherbereichen installieren.
    z.B. im Kassettenpuffer und falls erforderlich auch mit :sys(p)a,b,b,b: aufrufen.

    Ansonsten wäre als erstes die Frage, welche Konfig FCIII aktiviert.

    Also welcher Wert in Speicherstelle 1 steht.

    Schönen Gruß.

  • @stefan:
    Das ist wohl wahrscheinlich.

    Wie gesagt müßte man die Konfiguration und Speicherbereiche genau kennen.

    Ansonsten hilft ausprobieren.

    Schönen Gruß.