Tajemnice ATARI

MAPA PAMIĘCI

$006b 00107 BUFCNT
Licznik bufora, używana przy liczeniu rozmiaru aktualnie tworzonej linii logicznej.

$006c,$006d 00108,00109 BUFSTR
Wykorzystywany jako chwilowy bufor do przechowywania danej wskazywanej przez BUFCNT (lokacja 00107 ($006b)).

$006e 00110 BITMSK
Komórka pamięci używana przez system operacyjny jako mapa bitowa przy wyświetlaniu.

$006f 00111 SHFAMT
Wykorzystywana przy ustawianiu punktu. Zawiera taką samą wartość jak komórka DMASK (lokacja 672 ($2a0)).

$0070,$0071 00112,00113 ROWAC
ROWAC i komórka COLAC (lokacja 00114,00115 ($0072,$0073) są komórkami pamięci przeznaczonymi do kontroli wiersza i kolumny podczas wyświetlania punktów oraz do zwiększania i zmniejszania funkcji. ROWAC kontroluje wiersz wyświetlania punktów.

$0072,$0073 00114,00115 COLAC
Komórka pamięci kontroluje kolumnę, w której zostanie wyświetlony punkt.

$0074,$0075 00116,00117 ENDPT
Zawierają wartość końcowego punktu linii, która będzie rysowana.

$0076 00118 DELTAR
Zawiera bezwzględną wartość różnicy komórek NEWROW (lokacja 00096 ($0060) oraz ROWCRS (lokacja 00084 ($54).

$0077,$0078 00119,00120 DELTAC
Zawiera bezwzględną wartość różnicy komórek NEWCOL (lokacja 00097 ($0061) oraz COLCRS (lokacja 00085 ($0055).

$0079 00121 ROWINC
Komórka pamięci przeznaczona do zmniejszania lub do zwiększania wartości oznaczającej wiersz.

$007a 00122 COLINC
Komórka pamięci przeznaczona do zmniejszania lub do zwiększania wartości oznaczającej kolumnę.

$007b 00123 SWPFLG
Komórka pamięci jest wykorzystywana do kontroli kursora. Jeżeli zawiera wartość 255 ($ff) oznacza to, że okno tekstowe RAM-u i RAM-u normalnego zostały wymienione. Znaczenie tej komórki jest nieidentyfikowalne.

$007c 00124 HOLDCH
Zawiera wartość przesuwanego znaku.

$007d 00125 INSDAT
Dodatkowa komórka pamięci przeznaczona do przechowywania bajtu używanego przez sterownik wyświetlania (bajt ten jest wartością znaku znajdującego się pod kursorem).

$007e,$007f 00126,00127 COUNTR
Zawartość komórki oznacza liczbę iteracji wymaganą przy rysowaniu linii. Po wyświetleniu każdego punktu zawartość COUNTR jest zmniejszana o 1. W chwili, gdy wartość komórki zostanie zmniejszona do zera - oznacza to, że kreska została w całości narysowana.

Pozostałe komórki zawarte na zerowej stronie pamięci używane są przez BASIC. Lokacje od 00128 do 00145 ($0080-$0091) są używane jako wskaźniki BASICu, lokacje od 00146 do 00202 ($0092-$00ca) są zmiennymi systemowymi BASICu strony zerowej, lokacje od 00203 do 00209 ($00cb-$00d1) są nieużywane przez BASIC (są to komórki pamięci na stronie zerowej wyłącznie przeznaczone do wykorzystania przez użytkownika), lokacje od 00210 do 00255 ($00d2-$00ff) są wykorzystywane przez operacje zmiennoprzecinkowe BASICu. W chwili, gdy BASIC jest wyłączony wszystkie lokacje od 00128 do 00255 ($0080-$00ff) są wolne i użytkownik może je swobodnie wykorzystywać bez obawy o zawieszenie systemu.

$0080,$0081 00128,00129 LOMEM
Komórka pamięci zawierająca najmniejszy adres pamięci możliwej do wykorzystywania przez BASIC. Jest to jednocześnie największy adres pamięci RAM używanej przez system operacyjny czyli cały obszar wolnej pamięci powyżej tego adresu aż do pamięci ROM jest przeznaczony dla użytkownika. Pierwsza strona pamięci powyżej tego adresu jest wykorzystywana przez BASIC do zapamiętania zmiennych. Zawartość komórki MEMLO (lokacja 00743,00744 ($02e7,02e8) oznaczająca najmniejszy adres pamięci przeznaczonej dla użytkownika jest kopiowana do LOMEM przy inicjalizacji systemu lub wykonaniu instrukcji NEW. Wynika stąd prosty wniosek, że zmieniając wartość LOMEM możemy sprawić, że pamięć wykorzystywana przez BASIC może znajdować się w dowolnym miejscu w pamięci. Jest to wykorzystywane przy użytkowaniu programów rezydentnych (programy, które możemy wykorzystać w dowolnej chwili bez konieczności każdorazowego wgrywania). Proces ten zostanie dokładnie omówiony przy komórce MEMLO (lokacja 00743,00744 ($2e7-$2e8). Wciśnięcie klawisza RESET nie spowoduje zmiany LOMEM. W chwili, gdy nie mamy aktualnie wgranego DOS-a ani innych programów rezydentnych, wartość LOMEM jest inicjalizowana przez system operacyjny na wartość 01792 ($0700).

$0082,$0083 00130,00131 VNTP
Komórki pamięci zawierają początkowy adres tablicy nazw zmiennych zadeklarowanych w napisanym w BASIC-u programie. Do tej tablicy wpisywane są wszystkie zmienne, bez względu na to czy są używane, czy też nie. Wszystkie zmienne są zapisywane w formacie kodu ATASCII w takiej kolejności, w jakiej występują w programie, nie są układane alfabetycznie. Tablica może maksymalnie zawierać 128 zmiennych, więc jest to maksymalna ilość deklaracji w programie. Poniżej zamieszczony jest krótki program napisany w BASIC-u, który pozwala na "podglądnięcie" wszystkich zadeklarowanych zmiennych w programie. Można go umieścić na początku każdego programu, wykonanie linii 1-6 spowoduje wyświetlenie tablicy zmiennych:
0 REM Linie 1-6 wyświetlają wszystkie 
zadeklarowane zmienne
1 POKE 203,PEEK(130)iPOKE 204,PEEK(131)
2 IF PEEK(203)=PEEK(132) THEN IF PEEK(2
04)=PEEK(133) THEN GOTO 7:REM Od lini 7
 zaczyna się właściwy program
3 IF PEEK(PEEK(203)+256*PEEK(204))>127 
THEN PRINT CHR$(PEEK(PEEK(203)+256*PEEK
(204))-128)
4 IF PEEK(PEEK(203)+256*PEEK(204))<127 
THEN PRINT CHR$(PEEK(PEEK(203)+256*PEEK
(204)));
5 IF PEEK(203)=255 THEN POKE 203,0:POKE
 204,PEEK(204)+1:GOTO 2
6 POKE 203,PEEK(203)+1:GOTO 2
7 REM Początek właściwego programu
$0084,$0085 00132,00133 VNTD
Zawierają końcowy adres tablicy nazw zmiennych plus jeden bajt. Poniżej zamieszczony jest program pozwalający obliczyć ilość zadeklarowanych w programie zmiennych:
0 REM Linie 1-3 wyświetlają liczbę zmie
nnych
1 ILOSC=0:FOR LOOP=PEEK(130)+256*PEEK(1
31) TO PEEK(132)+256*PEEK(133)-1
2 IF PEEK(LOOP)>127 THEN ILOSC=ILOSC+1
3 NEXT LOOP:PRINT "Liczba zadeklarowany
ch zmiennych = ";ILOSC-2
4 REM Początek właściwego programu
$0086,$0087 00134,00135 VVTP
Adres tablicy wartości zmiennych. Każda zadeklarowana zmienna jest opisana przez 8 bajtów. Pierwszy z nich charakteryzuje typ zmiennej: 0 oznacza zmienną skalarną (niezadeklarowana instrukcją DIM zmienna numeryczna), wartość 64 wskazuje, że jest to niezaimplementowana zmienna tablicowa, 65 określa zmienną tablicową zadeklarowaną przez instrukcję DIM, wartość 128 charaktryzuje zmienną stringową (alfanumeryczną czyli ciąg znaków) niezaimplementowana, natomiast 129 informuje, że jest to zmienna stringową zadeklarowana przez DIM. Bajt drugi określa numer zmiennej, więc zawiera się w zakresie od 0 do 127. Pozostałe 6 bajtów określają, w zależności od typu zmiennej, wartości zmiennej w postaci zmiennoprzecinkowej (w kodzie BCD), rozmiar zmiennej, adres tablicy lub ciągu znaków, itp.

$0088,$0089 00136,00137 STMTAB
Komórki pamięci zawierają adres początku programu napisanego w Basic-u. Jest to adres pierwszej linii programu odpowiednio zakodowanego przez interpreter Basic-a. Pierwsze dwa bajty każdej zakodowanej linii stanowią jej numer. Bajt trzeci określa długość linii w pamięci komputera. Poniżej jest przedstawiony program umożliwiający znalezienie w pamięci komputera adresu linii o danym numerze:
1 STMTAB=PEEK(136)+256*PEEK(137)
2 NUMER=PEEK(STMTAB)+256*PEEK(STMTAB+1)
3 IF NUMER=32768 THEN PRINT"KONIEC":END
4 PRINT "NUMER LINII= ",-NUMER;" ADRES 
LINII= "; STMTAB
5 STMTAB=STMTAB+PEEK(STMTAB+2):GOTO 2
$008a,$008b 00138,00139 STMCUR
Zawierają wskaźnik aktualnie kodowanej linii programu.

$008c,$008d 00140,00141 STARP
Wartość tych komórek pamięci (LSB/MSB) oznacza adres string-u lub tablicy. Jest to jednocześnie adres końca programu napisanego w Basic-u. Adres ciągu znaków w tablicy jest równy adresowi zwróconemu przez użycie instrukcji ADR. Warto tutaj zauważyć istotną różnicę w przechowywaniu danych w tablicy i w string-u. Każda wartość elementu tablicy jest opisana przez 6 bajtów, ze względu na przechowywanie tej danej w kodzie BCD, podczas gdy w string-u zajmuje jeden bajt. Przykładowo DIM A(100) spowoduje zarezerwowanie 600 bajtów pamięci komputera, w chwili gdy DIM A$(100) odpowiednio tylko 100 bajtów.

$008e,$008f 00142,00143 RUNSTK
Adres stosu używanego przez instrukcje GOSUB i FOR-NEXT. Użycie instrukcji GOSUB spowoduje położenie na stos pakietu złożonego z czterech bajtów, natomiast instrukcji FOR-NEXT 16 bajtów. Instrukcja POP pobiera ze stosu jeden pakiet danych.

$0090,$0091 00144,00145 MEMTOP
Zawierają najwyższy adres dostępnej pamięci RAM dla Basic-a. Różnica pomiędzy wartością MEMTOP (lokacja 00144,00145 ($0090, $0091)), a wartością LOMEM (lokacja 00128,00129 ($0080, $0081)) jest wartością wielkości pamięci RAM dla Basic-a. Jeżeli program nie mieści się w pamięci do adresu zawartego w MEMTOP to interpreter Basic-a niezwłocznie poinformuje nas, że jest zbyt mało dostępnej pamięci RAM. Uwaga !!! Nie należy mylić komórki MEMTOP (lokacja 00144,00145 ($008e,$008f)) odnoszącej się wyłącznie do Basic-a z komórką co prawda o takiej samej nazwie: MEMTOP (lokacja 00741,00742 ($02e5,$02e6)), której wartość jest interpretowana bezpośrednio przez system operacyjny.

LEON



Powrót na start | Powrót do spisu treści | Powrót na stronę główną

Pixel 2001