Tajemnice ATARI

MAPA PAMIĘCI

$004a 00074 CKEY
Podczas zimnego startu system sprawdza, czy został naciśnięty klawisz START konsoli. Jeśli tak to komórka jest ustawiana, co powoduje późniejsze wydanie sygnału dźwiękowego (beep) i rozpoczęcie procesu "bootowania" systemu z magnetofonu.

$004b 00075 CASSBT
Wskaźnik bootu kasetowego. Zawartość 0 oznacza, że boot kasetowy się nie powiódł.

$004c 00076 DSTAT
Komórka wykorzystywana przez sterownik wyświetlania. Zawiera informacje dotyczące zbyt małej objętości pamięci dla inicjowanego trybu pracy obrazu, (grafiki), błędu związanego z wyjściem kursora poza dozwolone wartości, wciśnięciem klawisza BREAK.

$004d 00077 ATRACT
Komórka informująca system o konieczności włączenia trybu zmiany kolorów. Jest zerowana przez przerwanie maskowalne (IRQ), gdy zostanie naciśnięty dowolny klawisz i jest zwiększana jej zawartość po upływie około 4 sekund przez VBLANK. Gdy przekroczy wartość 127 ($7f), zostaje ustawiona na 254 ($fe) co powoduje włączenie trybu zmniejszenia luminacji i zmiany kolorów. Powoduje to równomierne wypalanie się luminofora w kineskopie telewizora, a więc przedłużenie jego żywotności. Należy pamiętać, że joystick nie powoduje wyzerowania komórki ATRACT, więc gdy piszemy programy obsługiwane wyłącznie przez niego (bez użycia klawiatury), zerujemy co pewien czas jej zawartość. Większość gier rozwiązuje ten problem w ten sposób, bądź też poprzez sztuczne wywołanie naciśnięcia klawisza (po zmianie kierunku pochylenia rączki joysticka).

$004e 00078 DRKMSK
Wykorzystywany jako maska jasności kolorów po włączeniu trybu ATRACT. Gdy tryb ten nie jest aktywny, zawiera wartość 254 ($fe) dla normalnej jasności lub też po zainicjowaniu ATRACT-u zawiera 246 ($f6) co powoduje zmniejszenie poziomu luminancji o 50 procent.

$004f 00079 COLRSH
Wykorzystywany jako maska kolorów. Ustawiany jest przez przerwanie VBLANK, co powoduje co pewien czas zmianę kolorów tła, czcionki i marginesu na ekranie.

$0050 00080 TEMP
Wykorzystywany jako pomocnicza komórka przy wyświetlaniu danych.

