atarionline.pl
atarionline.pl Atari
Login:
Hasło:
Zapamiętaj mnie
Translate to RSS RSS
Co nowego dla Atari Portfolio? z 2024-09-19 19:43 (0)
Najmniejsze Atari cz. II z 2024-09-17 21:07 (4)
Nadlatuje polski sokół! z 2024-09-12 18:44 (16)
Atarowskie maleństwo po raz piąty! z 2024-09-09 18:58 (2)
Pamiętniczek dinozaurowych koderów z 2024-09-05 14:01 (12)
"Mafia" - od zera do supergangstera z 2024-09-03 23:55 (20)
Wkrótce spotkania z 2024-09-02 20:38 (5)
Ankieta dla zainteresowanych efektami w demie z 2024-08-30 17:54 (22)
Autorzy o demie "The Coders' Guide to the Demoscene" z 2024-08-26 14:29 (35)
Przejście gry "Auf Wiedersehen Monty" z 2024-08-26 14:23 (9)
Autorzy "Technical Difficulties" z 2024-08-25 16:58 (9)
Autorzy o "Auf Wiedersehen Monty" z 2024-08-23 20:56 (13)
Demo "The Coders' Guide to the Demoscene" w szczegółach z 2024-08-22 14:27 (4)
Gra "Auf Wiedersehen Monty" w szczegółach z 2024-08-21 19:11 (9)
Wyniki letniej edycji Silly Venture 2024 z 2024-08-19 16:40 (11)
Trwa letnia edycja Silly Venture 2024 z 2024-08-17 11:09 (9)
KWAS #34 w Krakowie z 2024-08-13 16:12 (30)
Tony - mapa i przejście z 2024-08-11 18:55 (5)
DCart dla wszystkich! z 2024-08-08 22:18 (23)
TOSSTer wytłumaczony z 2024-08-04 13:12 (2)
«« nowszestarsze »»

Pomocnik/Helper
Gry/Games

Katalog gier (konwencja Kaz)
Aktualizacja: 2024-10-27
Liczba katalogów: 8503, liczba plików: 37151
Zmian katalogów: 13, zmian plików: 23

0-9 A B C D
E F G H I
J K L M N
O P Q R S
T U V W X
Y Z inne
zipCałość 2934 MB

Katalog gier (konwencja TOSEC)
Aktualizacja: 2021-07-11

Opisy gier
"Old Towers" (Atari ST) opisał Misza (19)
Submarine Commander opisał Kaz (35)
Frogs opisał Xeen (0)
Choplifter! opisał Urborg (0)
Joust opisał Urborg (16)
Commando opisał Urborg (35)
Mario Bros opisał Urborg (13)
Xenophobe opisał Urborg (36)
Robbo Forever opisał tbxx (16)
Kolony 2106 opisał tbxx (3)
Archon II: Adept opisał Urborg/TDC (9)
Spitfire Ace/Hellcat Ace opisał Farscape (8)
Wyspa opisał Kaz (9)
Archon opisał Urborg/TDC (16)
The Last Starfighter opisał TDC (30)
Dwie Wieże opisał Muffy (19)
Basil The Great Mouse Detective opisał Charlie Cherry (125)
Inny Świat opisał Charlie Cherry (17)
Inspektor opisał Charlie Cherry (19)
Grand Prix Simulator opisał Charlie Cherry (16)
«« nowszestarsze »»

Wewnętrzne/Internals



   Nowinki tworzone dzięki CuteNews
Projektowanie cartów
Zenon Rakoczy napisał:

Poniższy tekst zawiera prawie wszystkie (a na pewno wszystkie niezbędne informacje) o cartridge'u - tym najcudowniejszym rozszerzeniu dla Atari. Wzbogacony jest niezbędnymi schematami ideowymi oraz opisem moich doświadczeń w projektowaniu różnorakich cartridge'y.

1. Opis styków gniazda cartridge'a

Styki ułożone są w dwu rzędach po 15 styków w każdym. Na poniższym schemacie przedstawiony jest widok i opis styków gniazda cartridge’a dla Atari 800XL po rozsunięciu „klapek”:



Kolejny schemat, to widok gniazda cartridge’a komputerów serii XE. Gniazdo widziane od strony tylnej Atari:



CCTL - sygnał sterowany przez dekoder adresowy Atari. Stan niski informuje, że na szynie adresowej pojawił się adres strony $D5 pamięci czyli adres z przedziału $D500-$D5FF.
RD4 - stan wyskoki informuje układ MMU o konieczności przełączenia bloku 8kB pamięci w przestrzeni adresowej $8000-$9FFF. Sygnał generowany jest przez układ elektroniczny cartridge’a.
RD5 - stan wykoki informuje układ MMU o konieczności przełączenia bloku 8kB pamięci w przestrzeni adresowej $A000-$BFFF. Sygnał generowany jest przez układ elektroniczny cartridge’a.
S4 - sygnał sterujący, przyjmuje stan niski gdy sygnał RD4=1 oraz na szynie adresowej pojawi się adres z przedziału $8000-$9FFF. Sygnał generowany jest przez układ MMU.
S5 - sygnał sterujący, przyjmuje stan niski gdy sygnał RD5=1 oraz na szynie adresowej pojawi się adres przedziału $A000-$BFFF. Sygnał generowany jest przez układ MMU.
F/2 - podstawowy sygnał zegarowy wyznaczający takt pracy procesora i pozostałych układów Atari. Zbocze opadające jest zboczem aktywnym dla operacji zapis/odczyt ustabilizowanych danych na szynie danych. W nietypowych zastosowaniach zboczem aktywnym jest zbocze narastające.
R/W - sygnał odczytu (R - stan wysoki ) lub zapisu (W - stan niski) dla operacji zapis/odczyt danych, np. do rejestru sprzętowego cartridge’a.
GND - masa, ujemny biegun zasilania.
Vcc - zasilanie +5V.
D0-D7 - szyna danych.
A0-A12 - szyna adresowa.

2. Cartridge w pamięci komputera

Dla cartridge’a przewidziano w przestrzeni adresowej pamięci konkretne umiejscowienie. Pamięć cartridge’a stanowią dwa bloki 8kB. Pierwszy ulokowany jest w przestrzeni adresowej $8000-$9FFF, drugi w przestrzeni adresowej $A000-$BFFF. Przełączaniem bloków (pamięć Atari - pamięć cartridge”a) zarządza układ MMU na płycie Atari. Dwa sygnały sterujące uaktywniają dany blok pamięci, kolejne dwa informują układ MMU o konieczności przełączenia danego bloku.

Cartridge w przestrzeń adresową Atari włączony może być na różne sposoby:
  • jako blok pamięci 8kB włączony w obszar $8000-$9FFF,
  • jako blok pamięci 8kB włączony w obszar $A000-$BFFF,
  • jako blok pamięci 16kB włączony w obszar $8000-$BFFF,
  • jako blok pamięci o mniejszej pojemności w powyższych konfiguracjach,
  • cartridge może w ogóle nie zawierać pamięci. Funkcjonować może na zasadzie użycia rejestrów sprzętowych umieszczonych na stronie $D5xx.

Na potrzeby urządzeń podłączanych do gniazda cartridge’a wydzielona jest strona $D5 pamięci Atari. W rozbudowanych cartridge’ach tu umieszcza się rejestry sprzętowe służące między innymi do przełączania bloków pamięci cartridge’a. Kilka poglądowych schematów wyjaśnia zasadę wyżej opisaną:



Schematy zamiast potoku słów

Mamy zadanie: zaprojektować cartridge o pojemności pamięci 8kB. Cartridge włączony ma być w przestrzeń adresową Atari $8000-$9FFF. Podać opis schematu i zasadę działania.

