Hallo Besucher, der Thread wurde 15k mal aufgerufen und enthält 68 Antworten

letzter Beitrag von BIF am

TRICKS mit ROM-RAM

  • ROM-RAM

    Da das Thema ROM-RAM grundsätzlich ein unendliches Thema ist,
    hab ich hier noch mal den Thread geöffnet um die Tricks zu dem Thema zu sammeln.

    Hier noch mal eine neue etwas kürzere Variante des beliebten Tricks:

    80 :rem-rom-ram,schirm:52224,satz:53248
    81 :poke56334,.:poke1,51:forj=88to91:pokej,.:next:poke781,97:poke782,.:sys41971
    82 :poke1,53:poke648,204:sys65374:sys58692:poke56576,4:poke53272,54:return


    Die erstmals gepostete Variante:

    150 :rem--rom/ram,bild:52224,satz:53248

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

    152 :poke53248+32*8+6,16:rem--zeichen demo

    153 poke1,53:poke56334,1:poke648,204:sys58692:poke53272,52:poke56576,196:return


    Der Trick beruht grundsätzlich darauf, mit poke1,51 alle ROM-Bereiche einzublenden und dann mit dem Block-Kopier-Programm in einem Zuge ins RAM zu übertragen.
    Anschließend kann dann in Zeile 82 die Konfig in Speicherstelle 1 auf 53, BASIC und KERNAL im Ram gesetzt werden.
    Da mit allen ROM-Bereichen auch das Zeichen ROM(53248) ins RAM kopiert wurde, beide Zeichensätze, ist es nun sogar möglich, den Bildschirm an die Adresse 52224 ims obere RAM zu verlegen, wo dann die ansonsten ungenutzten oberen 16 kB des C64 als Grafik-Speicher genutzt werden können.

    Schönen Gruß.

  • Erklärung der POKE und SYS-Befehle:


    :poke56334,0:poke1,51: Interupt sperren, alle ROM-Bereiche einblenden(BASIC,ZEICHEN1,ZEICHEN2,KERNAL)
    :poke1,53:sys65374: Konfig auf 53, Interupt freigeben

    :sys41971: Block-Kopie
    :sys58692: Schirm löschen
    :poke648,204 : Schirmadresse ab 52224
    :poke56576,4:poke53272,54 : Anzeigeschirm auf 52224:

    Schönen Gruß.

  • Nach dem Ausführen von ROM-RAM hat der Programmierer die Möglichkeit folgende Konfigurationen in Speicherstelle 1 einzustellen:

    poke1,55 BASIC+KERNAL-ROM +IO eingeblendet

    poke1,54 KERNAL-ROM + IO eingeblendet, BASIC im RAM

    poke1,53 KERNAL+BASIC im RAM, IO eingeblendet

    poke1,52 Alles RAM eingeblendet (Interupt sperren)

    poke1,51 KERNAL,BASIC+ZEICHEN-ROM eingeblendet (Interup sperren)

    poke1,48 Alles RAM eingeblendet (Interupt sperren)


    Der Interupt wird gesperrt durch poke56334,0.

    Und eingeschaltet mit poke56334,1.


    Der IO-Bereich befindet sich ab 53248
    53248: VIC-Videokontroller
    54272: SID-Soundchip
    55296: FARB-RAM
    56320: CIA 1 + CIA2


    Jede Konfig hat natürlich seine Besonderheiten.
    Mit poke1,51 kann der User beliebig Pokes ins RAM unter dem ROM und IO-Bereich ausführen.

    PRINT OHNE FARBE
    Als Anwendung wurde z.B. das Printen ohne Farbe im Forum besprochen.
    Bei poke1,51 wird hierbei nicht das Farb-RAM im IO-Bereich beschrieben, sondern die Farbinformationen landen im RAM(55296) darunter.
    Diesen Bereich kann man dann sogar mit Konfig 1,48 auslesen.

    Poke 1,55: ist die Standard-Konfig beim C64.
    Aktiviert man die, werden BASIC- und KERNAL-ROM gelesen, der RAM-Zeichensatz bleibt aber erhalten, IO-Bereich eingeblendet.
    Mit dieser Konfig kann man z.B. den Bereich ab 57344 für eine Grafik-Bitmap(8kB) nutzen.

    Bei poke1,54 wird das BASIC aus dem RAM und das Kernal aus dem ROM gelesen, RAM-Zeichensatz, IO-Bereich eingeblendet.
    Bei poke 1,53 werden BASIC und KERNAL im RAM gelesen, RAM-Zeichensatz, IO-Bereich eingeblendet.

    Schönen Gruß.

  • ROM-RAM-AMWENDUNG
    BASIC-ANFANG RUNTERSETZEN


    Mit dem AHA1-CODE ist es möglich das Basic-RAM um 1024 Basic-Bytes zu erweitern.
    Also die programmierte Erweiterung des Hauptspeichers um 1 kB.
    Er wird direkt nach dem ROM-RAM, bzw. nach dem Bildschirmverlegen ausgeführt.



    Code:

    820 gosub rom-ram:ifpeek(44)=4then:return

    821 :poke210,4:print"@aha@[home]1[runter]pO46,"peek(46)-4":run[home]";:poke44,4

    822 :poke631,13:poke632,13:poke198,2:sys42107



    Der Basic-Anfang wird dabei um 4 Blocks nach unten verlegt, ebenso, wie das gesamte Programm. Ausgeführt wird das durch das Löschen von Zeile 1. Beim Löschen wird das PRG dann um 4 Blocks nach unten kopiert.


    Schönen Gruß.

  • ROM-RAM-ANWENDUNG:
    GRAFIK-FAHNDER:



    Hier noch mal das Programm, das alle 8 Bitmap-Bereiche des C64 anzeigt(Tasten 1-8).
    Als Zugabe ist das ROM-RAM-Prg(Taste +) und die Block-Lösch Routine(Taste -) eingebaut, so daß man bei Seite 6,7,8 sehen kann, welche Speicherbereiche ROM-RAM-Kopie beschreibt. Wobei man besonders die beiden kopierten ROM-Zeichensätze gut erkennen kann.
    Außerdem wird im Listing gezeigt, wie man den Bitmap-Grafikmodus in allen 8 Bereichen einschaltet.

    Schönen Gruß.

  • OK, werde ich gleich mal nachschauen. Im Moment passe ich im RT-Code den Load-Befehl an. Wenn ich jatzt z.B. aus dem RT-Code eine Datei laden möchte, Charset z.B.

    steht der Name ja in Bank $03 oder da, wo sich der P-Code befindet. Zudem kehrt der Load-Befehl nach dem Laden nicht mehr in den RT-Code zurück. Naja, alles noch so Kleinigkeiten,

    aber die halten am meiste auf.

  • Die Bedeutung von ROM-RAM:

    Mit ROM-RAM hat man praktisch die programmierte Speichererweiterung, da der C64-Programmierer nun die oberen 16kB des C64(49152 bis 65535) als Grafik und Bildschirmspeicher nutzen kann.

    Der Standard-Bildschirm-Bereich(1024-2047) wird dadurch frei und kann beispielsweise als Erweiterung des Basic-Programmspeichers genutzt werden.
    Oder für Maschinenprogramme oder als Puffer für Grafikdaten.

    Oder aber natürlich auch für eine Basic-Befehlserweiterung.


    Neben der Grafik-Nutzung kann der Betriebssystem-Programmierer natürlich nun auch das BASIC und KERNAL-Betriebssystem durch Pokes abändern.
    Z.B. um Fehlermeldungen abzuschalten, Fehler zu korrigieren oder zusätzliche Basic-Funktionen freizuschalten.


    Die Grafik-Möglichkeiten sind natürlich im Vergleich zur Standard-Konfig luxuriös.

    Bei 16kB Grafik sind bis zu
    8 Zeichensätze(512B,2kB)
    15 Bildschirme(1kB)

    208 Sprites(64 B)
    oder 1 Hires- oder MC-Grafik-Bitmap

    möglich.


    Und damit steht auch dem Basic-Programmierer die große Welt der C64-Programmierung mit allen Möglichkeiten offen.


    Schönen Gruß.

  • Ich beschäftige mich seit längerer Zeit mal wieder mit meinem C64 ...


    Paradoxon-Basic klingt interessant, ich schaue es mir nachher mal an. Das Sonderheft habe ich noch und das Programm müsste ja auch der 64'er zu finden sein.


    Weiß jemand, ob ich mit Paradoxon-Basic den Basic-Speicheranfang auf $4000 hochsetzen kann, um von $2000 bis eine $4000 eine Bitmap anzuzeigen?