Der Speicherplan beschreibt die Funktionen der relevanten RAM-Adressen. Da es sich beim 6502-Prozessor um einen handelt, der keine separaten Ein-Ausgabe-Befehle kennt (I/O-Operations), sind Geräte ebenfalls in den 64KB-Adressraum der CPU eingeblendet. Aus diesem Grund sind auch die I/O-Geräte hier mit aufgeführt.
HILFSWORT
$0
Diese zwei Byte werden von der Reset-Routine beim Speichertest verwendet.
$1
CASINITV
$2
Wurde von Cassette gebootet, und war das Booten erfolgreich, erfolgt ein Sprung an die hier stehende Adresse.
$3
RAMTSTPTR
$4
Auch dieser Pointer wird nur für den Speichergrößentest verwendet.
$5
TMPRAMSIZ
Wird in Verbindung mit Adresse 5 ($5) benutzt, um das Ergebnis des RAM-Tests festzuhalten.
$6
TESTDATA
Hier steht das Datenbyte, das vor Beginn des Speichertests an der gerade zu testenden Stelle stand.
$7
WARMFLAG
Steht hier ein Wert ungleich Null, erfolgt im Normalfall beim Drücken der RESET-Taste nur ein Warmstart.
$8
DOSAKTIV
Hat dieses Byte den Wert Eins, so erfolgt beim Warmstart ein Sprung zur DOS-Initialisierungsroutine in DOSINIT.
$9
DOSVKT
$a
Hier liegt die Startadresse der DOS- oder anderen Boot-Software.
$b
DOSINIT
$c
Sprungadresse zur Initialisierungsroutine des DOS.
$d
BASMEMTOP
$e
Hier steht die höchste, vom Benutzerprogramm zu verwendende Speicheradresse. Darüber liegt in den meisten Fällen der Bildschirmbereich.
$f
IRQEN@
Durch Setzen der jeweiligen Bits können hier die Interruptquellen vom POKEY gesteuert werden. Ist ein Bit gesetzt, so ist die entsprechende Quelle aktiv.
$10
IRQST@
Ist eines der Bits dieses Schattenregisters auf Null, so ist die zugehörige Interruptquelle im POKEY aktiv geworden und es ist der entsprechende Handler aufzurufen.
$11
CLOCK
$12
$13
Dieser Drei-Byte-Wert wird alle 1/50 Sekunde incrementiert, wobei 20 ($14) das niederwertigste Byte ist.
$14
BUFFERADR
$15
Diese Adresse dient den SIO-Routinen als Hilfszeiger bei Diskettenoperationen.
$16
IOCBCMD
Sie dient als Hilfsspeicher bei CIO-Operationen.
$17
DISKFORM
$18
Dies ist ebenfalls ein Hilfszeiger für die Diskettenoperationen.
$19
DISKUTIL
$1a
Für diesen Pointer gilt ähnliches wie für DISKFORM.
$1b
ABUFPTR0
$1c
ABUFPTR1
$1d
ABUFPTR2
$1e
ABUFPTR3
Dies sind Hilfszeiger für rein internen Gebrauch.
$1f
IOCBCHIDZ
In diesem Byte liegt das Erkennungssymbol des anzusprechenden Gerätes an der seriellen Schnittstelle.
$20
IOCBDSKNZ
Bei der Diskettenverarbeitung reicht die Identifikation 'Diskette' in IOCBCHIDZ nicht aus, so daß noch eine Laufwerksnummer übergeben werden muß. Dies geschieht hierdurch.
$21
IOCBCMDZ
Hier liegt das gerade in Arbeit befindliche oder gerade fertig gewordene CIO-Kommando.
$22
IOCBSTATZ
An dieser Adresse legt die CIO-Routine ihre Statusmeldungen ab.
$23
IOCBBUFAZ
$24
Hier liegt die Anfangsadresse des Datenpuffers bei CIO-Operationen.
$25
IOCBPUTBZ
$26
Startadresse-1 der PUT_ONE_BYTE-Routine des entsprechenden Gerätes.
$27
IOCBBUFLZ
$28
Pufferlänge ab IOCBBUFAZ
$29
IOCBAUX1
$2a
IOCBAUX2
$2b
IOCBAUX3
$2c
IOCBAUX4
Hilfsinformationen für die CIOKommandobearbeitung.
$2d
IOCBNUMZ
Nummer des zu benutzenden IOCBs, multipliziert mit 16.
$2e
IOCBCHARZ
Hilfsregister zur Aufnahme des zu übertragenden Zeichens bei CIO-SchreibOperationen ohne Datenpuffer.
$2f
Die folgenden Register sind ausschließlich für den internen Gebrauch bestimmt. Sie dürfen nur benutzt werden, wenn die sie benutzenden Routinen verändert werden, da sonst nichts über den Zustand sowohl der benutzenden Routinen als auch der Variablen selbst ausgesagt werden kann.
DSKSTAT
Statusrückmeldung aus Disketten- oder Cassettenverarbeitung.
$30
DSKCHKSUM
Prüfsummenregister für serielle Übertragung.
$31
DSKBUFPTR
$32
Pufferanfang für Cassetten oder Diskettenoperation.
$33
BUFENDPTR
$34
Zeigt auf das Ende des Disk-Puffers BUFENDPTR.
$35
LOADERTMP
$36
Hilfsregister für den internen Gebrauch des Loaders.
$37
BUFFULL
Ist dieses Flag ungleich Null, so ist der CIO- beziehungsweise SIO-Puffer voll.
$38
RECEIVEND
Ist dieses Flag nicht Null, so bedeutet es, daß die CIO-Routine ihren Empfang beendet hat.
$39
XMITEND
Dieses Flag gibt darüber Auskunft, ob die interruptgesteuerte Senderoutine ihre Aufgabe schon beendet hat.
$3a
CHKSUMSND
Wenn gesetzt, ist die Checksumme bereits gesendet.
$3b
NOCHKSUM
Bei einem Wert ungleich Null wird keine Checksumme gesendet.
$3c
CASBUFPTR
Bytezähler für die Cassettenübertragung. Liegt wertmäßig zwischen Null und CASBUFLIM.
$3d
GAPTYPE
$00: Normale Gaplänge zwischen den einzelnen Blöcken auf einer Cassette.
$80: Extrem langer Gap am Anfang der Cassettenübertragung.
$3e
CASEOF
Ist dieses Byte gesetzt, so hat die Leseroutine der Cassette einen END_OF_FILE-Record gefunden.
$3f
BEEPCOUNT
Hier steht der Parameter für die BEEPWAITRoutine. Er enthält die Anzahl der abzugebenden Huptöne als Erkennung für irgendwelche externen Operationen (z.B. zwei Huptöne: Schalte PLAY und RECORD ein).
$40
IOSOUNDEN
Wenn dieses Byte Null ist, wird die Tonausgabe der seriellen Ein-/Ausgabe unterdrückt.
$41
CRITICIO
Dieses Bit wird dann gesetzt, wenn eine hohe, schnelle Folge von Interrupts erwartet wird (z.B. bei seriellem I/O). Sie bewirkt, daß die Vertical-Blank-Unterbrechungsroutine nur zu einem sehr geringen Teil bearbeitet wird, um somit Zeit zu sparen. Als Seiteneffekt ergibt sich zum Beispiel, daß aufgrund der fehlenden Zählerergebnisse der Autorepeat der Tastatur unwirksam ist.
$42
FILEMNGMT
$43
bis
Interne Pointer für Diskettensteuerung.
$49
ZCHAIN
$4a
Pointer für die Verarbeitung der linearen Liste der IOCBs.
$4b
MONSTATUS
Dieser Status wird von der Monitorverarbeitung benötigt.
$4c
ATTRACT
Ist dieses Byte niedriger als 128 = $80, so erfolgt normale Bildschirmausgabe. Erreicht es den Wert 128, wird es auf 254 gesetzt und bwirkt das Einschalten des sogenannten Attract-Modes.
$4d
ATRACTMSK
$fe: Normale Bildschirmhelligkeit $f6: verringerte Helligkeit
ATRACTMASK ist abhängig von ATTRACT.
$4e
COLREGSH
Dieses Register gehört ebenso wie ATRACTMSK zur Verarbeitung des Attract-Modes. Es erfolgt ein logische Verknüpfung der Farb- und Luminanzregister des ANTIC.
$4f
MONTEMP
$50
Hilfsbyte für Bildverarbeitung.
$51
LFTMARGIN
Wert des linken Randes bei Textdarstellung.
$52
GIGMARGIN
Wert des rechten Randes bei Textdarstellung.
$53
CURSROW
Dies ist die momentane Cursorreihe bei Grafikverarbeitung in dem Bereich von 0 bis 191.
$54
CORSCOL
$55
Cursorspalte bei Grafikverarbeitung in den Bereichen von 0 bis 319.
$56
GRAPHEMUL
Dieser Wert legt fest, in welchem GrafikModus die folgenden Ausgaben stattfinden. Es wird benötigt, um von höheren Programmiersprachen aus leicht mehrere Grafikarten mischen zu können.
$57
SCRNSTART
$58
Adresse des ersten Bildschirmbytes.
$59
OLDGRROW
$5a
OLDGRCOL
$5b
$5c
OLDGRCHR
$5d
OLDGRADR
$5e
Diese Adressen beinhalten alle Daten, die zwischengespeichert werden müssen, wenn zwischen Grafik- und Textverarbeitung während eines Programms umgeschaltet werden soll. Auch diese Adressen sind nur für interne Zwecke bestimmt!
$5f
FKTDEFPTR
$60
Hier steht die Anfangsadresse der 8 Byte langen Tabelle zur Festlegung der Funktionstastenkodes beim 1200XL.
$61
PALNTSC
0: PAL-Fernsehsystem 1: NTSC
$62
AKTCHRNUM
Diese Variable enthält die aktive Cursorposition innerhalb einer logischen Zeile.
$63
ADDRESS
$64
$65
MLTTMP
$66
$67
SAVEADR
$68
Recht häufig intern benutzte Zwischenspeicher für vielfältige Aufgaben.
$69
RAMTOP
Dieses Register hält die Anzahl der im Computer insgesamt zur Verfügung stehenden RAMPages.
$6a
AKTBUFLEN
Hier steht die momentane Größe der aktuellen logischen Zeile.
$6b
BUFSTR
$6c
GETCHARACTER-Pointer des Editors.
$6d
BITMASK
Register für die Verwaltung logischer Zeilen.
$6e
SHFAMT
Ebenfalls für GETCHAR benötigtes Hilfsregister.
$6f
PLOTROWAC
$70
$71
PLOTCOLAC
$72
$73
ENDPOINTR
$74
$75
DELTAROW
$76
DELTACOL
$77
Diese Register werden zusammen mit den zwei weiter hinten stehenden Registern ROWINC und COLINC zur Berechnung von Grafik benutzt (z.B. DRAWTO).
$78
KEYDEFPTR
$79
Dieser Pointer zeigt auf die Tabelle zur Wandlung von Tastaturkode nach ATASCII.
$7a
SWAPFLAG
Ungleich Null zeigt dieses Flag an, daß der Bildschirmvariablenbereich auf Grafik eingestellt ist, Null signalisiert, daß die Variablen für den Bildschirmbereich Referenzen auf Texte darstellen.
$7b
HOLDCHAR
$7c
INSDATA
$7d
COUNTER
$7e
Ebenfalls alles interne Hilfsvariable für die Verwaltung des Bildschirms.
$7f
LOWMEM
$80
Dieser Zeiger weist auf die unterste Adresse, die nicht mehr für Betriebssystemzwecke verwendet wird.
$81
CHECKSUM
$8b
In diesen zwei Byte wird die Prüfsumme über Speicherbereiche gebildet. Da diese Checksumme nur bei der Initialisierungsphase benötigt wird, kann der Wert nach dem Kaltstart zerstört werden.
$8c
DLIVKT
$200
Vektor für die ANTIC-Programm- Unterbrechung. Wenn eine ANTIC-Programm-Unterbrechung ausgelöst wird, wird ein Unterbrechungsprogramm, dessen Adresse in diesen beiden Speicherstellen steht, ausgeführt.
$201
VPRECEDE
$202
Ansprungvektor für von PORT A ausgelösten Interrupt, der eine SERIAL-BUS-PROCEED-Unterbrechung darstellt.
$203
VINTERRUP
$204
Der Interrupt von PORT B signalisiert eine Unterbrechungsanforderung für die serielle Übertragungsunterbrechung. Die letzten beiden Interruptvektoren werden normalerweise vom System ignoriert, da die angeschlossenen Geräte keine Interrupts erzeugen. Die Leitungen sind für spätere Erweiterungen eingeplant.
$205
VBREAK
$206
Die hier stehende Einsprungadresse wird verwendet, wenn die CPU eine BRK-Instruktion ausführt.
$207
VKEYBOARD
$208
Vektor für den Fall, daß eine normale Taste gedrückt wurde.
$209
VSERIELIN
$20a
Es liegt ein Zeichen im SERIN-Register von der seriellen Schnittstelle an.
$20b
VSERREADY
$20c
Das SEROUT-Register ist bereit, ein weiteres Zeichen aufzunehmen.
$20d
VSERCLOSE
$20e
Das parallel/seriell-Wandlungsregister ist leer und die Übertragung wird vom POKEY aus beendet.
$20f
VTIMER1
$210
Signalisiert der POKEY, daß sein Zählerregister 1 auf Null gegangen ist, wird dieser Vektor angesprungen.
$211
VTIMER2
$212
Hier wird hingesprungen, wenn der POKEY im Interrupt signalisiert, daß sein Kanal 2 auf Null heruntergezählt hat.
$213
VTIMER4
$214
Erkennt die Interruptroutine beim POKEY, daß Timer 4 auf Null gezählt hat und ist der entsprechende Interrupt zugelassen, so wird dieser Vektor angesprungen.
$215
VIMMEDIRQ
$216
Hier steht die Adresse des eigentlichen Interrupthandlers, der erst die Verteilung auf die einzelnen Interruptquellen vornimmt.
$217
TIMCOUNT1
$218
Software-Timer 1. Der Wert wird bei jedem Vertical-Blank-Interrupt decrementiert. Ist er danach Null, so wird die bei (TIMER1VKT) stehende Routine ausgeführt.
$219
TIMCOUNT2
$21a
Dies ist ein ähnlicher Softwaretimer wie TIMCOUNT1, nur mit der Einschränkung, daß das Zählen dieses und der folgenden drei Zähler unterbleibt, wenn CRITICIO gesetzt ist.
Wird TIMCOUNT2 Null, so wird die bei (TIMER2VKT) stehende Routine ausgeführt.
$21b
TIMCOUNT3
$21c
Für diesen Zähler gilt das gleiche wie für TIMCOUNT2, nur daß kein Vektor beim Nullwerden angesprungen wird, sondern lediglich Flag TIMER3SIG gesetzt wird.
$21d
TIMCOUNT4
$21e
$21f
TIMCOUNT5
$220
Es gilt das gleiche wie für TIMCOUNT3. Beim Nullwerden des entsprechenden Zählers werden analog dazu die Flags TIMER4SIG respektive TIMER5SIG gesetzt.
$221
VBLKIVKT
$222
Dieser Vertical-Blank-Immediate-Vektor wird beim Strahlrücklaufinterrupt immer als erste Unterbrechungsroutine angesprungen.
$223
VBLKDVKT
$224
Dieser Vertical-Blank-Deferred-Vektor wird von der bei VBLKIVKT stehenden Routine aus angesprungen, wenn CRITICIO gelöscht ist. Die Routine existiert im Normalfall nicht und ist frei vom Benutzer programmierbar.
$225
TIMER1VKT
$226
Ansprungvektor für die User-Routine, die ausgeführt werden soll, wenn TIMCOUNT1 auf Null gegangen ist.
$227
TIMER2VKT
$228
Ansprungvektor für die Behandlungsroutine bei Nullwerden des TIMCOUNT2.
$229
TIMER3SIG
Dieses Flag ist Null, wenn TIMCOUNT3 nicht Null ist, sonst $ff.
$22a
SRTIMER
Wesentlicher, intern benutzter Timer für die Tasaturentprellung, Warten bis zum ersten Autorepeat und danach Bestimmen der Autorepeat-Rate.
$22b
TIMER4SIG
Dieses Flag ist Null, wenn TIMCOUNT4 nicht Null ist, sonst $ff.
$22c
IANTEMP
Temporäres Hilfsregister.
$22d
TIMER5SIG
Dieses Flag ist Null, wenn TIMCOUNT5 nicht Null ist, sonst $ff.
$22e
DMACNTL@
Schattenregister von DMACNTL. DMACNTL schaltet die einzelnen Arten des DMA ein.
$22f
DLPTR@
$230
Schattenregister des Zeigers auf das ANTICProgramm. Der Anfang des ANTIC-Programms muß in dieser Speicherstelle stehen, wenn mit dem Betriebssystem gearbeitet wird.
$231
SKCNTL@
Steuerung der seriellen Übertragung, des Ablesens der Tastatur und des Ablesens der POT-Eingänge.
$232
LCOUNT
Bytezähler für Loader-Routinen.
$233
LPENH@
Schattenregister, Horizontalposition des Lightpens.
$234
LPENV@
Schattenregister, Vertikalposition des Lightpens.
$235
VBREAKKEY
$236
Dies ist der Vektor für die BREAK-TastenVerarbeitung. Nicht verwechseln mit VBREAK, der die BRK-Instruktion der CPU behandelt!
$237
NEUIOINIV
$238
Vektor zur Initialisierungsroutine noch nicht existenter Hardware. Siehe dazu die Betriebssystembeschreibung!
$239
CMDDEVIV
$23a
CMDCMD
$23b
CMDAUX1
$23c
CMDAUX2
$23d
CMDAUX3
$23e
ERRORFLAG
Interne Hilfsvariablen für die Serielldatenverarbeitung.
$23f
DSKFLAG
$240
DSKSECCNT
$241
DSKLDADR
$242
Interne Hilfsvariablen für die reine Diskettenverarbeitung.
$243
COLDSTART
Wird dieses Flag vom Benutzerprogramm auf einen Wert ungleich Null gesetzt, so erfolgt beim Einsprung in die Warmstartroutine ein Kaltstart.
$244
DSKTIMCON
Kontrollregister für die Diskettenverarbeitung. Ein Wert ungleich Null besagt, daß ein Timeout aufgetreten ist.
$246
NEUVORHDN
Flag nur für den internen Gebrauch. Ist zu setzen, wenn externe Geräte am Parallelbus angeschlossen sind. Wird von der dazu mitgelieferten Boot-Software benutzt. Muß im Normalfall Null sein, da sonst das System abstürzen kann!
$247
NEUIODREQ
Auch dieses Flag wird vom Kaltstartprogramm für die Verwaltung der noch zu entwickelnden Hardware benutzt. Es enthält die Adresse des gerade angeprochenen Devices.
$248
NEUIOMASK
$249
NEULDTMP1
$24a
Diese Adressen werden ebenfalls nur dann sinnvoll benutzt, wenn Zusatzhardware am Parallelbus anliegt. Sie dürfen deshalb trotzdem nicht für neue Software verwendet werden.
$24b
CHARSTPTR
Ein-Byte-Pointer für interne Monitorverarbeitung.
$26b
FINESCROL
Temporäres Flag für die Verarbeitung des feinen Scrollings, wobei nicht gleich eine komplette Zeile verschoben wird, sondern die Zeile Punktweise nach oben gesetzt wird.
$26c
KBDISABLE
Besitzt dieses Flag einen Wert ungleich Null, sind Eingaben von der Tastatur nicht mehr möglich.
$26d
FINESCRFL
Wie FINESCROL für die Bildverschiebung verantwortlich.
$26e
GTIACNTL@
Schattenregister für Steuerung des GTIA und Priorität der Spieler und Geschosse.
$26f
PADDL0@
$270
PADDL1@
$271
PADDL2@
$272
PADDL3@
$273
PADDL4@
$274
PADDL5@
$275
PADDL6@
$276
PADDL7@
Schattenregister, enthalten die Werte der Paddle-Eingänge. Beim Atari 600XL und 800XL sind nur die Paddle-Eingänge 0 bis 3 benutzt, die Nummern 4 bis 7 werden von 0 bis 3 kopiert.
$277
JOYSTICK0
$278
JOYSTICK1
$279
JOYSTICK2
$27a
JOYSTICK3
Diese Register enthalten die Stellung der Joysticks (soweit angeschlossen). Bei den neuen Atari-Modellen sind jedoch nur noch zwei Joysticks vorhanden ("0" und "1"), die beiden anderen werden kopiert.
$27b
PTRIG0@
$27c
PTRIG1@
$27d
PTRIG2@
$27e
PTRIG3@
$27f
PTRIG4@
$280
PTRIG5@
$281
PTRIG6@
$282
PTRIG7@
Auslösetasten der Paddles ("0" meldet Taste gedrückt, "1" meldet Taste nicht gedrückt). Da bei den neuen Atari-Geräten nur noch 4 Paddles anzuschließen sind, werden bei diesen nur PADDLE0 bis PADDLE3 sinnvoll verwendet, die anderen werden kopiert.
$283
TRIG0@
$284
TRIG1@
$285
TRIG2@
$286
TRIG3@
Auslösetasten der Joysticks beziehungsweise Schattenregister der GTIA-Register für die Triggereingänge ("0" meldet Taste gedrückt, "1" meldet Taste nicht gedrückt). Bei den neuen Atari-Geräten sind nur TRIG0 und TRIG1 mit Joystick-Ports verbunden, die anderen zwei Werte sind Kopien der ersten beiden.
$287
HIBYTELD
Zwischenregister für den LOADER.
$288
WRITEMODE
Flag für die Cassettenverarbeitung. Es zeigt an, ob die momentane Operation ein Schreiben ($80) oder Lesen ($00) beinhaltet. Nur für internen Gebrauch.
$289
CASBUFLIM
$28a
Wert des Pufferendes für Cassettenoperationen.
$28b
NEUIOPTR
$28c
Pointer auf die Startadresse der I/O-Verarbeitung der neuen Hardwarezusätze am parallelen Bus.
$28d
NEWADRLOD
$28e
Ladeadresse für I/O mit der neuen Zusatzhardware.
$28f
TEXTROW
$290
TEXTCOL
$291
$292
TEXTINDEX
$293
TEXTMSC
$294
$295
TEXTOLD
$296
$297
TEXTGRAD
Variablen zur Verarbeitung von Text/Grafikgemischten Bildschirminhalten.
$29a
CRETRY
Dies ist die Maximalzahl der Wiederholungen des Versuches, ein Kommando auf einem sich zurückmeldenen Gerät abzusetzen. Der Wert steht auf 1, so daß eine Wiederholung stattfindet. Mehr ist hierbei auch nicht sinnvoll, denn es ist davon auszugehen, daß ein Gerät, das sich ordentlich zurückmeldet, im Normalfall auch in der Lage ist, ein richtiges Kommando auszuführen. Gelingt dies nicht, sind das Kommando oder aber Voraussetzungen für die richtige Ausführung nicht in Ordnung.
$29c
SUBTEMP
$29e
HOLD2
Hilfsvariablen für interne Verwendung.
$29f
DISPLYMSK
$2a0
TEMPLBT
$2a1
ESCAPEFLAG
Weitere Variablen zur reinen Textverarbeitung mit Screen oder Editor.
$2a2
TABMAP
$2a3
bis
Tabelle, in der jedes einzelne Bit eine Cursorposition innerhalb einer logischen Zeile auf dem Bildschirm darstellt. Ist ein Bit gesetzt, so gilt diese Position als Tabulator-Haltestelle.
$2b1
LOGICMASK
$2b2
bis
Tabelle für die Zusammenhänge von logischer und physikalischer Zeile auf dem momentan angezeigten Bildschirm. Wird intern benötigt, um beim Löschen einer Zeile immer eine komplette logische Zeile löschen zu können.
$2b5
XORKEYMSK
Diese Variable wird verwendet, um die Funktionalität von Tastengruppen der Tastatur abändern zu können.
Jedes gesetzte Bit in diesem Byte gibt an, daß das entsprechende, vom POKEY gelieferte Datenbit aus dem Tastaturkode invertiert werden soll. So können ganze Tastaturreihen in andere umgewandelt werden. Es muß im Einzelnen herausgefunden werden, in wieweit diese Funktion gewinnbringend eingesetzt werden kann. Es ist jedoch zu beachten, daß diese Invertierung der jeweiligen Bits mit dem Tastaturkode geschieht, also bevor der gelesene Wert in einen ATASCII-Wert umgewandelt wird.
$2b6
DRETRY
Hier steht die Anzahl, mit der der Versuch wiederholt wird, ein spezifiziertes Gerät anzusprechen. Der Wert ist im Normalbetrieb auf 13 Wiederholungen eingestellt.
$2bd
SHIFTLOCK
Dieses Label gibt Auskunft darüber, ob irgendwelche Sonderbedingungen bei der Eingabe zu beachten sind:
$00: Kleinbuchstaben aktiv (Schreibmaschinenmodus)
$40: Nur Großbuchstaben (Normalmodus)
$80: CONTROL-Taste gedrückt.
$2be
NUMNXTLIN
Dieses Register beinhaltet die Anzahl der auf dem Bildschirm verarbeiteten Textzeilen.
Das Register kann die Werte 24, 4 oder 0 annehmen, andere werden vom Betriebssystem ignoriert.
$2bf
COLPM0@
$2c0
COLPM1@
$2c1
COLPM2@
$2c2
COLPM3@
Schattenregister der Farbregister für die Spieler beziehungsweise Geschosse.
$2c3
COLPF0@
$2c4
COLPF1@
$2c5
COLPF2@
$2c6
COLPF3@
$2c7
COLBAK@
Schattenregister der Farbregister für die Spielfeldfarben beziehungsweise des Hintergrundes.
$2c8
RUNADRLOD
$2c9
$2ca
HIUSEDLOD
$2cb
$2cc
LODZHIUSE
$2cd
$2ce
LODGBYTEA
$2cf
$2d0
LODADRESS
$2d1
$2d2
LODZLOADA
$2d3
Diese Variablen werden für interne Verwaltungsaufgaben beim Programmladen der später einmal am hinteren parallelen Bus anzuschließenden Hardware verwendet.
$2d4
DSKSECLEN
$2d5
Dieser Wert kann normalerweise $0080 oder $0100 sein, je nach Diskettenformat.
$2d6
ACMISR
$2d7
Findet interne Verwendung.
$2d8
KEYRPDELY
Dieser Wert bestimmt die Zeit zwischen dem Drücken einer Taste und dem ersten Zeichen des Autorepeat. Standardwert ist 40.
$2d9
KEYREP
Im Gegensatz zu KEYRPDELY bestimmt dieser Wert bei einsetzendem Autorepeat die Wiederholrate nach dem ersten Auto-Zeichen. Standardwert ist 5.
$2da
CLICKDISA
Wenn ungleich Null, ist der Tastaturklick abgeschaltet.
$2db
HELPFLAG
Dieses Register ist beim 600XL/800XL 'Entwicklungsschrott', da es angibt, ob die in diesen Geräten nicht eingebaute HELP-Taste gedrückt ist. Darf trotzdem nicht verwendet werden, da unter Umständen Schreibzugriffe darauf programmiert sind.
$2dc
DMASAVE
Statusinformation des Direkten Speicherzugriffs. Hat für normalen Benutzer keinen Nutzen, darf aber nicht anderweitig benutzt werden.
$2dd
PRTBUFPTR
Gibt Bytenummer innerhalb des Printerpuffers an.
$2de
PRTBUFSIZ
Ist maximale Printerpuffergröße in Byte.
$2df
RAMSIZE
Anzahl der zur Verfügung stehenden RAM-Pages des Systems.
$2e4
MEMTOP
$2e5
Dies ist ein Zeiger auf die Obergrenze des vom Benutzer verwendbaren Speicherraumes. Darüber liegt im Normalfall der Bildschirm.
$2e6
MEMLO
$2e7
Dies ist der Zeiger auf die Untergrenze des vom Benutzer frei zu verfügenden Speicherraumes. Er liegt normalerweise direkt über den Betriebssystemvariablen, respektive dem DOS, eventuell noch mit DUP.
$2e8
HNDLRLOAD
$2e9
DEVICSTAT
$2ea
$2eb
CHAINTMP
$2ec
Hilfsvariablen für den internen Gebrauch bei der Verwaltung linearer Listen und darüber laufender Ladevorgänge mit noch nicht existenter Hardware.
$2ed
CASSPEED
$2ee
Zeitwerte für die Senderate über Cassette.
$2ef
CURSORINH
Auf einem Wert ungleich Null, verhindert diese Variable die Anzeige des Cursors.
$2f0
KEYDELAY
Dieser Wert, der standardmäßig auf 3 eingestellt ist, bestimmt die Zeit zwischen dem Loslassen einer Taste und dem Drücken einer neuen Taste, so daß deren Kode übernommen wird. Bei extrem schnellen 'Tippern' (und 'Tipperinnen') sollte dieser Wert verkleiner werden. Das verhindert Ärger mit fehlenden Zeichen beim Programmieren.
$2f1
CHARCNTL@
Schattenregister, steuert das Aussehen der Zeichen in mehreren Schrift-Modi des ANTIC.
$2f3
CHARBASE@
Schattenregister, enthält Basisadresse des Zeichengenerators (oberes Byte)
$2f4
NEWGRROW
$2f5
NEWGRCOL
$2f6
Hier werden die Werte für einen DRAWTO-Befehl vor dessen Aufruf festgelegt.
$2f7
ROWINC
$2f8
COLINC
$2f9
Diese Variablen werden zum Berechnen der Bahnen eines DRAWTO benutzt.
$2fa
ATASCICHR
Letztes eingegebenes Zeichen im ATASCII-Kode. Fast ausschließlich für interne Zwecke benutzt.
$2fb
KBCODE@
Schattenregister, enthält den Tastaturcode, das heißt, welche Taste gedrückt wurde.
$2fc
FILEDAT
Für die interne Benutzung des Grafiksystems reserviert.
$2fd
DISPLYFLG
Ist dieses Flag ungleich Null, so wird das folgende Zeichen, wenn es ein Kontrollzeichen ist, nicht ausgeführt, sondern der entsprechende ATASCII-Kode ausgegeben.
$2fe
STARTSTOP
Ist dieses Byte gleich $ff, so storniert die Bildschirmausgabe, bei $00 geht sie weiter. das Flag wird durch Drücken von CONTROL & '1' verändert. Wichtig ist, daß bei der momentanen Betriebssystemimplementierung das System 'steht', wenn es auf das Nullwerden von STARTSTOP wartet. Nur wesentliche Interrupts werden durchgelassen, die eigentliche Rechenarbeit wird jedoch ebenfalls mit dem Output angehalten.
$2ff
Im Folgenden werden die wesentlichen vom Disk-Handler benutzten Variablen beschrieben. Sie sind größtenteils bei Diskettenverarbeitung selbst zu belegen, es sei denn, die Programmierung erfolgt in einer höheren Sprache, wie zum Beispiel BASIC oder PASCAL.
DSKDEVICE
Allgemeiner Erkennungskode für die Disketten($30) beziehungsweise Cassettenstation ($60).
$300
DSKUNIT
Bei Diskettenverarbeitung die Nummer der anzusprechenden Diskettenstation.
Erlaubt sind hier Werte im Bereich von $01 bis $09, wobei bei der heutigen Hardware nur $01 bis $04 sinnvoll, weil kaufbar sind.
$301
DSKCMD
Auszuführendes Kommando. Siehe dazu ZeropageIOCBs ab IOCBCHIDZ.
$302
DSKSTATUS
Zurückgemeldeter Status der Operation. Siehe dazu ebenfalls IOCBSTATZ.
$303
DSKBUFFER
$304
Anfangsadresse des Datenpuffers.
$305
DSKTIMOUT
$306
Anzahl der Sekunden bis zur TimeoutFehlermeldung.
$307
DSKBYTCNT
$308
Anzahl der im Puffer ab DSKBUFFER zur Verfügung stehenden Bytes.
$309
DSKAUX1
$30a
DSKAUX2 Hilfsinformationen für die Diskettenverarbeitung. Bei OPEN-Befehlen stehen hier besondere Merkmale (z.B. Nur-Lese-Zugriff).
Bei Schreib- beziehungsweise Leseoperationen steht hier in DSKAUX1 und -2 die Blocknummer von $01 bis MAXBLOCK.
$30b
INTERVTI1
$30c
Intervalltimer 1, bildet mit INTERVTI2 eine Einheit.
$30d
OPTIONJMP
Diese Adresse ist offiziell von Atari als belegt gekennzeichnet, ist jedoch nirgendwo im Betriebssystem verwendet. Sie soll für spätere Hardware irgendeine Vorentscheidung treffen. Es empfiehlt sich im Hinblick auf spätere Softwarekompatibilität, diese Variable nicht zu verwenden.
$30e
CASFLAG
Ist dieses Flag nicht Null, handelt es sich um eine Cassettenoperation. Nur für internen Gebrauch.
$30f
INTERVTI2
$310
INTERVTI1 und -2 werden benutzt, um die Lesegeschwindigkeit bei Cassettenoperationen zu bestimmen.
$311
CHAINTP1
$312
Hilfspointer für lineare-Listenverwaltung.
$313
PTIMOUT
Timeoutwert für Druckbefehle.
$314
TIMEFLAG
Timeoutwert für die Lesegeschwindigkeitsbestimmung.
$317
STACKSAVE
Hilfsregister für das Retten des Stackpointers bei SIO-Operationen.
$318
TEMPSTAT
Register für kurzzeitiges Zwischenspeichern von SIO-Statusinformationen.
$319
HATABS
$31a
bis
Tabelle für die Zuordnung von Geräten zu deren Handlern. Jeder Tabelleneintrag besteht aus drei Byte: Dem Namen (1) und der Handlertabellenstartadresse (2). Es sind die Geräte Cassette, Editor, Screen, Drucker und Keyboard vorgegeben. Ein Eintrag ist dann leer, wenn sein Name Null ist.
$33f
IOCB0
$340
bis
Ab dieser Adresse stehen 8 IOCB-Einträge zur Verfügung, von denen Eintrag 0 bereits vom System für die Editorverarbeitung verwendet
wird. Die einzelnen Einträge bitte aus der Zeropage-IOCB-Beschreibung ersehen, die ab IOCBCHIDZ steht. Bei Verwendung eines dieser IOCBs wird davor der Inhalt aus diesen Registern in die Zeropage kopiert, um sie danach wieder zurückzutransportieren.
$34f
IOCB1
$350
bis
$35f
IOCB2
$360
bis
$36f
IOCB3
$370
bis
$37f
IOCB4
$380
bis
$38f
IOCB5
$390
bis
$39f
IOCB6
$3a0
bis
$3af
IOCB7
$3b0
bis
$3bf
PRINTBUF
$3c0
bis
Hier liegt der Printerpuffer für die Ausgabe an den Drucker über die serielle Schnittstelle.
$3e7
SUPERFLAG
Hilfsinformation für Editor.
$3e8
STARTTST
Dieses Flag liefert einen Wert ungleich Null, wenn beim Kaltstart die START-Taste gedrückt war.
$3e9
CASSTART
Flag, ob gerade von Cassette gebootet wird und ob die dort gelesene Init-Adresse angesprungen werden soll.
$3ea
CARTCKSUM
$3eb
Checksumme des Cartridge mit dem Anfang des ROMs bei $C000.
$3ec
ACMVAR
$3ed
bis
Hilfsvariablen für interne Zwecke.
$3f7
X64KBFLAG
Flag, ob die obersten 16KByte RAM oder ROM sind.
$3f8
MINTLK
Hilfsregister, nicht benutzen.
$3f9
TRIG3@
Dies ist eine Kopie des Registers TRIG3, das normalerweise nur durch einen Eingang beeinflußt wird. Wird ein ROM-Modul eingesteckt ($01) oder entfernt ($00), so ändert sich der Wert von TRIG3. Wird zur Feststellung benutzt, ob es sich um einen Kalt- oder Warmstart handelt.
$3fa
CHAINLINK
$3fb
Pointer zur Verarbeitung linearer Listen, wenn sie eingesetzt werden; also nur bei Verwendung spezieller, noch nicht auf dem Markt befindlicher Hardware.
$3fc
CASBUFFER
$3fd
bis
Pufferbereich für die Cassettendatenübertragung, wobei die drei ersten Byte nur für die Synchronisation und Feststellung der Datentypen und -menge gelten. Der eigentliche Datenpuffer beginnt ab Adresse 1024 ($400) und geht bis zum Ende von CASBUFFER.
$47f
An dieser Stelle sind die Variablen des Betriebssystems beendet. Sicherlich werden noch diverse andere Speicherstellen in der Zeropage und im Bereich über $0480 benutzt. Da diese Benutzung jedoch auf BASIC, DOS oder andere Software beschränkt ist, wird an dieser Stelle nicht weiter darauf eingegangen.
GTIA - Adressbereich
Im Weiteren folgen die Hardwareadressen von GTIA, POKEY, PIA und ANTIC:
HPOSP0 (W)
$d000
HPOSP1 (W)
$d001
HPOSP2 (W)
$d002
HPOSP3 (W)
$d003
HPOSM0 (W)
$d004
HPOSM1 (W)
$d005
HPOSM2 (W)
$d006
HPOSM3 (W)
Horizontalpositionen der Spieler (HPOSPn) beziehungsweise der Geschosse (HPOSMn).
$d007
KOLM0PF (R)
$d000
KOLM1PF (R)
$d001
KOLM2PF (R)
$d002
KOLM3PF (R)
Kollisionsregister für Zusammenstöße zwischen den Geschossen und dem Spielfeld.
$d003
KOLP0PF (R)
$d004
KOLP1PF (R)
$d005
KOLP2PF (R)
$d006
KOLP3PF (R)
Kollisionsregister für Zusammenstöße zwischen den Spielern und dem Spielfeld.
$d007
SIZEP0 (W)
$d008
SIZEP1 (W)
$d009
SIZEP2 (W)
$d00a
SIZEP3 (W)
$d00b
SIZEM (W)
Größen der Spieler (SIZEPn) und der Geschosse (SIZEM).
$d00c
KOLM0PL (R)
$d008
KOLM1PL (R)
$d009
KOLM2PL (R)
$d00a
KOLM3PL (R)
Kollisionsregister für Zusammenstöße zwischen Geschossen und Spielern.
$d00b
GRAFP0 (W)
$d00d
GRAFP1 (W)
$d00e
GRAFP2 (W)
$d00f
GRAFP3 (W)
$d010
GRAFM (W)
Grafikregister der Spieler (GRAFPn) beziehungsweise der Geschosse (GRAFM).
$d011
KOLP0PL (R)
$d00c
KOLP1PL (R)
$d00d
KOLP2PL (R)
$d00e
KOLP3PL (R)
Kollisionsregister für Zusammenstöße zwischen Spielern.
$d00f
TRIG0 (R)
$d010
TRIG1 (R)
$d011
TRIG2 (R)
$d012
TRIG3 (R)
Register zum Abfragen der Triggereingänge des GTIA (Schattenregister dazu ab 644 beziehungsweise $284).
$d013
COLPM0 (W)
$d012
COLPM1 (W)
$d013
COLPM2 (W)
$d014
COLPM3 (W)
Farben der Spieler beziehungsweise der Geschosse (Schattenregister dazu ab 704 beziehungsweise $2c0).
$d015
COLPF0 (W)
$d016
COLPF1 (W)
$d017
COLPF2 (W)
$d018
COLPF3 (W)
$d019
COLBAK (W)
Farben des Spielfeldes (COLPFn) und des Hintergrundes (COLBAK), Schattenregister dazu ab 708 beziehungsweise $2c4.
$d01a
GTIACNTL (W)
Steuert den GTIA, bestimmt Prioritätsfolge zwischen Bildelementen und steuert Darstellung der Spieler und Geschosse.
$d01b
VDELAY (W)
Ermöglicht es, Spieler und Geschosse um einzelne Bildzeilen zu verschieben, wenn zweizeilige Auflösung der Player-Missile-Grafik gewählt wurde.
$d01c
PMCNTL (W)
Schaltet Spieler und Geschosse ein; ermöglicht es, den Status der Triggereingänge festzuhalten.
$d01d
HITCLR (W)
Wenn in dieses Register irgendein Wert geschrieben wird (wenn diese Adresse im Schreibzugriff angesprochen wird), werden alle Kollisionsregister gelöscht.
$d01e
CONSOL (W/R)
Dieses Register wird verwendet, um den Status der Konsolentaster ("START", "SELECT" und "OPTION") abzufragen.
$d01f
NEUPORT-Adressbereich
NEUPORT
Dieses Register dient der I/O-Erweiterung. Siehe Betriebssystembeschreibung!
$d1ff
POKEY-Adressbereich
AUDIFREQ1 (W)
$d200
AUDIFREQ2 (W)
$d201
AUDIFREQ3 (W)
$d202
AUDIFREQ4 (W)
Diese Register bestimmen die Frequenz der Tongeneratoren.
$d203
AUDICNTL1 (W)
$d204
AUDICNTL2 (W)
$d205
AUDICNTL3 (W)
$d206
AUDICNTL4 (W)
Diese Register steuern die einzelnen Tongeneratoren. Mit diesen Registern bestimmt man jeweils für einen Tongenerator die Lautstärke, Verzerrungen beziehungsweise den VOLUME_ONLY-Modus.
$d207
POT0 (R)
$d200
POT1 (R)
$d201
POT2 (R)
$d202
POT3 (R)
$d203
POT4 (R)
$d204
POT5 (R)
$d205
POT6 (R)
$d206
POT7 (R)
Diese Register enthalten den Wert der POTEingänge des POKEY. Bei den neuen AtariGeräten werden nur noch die POT-Eingänge 0 bis 3 verwendet, da auch nur noch zwei Joystick-Ports zur Verfügung stehen. Die vier verbleibenden Register beinhalten Kopien der ersten vier.
$d207
AUDICOM (W)
Dieses Register steuert die Tonerzeugung im Atari. Mit diesem Register werden vor allem die Grundfrequenzen für die vier Tonkanäle eingestellt und Hochtonfilter ein- beziehungsweise ausgeschaltet.
$d208
POTSTAT (R)
Mit diesem Register läßt sich bestimmen, ob für einen bestimmten POT-Eingang die AnalogDigital-Wandlung bereits abgeschlossen ist. Wenn ein Bit von POTSTAT '0' ist, bedeutet dies, daß der Wert des dazugehörigen POTEingang gültig ist. Die Bits sind folgendermaßen zugeordnet:
$d208
Bit 0 : POT-Eingang 0 Bit 1 : POT-Eingang 1 Bit 2 : POT-Eingang 2 . . . . Bit 7 : POT-Eingang 7
STIMER (W)
Durch Ansprechen dieser Adresse in einem Schreibzugriff werden die Audio-FrequenzTeiler auf ihre "AUDIFREQ"-Werte zurückgesetzt.
$d209
KBCODE (R)
Dieses Register enthält den Tastaturcode, das heißt, der Benutzer kann hier abfragen, welche Taste gedrückt ist (Schattenregister bei 764 beziehungsweise $2fc).
$d209
SKSTATRES (W)
Durch Eintragen irgendeines Wertes in dieses Register werden die Bits 7,6 und 5 von SKSTAT gelöscht.
$d20a
RANDOM (R)
Dieses Register enthält eine "quasi"-zufällige Zahl (8 Bit), die aus einem 17- beziehungsweise 9-Bit-Polynom-Zähler stammt.
$d20a
POTGO (W)
Durch Eintragen irgendeines Wertes in dieses Register wird der Ablesevorgang der POTEingänge gestartet.
$d20b
SEROUT (W)
Ausgaberegister der seriellen Schnittstelle.
$d20d
SERIN (R)
Eingaberegister der seriellen Schnittstelle.
$d20d
IRQEN (W)
Die Bits in diesem Register schalten die einzelnen Arten zur Auslösung eines IRQ ein beziehungsweise aus.
$d20e
IRQSTAT (R)
Nach dem Auftreten eines IRQ kann man durch Abfragen dieses Registers die Herkunft der Unterbrechungsanforderung bestimmen.
$d20e
SKCNTL (W)
Durch dieses Register lassen sich die einzelnen Betriebsmodi der seriellen Schnittstelle, der POT-Wert-Wandlung und der Tastatur-Abfrage wählen (Schattenregister bei 562 beziehungsweise $262).
$d20f
SKSTAT (R)
Dieses Register enthält Angaben zum Status der seriellen Schnittstelle sowie der Tastatur. Die Bit 7,6 und 5 werden mit SKSTATRES (53770 beziehungsweise $d20a) zurückgesetzt.
$d20f
PIA-Adressbereich
PORTA (R/W)
Übertragungsregister "A" der PIA.
$d300
PORTB (R/W)
Übertragungsregister "B" der PIA.
$d301
PORTACNTL
Steuer- und Statusregister für den PIA-Port "A".
$d302
PORTBCNTL
Steuer- und Statusregister für den PIA-Port "B".
$d303
ANTIC-Adressbereich
DMACNTL (W)
Mit diesem Register kann man den DMA des ANTIC steuern (Schattenregister bei 559 beziehungsweise $22f).
$d400
CHARCNTL (W)
Mit diesem Register kann man das Aussehen der Zeichen in mehreren ANTIC-Modi beeinflußen (Schattenregister bei 755 beziehungsweise $2f3).
$d401
DLPTRL
$d402
DLPTRH
In diesen beiden Registern steht die 16-BitAdresse des ANTIC-Programms (Schattenregister bei 560/561 beziehungsweise $230/$231). Dies ist also der Zeiger auf das ANTIC-Programm.
$d403
HSCROL (W)
Mit diesem Register bestimmt man, um wieviele Farbtakte ein bestimmter Teil des Bildes nach rechts verschoben werden soll. Zu verschiebende Zeilen müssen im ANTIC-Programm gekennzeichnet werden.
$d404
VSCROL (W)
Mit diesem Register bestimmt man, um wieviele Bildzeilen ein bestimmter Teil des Bildes nach oben geschoben werden soll. Die zu verschiebenden Zeilen müssen im ANTIC-Programm gekennzeichnet werden.
$d405
PMBASE (W)
In dieses Register bringt man die oberen acht Bits der Basisadresse des Speicherfeldes für die Player-Missile-Grafik.
$d407
CHARBASE (W)
In dieses Register müssen die oberen 8 Bits der Basisadresse des Zeichengenerators gebracht werden (Schattenregister bei 756 beziehungsweise $2f4).
$d409
WAITHSYNC (W)
Durch Ansprechen dieses Registers wird die CPU bis zum Beginn der nächsten Horizontalsynchronisation angehalten.
$d40a
VCOUNT (R)
Dieses Register enthält die Nummer der Bildzeile, die gerade erzeugt wird, geteilt durch zwei.
$d40b
LPENH (R)
Dieses Register enthält die Horizontalposition des Lightpens (Schattenregister bei 564 beziehungsweise $234).
$d40c
LPENV (R)
Dieses Register enthält die Vertikalposition (Nummer der Bildzeile geteilt durch zwei) des Lightpens (Schattenregister bei 565 beziehungsweise $235).
$d40d
NMIEN (W)
Mit diesem Register werden die Unterbrechungen bei der Vertikalsynchronisation und bei ANTIC-Programm-Unterbrechungen ein- beziehungsweise ausgeschaltet.
$d40e
NMIST (R)
Nach dem Auftreten eines NMI kann man durch Abfragen dieses Registers die Herkunft der Unterbrechungsanforderung bestimmen.
$d40f
NMIRES (W)
Durch Eintragen irgendeines Wertes in dieses Register wird NMIST wieder gelöscht.
$d40f
CPU-Hardwarevektoren
NMIVKT
$fffa
Nach einem NMI springt die CPU zu der Adresse, die sich in NMIVKT befindet (das niederwertige Byte steht an erster Stelle).
$fffb
RESETVKT
$fffc
Nach einem RESET springt die CPU zu der Adresse, die sich in RESETVKT befindet (das niederwertige Byte steht an erster Stelle).
$fffd
IRQVKT
$fffe
Nach einem IRQ springt die CPU zu der Speicherstelle, die sich in IRQVKT befindet (das niederwertige Byte steht an erster Stelle).
$ffff