Do pamięci EPROM 8kB doprowadzone są sygnały danych D0-D7, sygnały adresowe A0-A12 oraz zasilanie Vcc, GND. Sygnał OE=0 więc z pamięci można odczytywać dane. Sygnał RD4=1 poprzez połączenie go z Vcc. Informuje MMU o potrzebie przełączenia pamięci w obszarze $8000-$9FFF. Z chwilą zaadresowania obszaru $8000-9FFF sygnał S4=0 tym samym CS=0 i pamięć EPROM zostaje uaktywniona. Można odczytać dane z zaadresowanej komórki pamięci cartridge’a.



A tak należy podłączyć pamięć według powyższych założeń, ale w przestrzeń adresową $A000-$BFFF. Jak widać, zamiast sygnałów S4 i RD4, użyć należy sygnałów S5 i RD5:



Powyższe rozwiązania zakładają użycie tylko jednej przestrzeni adresowej przeznaczonej dla cartridge’a. $8000-$9FFF lub $A000-$BFFF. Możliwe jest wykorzystanie 16kB przewidzianych dla cartridge’a. Oto schemat z użyciem dwu pamięci, jako oddzielnych kostek, każda po 8kB. Styki RD4, RD5 połączone są z Vcc, czyli wymuszony jest na nich stan 1, informujący MMU o potrzebie przełączenia pamięci w obszarach $8000-$9FFF i $A000-$BFFF. Z chwilą zaadresowania jednego z nich, sygnał S4 lub S5 przyjmuje wartość 0, uaktywniając odpowiednią pamięć w danym obszarze adresowym.



Od razu rodzi się myśl, by zamiast dwu oddzielnych pamięci 8kB zastosować jedną 16kB. Odpowiedni schemat takiego połączenia znajduje się poniżej.



Sygnał RD4 i RD5=1, więc MMU przełączy pamięć Atari na pamięć cartridge’a jako blok 16kB. Po zaadresowaniu $8000-$9FFF sygnał S4=0, tym samym A13=0, wybrana jest dolna połówka 8kB pamięci EPROM. Jednocześnie sygnał S5=1. Złożenie sygnałów S4 i S5 na bramce AND wygeneruje na jej wyjściu zero logiczne. Tym samym pamięć EPROM zostanie uaktywniona bo CS=0. Jeżeli zaadresowana zostanie przestrzeń $A000-$BFFF wtedy sygnał S5=0. Ponownie uaktywniona zostanie pamięć EPROM bo CS=0. W tym czasie sygnał S4=1, tym samym A13=1, więc wybrana zostaje górna połówka 8kB pamięci EPROM.

Zamiast bramki AND zastosować można bramkę diodową AND. Układ taki stosować można jako oszczędny lub z braku miejsca na płytce cartridge’a. Ostatecznie, dolne 8kB EPROM włączone jest pod adresy $8000-$9FFF, górne 8kB EPROM pod adresy $A000-$BFFF.

Nagłówek cartridge'a

System operacyjny Atari pozwala uruchomić program zapisany w pamięci cartridge’a jako BOOT. Dotyczy to gier i innych programów użytkowych. Nagłówek to informacja dla systemu, w jaki sposób uruchomić program. Składa się z sześciu bajtów które umieszczone muszą być pod adresami $BFFA-$BFFF. Oznacza to, że programu zapisanego tylko w przestrzeni $8000-$9FFF nie można uruchomić jako BOOT. Pod wskazanymi adresami powinny znaleźć się następujące dane, precyzujące nagłówek:

    $BFFA – LSB adresu startu programu
    $BFFB – MSB adresu startu programu
    $BFFC – bajt, który musi być zerem
    $BFFD – bajt opcji, poszczególne bity mają znaczenie jak niżej:
    • Bit 0 = 0 – Niedozwolony BOOT dla stacji dysków
    • Bit 0 = 1 – BOOT dla stacji dysków może być przeprowadzony
    • Bit 2 = 0 – Tylko zainicjowanie cartridge’a bez uruchamiania programu
    • Bit 2 = 1 – Inicjalizacja i start programu z cartridge’a
    • Bit 7 = 0 – Jest to normalny cartridge
    • Bit 7 = 1 – Jest to cartridge diagnostyczny
    $BFFE – LSB adresu inicjalizacji
    $BFFF – MSB adresu inicjalizacji


System Atari w czasie trwania BOOT, próbuje zainicjować cartridge wedle procedury, której adres wskazuje nagłówek. Procedura inicjalizacji może być lub może jej nie być. Jeżeli jest, powinna kończyć się rozkazem RTS; jeżeli jej nie ma, adres inicjalizacji powinien wskazywać dowolny rozkaz RTS w pamięci komputera. Aby nie szukać RTS’a, proponuję poszerzyć wielkość nagłówka o jeden bajt (jeżeli pozwala na to tworzone oprogramowanie). Pod adresem $BFF9 można umieścić kod ($60) RTS’a, wtedy adres inicjalizacji może odwoływać się do niego.

Przykład budowy nagłówka cartridge’a

Cartridge nie jest diagnostycznym, więc w bajcie opcji bit D7=0. Program główny rozpoczyna się od adresu $A000, natomiast procedura inicjalizacji rozpoczyna się od adresu $B000. Dozwolony jest BOOT z dysku.

    $BFFA - $00… młodszy bajt adresu startu programu głównego
    $BFFB - $A0… starszy bajt adresu startu programu ($A000)
    $BFFC - $00… bajt = 0, informacja dla systemu że cartridge jest w gnieździe
    $BFFD - $05… bit 0=1, dozwolony BOOT dla stacji dysków, Bit 2 =1, inicjalizacja i start programu z cartridge’a
    $BFFE - $00… młodszy bajt adresu inicjalizacji
    $BFFF - $B0… starszy bajt adresu inicjalizacji ($B000)


Od adresu $A000 musi rozpoczynać się program główny umieszczony w pamięci cartridge’a. Od adresu $B000 musi rozpoczynać się procedura inicjalizująca, zakończona rozkazem RTS ($60). Po włączeniu komputera, gdy cartridge jest włożony do gniazda, MMU odłączy BASIC i w jego miejsce włączy pamięć cartridge’a. System sprawdzi czy cartridge jest obecny w gnieździe na podstawie odczytu bajtu spod adresu $BFFC. Następnie zainicjuje cartridge, wykona to procedura umieszczona w pamięci cartridge’a od adresu $B000. Po jej wykonaniu uruchomi program główny umieszczony w pamięci cartridge’a od adresu $A000.

Jeżeli nagłówek jest tak skonstruowany, że w bajcie opcji ($BFFD) bit D7=1, system rozpozna, że w gnieździe jest cartridge diagnostyczny. Umieszczona w pamięci cartridge’a procedura/program przejmuje kontrolę nad całym systemem Atari przed zainicjowaniem go i wykonaniem pełnego BOOT. Można w ten sposób przejąć kontrolę nad systemem Atari lub zdiagnozować go. Temat zostanie szerzej omówiony w dalszej części dokumentacji.

Kilka pytań i odpowiedzi do omówionych zagadnień

Czy pamięć cartridge’a musi być typu EPROM?

Nie, nie musi. Może to być pamięć PROM, EEPROM, SRAM, itp. Może być nawet pamięcią dynamiczną, tyle że zadbać należy o zaprojektowanie mechanizmu odświeżania jej.

Czy pamięć cartridge’a musi mieć pojemność 8kB lub 16kB?

