8-Bit Wiki

Amstrad

   

Arcade

   

Atari

   

Commodore

   

Sinclair

Home     Platinen     Schaltpläne     Datenblätter     Handbücher     Signale     Test-Hardware     Programmierung     Public Domain     Story     Online-Tools
Programmierung

Speicherbelegung              Hintergrund-Prozesse              Keyboard


Speicherbelegung

Der RAM Speicher des C64 umfasst 64K Byte. Der wichtigste Chip im C64 ist der Video-Chip VIC-II. Dieser steuert die CPU, den kompletten Bildschirm, stellt die Zeichen, die Sprites und die Bitmap-Grafik dar. Die 64K Byte RAM und das 4K Byte große Character ROM ist für den VIC-II die Quelle von dem was dieser auf dem Bildschirm anzeigen wird. Dieser holt sich die Sprite und Bitmap Daten aus dem RAM, und bei veränderten Zeichensätzen die im RAM lagern, auch die Zeichen aus dem RAM. Das passiert vollkommen automatisch. Doch wie funktioniert dieser automatische Prozess? In dem man dem VIC-II sagt welchen Speicherbereich dieser für die Buchstaben, Sprites und Bitmap-Grafik verwenden soll.

Der VIC-II kann von den 64K RAM des C64 16K nutzen. Diese 16K bezeichnet man als BANK. Davon gibt es 4 Stück, denn 16K geteilt durch 64K sind 4 Bänke. Welche 16K RAM Bank der VIC-II gerade nutzt, steuert der CIA 2 mit seinem PORT A und den Bits 0 und 1.

Um die Steuerung und Programmierung zu vereinfachen, habe ich einen visuellen Speicher-Konfigurator erstellt, mit dem man mit ein paar Mausklicks die gewünschte Speicherbelegung festlegen und sofort dazu der notwendige Code ausgegeben wird:












Hintergrund-Prozesse

Eines der wichtigsten Möglichkeiten des C64 ist es Programmcode zu einer bestimmten Zeit ausführen zu lassen, in dem das Hauptprogramm unterbrochen wird (das nennt man Interrupt) und über eine vorher definierte Sprungadresse zu dem Hintergrund-Programm gesprungen, und anschließend zum Hauptprogramm zurückgekehrt wird.

Hier ist ein Beispiel:




Am häufigsten kommt der sogenannte "Rasterzeilen-Interrupt" zum Einsatz. Dabei wird das Hauptprogramm unterbrochen wenn eine bestimmte Rasterzeile erreicht ist, und man genau dann wichtige Änderungen vornehmen möchte, wie zum Beispiel die Rahmenfarbe zu ändern:

Hier ist ein Beispiel:



So kann auch ein Splitscreen geschaffen werden, bei dem oben eine Bitmap und unten Zeichen/Text angezeigt wird.








C64 Keyboard

Auf der Suche nach einfachen, guten und korrekten Informationen bzgl. der C64 Keyboard Programmierung und wie genau das C64 Keyboard funktioniert, habe ich leider nichts passendes gefunden. Entweder waren die Darstellungen falsch, nicht gut zu lesen, verwirrend oder vollkommen überladen mit endlos vielen Detail-Informationen.

Aus diesem Grund habe ich selbst eine sehr kurze und einleuchtende Erklärung, sowie ein Beispiel erstellt, die die wesentlichen Dinge aufzeigt und erklärt (bitte dazu zuerst das untere Bild betrachten).



Die oberste horizontale Reihe ("Write") stellt den CIA Port A mit den IC Pins 2-9 dar (SPALTE: PA0-PA7).
Mit den folgenden Befehlen schalten wir die CIA Pins 2-9 (PA0-PA7) auf "OUTPUT":

LDA #$FF      ; %11111111 ($FF) (1= OUTPUT, 0 = INPUT)
STA $DC02      ; PA0-PA7 Richtung: "Output"

Die linke vertikale Reihe ("Read") stellt den CIA Port B mit den IC Pins 10-17 dar (REIHE: PB0-PB7)
Mit den folgenden Befehlen schalten wir die CIA Pins 10-17 (PB0-PB7) auf "INPUT":

LDA #$00      ; %00000000 ($00) (1= OUTPUT, 0 = INPUT)
STA $DC03      ; PB0-PB7 Richtung: "Input"


  

Wie das Lesen der C64 Tastatur funktioniert:

// * Alle Pins von PORT A und PORT B sind "HIGH" (interne Pull-Up Widerstände) *

1. In den CIA PORT A wird das BIT 3 auf "LOW" gelegt, dazu schreiben wir in $DC00 eine $F7 (%11110111)

LOOP
    LDA #$F7
    STA $DC00   ; Set BIT 3 "PA3" to "LOW" (COLUMN 3)


2. Vom CIA PORT B wird das ROW Byte von $DC01 gelesen, steht das BIT 4 auf "LOW" (%11101111) ist die Taste "B" gedrückt

    LDA $DC01   ; Read PB0-PB7 ... BIT 4 "LOW"? Yes: Key "B" pressed
    STA $0400   ; print value on screen
    JMP LOOP




Anbei noch ein Bild das zeigt welche "CIA PORT A" PA0-PA7 Spalten (Pins 2-9) zu welchen Tasten gehören:













Imprint/Impressum      Privacy/Datenschutz