von Frederik Holst Diese neue Serie soll es Anfängern wie Fortgeschrittenen erlauben, ihren XL besser kennenzulernen. Es werden nicht nur Adressen erklärt, die unmittelbar zum Programmieren wichtig sind, sondern auch die, die nur für interne Prozesse eine Bedeutung haben. Jede Speicher- stelle wird erläutert, bei besonders interessanten wird auch ein Beispiel- listing abgedruckt. Doch genug der Vorrede, ich will gleich mit Speicher- stelle null beginnen: 0, 1 $0, $1 : LINZBS Diese beiden Speicherstellen haben wie oben schon gesagt nur interne Bedeu- tung. Soweit mir bekannt ist, benutzt die Reset Routine sie beim Speicher- test. 2, 3 $2, $3 : CASINI Jedes Cassettenfile besitzt eine Ini- tialisierungsroutine. Falls ein Boot erfolgreich verlief, wird hier mit einem JSR hingesprungen. 4 und 5 $4, $5 : RAMLO Vektor für den Speichergrößentest beim Einschalten. Auch die Disk-Boot Adresse kann hier stehen. 6 $6 : TRAMSZ Zwischenregister beim Speichergrößen- test. Wert wird nach dem Ermitteln an RAMTOP (106, $6a) gegeben. Für den Fall, daß sich eine Cartridge oder Basic im linken Modulschacht befindet, steht hier eine 1. 7 $7 : TSTDAT Beim RAM-Test steht hier die Adresse der getesteten Stelle. Eine 1 steht hier, wenn im rechten Modulschacht eine Cartridge steckt. 8 $8 : WARMST Warmstartflag. Nach dem Einschalten 1, wird nach dem Einschalten einmal Reset gedrückt, steht hier 255. 9 $9 : BOOT? Ein Disk-Boot schreibt hier 1, Casset- tenboot eine 2. Wenn keines der beiden gebootet wurde steht hier eine 0. Das Flag gibt außerdem an, welcher Initia- lisierungsvektor (CASINI, DOSVEC) ver- wendet wird. Ein Resetschutz kann erzeugt werden, wenn man hier eine 255 ablegt. Der XL hängt sich dann nach einem Reset auf. 10, 11 $a, $b : DOSVEC Vektor für Disk-Software. Der Befehl DOS veranlaßt einen Sprung dorthin. Man kann diesen Vektor ändern, ein Reset erneuert ihn aber. Um dies zu verhin- dern, muß man 5446(LO) und 5450(HI) ($1546, $154a) ändern, die auf DOSVEC zeigen. Der befehl DOS läßt sich durch folgen- den Befehl ersetzen: DOS=USR(PEEK(10)+PEEK(11)*256) 12, 13 $a, $b : DOSINI Hier steht die Adresse des geladenen Programms vom DOS. Es ist möglich hier ein Anwenderprogramm zu initialisieren. 14,15 $e, $f : APPMHI Dieser Vektor zeigt auf die erste freie Speicherstelle nach dem BASIC-Programm. Von hier bis zu RAMTOP (40959=$9fff) kann sich Bildschirmspeicher/DL ausbreiten. 16 $10 : POKMSK Interruptmaske für den POKEY-Chip. Schattenregister von IRQEN (53774 = $d20e). Jedes Bit bezieht sich auf einen Interrupt. Jedes gesetzte Bit ermöglicht einen Interrupt. Bit Dez. Interrupt -------------------------------------- 7 128 BREAK-Taste 6 64 andere Tasten 5 32 serielle Input- Daten bereit 4 16 serielle Output- Daten erforderlich 3 8 serielle Ausgabe beentet 2 4 POKEY-Timer 4 1 2 " " 2 0 1 " " 1 -------------------------------------- 17 $11 : BRKKEY BREAK-Tasten Flag. Hier steht eine 0, wenn BREAK gedrückt ist. 18,19,20 $12,$13,$14 : RTCLOK Interne Uhr des Atari. 18 zählt mit der Frequenz der Spannungsversorgung. In Deutschland beträgt die Frequenz 50 Hz. Immer, wenn 20 den Wert 255 erreicht hat, zählt 19 um eins weiter. Wenn 19 den Wert 255 erreicht hat, zählt 18 um eins weiter. Ist schließlich auch 18 voll, gehen alle Zähler wieder auf 0, und alles geht von vorne los. Eine kleine Uhr: steht für das Zeichen Semikolon 10 POKE 755,0:REM CURSOR AUSSCHALTEN 20 POKE 18,0:POKE 19,0:POKE 20,0 30 IF PEEK(20)>50 THEN SEC=SEC+1:POKE 20,0 40 IF SEC=60 THEN MIN=MIN+1:SEC=0 50 IF MIN=60 THEN STD=STD+1:MIN=0 60 POSITION 0,0:PRINT STD":" MIN":"SEC 70 GOTO 20 Diese Uhr geht wegen des langsamen BASICS nicht ganz genau, aber es reicht für einfache Ansprüche. Das war's fur dieses Mal, bis dann.