|
|
|
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.
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).
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
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)
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
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 |