Home
Home
Anfang Zurück Inhalt Weiter Ende
Anfang - Zurück - Inhalt - Weiter - Ende
English Español Italiano
English - Español - Italiano

Anhang D: C64 Spezialbausteine

Dieser Anhang beschreibt die Register der im C64 eingesetzten Spezialbausteine. Er richtet sich an interessierte Programmierer, die fremde C64 Programme analysieren oder selbst neue Programme erstellen wollen. Wenn Sie mit Power64 nur Ihre alten Programme nutzen wollen, brauchen Sie sich um diese Details nicht sorgen.

D.1 VIC 6567 (Video Controller) - D000-D02E

D000: Sprite#0 X-Position (Bits 7…0, Bit 8 ist in D010 enthalten)
D001: Sprite#0 Y-Position (Bits 7…0)
       Die linke, obere Ecke des Bildschirms hat die
       X/Y-Koordinaten 24/50.
D002/D003: wie D000/D001, aber für Sprite#1
D004/D005: wie D000/D001, aber für Sprite#2
D006…D00F: wie D000/D001, aber für Sprites#3…7
D010: Sprite X-Position High Bits
       Ein Bit pro Sprite (Bit 0 für Sprite#0, Bit 1 für Sprite#1…)
D011: Control Register 1
       Bit 7: Bit 8 für D012
       Bit 6: 1: Extended Color Text Modus
       Bit 5: 0: Text Modus       ~ 1: Bitmap Modus
       Bit 4: 0: Bildschirm aus   ~ 1: Bildschirm an
       Bit 3: 0: 24 Zeilen ~ 1: 25 Zeilen/Bildschirm
       Bits 2…0: Soft Scrolling Y-Position
D012: Lesen: Aktuelle Rasterzeile (Bits 7…0, Bit 8 in D011)
       Schreiben: Rasterzeile, die einen Interrupt auslöst
D013: Lightpen X-Pos. (Bits 8…1)
D014: Lightpen Y-Pos. (Bits 7…0)
D015: Sprite aktivieren (Bit 0 für Sprite#0, Bit 1 für Sprite#1…)
D016: Control Register 2
       Bits 7…5: Ungenutzt
       Bit 4: 1: Multi Color Modus
       Bit 3: 0: 38 Zeichen/Zeile ~ 1: 40 Zeichen/Zeile
       Bits 2…0: Soft Scrolling X-Position
D017: Sprite Skalierung - Doppelte Breite
       Ein Bit pro Sprite (Bit 0 für Sprite#0, Bit 1 für Sprite#1…)
D018: Video Address Register
       Bits 7…4: Bits 13…10 des VideoRAM Addr.
       Bits 3…1: Bits 13…11 des CharacterRAM Addr. für Text Modus
       Bits 3:   Bit 13 des Bitmap Addr für Bitmap Modus
       Bit 0:    Ungenutzt
       Bits 15…14 der Addr, sind (negiert) in DD00 (CIA2)
         gespeichert. Die niederwertigen Bits (9/10…0) sind immer 0.
D019: Interrupt Pending Register
       Bit 7: 1: Mindesten ein Interrupt steht an
       Bits 6…4: Unbenutzt
       Bit 3: 1: Lightpen Interrupt
       Bit 2: 1: Sprite/Sprite Kollisions Interrupt (vgl. D01E)
       Bit 1: 1: Sprite/Hintergrund Kollisions Interrupt (vgl. D01F)
       Bit 0: 1: Raster Interrupt (vgl. D012)
D01A: Interrupt Mask Register
       Bits 7…4: Unbenutzt
       Bit 3: 1: Lightpen Interrupt Freigabe
       Bit 2: 1: Sprite/Sprite Kollisions Interrupt Freigabe
       Bit 1: 1: Sprite/Hintergrund Kollisions interrupt Freigabe
       Bit 0: 1: Raster Interrupt Freigabe
D01B: Sprite/Background Priority
       Ein Bit pro Sprite (Bit 0 für Sprite#0, Bit 1 für Sprite#1…)
       0: Sprite ist 'vor' dem Hintergrund
       1: Sprite ist 'hinter' dem Hintergrund
D01C: MultiColor Sprite (Bit 0 für Sprite#0, Bit 1 für Sprite#1…)
D01D: Sprite Skalierung - Doppelte Höhe
       Ein Bit pro Sprite (Bit 0 für Sprite#0, Bit 1 für Sprite#1…)
D01E: Sprite/Sprite Kollisionserkennung
       Ein Bit pro Sprite (Bit 0 für Sprite#0, Bit 1 für Sprite#1…)
D01F: Sprite/Hintergrund Kollisionserkennung
       Ein Bit pro Sprite (Bit 0 für Sprite#0, Bit 1 für Sprite#1…)
D020: Rahmenfarbe
       Alle Farbregister nutzen nur Bits 3…0;
       Bits 7…4 sind unbenutzt.
D021: Hintergrundfarbe
D022: Hintergrundfarbe #1 für Multi Color/Extended Color Modus
D023: Hintergrundfarbe #2 für Multi Color/Extended Color Modus
D024: Hintergrundfarbe #3 für Extended Color Text Modus
D025: Gemeinsame Spritefarbe #0 für Multi Color Sprites
D026: Gemeinsame Spritefarbe #1 für Multi Color Sprites
D027: Spritefarbe für #0
D028: Spritefarbe für #1
D029…D02E: Spritefarbe für Sprites #2…7

Die Zeiger auf die Sprite Bitmaps sind in VideoAddr+03F7…03F8 gespeichert. Ein Byte pro Sprite ergibt die Bits 13…6 der Adresse. Bits 15…14 sind (invertiert) in DD00 Bits 1…0 gespeichert. Bits 5…0 sind immer 0. Die Bitmap besteht aus 21 Zeilen zu je 3 Byte (24 Pixel).

D.2 SID 6581 (Sound Interface Device) - D400-D41C

D400: Stimme#1: Frequenz: Bits  7…0
D401: Stimme#1: Frequenz: Bits 15…8
       Um die Frequenzwerte aus den Registern in die 'echte' Frequenz
       umzurechnen muß man mit (Systemtakt / 2^24) multiplizieren.
D402: Stimme#1: Pulsverhältnis der Rechteckwelle: Bits  7…0
D403: Stimme#1: Pulsverhältnis der Rechteckwelle: Bits 11…8
D404: Stimme#1 Control
       Bits 7…4: Wählt die Wellenform. Es kann immer nur eine
                 Wellenform gewählt werden (keine Mischung)
                 Bit 7: Rauschen
                 Bit 6: Rechteck
                 Bit 5: Sägezahn
                 Bit 4: Dreieck
       Bit 3: Test Bit - 1: Stimme blockieren
       Bit 2: Ringmodulation
       Bit 1: Synchronisation
       Bit 0: Gate: Stimme aktivieren
              Übergang 0->1 startet den Attack-Decay-Sustain-Zyklus
              Übergang 1->0 startet die Release Phase
D405: Stimme#1: Hüllkurvenform
       Bits 7…4: Attack Geschwindigkeit
       Bits 3…0: Decay Geschwindigkeit
D406: Stimme#1: Hüllkurvenform
       Bits 7…4: Sustain Niveau
       Bits 3…0: Release Geschwindigkeit
D407…D40D: wie D400…D406, aber für Stimme#2
D40E…D414: wie D400…D406, aber für Stimme#3
D415: Filter Frequenz: Bits  2…0
D416: Filter Frequenz: Bits 10…3
       Die Grenzfrequenz des Filters ergibt sich als
       30 + 5.8*Registerwert Hz.
D417: Filter/Resonanz Steuerung
       Bits 7…4: Resonanz Intensität
       Bit 3: 1: Filter für externes Signal aktivieren
       Bit 2: 1: Filter für Stimme#3 aktivieren
       Bit 1: 1: Filter für Stimme#2 aktivieren
       Bit 0: 1: Filter für Stimme#1 aktivieren
D418: Filter Steuerung/Lautstärke
       Bit 7: 1: Stimme#3 stummschalten
       Bit 6: 1: Filter arbeitet als Hochpass-Filter
       Bit 5: 1: Filter arbeitet als Bandpass-Filter
       Bit 4: 1: Filter arbeitet als Tiefpass-Filter
       Bits 3…0: Lautstärke
D419: Paddle 1 Position
D41A: Paddle 2 Position
D41B: Aktueller Zustand der Welle von Stimme#3
D41C: Aktueller Zustand der Hüllkurve von Stimme#3

D.3 CIA 6526 (Complex Interface Adapter)
CIA1: DC00-DC0F / CIA2: DD00-DD0F

Dx00: Port A Daten Register
Dx01: Port B Daten Register
Dx02: Port A Daten Richtung Register (0: Eingang ~ 1: Ausgang)
Dx03: Port B Daten Richtung Register (0: Eingang ~ 1: Ausgang)
Dx04: Zähler A Bits 7…0
       Lesen: Aktueller Stand des Zählers A
       Schreiben: Jener Wert mit der der Zähler beim nächsten
       Nulldurchgang geladen wird.
Dx05: Zähler A Bits 15…8
       Lesen: Aktueller Stand des Zählers A
       Schreiben: Jener Wert mit der der Zähler beim nächsten
       Nulldurchgang geladen wird.
Dx06: Zähler B Bits  7…0
Dx07: Zähler B Bits 15…8
Dx08: Tageszeit/Wecker 10tel Sekunde
       Lesen: Tageszeit 10tel Sekunde in BCD Format (Bits 3…0)
       Schreiben, wenn Control Reg. B Bit 7 = 0:
         Tageszeit 10tel Sekunde stellen
       Schreiben, wenn Control Reg. B Bit 7 = 1:
         Alarmzeit 10tel Sekunde stellen
Dx09: Tageszeit/Wecker Sekunde (BCD Format)
       Zugriffe wie Dx08
Dx0A: Tageszeit/Wecker Minute (BCD Format)
       Zugriffe wie Dx08
Dx0B: Tageszeit/Wecker Stunde (BCD Format)
       Bit 7: 0: AM ~ 1: PM
       Zugriffe wie Dx08
       Lesen von Dx0B kopiert die Tageszeit in ein Schattenregister
       Lesen von Dx08 gibt das Schattenregister wieder frei
Dx0C: Serielles Daten Register
Dx0D: Interrupt Control Register
       Bit 7: Lesen: Mindestens eine Interruptquelle ist aktiv.
              Schreiben:
                0: Jedes 1 Bit löscht das entsprechende Maskenbit.
                   Alle anderen Bits bleiben unberührt.
                1: Jedes 1 Bit setzt das entsprechende Maskenbit.
                   Alle anderen Bits bleiben unberührt.
       Bits 6…5: Unbenutzt (immer 0)
       Bit 4: Signal an Pin FLAG
       Bit 3: Serial Data Reg. Voll/Leer
       Bit 2: Tageszeit ist gleich mit Weckzeit
       Bit 1: Zähler B Unterlauf
       Bit 0: Zähler A Unterlauf
       Das Auslesen des Interrupt Control Reg. löscht alle Bits.
Dx0E: Control Register A
       Bit 7: Tageszeit Taktrate: 0: 60 Hz ~ 1: 50 Hz
       Bit 6: Serielle Daten Richtung: 0: Eingang ~ 1: Ausgang
       Bit 5: Zähler A Takt: 0: Systemtakt ~ 1: CNT-Pin
       Bit 4: 1: Laden von Zähler A erzwingen
       Bit 3: 0: Zähler A beginnt nach einem Unterlauf automatisch
                 von vorne
              1: Zähler A hält an, wenn er einmal fertig gezählt hat.
       Bit 2: 0: Jeder Unterlauf von Zähler A gibt an Pin PB6 einen
                 Impuls von einem Taktzyklus Länge aus.
              1: Jeder Unterlauf von Zähler A ändert PB6.
       Bit 1: Unterläufe von Zähler A werden an Pin PB6 angezeigt.
       Bit 0: Zähler A Freigabe: 1: Zählen ~ 0: Stop
Dx0F: Control Register B
       Bit 7: 0: Tageszeit stellen ~ 1: Weckzeit stellen
       Bits 6…5: Zähler B Takt
           00: Systemtakt         ~ 01: CNT-Pin
           10: Zähler A Unterlauf ~ 11: Zähler A Unterlauf bei CNT=1
       Bits 4…0: wie DC0E aber für Zähler B und Pin PB7

DC00: CIA1 Port A
       Bits 7…0: Tastatur Zeilenauswahl
       Bits 7…6: Paddle Set Auswahl (nur ein Bit darf aktiv sein!)
       Bit 4: Joystick#2 Feuer
       Bit 3: Joystick#2 Rechts
       Bit 2: Joystick#2 Links
       Bit 1: Joystick#2 Hinunter
       Bit 0: Joystick#2 Hinauf

DC01: CIA1 Port B
       Bits 7…0: Tastatur Spaltenresultat
       Bit 4: Joystick#1 Feuer
       Bit 3: Joystick#1 Rechts
       Bit 2: Joystick#1 Links
       Bit 1: Joystick#1 Hinunter
       Bit 0: Joystick#1 Hinauf

DC0D: CIA1 Interr. Control Reg.
       Bit 4 (FLAG Pin): Tape Daten Eingang

DD00: CIA2 Port A
       Bit 7: IEC-Bus: DATA Eingang
       Bit 6: IEC-Bus: CLOCK Eingang
       Bit 5: IEC-Bus: DATA Ausgang
       Bit 4: IEC-Bus: CLOCK Ausgang
       Bit 3: IEC-Bus: ATN Ausgang
       Bit 2: RS232: TXD (nur mit RS232 Modul)
       Bit 1…0: Höchstwertige Bits (15…14) der Video Addr.
                (invertiert)

DD01: CIA2 Port B (nur mit RS232 Modul)
       Bit 7: RS232: DSR (Data Set Ready)
       Bit 6: RS232: CTS (Clear to Send)
       Bit 4: RS232: DCD (Data Carrier Detect)
       Bit 3: RS232: RI  (Ring Indicator)
       Bit 2: RS232: DTR (Data Terminal Ready)
       Bit 1: RS232: RTS (Request to Send)
       Bit 0: RS232: RXD (Receive Data)

DD0D: CIA2 Interr. Control Reg.
       Bit 4 (FLAG Pin): RS232: RXD (nur mit RS232 Modul)

D.4 CPU 6510 Port

0000: CPU Port Daten Richtungs Register: 0: Eingang ~ 1: Ausgang
0001: CPU Port Daten Register
       Bits 7…6: Nicht vorhanden
       Bit 5: Tape: Motor (invertiert)
       Bit 4: Tape: Play Taste
       Bit 3: Tape: Daten Ausgang
       Bits 2…0: Auswahl der Speicherkonfiguration
              Lesen: $A000-BFFF  $D000-DFFF  $E000-FFFF
                000:     RAM         RAM         RAM
                001:     RAM         ROM         RAM
                010:     RAM         ROM         ROM
                011:     ROM         ROM         ROM
                100:     RAM         RAM         RAM
                101:     RAM         I/O         RAM
                110:     RAM         I/O         ROM
                111:     ROM         I/O         ROM

          Schreiben: $A000-BFFF  $D000-DFFF  $E000-FFFF
                0xx:     RAM         RAM         RAM
                100:     RAM         RAM         RAM
                101:     RAM         I/O         RAM
                11x:     RAM         I/O         RAM
Home Anfang Zurück Inhalt Weiter Ende Top of Page

Quelle: http://www.infinite-loop.at/Power64/Documentation/Power64-LiesMich/AD-Spezialbausteine.html
Power64 Homepage: http://www.infinite-loop.at und http://www.salto.at - EMail:
© Roland Lieger, Goethegasse 39, A-2340 Mödling, Österreich
Letzte Änderung: 29. Feb. 2008
Valid HTML 4.01!