Cartridge (mapa pamięci)

From Atariki

(Różnice między wersjami)
Jump to: navigation, search
Wersja z dnia 20:56, 28 cze 2016
KMK (Dyskusja | wkład)
(wstępne porządki)
← Previous diff
Aktualna wersja
KMK (Dyskusja | wkład)
(drób)
Linia 1: Linia 1:
 +== Pamięć kartridża ==
Przestrzeń adresową [[cartridge]]'a dzielimy na dwie części: Przestrzeń adresową [[cartridge]]'a dzielimy na dwie części:
-* Cartridge A: $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 B: $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.
-Wewnętrzny [[Atari BASIC]] w XL/XE to kartridż B.+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 [[cartridge]] znajdujący się w ostatnich sześciu bajtach kartridża B ma następującą postać:+== Nagłówek ==
 +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 A</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 B</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 B.</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 5 - niewykorzystany
 +* bit 4 - niewykorzystany
 +* bit 3 - niewykorzystany
* bit 2 = 1 wykonaj inicjowanie przez CARTINI i uruchomienie przez CARTRUN (0 - tylko inicjowanie) * bit 2 = 1 wykonaj inicjowanie przez CARTINI i uruchomienie przez CARTRUN (0 - tylko inicjowanie)
 +* 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 B.</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 - 1 = 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>
-{{stub}}+=== Przykład nagłówka ===
 + 
 +Wewnętrzny [[Atari BASIC]] w XL/XE to kartridż A. Ma on następujący nagłówek:
 + 
 +<table border="1" cellpadding="5">
 +<tr><th>Etykieta</th><th>Wartość</th><th>Objaśnienie</th></tr>
 +<tr><td>CARTRUN</td><td>$A000</td><td><p>Adres uruchomienia.</p></td></tr>
 +<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]]"
 + 
[[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ć:

AdresyEtykietaFunkcja
Cartridge B (tylko 400/800)
$9FFA-$9FFBCARTRUN (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:

  1. wartość komórki TSTDAT ($07) różna od $00,
  2. bit 2 CARTOPT (B) równy 1.

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.

$9FFCCARTINS (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).

$9FFDCARTOPT (B)

Znaczniki:

  • 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)

W obecności obu kartridży odczyt z dyskietki jest dozwolony, gdy zezwala nań co najmniej jeden kartridż.

$9FFE-$9FFFCARTINI (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:

  1. mniej niż 144 strony (36 KB) podstawowej pamięci RAM, oraz
  2. rejestr CARTINS (B) równy $00.

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-$BFFBCARTRUN / 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:

  1. wartość komórki TRAMSZ ($06) różna od $00,
  2. bit 2 CARTOPT równy 1.

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.

$BFFCCARTINS / 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).

$BFFDCARTOPT / CARTFG

Znaczniki:

  • bit 7 - rodzaj kartridża (0 zwykły, 1 - diagnostyczny)
  • bit 6 - niewykorzystany
  • bit 5 - niewykorzystany
  • bit 4 - niewykorzystany
  • bit 3 - niewykorzystany
  • bit 2 = 1 wykonaj inicjowanie przez CARTINI i uruchomienie przez CARTRUN (0 - tylko inicjowanie)
  • bit 1 - niewykorzystany
  • bit 0 - wstępny odczyt z dyskietki (0 - zabroniony)

Na 400/800 w obecności obu kartridży odczyt z dyskietki jest dozwolony, gdy zezwala nań co najmniej jeden z nich.

$BFFE-$BFFFCARTINI / 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:

  1. na 400/800: po zainicjowaniu kartridża B,
  2. na XL/XE: po sprawdzeniu, czy klawisz START jest przyciśnięty (jego stan znajduje się pod CKEY $03E9 = $01, gdy naciśnięto),

ale przed otwarciem edytora ekranowego. Do inicjowania muszą zostać spełnione następujące warunki:

  1. mniej niż 176 stron (44 KB) podstawowej pamięci RAM, oraz
  2. rejestr CARTINS równy $00.

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:

  1. rejestr TRIG3 sygnalizuje obecność kartridża w gnieździe;
  2. CARTINS równy $00,
  3. bit 7 CARTOPT równy 1.

W 400/800:

  1. CARTINS równy $00,
  2. zawartość CARTINS nie daje się zmodyfikować
  3. bit 7 CARTOPT równy 1.

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:

EtykietaWartość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

Personal tools