Nie, nie musi. Można zamontować pamięć o pojemności np. 2kB, 4kB lub mniejszą 1kB. Po prostu dla pamięci o mniejszej pojemności nie używa się wszystkich sygnałów adresowych. Dla pamięci 4kB umieszczonej tylko w przestrzeni adresowej $8000-$9FFF nie używa się sygnału A12. W takim wypadku dana komórka adresowana może być dwa razy, raz jako $8000 i drugi raz jako $9000. Następuje tzw. „zawijanie” adresów. Tak zaadresowana komórka da ten sam odczyt , a wpis danej pod adres $9000 w rzeczywistości wykona się pod adres $8000.

Jeżeli pamięć cartridge’a ma mniejszą pojemność niż 8kB to pod jakimi adresami umieścić należy nagłówek dla cartridge’a?

Zawsze pod najwyższymi, według zasady opisanej wyżej. Jeżeli pamięć ma pojemność 4kB to nagłówek umieścić należy pod adresami $FFA-$FFF rzeczywistej pamięci. Pamięć umieszczona w cartridge’u i włożona do gniazda znajdzie się w przestrzeni adresowej $A000-$AFFF. Nie używa się sygnału adresowego A12, tak więc system adresy $AFFA-$AFFF potraktuje jako $BFFA-$BFFF i po włączeniu zasilania nastąpi BOOT z cartridge’a.

Czy pamięć cartridge’a może mieć większą pojemność niż 8kB lub 16kB?

Tak, może mieć. W takim wypadku stosuje się rejestr sprzętowy adresujący pamięć jako bloki po 8kB lub 16kB. Można też zastosować pojemniejszą pamięć umieszczając program czy dane tylko w przewidzianej pojemności 8kB lub 16kB, rezygnując z pozostałej pojemności.

Czy z poziomu BASIC’a można odczytać dane znajdujące się w pamięci cartridge’a?

Jeżeli cartridge używa tylko pamięci w przestrzeni $8000-$9FFF to bez problemu. Poniższa procedura odczyta 8kB danych i umieści je jako znaki ASCII w zmiennej tekstowej A$:

10 DIM A$ (8192)
20 FOR K=0 TO 8191: A$(K+1, K+1) = CHR$ (PEEK(32768+K))
30 NEXT K


Jeżeli cartridge używa pamięci w przestrzenia $A000-$BFFF to należy dokonać modyfikacji cartridge’a. Odciąć sygnał RD5 od styku gniazda cartridge’a i połączyć go do styku RD4. Odciąć sygnał S5 od gniazda cartridge’a i połączyć go do styku S4. Odczytu danych dokonać można powyższą procedurą. Zwrócić należy uwagę na to, że dana odczytana spod adresu $8000 w rzeczywistości znajduje się pod adresem $A000 i tak dalej.

Jeżeli cartridge ma pojemność 16kB to odciąć należy sygnał RD5 od gniazda cartridge’a (chodzi o to, by nie wykonał się BOOT) i powyższą procedurą odczytać dane z przestrzeni $8000-$9FFF. Następnie odciąć sygnał RD4 od styku gniazda i połączyć do niego sygnał RD5. Odłączyć należy sygnały S4 i S5 od styków gniazda i powyższe sygnały połączyć do gniazda odwrotnie. Powyższą procedurą odczytać można dane z przestrzeni $8000-$9FFF. W rzeczywistości są to dane z przestrzeni $A000-$BFFF.

Cartridge RAM-Cart

Odrębną grupę cartridge’a stanowią modele RAM-CART. Różnią się od standardowych zastosowaniem pamięci SRAM oraz podtrzymaniem bateryjnych zawartości pamięci po wyłączeniu zasilania. Niżej zamieszczony jest schemat RAM-CARTA o pojemności 8kB. Pamięć umieszczona jest w przestrzeni adresowej $8000-$9FFF:



Z bramek NAND zbudowany jest klasyczny układ Zapis/Odczyt uwzględniający dla tych operacji sygnał R/W oraz F/2. Opadające zbocze sygnału zegarowego F/2 dokonuje wpisu danej lub odczytu danej z zaadresowanej komórki pamięci.

Bateria 3V podtrzymująca zawartość pamięci SRAM w momencie odłączenia napięcia zasilania odseparowana jest diodą od napięcia zasilającego Vcc. Opornik włączony pomiędzy wejście CS a zasilanie wprowadza pamięć SRAM w stan niskiego poboru prądu, gdy odłączone jest napięcie zasilania Vcc.

Przed włączeniem zasilania przełącznik P powinien być w pozycji B, wtedy zablokowany jest wpis danych do pamięci SRAM. W czasie wykonywania BOOT, MMU przełączy obszar pamięci $8000-$9FFF bo w tym miejscu znalazła się pamięć SRAM cartridge’a (RD4=1). Sprawdzając dostępną wielkość pamięci, system ustali że obszar pamięci $8000-$9FFF nie jest pamięcią zapisywalną i między innymi umieści DL (Display List) w innym miejscu. Gdy wykona się BOOT i zgłosi się BASIC, przełącznik należy ustawić w pozycję A. Od tej pory do pamięci SRAM (do RAM-CARTA) można wpisywać dane i odczytywać je. Oczywiście, jeżeli dane mają być tylko odczytywane przełącznik P może pozostać w pozycji B. Po zapisaniu danych w pamięci RAM-CARTA a przed wyłączeniem zasilania, przełącznik P należy ustawić w pozycji B, zabezpieczy to pamięć przed przypadkowym wpisem w momencie wyłączenia zasilania.

Jeżeli w momencie włączenia zasilania, przełącznik P jest w pozycji A, system w czasie wykonywania BOOT ustali, że pamięć RAM-CARTA jest normalną pamięcią i umieści w niej DL. Zapisanie danych do pamięci RAM-CARTA, jeżeli znajdą się w obszarze DL, spowoduje że na ekranie pojawi się tak zwana „kaszana”. Brak DL skutkuje tym, że ANTIC nie generuje prawidłowo obrazu, stąd wspomniany efekt widoczny na ekranie. Można przywrócić prawidłowe ulokowanie DL poprzez przestawienie przełącznika P w pozycję B, naciśnięcie RESET w Atari i przestawienie przełącznika w pozycję A. DL ulokuje się poniżej pamięci RAM-CARTA i możliwe będzie prawidłowe zapisywanie do niego danych.

Oczywiście RAM-CART umieszczony może być w obszarze $A000-$BFFF. Wystarczy na schemacie sygnał RD4 zamienić na RD5, a sygnał S4 na S5. Oczywistym jest, że w momencie włączenia zasilania system będzie próbował uruchomić RAM-CART jak normalny cartridge, poszukując nagłówka (którego nie ma). Nastąpi zatem wykrycie błędu i system wywoła SELF-TEST. Jeżeli aktywna jest stacja dysków to nastąpi próba BOOT z dyskietki. Jeżeli znajduje się na niej DOS, zostanie załadowany i uruchomiony. Z poziomu DOSa lub innego programu przez niego uruchomionego można mieć dostęp do pamięci RAM-CARTA na zasadach opisanych wyżej.

Rejestr sprzętowy

Projektanci Atari ustalili, że strona $D5 przeznaczona będzie do wykorzystania przez urządzenia dołączane do gniazda cartridge’a. W czasie normalnej pracy Atari system nie używa tej strony i 256 komórek pamięci jest po prostu odłączonych, nie ma tam nic. Odczyt danej spod adresów $D500-$D5FF daje wartość $FF. Dzieje się tak dlatego, że procesor odczyta daną z szyny danych, która jest w stanie wysokiej impedancji. Jednak nie we wszystkich komputerach. Niektóre modele komputerów nie maja zamontowanych ośmiu oporników „podciągających” szynę danych do Vcc (zapewne ze względów oszczędnościowych). W takich modelach odczyt spod wymienionych adresów daje przypadkowy wynik, który zawierać się może w przedziale $00-$FF. Poniższa procedura pozwala przetestować czy oporniki są wmontowane czy nie.