$0051 00081 HOLD1
Posiada podobne znaczenie jak komórka TEMP (lokacja 00080 ($0050).

$0052 00082 LMARGN
Szerokość lewego marginesu w trybie graficznym 0 lub w okienku tekstowym. Wartość zero oznacza brak marginesu. Komórka jest inicjalizowana przez system operacyjny na wartość 2. Wartość tę można zmienić, na przykład przy pomocy instrukcji POKE. Po naciśnięciu klawisza RETURN kursor pojawia się w kolumnie wyznaczonej przez LMARGN.

$0053 00083 RMARGN
Szerokość prawego marginesu w trybie tekstowym, przez system operacyjny inicjalizowana na wartość 39 ($27). Zawartości zarówno LMARGN, jak i RMARGN są ignorowane w trybie graficznym pracy układu wyświetlania obrazu. Po naciśnięciu klawisza RESET system operacyjny przywraca standardową wartość tym komórkom (LMARGN=2, RMARGN=39). Ich wartości nie mają żadnego znaczenia przy używaniu drukarki (szerokość lewego marginesu na ekranie nie jest bynajmniej szerokością lewego marginesu przy drukowaniu), ani też przy scrollingu (zawsze do góry zostanie przesunięta cała linia (40 znaków dla trybu wyświetlania ekranu 0)).

$0054 00084 ROWCRS
Aktualny numer trybu graficznego panującego na ekranie lub wiersz, w którym znajduje się kursor. Ta komórka wraz z następną czyli COLCRS (lokacje 85,86 ($55, $56)) definiują pozycję kursora, a ściślej pozycję następnego znaku, który będzie czytany lub zapisywany na ekranie. Może przyjmować wartości z zakresu od zera do 191 ($bf) (jest to 24 linie pomnożone przez 8 punktów każdej). Wartość O oznacza wiersz pierwszy, najwyżej położony na ekranie.

$0055,$0056 00085,00086 COLCRS
Aktualny numer trybu graficznego panującego na ekranie lub kolumna, w której znajduje się kursor. Znaczenie tej komórki pamięci jest analogiczne jak dla komórki ROWCRS (lokacja 00084 ($0054)), tylko tutaj wartość dotyczy nie wierszy lecz kolumn. Komórki ROWCRS i COLCRS (lokacje 00084-00086 ($0054-$0056)) są również używane przy rysowaniu (instrukcja DRAW) i zawierają wtedy współrzędne końcowego punktu rysowanej kreski.

$0057 00087 DINDEX
Zawiera numer trybu pracy ekranu. Jest to numer trybu pracy wywoływanego na przykład z poziomu BASIC-a (GRAPHICS 0), a nie numer trybu dla układu wyświetlania obrazu czyli ANTIC-a (grafika zerowa spowoduje, że DINDEX zawiera 0, nie zaś 2 jak w przypadku pracy ANTIC-a).

$0058,$0059 00088,00089 SAVMSC
Są to niezwykle pożyteczne komórki pamięci, ponieważ zawierają adres początku pamięci ekranu. Dzięki temu możemy w niezwykle prosty sposób sprawiać, że na ekranie pojawią się jakieś znaki. Jeżeli chcemy wpisywać dane do pamięci obrazu z poziomu BASIC-a to przykładowo wyświetlenie wykrzyknika w lewym, górnym rogu ekranu wykona się po wpisaniu POKE PEEK(89)*256+PEEK(88),1. Należy pamiętać, że wyświetlane dane są w trybie INTERNAL, a nie w trybie ASCII. Krótka uwaga dla znających as-sembler. Wyświetlenie w lewym, górnym rogu ekranu wykrzyknika nastąpi po wykonaniu: LDY #0 LDA #1 STA (SAVMSC),Y Używając trybu pośredniego możemy łatwo wyświetlać nasze dane w dowolnym punkcie ekranu (zmiana rejestru Y spowoduje, że dane wyświetlane będą tylko w pierwszych 256 bajtach pamięci obrazu), należy pamiętać, że zmiana zawartości SAVMSC jest karygodnym błędem. Oto niektóre dane dotyczące objętości zajmowanej pamięci przez różne numery trybu pracy ekranu:

Grafika Pamięć obrazu Display List Łącznie
0 960 32 992
1 400 34 674
2 200 24 424
3 200 34 434
4 400 64 694
5 800 54 1174
6 1600 94 2174
7 3200 94 4190
8 6400 176 8112

Ponieważ pamięć obrazu ma różną długość, więc zmiana trybu graficznego spowoduje zmianę adresu zawartego w SAVMSC. Zwykle pamięć ta znajduje się w górnych lokacjach RAM-u. Zmiana zawartości SAVMSC nie spowoduje nagłego wyświetlenia innego obszaru pamięci, decyduje o tym odpowiednia budowa Display List-y czyli recepty przeznaczonej dla ANTIC-a, powodującej że obraz wygląda tak, a nie inaczej. Mechanizm ten dokładnie zostanie omówiony w dalszej części mapy, przy objaśnianiu komórek pamięci dotyczących bezpośrednio DL.

$005a 00090 OLDROW
Zawiera numer wiersza, w którym znajduje się kursor. Różnica między OLDROW a ROWCRS (lokacja 00084 ($0054)) polega na tym, że OLDROW zawiera numer wiersza przed operacją natomiast ROWCRS po operacji czytania, zapisu, rysowania na ekranie.

$005b,$005c 00091,00092 OLDCOL
Zawiera numer kolumny, w której znajduje się kursor. Posiada analogiczne znaczenie jak COLCRS (lokacje 00085, 00086 ($0055, $0056)), ale OLDCOL zawiera starą pozycję kursora.

$005d 00093 OLDCHR
Komórka zawiera kod znaku, który znajduje się na pozycji kursora. Wykorzystywana jest do przechowywania tego kodu podczas poruszenia kursora.

$005e,$005f 00094,00095 OLDADR
Komórka pamięci wykorzystywana do przechowywania kodu znaku na pozycji kursora podczas jego poruszenia. Zawiera adres pamięci, gdzie znajduje się kursor.

$0060 00096 NEWROW
Zawiera numer wiersza, do którego będzie rysowana kreska przy użyciu instrukcji DRAWTO lub XIO 18.

$0061,$0062 00097,00098 NEWCOL
Zawiera numer kolumny, do której będzie rysowana kreska przy użyciu instrukcji DRAWTO lub XIO 18. NEWROW (lokacja 00096 ($0060)) oraz NEWCOL są inicjalizowane na wartości zawarte w ROWCRS i COLCRS (lokacje 00084-00086 ($0054-$0056)), które oznaczają końcowy punkt rysowania kreski.

$0063 00099 LOGCOL
Pozycja kursora w linii logicznej. Linia logiczna składa się z trzech linii fizycznych. System operacyjny posiada bufor aktualnie wpisywanej linii o długości 119 bajtów i właśnie zawartość LOGCOL oznacza pozycję kursora w tym buforze.

$0064,$0065 00100,00101 ADRESS
Dodatkowe komórki pamięci wykorzystywane do przechowywania różnych danych wykorzystywanych przez sterownik obrazu, np. przechowuje adres Display List-y (recepty do sposobu wyświetlania obrazu), bufora linii, danej przeznaczonej do wyświetlenia, itp.

$0066,$0067 00102,00103 MLTTMP
Wykorzystywany jako dodatkowa komórka pamięci na stronie zerowej pomocna przy wyświetlaniu danych na ekranie. Lokacja ta używana jest również jako tymczasowy bufor przy wykonywaniu operacji OPEN.

$0068,$0069 00104,00105 SAVADR
Komórka pamięci (zwana również FRMADR) wykorzystywana do tymczasowego przechowywania danych przesuwanych na ekranie.

$006a 00106 RAMTOP
Rozmiar pamięci RAM. Zawiera ilość dostępnej pamięci dostępnej dla użytkownika w stronach (stona pamięci zawiera 256 bajtów). Dla komputera posiadającego 48 kilobajtów pamięci RAM komórka jest ustawiana przez system operacyjny na wartość 160 ($a0) co pomnożone przez 256 bajtów daje nam wartość 40960. Tak więc pamięć przeznaczona dla użytkownika znajduje się poniżej tego adresu. Ponieważ zwykle powyżej adresu obliczanego na podstawie zawartości RAMTOP-u znajduje się pamięć obrazu, więc zmiana trybu graficznego spowoduje zmianę zawartości komórki RAMTOP, może się wtedy zdążyć, że dany tryb graficzny nie zostanie uaktywniony ze względu na brak pamięci operacyjnej (której rozmiar zawiera właśnie RAMTOP). Uruchomienie systemu z wciśniętym klawiszem OPTION (wyłączenie ROM-u BASIC-a) spowoduje zwiększenie rozmiaru pamięci RAM o 8kB czyli powiększenie komórki RAMTOP o 32 ($20).

LEON



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

Pixel 2001