MAPA PAMIĘCI
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.
Wskaźnik bootu kasetowego. Zawartość 0 oznacza, że boot kasetowy się nie powiódł.
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.
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).
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.
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.
Wykorzystywany jako pomocnicza komórka przy wyświetlaniu danych.
Posiada podobne znaczenie jak komórka TEMP (lokacja 00080 ($0050).
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.
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)).
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.
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:
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.
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.
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.
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.
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.
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
|