10 FOR K=54528 TO 54528+256
20 IF PEEK(K) < 255 THEN PRINT “Brak opornikow”
30 NEXT K


Jeżeli oporników nie ma wystarczy je wlutować na szynę danych. Osiem sztuk oporników o wartości 4k7. Każdy do jednej linii danych D0-D7, drugie końcówki połączyć do +5V. W pewnych sytuacjach dzięki temu uniknąć można błędnego działania niektórych cartridge, szczególnie tych, które mają rejestr sprzętowy przewidziany do odczytu.

W szczególności na stronie $D5 umieścić można pamięć RAM (SRAM) i używać jej jak normalnej pamięci operacyjnej. Jednak umieszcza się tu rejestry sprzętowe dołączanych urządzeń. Rejestr sprzętowy może być tylko do zapisu, tylko do odczytu lub do zapisu i odczytu. Może być rejestrem jednobitowym lub 1-8 bitowym. Część bitów może służyć tylko do zapisu, a część tylko do odczytu. Projektanci mają tu szerokie pole do działania. Dodatkowo, ustawienie rejestru odbywać się może poprzez wpis do niego danej (D0-D7) lub rejestr może być zapisywany stanem szyny adresowej A0-A15 (w większości przypadków używa się ośmiu bitów A0-A7).

Strona $D5 pomieścić może 256 rejestrów ośmiobitowych. W większości przypadków umieszcza się tylko jeden i w dodatku sterowany tylko jednym bitem szyny danych np. D0. Jeżeli rejestr jest jeden, zazwyczaj dostępny jest pod dowolnym adresem strony $D5. Niemniej, dążyć należy do tego by każdy rejestr dostępny był tylko pod jednym adresem, unika się wtedy kolizji w jego sterowaniu we współpracy z innymi cartridge’ami. Na przykład współpraca cartridge’a z modułem SpartaDOS X wymaga by rejestr miał przydzielony konkretny adres/adresy.

Pora na praktyczne przykłady rozwiązań rejestru, który nie jest niczym innym jak zestawem przerzutników typu D. Co nie znaczy że w jego roli nie mogą być zastosowane inne przerzutniki, na przykład r-s. W najprostszym przypadku rejestr może symulować bramka NOT.

Zadania: zaprojektować rejestr sprzętowy dostępny pod dowolnym adresem strony $D5. Rejestr ma być tylko do zapisu; zaprojektować cartridge o pojemności pamięci 4kB z wykorzystaniem rejestru sprzętowego.



Po włączeniu zasilania kondensator i opornik generują impuls ujemny, który na wyjściu Q przerzutnika r-1 ustawia 1. Zaadresowanie strony $D5 powoduje że sygnał CCTL = 0, zatem zmienia stan przerzutnika r-s. Cykl może się powtórzyć, po wyłączeniu i włączeniu komputera.

Tego rodzaju rejestr stosowany jest, by po uruchomieniu oprogramowania znajdującego się w pamięci cartridge, odłączyć go, przywracając w miejsce pamięci cartridge’a standardową pamięć Atari (blok 8kB lub 16kB). Na schemacie cartridge’a widoczne jest sterowanie sygnału RD5 poprzez przerzutnik r-s. Sterowanie przerzutnika zostało zmodyfikowane poprzez dodanie przycisku P. W czasie, gdy komputer zawiesi się lub zajdzie potrzeba ponownego uruchomienia programu z cartridge’a, niepotrzebnym staje się wyłączanie komputera i ponowne jego włączenie. Wystarczy nacisnąć przycisk P, co spowoduje że sygnał RD5=1. Potem należy nacisnąć RESET w Atari, by system rozpoznał że cartridge jest w gnieździe i wykonał BOOT uruchamiając ponownie zawarty w nim program.

Poniżej schemat sterowania rejestrami sprzętowymi tylko do zapisu:

Dekoder adresowy to układ 74138. Wejścia adresowe wybierają jedno z wyjść. Wybrane wyjście przyjmuje stan 0. Zostaje uaktywnione, gdy pojawi się sygnał zegarowy F/2, sygnał wpisu R/W=0, oraz gdy zaadresowana zostanie strona $D5, CCTL=0. Pierwszy rejestr Q1 dostępny jest pod adresami $D500 oraz $D502. Drugi rejestr Q2 dostępny jest pod adresami $D503 oraz $D507. Pojawienie się na szynie adresowej adresu $D500 lub $D503 powoduje, że na wyjściu Q danego rejestru pojawia się 1. Gdy na szynie adresowej pojawi się adres $D502 lub $D507 dany rejestr zostaje wyzerowany Q=0. Zastosowany dekoder jest dekoderem niepełnym, więc na przykład rejestr Q1 dostępny jest również pod adresami $D508, $D50QA i tak dalej… To samo dotyczy drugiego rejestru.



Dekoder adresowy to układ 74138. Adresuje dwa rejestry sprzętowe tylko do zapisu. Jeden z nich dostępny pod adresem $D500 i drugi pod adresem $D501. Dekodowanie jest niepełne więc rejestrom przypisanych jest po 128 adresów. Dane do wpisania do rejestrów pobierane są z szyny danych z bitu D0.
LDA #$00
STA $D500 ; zeruje pierwszy rejestr
LDA $01
STA $D501 ; zapisuje 1 do drugiego rejestru



W tym rozwiązaniu rejestr pod adresem $D500 sterowany jest bitem D0, natomiast rejestr pod adresem $D501 sterowany jest bitem D1.
LDA #$00
STA $D500 ; zeruje rejestr pierwszy
LDA #$02
STA $D501 ; wpisuje 1 do rejestru drugiego



W poprzednich przykładach rejestry były jednobitowe, tu przedstawiony jest rejestr dwubitowy, dostępny pod dowolnym adresem strony $D5, sterowany bitami szyny danych D0 i D1.
LDA #$00
STA $D500 ; zeruje dwubitowy rejestr
LDA #$02
STA $D500 ; wpisuje do rejestru liczbę 2, rejestr pierwszy jest zerowany, do rejestru drugiego wpisana jest jedynka
LDA #$01
STA $D550 ; inne zaadresowanie rejestru



Rejestr A jest do zapisu i odczytu, dostępny pod adresem $D500
LDA #$00
STA $D500 ; zapis (bit D0)
LDA $D500 ; odczyt (bit D0)

Rejestr B jest tylko do zapisu, dostępny pod adresem $D501
LDA #$02
STA $D501 ; zapis (bit D1)

Rejestr C jest tylko do odczytu, dostępny pod adresem $D503
LDA $D503 ; odczyt (Bit D1)


Na schemacie powyżej klasyczny dekoder adresowy sterowany jest poprzez bity adresowe A0, A1. Sygnał R/W też pełni rolę bitu adresowego. Zastosowane bramki buforów z wyjściami trójstanowymi zapobiegają tworzeniu się zwarć na szynie danych. Gdy generowany jest impuls zegarowy wpisujący daną do rejestru A lub B, wyjścia bramek buforów są w stanie wysokiej impedancji. Z kolei gdy dokonywany jest odczyt z rejestru, nie jest generowany impuls zegarowy wpisujący daną do rejestru A lub B. Wpis danej do rejestru C, który jest rejestrem tylko do odczytu, następuje przez współpracujące urządzenie, (patrz wejścia C i D). Z tego względu, że sygnał R/W wykorzystany jest jako bit adresowy możliwe jest naprzemienne adresowanie rejestrów tylko do zapisu, tylko do odczytu lub do zapisu i odczytu.

