Cartridge (mapa pamięci)
From Atariki
Wersja z dnia 21:23, 28 cze 2016 KMK (Dyskusja | wkład) (jak odwrotnie, to odwrotnie) ← Previous diff |
Aktualna wersja KMK (Dyskusja | wkład) (drób) |
||
Linia 2: | Linia 2: | ||
Przestrzeń adresową [[cartridge]]'a dzielimy na dwie części: | 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 [[800]] jest to kartridż lewy, a w [[400]] oraz [[XL]] i [[XE]] - jedyny. |
- | * Cartridge A: $A000-$BFFF. W komputerach [[400/800]] jest to kartridż lewy, a w [[XL]] i [[XE]] - jedyny. | + | * Cartridge B: $8000-$9FFF. W komputerach 800 jest to kartridż prawy. |
+ | |||
+ | W 400/800 [[Atari OS]] obsługuje oba kartridże (mimo że 400 ma tylko jedno gniazdo), natomiast w XL/XE [[XL OS]] obsługuje tylko kartridż A. | ||
== Nagłówek == | == Nagłówek == | ||
- | Nagłówek cartridge znajdujący się w ostatnich sześciu bajtach kartridża A ma następującą postać: | + | Nagłówek cartridge znajdujący się w ostatnich sześciu bajtach obu obszarów ma następującą postać: |
<table border="1" cellpadding="5"> | <table border="1" cellpadding="5"> | ||
- | <tr><td><b>Adresy</b></td><td><b>Etykieta</b></td><td><b>Funkcja</b></td></tr> | + | <tr><th>Adresy</th><th>Etykieta</th><th>Funkcja</th></tr> |
- | <!-- | + | <tr><th colspan="3">Cartridge B (tylko 400/800)</th></tr> |
- | <tr><td colspan="3"><center><b>Cartridge B/b></center></td></tr> | + | <tr><td>$9FFA-$9FFB</td><td>CARTRUN (B)</td><td> |
- | <tr><td>$9FFA-$9FFB</td><td> </td><td> </td></tr> | + | <p>Adres uruchomienia kartridża B.</p> |
- | <tr><td>$9FFC</td><td> </td><td> </td> </tr> | + | <p>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:</p> |
- | <tr><td>$9FFD</td><td> </td><td> </td> </tr> | + | # wartość komórki TSTDAT ($07) różna od $00, |
- | <tr><td>$9FFE-$9FFF</td><td> </td><td> </td></tr> | + | # bit 2 CARTOPT (B) równy 1. |
- | <tr><td colspan="3"><center><b>Cartridge A</b></center></td></tr> | + | <p>Gdy te warunki są spełnione, system wykonuje skok JMP pod adres wskazany przez CARTRUN (B).</p> |
- | --> | + | <p>Jeśli oba kartridże (A i B) spełniają warunki uruchomienia przez CARTRUN, uruchamiany jest kartridż A.</p> |
- | <tr><td>$BFFA-$BFFB</td><td>CARTRUN</td><td><p>Adres uruchomienia kartridża A.</p> | + | </td></tr> |
+ | <tr><td>$9FFC</td><td>CARTINS (B)</td><td><p>Znacznik obecności kartridża (0 = włożony).</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ż 144 stron pamięci (36 KB).</p> | ||
+ | </td></tr> | ||
+ | <tr><td>$9FFD</td><td>CARTOPT (B)</td><td> | ||
+ | <p>Znaczniki:</p> | ||
+ | * bit 7 - niewykorzystany | ||
+ | * bit 6 - niewykorzystany | ||
+ | * bit 5 - niewykorzystany | ||
+ | * bit 4 - niewykorzystany | ||
+ | * bit 3 - niewykorzystany | ||
+ | * bit 2 = 1 wykonaj inicjowanie przez CARTINI (B) i uruchomienie przez CARTRUN (B) (0 - tylko inicjowanie) | ||
+ | * bit 1 - niewykorzystany | ||
+ | * bit 0 - wstępny odczyt z dyskietki (0 - zabroniony) | ||
+ | <p>W obecności obu kartridży odczyt z dyskietki jest dozwolony, gdy zezwala nań co najmniej jeden kartridż.</p> | ||
+ | </td></tr> | ||
+ | <tr><td>$9FFE-$9FFF</td><td>CARTINI (B)</td><td> | ||
+ | <p>Adres inicjowania kartridża B.</p> | ||
+ | <p>Inicjowanie zwykłego kartridża jest wykonywane po zainicjowaniu całego systemu operacyjnego i po włączeniu przerwań, ale przed zainicjowaniem kartridża A. Do inicjowania muszą zostać spełnione następujące warunki:</p> | ||
+ | # mniej niż 144 strony (36 KB) podstawowej pamięci RAM, oraz | ||
+ | # rejestr CARTINS (B) równy $00. | ||
+ | <p>Gdy te warunki są spełnione, system ustawia komórkę pamięci TSTDAT ($07) na 1 (lub na $00, gdy nie są), a potem wykonuje skok JSR pod adres wskazany przez CARTINI (B).</p> | ||
+ | </td></tr> | ||
+ | |||
+ | <tr><th colspan="3">Cartridge A</th></tr> | ||
+ | |||
+ | <tr><td>$BFFA-$BFFB</td><td>CARTRUN / CARTCS</td><td><p>Adres uruchomienia kartridża A.</p> | ||
<p>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:</p> | <p>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:</p> | ||
# wartość komórki TRAMSZ ($06) różna od $00, | # wartość komórki TRAMSZ ($06) różna od $00, | ||
Linia 24: | Linia 53: | ||
<p>Gdy te warunki są spełnione, system wykonuje skok JMP pod adres wskazany przez CARTRUN.</p> | <p>Gdy te warunki są spełnione, system wykonuje skok JMP pod adres wskazany przez CARTRUN.</p> | ||
<p>Uruchomienie następuje po odczycie wstępnym z (kolejno) magnetofonu, dyskietki, nowego urządzenia, oraz po wyzerowaniu znacznika zimnego startu COLDST ($0244).</p> | <p>Uruchomienie następuje po odczycie wstępnym z (kolejno) magnetofonu, dyskietki, nowego urządzenia, oraz po wyzerowaniu znacznika zimnego startu COLDST ($0244).</p> | ||
+ | <p>Na 400/800, jeśli oba kartridże (A i B) spełniają warunki uruchomienia przez CARTRUN, uruchamiany jest kartridż A.</p> | ||
</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 / CART</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 / CARTFG</td><td><p>Znaczniki:</p> |
* bit 7 - rodzaj kartridża (0 zwykły, 1 - diagnostyczny) | * bit 7 - rodzaj kartridża (0 zwykły, 1 - diagnostyczny) | ||
* bit 6 - niewykorzystany | * bit 6 - niewykorzystany | ||
Linia 37: | Linia 68: | ||
* bit 1 - niewykorzystany | * bit 1 - niewykorzystany | ||
* bit 0 - wstępny odczyt z dyskietki (0 - zabroniony) | * bit 0 - wstępny odczyt z dyskietki (0 - zabroniony) | ||
+ | <p>Na 400/800 w obecności obu kartridży odczyt z dyskietki jest dozwolony, gdy zezwala nań co najmniej jeden z nich.</p> | ||
</td></tr> | </td></tr> | ||
- | <tr><td>$BFFE-$BFFF</td><td>CARTINI</td><td><p>Adres inicjowania kartridża A.</p> | + | <tr><td>$BFFE-$BFFF</td><td>CARTINI / CARTAD</td><td><p>Adres inicjowania kartridża A.</p> |
- | <p>Inicjowanie zwykłego kartridża jest wykonywane po zainicjowaniu całego systemu operacyjnego (łącznie z [[Nowe urządzenia|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:</p> | + | <p>Inicjowanie zwykłego kartridża jest wykonywane po zainicjowaniu całego systemu operacyjnego (na XL/XE: łącznie z [[Nowe urządzenia|nowymi urządzeniami]]), po włączeniu przerwań, oraz:</p> |
+ | # na 400/800: po zainicjowaniu kartridża B, | ||
+ | # na XL/XE: po sprawdzeniu, czy klawisz START jest przyciśnięty (jego stan znajduje się pod CKEY $03E9 = $01, gdy naciśnięto), | ||
+ | <p>ale przed otwarciem edytora ekranowego. Do inicjowania muszą zostać spełnione następujące warunki:</p> | ||
# mniej niż 176 stron (44 KB) podstawowej pamięci RAM, oraz | # mniej niż 176 stron (44 KB) podstawowej pamięci RAM, oraz | ||
# 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>CARTINI 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>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>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 przed zainicjowaniem systemu operacyjnego, na samym początku procedury RESET.</p> | ||
</td></tr> | </td></tr> | ||
</table> | </table> | ||
Linia 55: | Linia 94: | ||
Wewnętrzny [[Atari BASIC]] w XL/XE to kartridż A. Ma on następujący nagłówek: | Wewnętrzny [[Atari BASIC]] w XL/XE to kartridż A. Ma on następujący nagłówek: | ||
- | * CARTRUN: $A000 - adres uruchomienia | + | <table border="1" cellpadding="5"> |
- | * CARTINS: $00 - kartridż obecny | + | <tr><th>Etykieta</th><th>Wartość</th><th>Objaśnienie</th></tr> |
- | * CARTOPT: $05 = %00000101 - boot z dyskietki dozwolony, uruchom przez CARTRUN | + | <tr><td>CARTRUN</td><td>$A000</td><td><p>Adres uruchomienia.</p></td></tr> |
- | * CARTINI: $BFF0 - adres inicjowania (wskazuje rozkaz RTS) | + | <tr><td>CARTINS</td><td>$00</td><td><p>Kartridż obecny.</p></td></tr> |
+ | <tr><td>CARTOPT</td><td>$05</td><td><p>%00000101 - boot dyskietki dozwolony, uruchom przez CARTRUN.</p></td></tr> | ||
+ | <tr><td>CARTINI</td><td>$BFF0</td><td><p>Adres inicjowania (wskazuje rozkaz RTS).</p></td></tr> | ||
+ | </table> | ||
+ | |||
+ | == Bibliografia == | ||
+ | * W. Zientara, "[[Podstawowe procedury systemu operacyjnego]]" | ||
- | {{stub}} | ||
[[Kategoria:Programowanie Atari 8-bit]] | [[Kategoria:Programowanie Atari 8-bit]] | ||
+ | [[Kategoria:Niezbędnik kodera]] |
Aktualna wersja
Spis treści |
Pamięć kartridża
Przestrzeń adresową cartridge'a dzielimy na dwie części:
- Cartridge A: $A000-$BFFF. W komputerach 800 jest to kartridż lewy, a w 400 oraz XL i XE - jedyny.
- Cartridge B: $8000-$9FFF. W komputerach 800 jest to kartridż prawy.
W 400/800 Atari OS obsługuje oba kartridże (mimo że 400 ma tylko jedno gniazdo), natomiast w XL/XE XL OS obsługuje tylko kartridż A.
Nagłówek
Nagłówek cartridge znajdujący się w ostatnich sześciu bajtach obu obszarów ma następującą postać:
Adresy | Etykieta | Funkcja |
---|---|---|
Cartridge B (tylko 400/800) | ||
$9FFA-$9FFB | CARTRUN (B) |
Adres uruchomienia kartridża B. 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 (B). Jeśli oba kartridże (A i B) spełniają warunki uruchomienia przez CARTRUN, uruchamiany jest kartridż A. |
$9FFC | CARTINS (B) | 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ż 144 stron pamięci (36 KB). |
$9FFD | CARTOPT (B) |
Znaczniki:
W obecności obu kartridży odczyt z dyskietki jest dozwolony, gdy zezwala nań co najmniej jeden kartridż. |
$9FFE-$9FFF | CARTINI (B) |
Adres inicjowania kartridża B. Inicjowanie zwykłego kartridża jest wykonywane po zainicjowaniu całego systemu operacyjnego i po włączeniu przerwań, ale przed zainicjowaniem kartridża A. Do inicjowania muszą zostać spełnione następujące warunki:
Gdy te warunki są spełnione, system ustawia komórkę pamięci TSTDAT ($07) na 1 (lub na $00, gdy nie są), a potem wykonuje skok JSR pod adres wskazany przez CARTINI (B). |
Cartridge A | ||
$BFFA-$BFFB | CARTRUN / CARTCS | 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). Na 400/800, jeśli oba kartridże (A i B) spełniają warunki uruchomienia przez CARTRUN, uruchamiany jest kartridż A. |
$BFFC | CARTINS / CART | 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 / CARTFG | Znaczniki:
Na 400/800 w obecności obu kartridży odczyt z dyskietki jest dozwolony, gdy zezwala nań co najmniej jeden z nich. |
$BFFE-$BFFF | CARTINI / CARTAD | Adres inicjowania kartridża A. Inicjowanie zwykłego kartridża jest wykonywane po zainicjowaniu całego systemu operacyjnego (na XL/XE: łącznie z nowymi urządzeniami), po włączeniu przerwań, oraz:
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. CARTINI 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 przed 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:
Etykieta | Wartość | Objaśnienie |
---|---|---|
CARTRUN | $A000 | Adres uruchomienia. |
CARTINS | $00 | Kartridż obecny. |
CARTOPT | $05 | %00000101 - boot dyskietki dozwolony, uruchom przez CARTRUN. |
CARTINI | $BFF0 | Adres inicjowania (wskazuje rozkaz RTS). |
Bibliografia
- W. Zientara, "Podstawowe procedury systemu operacyjnego"