Cartridge (mapa pamięci)
From Atariki
Wersja z dnia 21:23, 28 cze 2016 KMK (Dyskusja | wkład) (jak odwrotnie, to odwrotnie) ← Previous diff |
Wersja z dnia 21:30, 28 cze 2016 KMK (Dyskusja | wkład) (→Nagłówek) Next diff → |
||
Linia 26: | Linia 26: | ||
</td></tr> | </td></tr> | ||
<tr><td>$BFFC</td><td>CARTINS</td><td><p>Znacznik obecności kartridża (0 = włożony).</p> | <tr><td>$BFFC</td><td>CARTINS</td><td><p>Znacznik obecności kartridża (0 = włożony).</p> | ||
- | <p>W XL/XE dla kartridża diagnostycznego sprawdzany tylko wtedy, gdy rejestr [[Rejestry GTIA#TRIG3|TRIG3]] sygnalizuje obecność kartridża w gnieździe. Dla zwykłego kartridża sprawdzany, gdy pomiar rozmiaru RAM-u podstawowego wykaże mniej niż 176 stron pamięci (44 KB).</p> | + | <p>Ponieważ wartość $00 może mieć również komórka pamięci RAM, zwykle sprawdzane są dodatkowe warunki (patrz niżej).</p> |
+ | <p>Dla zwykłego kartridża sprawdzany, gdy pomiar rozmiaru RAM-u podstawowego wykaże mniej niż 176 stron pamięci (44 KB).</p> | ||
</td></tr> | </td></tr> | ||
<tr><td>$BFFD</td><td>CARTOPT</td><td><p>Znaczniki:</p> | <tr><td>$BFFD</td><td>CARTOPT</td><td><p>Znaczniki:</p> | ||
Linia 43: | Linia 44: | ||
# rejestr CARTINS równy $00. | # rejestr CARTINS równy $00. | ||
<p>Gdy te warunki są spełnione, system ustawia komórkę pamięci TRAMSZ ($06) na 1 (lub na $00, gdy nie są), a potem wykonuje skok JSR pod adres wskazany przez CARTINI.</p> | <p>Gdy te warunki są spełnione, system ustawia komórkę pamięci TRAMSZ ($06) na 1 (lub na $00, gdy nie są), a potem wykonuje skok JSR pod adres wskazany przez CARTINI.</p> | ||
- | <p>CARTINS jest też wektorem używanym przy uruchamianiu kartridża diagnostycznego. Warunki do uruchomienia:</p> | + | <p>CARTINS jest też wektorem używanym przy uruchamianiu kartridża diagnostycznego. Warunki do uruchomienia w XL/XE:</p> |
- | # rejestr [[Rejestry GTIA#TRIG3|TRIG3]] sygnalizuje obecność kartridża w gnieździe, | + | # rejestr [[Rejestry GTIA#TRIG3|TRIG3]] sygnalizuje obecność kartridża w gnieździe; |
# CARTINS równy $00, | # CARTINS równy $00, | ||
# bit 7 CARTOPT równy 1. | # bit 7 CARTOPT równy 1. | ||
+ | <p>W 400/800:</p> | ||
+ | # CARTINS równy $00, | ||
+ | # zawartość CARTINS nie daje się zmodyfikować | ||
+ | # bit 7 CARTOPT równy 1. | ||
<p>Gdy te warunki są spełnione, kartridż jest uruchamiany skokiem JMP pod adres wskazany przez CARTINI. Uruchomienie następuje przez zainicjowaniem systemu operacyjnego, na samym początku procedury RESET.</p> | <p>Gdy te warunki są spełnione, kartridż jest uruchamiany skokiem JMP pod adres wskazany przez CARTINI. Uruchomienie następuje przez zainicjowaniem systemu operacyjnego, na samym początku procedury RESET.</p> | ||
</td></tr> | </td></tr> |
Wersja z dnia 21:30, 28 cze 2016
Pamięć kartridża
Przestrzeń adresową cartridge'a dzielimy na dwie części:
- Cartridge B: $8000-$9FFF. W komputerach 400/800 jest to kartridż prawy.
- Cartridge A: $A000-$BFFF. W komputerach 400/800 jest to kartridż lewy, a w XL i XE - jedyny.
Nagłówek
Nagłówek cartridge znajdujący się w ostatnich sześciu bajtach kartridża A ma następującą postać:
Adresy | Etykieta | Funkcja |
$BFFA-$BFFB | CARTRUN | Adres uruchomienia kartridża A. W przeciwieństwie do inicjowania, które jest obligatoryjne, uruchomienie kartridża jest opcjonalne. Żeby nastąpiło, muszą zostać spełnione następujące warunki:
Gdy te warunki są spełnione, system wykonuje skok JMP pod adres wskazany przez CARTRUN. Uruchomienie następuje po odczycie wstępnym z (kolejno) magnetofonu, dyskietki, nowego urządzenia, oraz po wyzerowaniu znacznika zimnego startu COLDST ($0244). |
$BFFC | CARTINS | Znacznik obecności kartridża (0 = włożony). Ponieważ wartość $00 może mieć również komórka pamięci RAM, zwykle sprawdzane są dodatkowe warunki (patrz niżej). Dla zwykłego kartridża sprawdzany, gdy pomiar rozmiaru RAM-u podstawowego wykaże mniej niż 176 stron pamięci (44 KB). |
$BFFD | CARTOPT | Znaczniki:
|
$BFFE-$BFFF | CARTINI | Adres inicjowania kartridża A. Inicjowanie zwykłego kartridża jest wykonywane po zainicjowaniu całego systemu operacyjnego (łącznie z nowymi urządzeniami), po włączeniu przerwań i po sprawdzeniu, czy klawisz START jest przyciśnięty (jego stan znajduje się pod CKEY $03E9 = $01, gdy naciśnięty), ale przed otwarciem edytora ekranowego. Do inicjowania muszą zostać spełnione następujące warunki:
Gdy te warunki są spełnione, system ustawia komórkę pamięci TRAMSZ ($06) na 1 (lub na $00, gdy nie są), a potem wykonuje skok JSR pod adres wskazany przez CARTINI. CARTINS jest też wektorem używanym przy uruchamianiu kartridża diagnostycznego. Warunki do uruchomienia w XL/XE:
W 400/800:
Gdy te warunki są spełnione, kartridż jest uruchamiany skokiem JMP pod adres wskazany przez CARTINI. Uruchomienie następuje przez zainicjowaniem systemu operacyjnego, na samym początku procedury RESET. |
Przykład nagłówka
Wewnętrzny Atari BASIC w XL/XE to kartridż A. Ma on następujący nagłówek:
- CARTRUN: $A000 - adres uruchomienia
- CARTINS: $00 - kartridż obecny
- CARTOPT: $05 = %00000101 - boot z dyskietki dozwolony, uruchom przez CARTRUN
- CARTINI: $BFF0 - adres inicjowania (wskazuje rozkaz RTS)
Ten artykuł to tylko zalążek. Możesz pomóc rozwojowi Atariki poprzez rozszerzenie go o więcej informacji.