Pora na bardziej zaawansowany schemat cartridge’a o pojemności pamięci 128kB. Pamięć podzielona jest na banki po 8kB włączane w przestrzeń adresową $8000-$BFFF. Wybór banków dokonywany jest poprzez rejestr sprzętowy posiadający dekoder adresowy który pozwala zaadresować rejestr tylko jednym adresem (tu: $D5FF). Rejestr jest do zapisu i odczytu. Dodatkowo, można programowo odłączyć cartridge, lub programowo go włączyć. Bitem sterującym będzie bit D7, natomiast bitami D0-D3 adresowany jest wybrany bank... Zastosowana pamięć jest typu SRAM, jest to zatem RAM-CART, ale bez podtrzymywania bateryjnego jej zawartości. Rejestr sprzętowy jest rejestrem ośmiobitowym a nieużywane bity D4-D6 sterują diodami LED by całości nadać bardziej rozrywkowy charakter. Rejestr jest do zapisu i odczytu, z tym że w czasie odczytu bity D4-D6 zawsze będą podawały stan zero, a bity D0-D3 i D7 aktualną zawartość rejestru odnoszącą się do tych bitów.



Rejestr sprzętowy stanowi układ 74273 jako zespół ośmiu przerzutników typu D. W momencie włączenia zasilania układ R,C generuje ujemny impuls, który podany zostaje na wejście zerujące R rejestru sprzętowego. Wyjścia rejestru przyjmują stan zera, tym samym adresowany jest BANK-0 pamięci SRAM poprzez jej wejścia adresowe A13-A16. Stan wyjścia Q7 rejestru sprzętowego zostaje poprzez bramkę NOT zanegowany i steruje sygnałem RD4. Tak więc RD4=1 i stanowi informację dla MMU by w przestrzeni adresowej $8000-$9FFF odłączyć wewnętrzną pamięć RAM i w to miejsce włączyć zaadresowany BANK-0 pamięci cartridge’a.

Poprzez klasyczny układ Zapis/Odczyt zbudowany na bramkach NAND można do pamięci cartridge’a zapisywać lub odczytywać dane, w obrębie zaadresowanego BANKU-0 o pojemności 8kB. Dekoder adresowy dla rejestru sprzętowego to układ 7430 i 74138. Ośmiowejściowa bramka NAND generuje na wyjściu stan zero, gdy na szynie adresowej bity A0-A7 przyjmują wartość %11111111. Gdy na szynie adresowej dodatkowo adresowana jest strona $D5, sygnał CCTL=0. Dane do zapisu do rejestru pobierane są z szyny danych. Wykonanie:

LDA #%00000001
STA $D5FF


spowoduje, że na wyjściu Y0 dekodera adresowego pojawi się ujemny impuls, którego narastające zbocze wpisze daną do rejestru sprzętowego, adresując w tym przypadku BANK-1. Odczyt z rejestru sprzętowego wykona proste LDA $D5FF. Ujemny impuls z wyjścia Y4 dekodera adresowego uaktywni bufor trójstanowy 74244 i dane z jego wejść B pojawią się na wyjściach A, tym samym na szynie danych.

Jak można zauważyć, dzięki doprowadzeniu sygnału R/W (Odczyt/Zapis) do wejścia adresowego C dekodera adresowego, zero logiczne pojawia się na wyjściu Y0 albo na wyjściu Y4. Dzięki temu nie dochodzi do zwarć na szynie danych w momencie odczytu lub zapisu danych do rejestru sprzętowego. Do wyjść Q4-Q6 rejestru sprzętowego podłączone są diody LED które można zapalać lub gasić ustawiając lub zerując bity D4-D6 wpisywane do rejestru. Z kolei wejścia B (B4-B6) bufora 74244 podłączone są na stałe do GND więc odczyt z rejestru sprzętowego dla tych bitów da zawsze zero.

Cały cartridge można odłączyć programowo. Wykona to sekwencja rozkazów:

LDA #$1xxxxxxx ;x – wartość bitu dowolna
STA $D5FF


która spowoduje że sygnał RD4=0, więc MMU włączy w obszar $8000-$9FFF standardowy blok 8kB pamięci RAM komputera. Rejestr sprzętowy wyposażony jest w przycisk, który w dowolnej chwili zeruje rejestr. Zerowanie rejestru równoważne jest z ustawieniem sygnału RD4 w stan jedynki, więc po naciśnięciu potem RESET w Atari, system uaktywni cartridge i jego BANK-0. Czasami w tym momencie na ekranie monitora obraz może być zakłócony, to skutek nieprawidłowego działania DL. Naciśnięcie klawisza RESET przywróci porządek w systemie.

Kolejna porcja pytań i odpowiedzi

Ile rejestrów sprzętowych może mieć cartridge i jak mogą być konfigurowane?

Może ich mieć 256 i w każdym przypadku mogą to być rejestry ośmiobitowe. Można je zaprojektować na kilka sposobów:

1 – jako rejestry tylko do zapisu
2 – jako rejestry tylko do odczytu
3 – jako rejestry do zapisu i odczytu
4 – część rejestrów jako tylko do zapisu, część tylko do odczytu a część do zapisu i odczytu

Z kolei poszczególny rejestr może być tak zaprojektowany, że część bitów będzie tylko do zapisu, część tylko do odczytu a część do zapisu i odczytu
Tego typu rejestry nazwać można rejestrami o bezpośrednim dostępie, bo zaprojektować można cartridge z większą ilością rejestrów, wymaga to oczywiście rozbudowania elektroniki, ale jest możliwe. Takie rejestry sterowane będą przez dodatkowy dekoder.

Ile banków pamięci może zaadresować jeden rejestr sprzętowy?

Maksymalnie 256, jeżeli będzie to rejestr ośmiobitowy.

Jaką największą pojemność pamięci może posiadać cartridge?

Jeżeli cartridge będzie o dosyć „strzelistej” konstrukcji, to znaczy mieć będzie 256 rejestrów ośmiobitowych i każdy rejestr włączać będzie 256 banki 16kB w przestrzeń $8000-$BFFF to łatwo policzyć: 256 x 256 x 16384 = ... bajtów pamięci, czyli bardzo dużo. Ale nic nie stoi na przeszkodzie by rejestry sprzętowe sterujące pamięcią cartridge’a umieścić pod innymi adresami niż na stronie $D5. Jeżeli do tego celu wykorzystana zostanie na przykład przestrzeń adresowa $8000-$9FFF i banki będą 8kB to oczywistym jest, że 8192 rejestry ośmiobitowe zaadresują 8192 x 256 x 8192 = ... czyli też bardzo dużo bajtów pamięci.

Wiadomo, że Atari jest komputerem ośmiobitowym. Czy istnieje możliwość zaprojektowania rejestrów szesnastobitowych?

Jest tak możliwość. Jedną z nich jest użycie dwu rejestrów ośmiobitowych. W pierwszym cyklu zapisuje się pierwszy rejestr, w cyklu drugim, drugi rejestr, a ich zawartość traktuje się jako szesnastobitową dla na przykład przetwornika cyfrowo-analogowego. Ale można też zaprojektować jeden i tylko jeden rejestr sprzętowy szesnastobitowy, który w jednym cyklu zostanie zapisany. Zapis jest dwa razy szybszy od poprzedniego rozwiązania. Wadą jest, że może to być tylko jeden rejestr umieszczony na stronie $D5, gdyż informację ośmiu bitów przekazuje się poprzez szynę danych, a kolejnych ośmiu poprzez szynę adresową.

