Zeropage
Die ersten 256 Byte im Speicher (entspricht einer Page), also der Bereich von 0 bis 255 bzw. $0000-$00FF, wird auch Zeropage (Page 0 bzw. Seite 0) genannt (siehe auch Speicherbelegungsplan). Bei den Prozessoren der 6502-Familie (wie dem im C64 verbauten 6510) kommt der Zeropage eine besondere Bedeutung zu, da zur Adressierung einer Speicherzelle nur ein Byte gebraucht wird (das High-Byte ist definitionsgemäß 0). Befehle mit Zeropage-Adressierung sind daher besonders kompakt und schnell. Außerdem müssen die Pointer für die indirekte Adressierung in der Zeropage liegen (ausgenommen beim indirekten JMP-Befehl). Somit kann die Zeropage als eine Art externe Registererweiterung angesehen werden.
Nur die Speicherstellen $00, $01 in der Zeropage und danach der Bereich $0100-$01FF (Page 1) haben eine durch die Hardware vorgegebene Funktion; die anderen Speicherstellen werden vom KERNAL bzw. von BASIC benutzt und bekommen dadurch ihre jeweilige Bedeutung.
Maschinensprache-Programme müssen für zeigerbasierte Adressierung Zeropage-Adressen benutzen. Sollen parallel Funktionen aus dem KERNAL oder Basic-Interpreter (z.B. zur String-Ausgabe) verwendet werden, dürfen die entsprechenden Zeropage-Adressen nicht verwendet werden. Empfohlen wird deshalb in der Regel die Nutzung von 251/$FB bis 254/$FE. Werden Interrupt-Routinen benutzt, muss man darauf achten, dass es zu keiner Kollision bei der Nutzung der Zeropage-Adressen kommt: Je nach verwendeter Interrupt-Routine sind bestimmte Zeropage-Adressen nämlich schon in Benutzung und stehen somit für eigene Programme nicht mehr zur Verfügung. Dies gilt insbesondere auch für Musikroutinen, die beispielsweise neben dem eigenen Programm Musik im Hintergrund ablaufen lassen.
Erweiterte Zeropage
Dieser Bereich unmittelbar nach der Zeropage beginnend mit Page 1 erstreckt sich bis inklusive Page 3 und wird einfacherweise auch erweiterte Zeropage (engl. extended zeropage) genannt. Dieser Begriff ist aber technisch nicht genau spezifiziert. [1]
Neben der durch die Hardware festgelegten Zuordnung der Page 1 als Prozessor-Stapel und diverser Zweitnutzung gewisser Bereiche darin, folgen danach die Systemvariablen des BASIC-Interpreters und des KERNALs.
Belegung der Zeropage (0/$00-255/$FF) des C64[Bearbeiten | Quelltext bearbeiten]
Hex-Adresse | Dez-Adresse | Normalwert | Beschreibung |
$00 | 0 | 47 | Datenrichtungsregister für MOS 6510 Prozessorport (0 Eingang; 1 Ausgang) |
$01 | 1 | 55 | Prozessorport
|
$02 | 2 | unbenutzt | |
$03-$04 | 3-4 | 170,177 ($B1AA) | Vektor für Umwandlung Fließkommazahl nach Ganzzahl (Low/High-Byte), wird von den ROM-Routinen nicht benutzt |
$05-$06 | 5-6 | 145,179 ($B391) | Vektor für Umwandlung Ganzzahl nach Fließkommazahl (Low/High-Byte), wird von den ROM-Routinen nicht benutzt |
$07 | 7 | 34 | Suchzeichen (kann über BASIC-Programme genutzt werden) |
$08 | 8 | 34 | Hochkomma-Flag: Anführungszeichen am Ende einer Zeichenkette und zu BASIC-Texteingaben; Umwandlung von BASIC-Befehlen in Tokens |
$09 | 9 | 0 | Speicher für die Cursor-Position nach Ausführen des BASIC-Befehls TAB( oder SPC( |
$0A | 10 | 0 | Interpreter-Flag: 0 = LOAD; 1 = VERIFY wird benötigt zur Unterscheidung des ausgeführten Befehls wegen identischer Routinen |
$0B | 11 | 0 | Eingabepufferzeiger, Anzahl der Elemente (DIM), Länge der Token-Zeile |
$0C | 12 | 0 | DIM-Flag: Für neue Dimensionierungen |
$0D | 13 | 255 | Variablentyp-Flag: 0 numerisch; 255 Zeichenkette |
$0E | 14 | 0 | Zahlenvariablen-Flag: 0 Fließkomma; 128 Ganzzahl |
$0F | 15 | 0 | Flag: DATA-Zeilen lesen / ausführen von LIST; Merker für die Durchführung einer Garbage Collection |
$10 | 16 | 0 | FN-Flag: Unterscheidung Funktionsvariable zu Feldvariable |
$11 | 17 | 0 | Flag: Verzweigt zu 0 = INPUT, 64 = GET oder 152 = READ |
$12 | 18 | 0 | Vorzeichen-Flag: Überprüft vor Aufruf von Funktionen das Vorzeichen, Merker bei Vergleichsoperatoren |
$13 | 19 | 0 | Aktuelle Eingabe-Dateinummer: 0 = Standardeingabe (Tastatur), > 0 = eine andere geöffnete Datei |
$14 - $15 | 20 - 21 | 0 - 0 | Integer-Adresse/Ganzzahlige Werte für die Befehle ON, GOTO, GOSUB und LIST |
$16 | 22 | 25 ($19) | Zeiger auf das nächste freie Element des String-Descriptor-Stacks |
$17 - $18 | 23 - 24 | Temporärer Zeiger auf Descriptor der zuletzt verwendete Zeichenkette | |
$19 - $21 | 25 - 33 | String-Descriptor-Stack: max. 3 String-Descriptoren bestehend jeweils aus Längenbyte+Adressenbytes. | |
$22 - $25 | 34 - 37 | Hilfszeiger des Interpreters | |
$26 - $2A | 38 - 42 | Fließkommaergebnis der Multiplikation und Division | |
$2B - $2C | 43 - 44 | 1,8 ($0801) | Zeiger auf die Startadresse des BASIC-Programmspeichers |
$2D - $2E | 45 - 46 | 3,8 ($0803) | Zeiger auf das BASIC-Programmende bzw. Beginn des BASIC-Variablenspeichers (Low-Byte) |
$2F - $30 | 47 - 48 | Zeiger auf den Beginn der BASIC-Variablenfelder | |
$31 - $32 | 49 - 50 | Zeiger auf das Ende der BASIC-Variablenfelder (eins nach dem letzten verwendeten Byte). Markiert den freien Basic-Speicher bis hin zu $33/$34. Bei String-Felder ist im Bereich für BASIC-Variablenfelder nur der String-Descriptor enthalten und die Inhalte der Zeichenketten sind in einem gesonderten Zeichenkettenbereich (String-Heap) abgelegt (siehe $33/$34). | |
$33 - $34 | 51 - 52 | Zeiger auf die Untergrenze des Zeichenkettenbereichs (String-Heap). Bewegt sich von $37/$38 ausgehend hin zu niedrigeren Adressen (höchstens bis $31/$32). | |
$35 - $36 | 53 - 54 | Hilfszeiger für Zeichenketten | |
$37 - $38 | 55 - 56 | 0,160 ($A000) | Zeiger auf BASIC-RAM-Ende |
$39 - $3A | 57 - 58 | Momentan ausgeführte BASIC-Zeilennummer; Direktmodus aktiv wenn $3A den Wert 255 enthält (aus Sicht eines BASIC-Programms, nicht zwingend aus Interrupt[2]) | |
$3B - $3C | 59 - 60 | 0,0 | Vorherige BASIC-Zeilennummer, Flag für CONT bei RUN/STOP bzw. STOP |
$3D - $3E | 61 - 62 | 0,0 | Zeiger für CONT |
$3F - $40 | 63 - 64 | Momentan gelesene DATA-Zeile | |
$41 - $42 | 65 - 66 | Zeiger für das nächste DATA-Element | |
$43 - $44 | 67 - 68 | Zeiger auf Eingabequelle für INPUT, GET und READ | |
$45 - $46 | 69 - 70 | Aktuell genutzter Variablenname | |
$47 - $48 | 71 - 72 | Zeiger für aktuelle Variable | |
$49 - $4A | 73 - 74 | Variablenzeiger für FOR-NEXT-Schleife, sowie Zwischenspeicher für 2. und 3. Parameter des WAIT-Befehls. | |
$4B - $4C | 75 - 76 | Zwischenspeicher für Programmzeiger bei mathematischen Berechnungen oder Nutzung von READ | |
$4D | 77 | Maske für Vergleichsoperationen Kleiner, Größer oder Gleich | |
$4E - $4F | 78 - 79 | Zeiger für FN | |
$50 - $52 | 80 - 82 | Hilfszeiger für Zeichenketten | |
$53 | 83 | 3 | Startwert der Descriptor-Länge in Variablen und String-Descriptor-Stack bei der Garbage Collection |
$54 | 84 | 76 ($4C) | Konstanter Wert (Opcode des Assemblerbefehls JMP für folgenden Sprungvektor) |
$55 - $56 | 85 - 86 | Sprungvektor für Funktionen | |
$57 - $5B | 87 - 91 | Register für TAN (Akku #3) | |
$5C - $60 | 92 - 96 | Register für TAN (Akku #4) | |
$61 - $66 | 97 - 102 | Fließkomma-Akku #1, FAC
| |
$67 | 103 | Zeiger Polynomauswertung | |
$68 | 104 | Fließkomma-Akku #1: Überlauf; Runden | |
$69 - $6E | 105 - 110 | Fließkomma-Akku #2, ARG
| |
$6F | 111 | Ergebnis des Vorzeichenvergleichs Fließkomma-Akku #1 zu #2 | |
$70 | 112 | Fließkomma-Akku #2: Runden | |
$71 - $72 | 113 - 114 | Zeiger für Polynomauswertung (Low-/High-Byte) | |
$73 - $8A | 115 - 138 | CHRGET-Routine, holt nächstes Zeichen/Byte aus BASIC-Text; mit:
| |
$8B - $8F | 139 - 143 | Letzter Wert von RND / Startwert des Zufallsgenerators | |
$90 | 144 | 0 | Statuswort ST (STATUS) |
$91 | 145 | 255 | Flag für die Tasten RUN/STOP und RVS ON bzw. RVS OFF , sowie hilfsweise Abfrage des Joystickports #1 |
$92 | 146 | Zeitkonstante für Kassettenbetrieb | |
$93 | 147 | 0 | Letzter Lesebefehl (0=LOAD, 1=VERIFY) |
$94 | 148 | Flag für IEC-Bus (serieller Ausgang) zurückgestelltes Zeichen | |
$95 | 149 | zurückgestelltes Zeichen für IEC-Bus | |
$96 | 150 | Flag für Kassettenende (EOT) bzw. Kassettenmotorflag (Byte 0 = Motor ausgeschaltet) | |
$97 | 151 | Zwischenspeicher für Register | |
$98 | 152 | Anzahl der geöffneten Files (Dateien) | |
$99 | 153 | aktuelles Eingabegerät (normale Gerätenummer: 0) | |
$9A | 154 | aktuelles Ausgabegeräte für CMD (normale Gerätenummer: 3) | |
$9B | 155 | Paritätsbyte für Kassettenbetrieb | |
$9C | 156 | Flag für Byte empfangen | |
$9D | 157 | 128 | Ausgabemodus (normal: 0, plus 64 Betriebssystemmeldungen, plus 128 Direktmodusmeldungen) |
$9E | 158 | Prüfsumme bei Kassettenbetrieb | |
$9F | 159 | Fehlerkorrektur bei Kassettenbetrieb | |
$A0 - $A2 | 160 - 162 | interne Uhr für TI bzw. TI$ (Zählwert 1/60s), $A2 enthält dabei das niedrigstwertige Byte, $A0 das höchstwertige Byte, erhöht von der KERNAL-Routine UDTIM ($FFEA) per IRQ | |
$A3 | 163 | Bit-Zähler bei serielle Ausgabe Flag für (EOI) | |
$A4 | 164 | Zähler bei Bandbetrieb | |
$A5 | 165 | Zähler für Schreiben auf Band | |
$A6 | 166 | Zeiger in Kassettenpuffer | |
$A7 - $AB | 167 - 171 | Flags für Schreiben und Lesen von Kassette
| |
$AC - $AD | 172 - 173 | Zeiger für Kassettenpuffer und Programmstart | |
$AE - $AF | 174 - 175 | Zeiger auf Programmende für LOAD / SAVE | |
$B0 - $B1 | 176 - 177 | Zeitkonstante für Kassette | |
$B2 - $B3 | 178 - 179 | 60,3 ($033C) | Zeiger auf Kassettenpufferstart |
$B4 | 180 | Bit-Zähler Kassette / Band Timer (1 = gesetzt) | |
$B5 | 181 | Band EOT / Nächstes Bit für RS-232 (Senden) | |
$B6 | 182 | RS-232 Bytepuffer | |
$B7 | 183 | Länge des Filenamens (Dateinamens) | |
$B8 | 184 | aktuelle logische Dateinummer | |
$B9 | 185 | aktuelle Sekundäradresse | |
$BA | 186 | aktuelle Gerätenummer | |
$BB - $BC | 187 - 188 | Zeiger auf den Filenamen (Dateiname) | |
$BD | 189 | RS-232 Parität Kassette | |
$BE | 190 | Blockzähler für Kassette | |
$BF | 191 | Wortpuffer für serielle Ausgabe | |
$C0 | 192 | 0 | Flag für Kassettenmotor (0 = aus, 1 = ein) |
$C1 - $C2 | 193 - 194 | Startadresse für LOAD | |
$C3 - $C4 | 195 - 196 | Endadresse für LOAD | |
$C5 | 197 | 64 | gedrückte Taste |
$C6 | 198 | 0 | Zeichenanzahl im Tastaturpuffer |
$C7 | 199 | 0 | Flag für Reverse-Darstellung auf Bildschirm (hat den Wert 18, wenn Reverse-Darstellung an ist, sonst 0) |
$C8 | 200 | Zeiger für Zeilenlänge bei Eingabe | |
$C9 | 201 | Zeiger auf Cursor bei Eingabe (Zeile) | |
$CA | 202 | Zeiger auf Cursor bei Eingabe (Spalte) | |
$CB | 203 | 64 | Momentan gedrückte Taste (64 = keine Taste gedrückt) als Tastaturcode |
$CC | 204 | 1 | Flag für Cursor (0 = blinkt); Normalwert=0 im Direktmodus, 1 im Programm |
$CD | 205 | 0-20 | Countdown bis Wechsel des Blinkzustand des Cursors (invertierend/unsichtbar) |
$CE | 206 | Bildschirmcode des Zeichens unter dem Cursor | |
$CF | 207 | Blinkflag; 0=Cursor aktuell unsichtbar, 1=Cursor aktuell sichtbar/invertierend | |
$D0 | 208 | Flag für Eingabe Tastatur und Bildschirm | |
$D1 - $D2 | 209 - 210 | Zeiger auf Anfang der aktuellen (logischen!) Zeile im Bildschirmspeicher (siehe $F3-$F4 für Farb-RAM) | |
$D3 | 211 | Aktuelle (logische!) Spalte des Cursors (0..79) | |
$D4 | 212 | 0 | Flag für Steuerzeichenmodus (0 = aus; sonst ein, wie z.B. nach Inst/Del oder " ) |
$D5 | 213 | Maximaler Spaltenindex einer logischen Bildschirmzeile (39 oder 79); entspricht 40 oder 80 Zeichen | |
$D6 | 214 | Aktuelle Zeile des Cursors (0..24) | |
$D7 | 215 | letzte Taste | |
$D8 | 216 | Anzahl der ausstehende Inserts | |
$D9 - $F2 | 217-242 | Tabelle mit High-Bytes der Bildschirmzeilenanfänge 26 Bytes, ein Byte pro Bildschirmzeile, Bit 0…6 ist das High-Byte auf Basis des Bildschirm-RAM-Starts in $288/648 und ergibt mit dem Low-Byte aus Tabelle ab $ECF0/60656 die Zeilenstartadresse. Bit 7 gelöscht zeigt an, dass die Zeile mit der Vorzeile eine logisch Zeile länger als 40 Zeichen bildet. $F2/242 steht für eine eine fiktive 26. Zeile bei der Scroll-Routine. | |
$F3 - $F4 | 243 - 244 | Zeiger auf Anfang der aktuellen (logischen!) Zeile im Farb-RAM (siehe $D1-$D2 für Bildschirmspeicher) | |
$F5 - $F6 | 245 - 246 | 129,235 ($EB81) | Zeiger auf Tastaturdekodiertabelle |
$F7 - $F8 | 247 - 248 | Zeiger auf Eingabepuffer RS-232 | |
$F9 - $FA | 249 - 250 | Zeiger auf Ausgabepuffer RS-232 | |
$FB - $FE | 251 - 254 | Freie Bytes in Page 0 für Betriebssystem | |
$FF | 255 | BASIC-Zwischenspeicher |
Belegung der erweiterten Zeropage (256/$100 - 1023/$3FF) des C64[Bearbeiten | Quelltext bearbeiten]
Hex-Adresse | Dez-Adresse | Normalwert | Beschreibung |
Seite 1: $0100-$01FF | |||
$100-$1FF | 256 - 511 | Prozessor-Stack, darin:
| |
Seite 2: $0200-$02FF | |||
$200 - $258 | 512 - 600 | System-/BASIC-Eingabepuffer | |
$259 - $262 | 601 - 610 | KERNAL-Tabelle; Aktive logische Dateinummer | |
$263 - $26C | 611 - 620 | KERNAL-Tabelle; Gerätenummer für jede Datei | |
$26D - $276 | 621 - 630 | KERNAL-Tabelle; Sekundäradresse jeder Datei | |
$277 - $280 | 631 - 640 | Tastaturpuffer | |
$281 - $282 | 641 - 642 | 0,8 ($0800) | Zeiger: Startadresse im RAM für Betriebssystem (Low-/High-Byte) |
$283 - $284 | 643 - 644 | 0,160 ($A000) | Zeiger: Endadresse im RAM für Betriebssystem (Low-/High-Byte) |
$285 | 645 | Flag für Zeitüberschreitung am seriellen Bus (IEC-Bus) | |
$286 | 646 | 14 | Textfarbe (Farbwerte 0-15, danach wiederholen sie sich) |
$287 | 647 | Farbe unter Cursorposition | |
$288 | 648 | 4 | Bildschirmspeicher-Anfang (Seite/Page), nur High-Byte, Normaladr. = $0400 |
$289 | 649 | 10 | Länge des Tastaturpuffers |
$28A | 650 | 0 | Flag: Tastenwiederholung für CRSR , Inst/Del , Space 0; keine Taste 64; alle Tasten 128 |
$28B | 651 | 6 | Geschwindigkeit für Tastenwiederholung |
$28C | 652 | 16 | Verzögerungszeit für Tastenwiederholung |
$28D | 653 | Tastencodes der Steuertasten (addieren sich):
| |
$28E | 654 | Merker für zuletzt gedrückte Steuertaste | |
$28F - $290 | 655 - 656 | 72,235 ($EB48) | Zeiger auf Tastatur-Dekodierung |
$291 | 657 | 0 | Zeichensatzumschaltung via Tastenkombination Shift +C= : mit 128 gesperrt; mit 0 erlaubt |
$292 | 658 | Automatischen Scrollen abwärts ein (nur bei Wert 0) / aus | |
$293 | 659 | Kontrollregister Emulation ACIA 6551 - RS-232 (Übertragungsgeschwindigkeit / Übertragungslänge) | |
$294 | 660 | Befehlsregister Emulation ACIA 6551 - RS-232 für Parität, Duplex und Handshaking | |
$295 - $296 | 661 - 662 | nicht Standard (Bit-Zeit), d.h. frei wählbare Übertragungsgeschwindigkeit vorgesehen, aber nicht eingebaut (Low-/High-Byte) | |
$297 | 663 | RS-232: Statusregister Emulation ACIA 6551: zeigt Abbruch, fehlendes Data-Set-Ready, fehlendes Clear-to-Send, Puffer voll/leer, Fehler bei Parität oder Bit-Folge an | |
$298 | 664 | RS-232: Anzahl der zu übertragenden Bits | |
$299 - $29A | 665 - 666 | Baudrate: Full Bit Time (Mikrosek.) (Low-/High-Byte) | |
$29B | 667 | RS-232: Zeiger auf Ende des Eingabepuffers (receive) | |
$29C | 668 | RS-232: Zeiger auf Start des Eingabepuffers (receive) | |
$29D | 669 | RS-232: Zeiger auf Start des Ausgabepuffers (send) | |
$29E | 670 | RS-232: Zeiger auf Ende des Ausgabepuffers (send) | |
$29F - $2A0 | 671 - 672 | IRQ-Vektor während Datasette-/Kassettenbetrieb (Low-/High-Byte) | |
$2A1 | 673 | RS-232 / CIA 2 NMI-Flag | |
$2A2 | 674 | Temporäre Speicherung für Lesen von Datasette/Kassette (High-Byte) / CIA 1 Timer A | |
$2A3 | 675 | Temporäre Speicherung für Lesen von Datasette/Kassette (IRQs) / CIA 1 IRQ | |
$2A4 | 676 | Temporäre Speicherung für Lesen von Datasette/Kassette (Timer A) / CIA 1 Flag Timer A | |
$2A5 | 677 | Zwischenspeicher für (das Link-Byte beim) Bildschirm-Scrolling | |
$2A6 | 678 | 1 oder 0 | PAL- (1) /NTSC-Flag (0) für C64-Version |
$2A7 - $2BF | 679 - 703 | ungenutzt (89 Byte frei) | |
$2C0 - $2FF | 704 - 767 | Platz für Spritedatenblock 11, da nicht genutzt | |
Seite 3: $0300-$03FF | |||
Basic-Vektoren $0300-$030B (768 bis 779) | |||
$300 - $301 | 768 - 769 | 139,227 ($E38B) | Vektor: BASIC-Fehlermeldungen |
$302 - $303 | 770 - 771 | 131,164 ($A483) | Vektor: BASIC-Warmstart |
$304 - $305 | 772 - 773 | 124,165 ($A57C) | Vektor: Umwandlung von BASIC-Text in Token |
$306 - $307 | 774 - 775 | 26,167 ($A71A) | Vektor: BASIC-Text auflisten / Umwandlung Token in BASIC-Text |
$308 - $309 | 776 - 777 | 228,167 ($A7E4) | Vektor: BASIC-Befehl ausführen |
$30A - $30B | 778 - 779 | 134,174 ($AE86) | Vektor: BASIC-Token-Auswertung / arithmetische Element holen / Vektor für SYS |
$30C | 780 | Speicher 6502 A-Register / Akku für SYS | |
$30D | 781 | Speicher 6502 X-Register / SYS | |
$30E | 782 | Speicher 6502 Y-Register / SYS | |
$30F | 783 | Speicher 6502 P-Register / Status-Register für SYS | |
$310 | 784 | 76 ($4C) | Konstanter Wert (Opcode des Assemblerbefehls JMP für den folgenden USR-Sprungvektor) |
$311 - $312 | 785 - 786 | 72,178 ($B248) | Vektor: Startadresse für den Befehl USR (Low-/High-Byte), vorbelegt mit Fehlerausgaberoutine ?ILLEGAL QUANTITY ERROR |
$313 | 787 | frei | |
$314 - $315 | 788 - 789 | 49,234 ($EA31) | Vektor: Hardware Interrupt (IRQ) |
$316 - $317 | 790 - 791 | 102,254 ($FE66) | Vektor: BRK-Interrupt |
$318 - $319 | 792 - 793 | 71,254 ($FE47) | Vektor: nicht maskierter Interrupt (NMI) |
$31A - $31B | 794 - 795 | 74,243 ($F34A) | Vektor: KERNAL OPEN (F40A)(F34A) |
$31C - $31D | 796 - 797 | 145,242 ($F291) | Vektor: KERNAL CLOSE |
$31E - $31F | 798 - 799 | 14,242 ($F20E) | Vektor: KERNAL CHKIN-Routine; Eingabe (F2C7)(F209) |
$320 - $321 | 800 - 801 | 80,242 ($F250) | Vektor: KERNAL CHKOUT-Routine; Ausgabe |
$322 - $323 | 802 - 803 | 51,243 ($F333) | Vektor: KERNAL CLRCHN-Routine; Wiederherstellung E/A; löschen aller offenen Kanäle |
$324 - $325 | 804 - 805 | 87,241 ($F157) | Vektor: KERNAL CHRIN-Routine; INPUT |
$326 - $327 | 806 - 807 | 202,241 ($F1CA) | Vektor: KERNAL CHROUT-Routine |
$328 - $329 | 808 - 809 | 237,246 ($F6ED) | Vektor: KERNAL STOP-Routine (F770)(F6ED) |
$32A - $32B | 810 - 811 | 62,241 ($F13E) | Vektor: KERNAL GETIN-Routine; GET |
$32C - $32D | 812 - 813 | 47,243 ($F32F) | Vektor: KERNAL CLALL-Routine; CLOSE; Schließen aller offenen Kanäle |
$32E - $32F | 814 - 815 | 102,254 ($FE66) | Benutzer-IRQ / Warmstart-Vektor |
$330 - $331 | 816 - 817 | 158,244 ($F49E) | Vektor: KERNAL LOAD-Routine / RAM laden (F4A5) |
$332 - $333 | 818 - 819 | 221,245 ($F5DD) | Vektor: KERNAL SAVE-Routine / RAM speichern (F5ED) |
$334 - $33B | 820 - 827 | nicht genutzt (8 Byte frei) | |
$33C - $3FB | 828 - 1019 | Datasetten-/Kassettenpuffer (192 Byte) | |
$340 - $37F | 832 - 895 | Platz für Spritedatenblock 13 (nur bei Nichtnutzung des Datasetten-/Kassettenpuffers!) | |
$380 - $3BF | 896 - 959 | Platz für Spritedatenblock 14 (nur bei Nichtnutzung des Datasetten-/Kassettenpuffers!) | |
$3C0 - $3FF | 960 - 1023 | Platz für Spritedatenblock 15 (nur bei Nichtnutzung des Datasetten-/Kassettenpuffers!) | |
$3FC - $3FF | 1020 - 1023 | nicht genutzt |
Einzelnachweise[Bearbeiten | Quelltext bearbeiten]
- ↑ Blog-Posting "MPP 2: Zeropage, oh, Zeropage" von WTE mit Hinweis auf die erweiterte Zeropage
- ↑ Thema: Wie in Interrupt Direktmodus erkennen? auf Forum64.de
- ↑ unusedino.de: BASIC-ROM-Listing: $A4A2/42146: Insert BASIC Text (Verwendung von $01FC-$01FF)
- ↑ unusedino.de: BASIC-ROM-Listing: $ABBF/43967: Perform [input] (Verwendung von $01FF)
Weblinks[Bearbeiten | Quelltext bearbeiten]
- Mapping the C64 - u.a. mit Details zur Zeropage
- Zeropage and extended Zeropage von AAY64
- C64 Memory Map Zeropage und erweiterte Zeropage /
Programmierung-Portalseite
C64-BASIC: BASIC V2 · BASIC-Befehle · Variable