RAM

16 Blöcke aus jeweils vier Pages, die VIC Bank lässt sich im RAM aus vier nebeneinanderliegenden Möglichkeiten wählen. Alle Daten, die hier im VideoChip selbst relevant sind, müssen also innerhalb der gewählten Bank mit 16k Byte liegen. Das betrifft den Bildschirmspeicher, dem Zeichensatz und ggf. Grafiken mit dem dazugehörigen Farbspeicher. Der Farbspeicher im Textmodus ist immer ab Adresse $D800 zu finden.

Informationen stammen aus verschiedenen öffentlichen, frei zugänglichen Quellen mit vergleichbaren Inhalten.

Ich hab ja schon direkt am Anfang für meine erote Stufe den Speicherbereich zwischen $C000 und $CFFF gewählt. Dieser 4k Byte große, vom System her frei verwendbare Speicherbereich liegt hinter dem BASIC ROM und vor den I/O Adressen ab $D000. Im Anschluss daran folgt der KERNAL quasi bis zur letzten Adresse.

Vor dem BASIC ROM liegt der als für BASIC als frei definierte Speicher von ca. 32k Byte also gut der Hälfte des Adressraums. Obwohl ich BASIC nicht wirklich intensiv nutze, und es von Assembler aus problemlos möglich ist diesen gesamten sonst für BASIC reservierten Speicher wie freien Speicher zu nutzen, lasse ich diese Möglichkeit erstmal noch unberührt für diese Überlegung. Vorsicht ist hier nur geboten, wenn sich BASIC und Maschinenspracheroutinen mischen, diese sollten vorzugsweise im freien 4k Bereich ab $C000 liegen, ich hab allerdings nicht vor sowas ernsthaft zu erwägen. Immerhin hab ich inzwischen die Rechenfähigkeiten des BASIC staunend entdeckt und kann also neben dem Editor und üblichen Direktanweisungen also wirklich sinnvolle Anwendungen finden. Um Sound zu produzieren oder Text und Farbe darzustellen, auch Grafik, ist BASIC aus meiner Sicht nach wie vor ungeeignet und beinhaltet dafür auch keinerlei unmittelbare Anweisungen. Befehle wie PEEK, SYS und POKE können hier aushelfen, wie in allen Bereichen, die im Grunde sonst nur und eigentlich Sinnvoll nur in Maschinensprache realisierbar sind bzw. Assembler. Warum? Ganz einfach, es geht um Speicherverbrauch, eine nicht zu leugnende Coolness und Geschwindigkeit.

Es hat keinen Sinn das zu argumentieren, BASIC hat immerhin Vorteile, die sich in Assembler nicht ohne größeren Aufwand umsetzen lassen, und so ist die Maschine schonmal was wert auch wenn absolut keine Software vorhanden ist bzw. der unverszichtbare MONITOR für Maschinansprache.

Alles zu Poken ist sehr aufwändig dagegen, trocken und auch nicht wirklich leicht, wichtig ist nur, dass auch ohne Weiteres von BASIC aus diese Möglichkeit besteht.

Den Speicher von $C000 bis $CFFF zu wählen ist auf jeden Fall erstmal ok, zum einen weil dieser Bereich ja auch erstmal genau dafür vorgesehen ist um Maschinensprache zu nutzen ohne etwas an der Konfiguration des Grundsystems ändern zu müssen, zum anderen reichen 4k Byte für ein Grundverständnis erstmal vollkommen aus, und ich will ja erstmal die Grundkonfiguration des Systems ändern, ggf. das System abschalten und das gesamte RAM adressieren.

Der VIC adressiert im Gegensatz zum Prozessor nicht 64k Byte sondern jeweils nur 16k. Das bedeutet, wenn Daten weiter verteilt im RAM liegen, die der VIC direkt verarbeiten soll, dann muss die Speicherbank gewechselt werden.

Es bestehen vier Speicherbänke von jeweils 16k Byte im gesamten RAM Speicher. Bank 0 beginnt bei $0000 und endet bei $3FFF. Diese Speicherbank nutzt der VIC immer nach dem Einschalten vor allem für das Benutzen von BASIC. Eingeblendet ist hier auch der Zeichensatz aus dem ROM über den Adressen $D000 bis $DFFF.

Das ist eigentlich garnicht kompliziert aber schon aus meiner Sicht sehr ungewöhnlich. Der Prozessor und der VIC greifen also beide selbständig und aus einer völlig anderen Perspektive auf das RAM zu und werden an bestimmten Adressen auch entsprechend verschiedene Inhalte sehen.

Der Zeichensatz kann also für den Prozessor von $D000 bis $DFFF liegen, wenn dieser entsprechend eingeblendet wird. Normalerweise ist der Zeichensatz für den Prozessor garnicht zu sehen. Der VIC hat garkeine Adresse $D000, sein Adressbereich umfasst ausschließlich und immer einen Bereich von $0000 bis $3FFF also 16k Byte, dieser kann aber wie beschrieben an vier verschiedenen Stellen im RAM liegen und deckt ihn damit vollständig ab. Der Zeichensatz und der Bildschirmspeicher werden immer relativ zum VIC adressiert, der Bildschirmspeicher vom Prozessor adressiert bei $0400 in Bank 0, $4400 in Bank 1, $8400 in Bank 2 und $C400 in Bank 3 läge also aus Sicht des VIC immer bei $0400. Ok, ich denke das ist wohl klar wenn auch wohl etwas ungewöhnlich.

Ich kann also Block 3 wählen, damit liegt der Bildschirmspeicher bei $C400 und damit in meinem 4k freien Speicher für Maschinensprache.

Aber wozu soll das gut sein, der Bildschirm umfasst 1000 Byte, damit ist ja 1k Byte schon fest belegt!

Die Überlegung war, dass ich ja schon das Doppelte an Bytes Brauchte.. mindestens.. um mit lda, sta diesen Bereich einmal mit Zeichen zu füllen, kann ich den 1k Bildschirm direkt als Datensatz ins RAM legen, bleiben eben 3k Byte noch übrig für Sound und ggf. Farbroutinen, worum es mir ja bisher hauptsächlich geht.

Ich sag mal

das Modell mit VIC Bank 3 erscheint doch zumindest interessant.