Jak zaprojektować elektronikę by dekoder adresowy dla rejestru sprzętowego adresował go tylko pod jednym adresem?

Jeżeli cartridge jest już działającym, znaczy się, jest to jakiś standardowy cartridge zawierający w sobie jakąś grę i jego rejestr sprzętowy może być adresowany pod dowolnym adresem strony $D5, można w tym celu użyć ośmiu diod krzemowych + jeden opornik.

Przykład: rejestr sprzętowy ma być adresowany TYLKO adresem $D500. Z analizy programu znajdującego się w pamięci cartridge’a wynika, że używany jest tylko ten adres, pomimo że mógł być używany dowolny strony $D5. Poniższy schemat podaje ewentualne, istniejące rozwiązanie oraz sposób modyfikacji przy użyciu ośmiu diod i opornika lub przy użyciu bramki logicznej:



Rejestr pierwszy adresowany jest dowolnym adresem strony $D5. Rejestr drugi adresowany jest tylko adresem $D5FF. A0-A7=11111111, diody są polaryzowane zaporowo i wejście A dekodera 74138 przyjmuje stan wysoki poprzez opornik. Rejestr trzeci adresowany jest tylko adresem $D500. A0-A7=00000000, i na wyjściu bramki NOR występuje stan wysoki podawany na wejście A dekodera 74138.

Nietypowe rozwiązania

Poniżej opisane zostały niestandardowe rozwiązania stosowane w cartridge’ach w celu zaoszczędzenia elementów elektronicznych lub upraszczających oprogramowanie sterujące.



Układy generują kilkusekundowy dodatni impuls. Po włączeniu zasilania, tranzystor (tranzystory) przewodzą, do linii RD4, RD5 doprowadzona jest jedynka logiczna i wykonać i może się standardowy BOOT według nagłówka umieszczonego w pamięci cartridge’a. Rozpoczyna się ładowanie kondensatora, które trwa kilka sekund. Gdy napięcie na nim osiągnie odpowiednio wysoki poziom (około 3.3V dla układu z jednym tranzystorem i około 2.6V dla układu dwu tranzystorowego) tranzystor (tranzystory) przestają przewodzić. Na wyjściu pojawia się logiczne zero. W tym czasie uruchomione oprogramowanie zawarte w pamięci cartridge’a zostało zainicjowane i pamięć cartridge’a może zostać przełączona na standardową pamięć Atari. Jak można zauważyć, układy mogą pełnić rolę swoistego rejestru sprzętowego, który służy do włączenia/wyłączenia pamięci cartridge’a. Przełączenie następuje na drodze czysto elektronicznej, a nie programowej, choć i to nie jest wykluczone.



Powyżej model rejestru sprzętowego do zapisu i do odczytu, który jednak działa tylko jako rejestr do zapisu. Po włączeniu napięcia zasilania generowany jest ujemny impuls, który podany na wejście ustawiające (S) przerzutnika typu D, wymusza na jego wyjściu Q stan wysoki. Polecenie STA $D500 powoduje, że na wyjściu Q pojawi się logiczne zero, natomiast LDA $D500 logiczna jedynka. W ten sposób sterować można sygnałami RD4, RD5 przełączającymi blok pamięci Atari – pamięć cartridge’a.



Powyższe układ mają możliwość odczytu zawartości bitu D6 po zaadresowaniu strony $D5xx. Pierwszy, zbudowany na bramkach typu otwarty kolektor i drugi zbudowany na standardowych bramkach, ale z zastosowaniem diody D1 symulującej wyjście bramki NAND jako otwarty kolektor. Jest to konieczne, aby nie dochodziło do zwarć na linii D6 szyny danych. Kondensator C (około 470pF) dołączony do linii CCTL opóźnia nieco ten sygnał, by układy prawidłowo działały. W momencie odczytu (LDA $D5xx) na linii D6 pojawia zero logiczne. Takie rozwiązanie pozwala wykryć czy cartridge jest w gnieździe. Gdy go nie ma, odczyt powinien dać wartość $FF (patrz: opis rejestru sprzętowego).



W celach oszczędnościowych stosować można uproszczone bramki zbudowane z kilku diod i opornika. Układ zastępuje bramkę AND. W momencie, gdy sygnał S4 lub S5 jest zerem, pamięć EPROM zostaje uaktywniona poprzez swoje wejścia OE i CS. Jednocześnie sygnał S4 służy jako bit adresowy wybierający połówki pamięci EPROM. Sytuacja, gdy zarówno S4 jak i S5 przyjmują stan niski jest wykluczona, wynika to z zasady adresowania pamięci cartridge’a. Jeżeli adresowana jest przestrzeń $8000-$9FFF wtedy sygnał S4 jest zerem, pamięć EPROM staje się aktywną i jednocześnie do wejścia adresowego A13 pamięci doprowadzone jest zero logiczne. Dolna połówka pamięci „widoczna” jest w powyższej przestrzeni adresowej. Jeżeli adresowana jest przestrzeń $A000-$BFFF wtedy sygnał S5 jest zerem, pamięć EPROM staje się aktywną, ale w tym czasie sygnał S4 przyjmuje stan jedynki logicznej, zatem poprzez wejście adresowe A13 adresowana jest górna połówka pamięci i jest ona „widoczna” w przestrzeni adresowej $A000-$BFFF.



Ten rejestr nazwać można rejestrem szeregowym. Stanowi go licznik binarny. Po włączeniu zasilania licznik jest zerowany i potem każde zaadresowanie strony $D5xx poprzez STA $D5xx zwiększa jego zawartość o jeden. Tym samym jego wyjścia Q posłużyć mogą do adresowania banków pamięci cartridge’a, co symbolicznie zaznaczono poprzez opis A13-A16. W czasie pracy takiego rejestru trudno określić jaka jest jego zawartość i jaką będzie po kolejnym zwiększeniu jego zawartości. Można wprowadzić rejestr cień w pamięci RAM komputera, który to rejestr cień będzie przechowywał liczbę odwołań do strony $D5xxx lub dobudować można układ odczytu jego zawartości. Rejestr taki współpracować może z cartridge’m zawierającym kilka gier. Po wyborze z MENU jednej z nich, program generuje wymaganą liczbę impulsów, tym samym rejestr wskaże właściwy bank z zawartością gry. Potem nastąpi jej uruchomienie.



Rejestr sprzętowy sterowany bitami szyny adresowej. Jak można zauważyć, wpis danej do rejestru następuje na narastającym zboczu sygnału zegarowego F/2. Spowodowane jest to opóźnieniami wnoszonymi przez bramki tworzące sygnał zegarowy dla rejestru 74175.Aby „zatrzasnąć” w rejestrze prawidłowe dane sygnał zegarowy dla rejestru powinien nieco wcześniej „złapać” dane pojawiające się na szynie adresowej. Tego typu rejestr zajmuje kilka adresów strony $D5, w tym wypadku osiem (D500-D507), dodatkowo adresy się „zawijają”. W stosunku do klasycznego rozwiązania, gdy rejestr sterowany jest sygnałami szyny danych, ten jest szybszy, bo wystarczy podać tylko odpowiedni adres, np. STA $D502.

Cartridge diagnostyczny

Jak nazwa wskazuje jest to cartridge służący do testów, w szczególności do wykrycia nieprawidłowości w działaniu komputera. Tym różni się od standardowego cartridge’a, że bajt opcji w nagłówku ma ustawiony bit D7. Bajt opcji znajduje się pod adresem $BFFD. W czasie wykonywania BOOT procedura reset inicjująca cały komputer wykrywa ten fakt już w początkowej fazie, przed zainicjowaniem jakiegokolwiek układu w komputerze. Dzięki temu, program umieszczony w pamięci cartridge’a diagnostycznego po przejęciu kontroli na całym komputerem „widzi” jego wnętrze w postaci, nazwijmy to, dziewiczej. Nazwa cartridge diagnostyczny jest nieco myląca, bo aby prawidłowo mógł wykonywać swoje funkcje spełnionych musi być kilka warunków. Po pierwsze procesor musi być sprawny, sprawna musi być pamięć RAM, i mówiąc szczerze, sprawne powinny być wszystkie układy komputera, a przynajmniej ich zdecydowana większość. Uszkodzenie jakiegokolwiek z nich zazwyczaj powoduje zwarcie na szynie danych lub adresowej, a wtedy nie ma mowy o uruchomieniu oprogramowania znajdującego się w pamięci cartridge’a diagnostycznego. Więc po co taki cartridge?

Projektanci tak sobie to wymyślili, że rolą użytkownika będzie określenie, do czego taki cartridge zostanie zaprojektowany i użyty. Niewątpliwie, w sprawnym komputerze pozwala podglądnąć jego wnętrze. Przemyślne oprogramowanie może kontrolować proces zainicjowania komputera do pracy, krok po kroku, wyświetlając wyniki testu, co jest nader pouczające dla chcących zgłębić tajemnice Atari. No a poza tym taki cartridge, na równoprawnych zasadach jak każdy inny wykorzystany może być do gier, umieszczenia na nim programów narzędziowych, etc. Tak, cartridge diagnostyczny służy do zdiagnozowania... nieuszkodzonego komputera.

Elektronika - oprogramowanie

Schemat wyjaśnia powiązania elektroniki cartridge’a z płytą główną:



Dekoder adresowy 74138 generuje ujemny impuls, gdy na szynie adresowej pojawi się adres strony pamięci $D5. Z jego pinu 10 wprowadzony jest sygnał CCTL. Do MMU do pinów 7 i 8 dochodzą sygnały RD4 i RD5 informujące o potrzebie przełączenia bloków pamięci w obszarach $8000-$9FFF i $A000-$BFFF. Sygnał te są „podciągnięte” opornikami 1k do GND, zatem gdy cartridge’a nie ma w gnieździe zarówno RD4 jak i RD5 przyjmują stan zera logicznego, co MMU interpretuje jako "nie przełączać". Dodatkowo, sygnał RD5 doprowadzony jest do pinu 11 (T3) układu GTIA. Steruje na drodze elektronicznej rejestrem TRIG3 o adresie $D013. Z MMU wyprowadzone są dwa sygnały S4 i S5 informujące stanem niskim, że na szynie adresowej pojawił się adres z zakresu $8000-9FFF lub $A00-$BFFF. Sygnały te są aktywne tylko wtedy gdy RD4 i/lub RD5 są w stanie wysokim.

Po uruchomieniu komputera, gdy cartridge jest w gnieździe procedura systemowa reset ustali czy cartridge jest obecny. W tym celu sprawdzana jest zawartość rejestru TRIG3 ($D013). Jeżeli zawiera jedynkę, cartridge jest obecny (sygnał RD5=1) i najprawdopodobniej można wykonać inicjowanie cartridge’a. Dodatkową informację niesie z sobą bajt nagłówka $BFFC, który musi być zerem. Oczywiście, dotyczy to sytuacji, gdy przełączona ma zostać przestrzeń adresowa $A000-$BFFF. Jeżeli przełączenie ma dotyczyć TYLKO przestrzeni adresowej $8000-$9FFF to gdy sygnał RD4=1, MMU dokona przełączenia, a procedura reset ustali tylko wielkość dostępnej pamięci RAM i na tej podstawie ewentualnie dokona odpowiednich ustawień, na przykład wpisze do odpowiednich rejestrów adres DL, gdy w w/w obszarze pamięcią jest pamięć nie zapisywalna. Jeżeli cartridge zostanie wykryty, zostaje ustalone jaki to cartridge. Odczytany zostaje bit D7 spod adresu $BFFD (bajt opcji nagłówka cartridge’a). Jeżeli D7=1, cartridge jest diagnostycznym i poprzez wykonanie bezwzględnego skoku pod adres zawarty w $BFFE, $BFFF (nagłówek cartridge’a) nastąpi jego uruchomienie. Gdy D7=0, chodzi o standardowy cartridge i dokonuje się dalsza inicjalizacja systemu Atari, w tym określenie czy pamięć cartridge’a jest zapisywalną czy nie. Po ustawieniu odpowiednich znaczników i wektorów, w tym odłączeniu lub nie BASIC’a, następuje zainicjowanie lub nie, i uruchomienie programu zawartego w pamięci cartridge’a.

Procedura reset oblicza miedzy innymi sumę kontrolną obszaru pamięci $BFF0-$C0EF. Jeżeli cartridge w czasie pracy komputera (gdy jest włączone zasilanie główne) zostanie z gniazda wyjęty lub zamieniony na inny, to raz: procedura systemowa reset wykryje ten fakt, ponieważ nowo obliczona suma kontrolna powyższego obszaru nie będzie zgodna z poprzednio obliczoną i zapamiętaną (chyba że dane w obydwu cartridge’ach będą tożsame), a dwa: w czasie inicjalizowania systemu zawartość rejestru TRIG3 ($D013) jest kopiowana do komórki pamięci GINTLK $03FA. Po wyjęciu cartridge’a z gniazda, najdalej po upływie 1/50 sekundy fakt ten zostanie wykryty poprzez porównanie zawartości TRIG3 i GINTLK które będą różne: TRIG3=0 natomiast GINTLK=1.

Wykryte nieprawidłowości spowodują albo zawieszenie się komputera, co tak naprawdę równoważne jest wywołaniu procedury WAIT ($C0DF), która oczekuje na naciśnięcie klawisza RESET, albo przejście do SELF-TEST’u, bez możliwości ponownego uruchomienia komputera, chyba że poprzez wyłączenie i ponowne włączenie zasilania. W czasie rozpoznawania cartridge’a niebagatelną rolę odgrywa jego nagłówek ($BFFA-$BFFF). Na jego podstawie, nie tylko cartridge zostanie uruchomiony, dokonać się może odczyt ze stacji dysków lub magnetofonu. Możliwa jest zatem współpraca cartridge’a ze stacją dysków lub magnetofonem.

Gniazdo cartridge w komputerach serii XEGS
Dwa gniazda cartridge'y w komputerach Atari 800


Na zamieszczonych schematach poglądowych można zauważyć, że rejestr sprzętowy jest automatycznie zerowany (ustawiany). Aby wykluczyć potrzebę wyłączania i włączania zasilania po zawieszeniu się komputera, można do elektroniki cartridge’a dobudować przycisk, który będzie „lokalnym resetem” dla całego systemu. Co to daje? Gdy komputer się zawiesi lub nastąpią jakieś inne nieprawidłowości, naciśnięcie tego przycisku a potem klawisza RESET w Atari spowoduje ponowne prawidłowe uruchomienie cartridge’a bez potrzeby „pstrykania” wyłącznikiem zasilania Atari, co jak wiadomo jego zdrowiu nie służy.

Mam nadzieję ze zamieszczone tu informacje pomogą w prawidłowym projektowaniu cartrige’a i tworzeniu dla niego oprogramowania.

2009-12-22 02:15 by Zenon
komentarzy: 12
Kaczor @2009-12-22 08:26:26
@ Zenon - ty to masz głowę do tego, bardzo interesujący artykuł.

Pozdrawiam!
Tomek @2009-12-22 12:46:31
Opis rewelka! Dzieki.
Marek Konopka @2009-12-22 20:47:56
W uzupełnieniu dopiszę, iż teoretyczna, maksymalna wielkość pamięci do zaadresowania przez stronę $D5xx to 2^(8*256), czyli 2^2048 (dwa do potęgi 2048). Praktycznych zastosowań naturalnie to nie może mieć żadnych.

Do tekstu wdarł się drobny błąd. Zamiast: "adresowej pojawi się adres przedziału $A0-$BFFF" miało zapewne być: "... $A000-$BFFF.

Merytoryczny, ciekawy artykuł.
Ramos @2009-12-22 21:57:21
Bardzo ciekawy artykuł.
Kaz @2009-12-22 22:20:01
Konop - błędzik poprawiony.
Tdc @2009-12-23 01:19:21
Piękna robota!
wegi @2009-12-23 07:58:29
Fachowca aż miło posłuchać!!
jhusak @2010-03-19 02:28:37
Zdanie:
"Dekoder adresowy dla rejestru sprzętowego to układ 7440 i 74138."
mniej więcej w połowie artykułu zamienić trzeba na:
"Dekoder adresowy dla rejestru sprzętowego to układ 7430 i 74138. "
jhusak @2010-03-19 02:53:53
i jeszcze:
jest ona „widoczna” w przestrzeni adresowej $A00-$BFFF.
na
jest ona „widoczna” w przestrzeni adresowej $A000-$BFFF.
Kaz @2011-03-09 16:17:32
Poprawione, dzieki.
jhusak @2012-05-05 17:11:36
i jeszcze:
"wyskoki" i "wykoki" na wysoki.
jhusak @2012-05-05 17:14:10
No i jeszcze ów (już) słynny merytoryczny błąd - zamienić:

S4 - sygnał sterujący, przyjmuje stan niski gdy sygnał RD4=0 oraz na szynie adresowej pojawi się adres z przedziału $8000-$9FFF. Sygnał generowany jest przez układ MMU.
S5 - sygnał sterujący, przyjmuje stan niski gdy sygnał RD5=0 oraz na szynie adresowej pojawi się adres przedziału $A000-$BFFF. Sygnał generowany jest przez układ MMU.

na

S4 - sygnał sterujący, przyjmuje stan niski gdy sygnał RD4=1 oraz na szynie adresowej pojawi się adres z przedziału $8000-$9FFF. Sygnał generowany jest przez układ MMU.
S5 - sygnał sterujący, przyjmuje stan niski gdy sygnał RD5=1 oraz na szynie adresowej pojawi się adres przedziału $A000-$BFFF. Sygnał generowany jest przez układ MMU.

Czyli RDx=1 zamiast RDx=0
nickname
e-mail / website (opcjonalnie)

Aktualne tematy
Turbo Blizzard płytki (5)
ostatni: 03-12-2024 18:31, Mq
Zdekompletowane płyty do XE (1)
ostatni: 03-12-2024 17:33, zaxon
Gra "TONY" (469)
ostatni: 03-12-2024 15:20, w1k
TV.EXE (8)
ostatni: 03-12-2024 14:04, Cyprian
Silly Venture 2024WE - in tribute... (127)
ostatni: 03-12-2024 11:29, greymsb
The400 (126)
ostatni: 03-12-2024 09:21, takron27
Silly Venture 2024 - bilety na po... (9)
ostatni: 02-12-2024 23:30, Alex
Silly Venture 2024 - wolny pokój ... (2)
ostatni: 02-12-2024 23:29, Alex
Zebuland (11)
ostatni: 02-12-2024 21:22, Kaz
Grupa Zelax - reaktywacja (41)
ostatni: 02-12-2024 19:03, Kaz
Pomagamy Atarowcowi! (7)
ostatni: 02-12-2024 14:42, maly_swd
Atari Poland na facebook-u (14)
ostatni: 02-12-2024 10:48, Kaz
KWAS (355)
ostatni: 02-12-2024 10:18, Kaz
F-16 Falcon Strike (symulator lotu) (64)
ostatni: 02-12-2024 10:13, Kaz
Silly venture 2024WE - wyżywienie (9)
ostatni: 02-12-2024 04:45, Bca

Kategorie Forum Atarum

Użytkowników: 2856
Ostatnio zarejestrowany: zenial
Postów ostatniej doby: 23

Spotkania i zloty/Meetings & Parties

Najbliższe imprezy
link do naszych spotkań online, zapraszamy do odwiedzenia kanału zoom również przez kod QR:

KWAS

Kalendarz AOL


Społeczność/Community


Rozmawiali
Wywiad z Mariuszem Jaroszem i Kaz (14)
Wywiad Dracona z Mr. Bacardim i Kaz (16)
Tomasz Dajczak i Kaz (22)
Lech Bąk i "Świat Młodych" i Kaz (26)
Michał "Mike" Jaskuła i Kaz (30)
F#READY i Dracon (22)
Daniel „Arctus” Kowalski i Dracon (25)
KATOD i TDC (15)
Mariusz Wojcieszek i "Adam" (17)
Romuald Bacza i Ramos (16)
Śledzenie Amentesa i Larek (9)
Leszek Łuciów i Charlie Cherry (17)
TO JUŻ ZA TOBĄ: rozmowa z Bobem Pape i cpt. Misumaru Tenchi (39)
Rob Jaeger i Emu (53)
Jacek "Tabu" Grad i Dracon (0)
Alexander "Koma" Schön i Kaz (0)
Maciej Ślifirczyk i Charlie Cherry (0)
Jarek "Odyniec1" Wyszyński i Kaz (0)
Marek Bojarski i Kaz (0)
Olgierd Niemyjski i Ramos (0)
«« nowszestarsze »»

Stragan
Nowe, pojemniejsze RAM-Carty oferuje Kaz (21)
"mouSTer" czyli myszka ST oferuje Kaz (30)
Atari USBJoy Adapter oferuje Jakub Husak (0)
Programy: Kolony 2106 oferuje Kaz (7)
Sprzęt: rozszerzenia oferuje Lotharek (128)
Gadżety: naklejki, pocztówki oferuje Sikor (11)
Sprzęt: cartridge RAM-CART oferuje Zenon (7)
Miejsce na drobne ogłoszenia kupna/sprzedaży oferuje Kaz (58)
Sprzęt: interfejs SIO2IDE oferuje Piguła (0)
Sprzęt: interfejs SIO2SD oferuje Piguła (58)

Użytki/Utils
Sprzęt/Hardware

Wynalazki
Atari i Bluetooth napisał Kaz (34)
SIO2PC-USB napisał Larek (45)
Nowe SIO2SD napisał Larek (0)
SIO2SD w CA12 napisał Urborg (12)
Ratowanie ATMEL-ów napisał Yoohaas (12)
Projektowanie cartów napisał Zenon (12)
Joystick do Atari napisał Larek (54)
Tygrys Turbo napisał Kaz (11)
Testowałem "Simple Stereo" napisał Zaxon (5)
Rozszerzenie 1MB napisał Asal (20)
Joystick trzyprzyciskowy napisał Sikor (18)
Moje MyIDE oraz SIO2PC na USB napisał Zaxon (16)
Jak wykonać płytkę drukowaną? napisał Zaxon (26)
Rozszerzenie 576kB napisał Asal (36)
Soczyste kolory napisał scalak (29)
XEGS Box napisał Zaxon (13)
Atari w różnych rolach napisał Różyk (9)
SIO2IDE w pudełku napisał Kaz (5)
Atari steruje tokarką napisał Kaz (15)
DarkMouse napisał Kaz (7)
«« nowszestarsze »»