Start | Super Packer | Atari Graphics Studio | Graph2Font | Mads | MadPascal | Atari Zines | YouTube http://madteam.atari8.info  
MEMBERS
PRODUCTIONS
S C E N E
G A M E S
T O O L S
V B X E
GRAPHICS
WORK IN PROGRESS
Bubble Shooter
HARDWARE
Snes2Joy / Pad4Aatari / TOM rev2
Sio2SD / Pajero
Sio2SD / Rocky
Stereo / Pajero
GTIA / Psychol
ANTIC + VBXE test
ARTICLES / MAGAZINES
DEMO EFFECTS
LINKS
   

Voy/SSG^Dial
Atari 7800 ProSystem... rządzi!


Pod koniec 1983 roku specjaliści od public relations z firmy Atari przepytywali tysiące ludzi, jak według nich powinna wyglądać idealna konsola video. Wynikiem tego było dojście do wniosku, że jedyną szansą Atari na rozwiązanie swoistego rodzaju zapaści na rynku domowych konsol gier video był nowy model, czyli Atari 7800 ProSystem.

Atari Inc. nawiązało więc współpracę z General Computer Corporation, z którym wcześniej wygrało proces dotyczący chipsetu "Speed-up" w swoich automatach wrzutowych (coin-op) - napomknąć muszę, że GCC w latach 1983-84 zajmowało się również tworzeniem gier na 2600, 5200, 400, 800 i serię XL. Atari poleciło im opracować nowy układ graficzny (później otrzymał nazwę MARIA, jakkolwiek można się spotkać z kryptonimem 7800 Project), posiadający poprawioną paletę. Jednym z warunków przyjęcia 7800 do produkcji miała być możliwość dołączania zewnętrznej klawiatury do gotowej konsoli (obudowa klawiatury została zaprojektowana przez Toma Paleckiego z Industrial Design Group, będącej pododdziałem firmy Atari - Tom najprawdopodobniej był również autorem projektu późniejszej serii XE :), zresztą niewiele było sprzętu, którego ostateczny kszałt nie powstałby w jego genialnym umyśle ^_^).

W okresie '83-'84 Atari 3600 (taką nazwę nosiło Atari 7800 przez parę pierwszych miesięcy projektu) zostało określone mianem "Najwyższego Priorytetu Firmy" ("Company #1 Priority"), a w wielu tzw. Atari Engineering Log Book (rodzaj ksiąg z opisem danych projektu i szczegółów jego opracowywania) zanotowano: "System 3600 ważniejszy jest od kontynuowania prac nad projektem Atari 1400/1450". W pierwotnych założeniach system miał być 10-bitowy; gdy więc okazano prototyp programistom z firmy, orzekli oni, że system jest zbyt trudny do programowania i prace nad poszczególnymi tytułami mogą się zanadto przeciągać. Podobno jednak znalazł się koder o inicjałach HSW, który napisał prototypowy testowy zestaw "Pac-Man"/"Mouse Trap".

Na szalę przyszłego zwycięstwa 7800 postawiono wszystko i wszystkich - by tego było mało, postanowiono dodać do zestawu kartridż High Score (autorstwa GCC); system 7800 więc miał być nie tylko konsolą do gier z dodaną klawiaturą, lecz w pełni funkcjonalnym komputerem z szerokimi możliwościami rozbudowy (wystarczyło tylko poprzez drugi port joysticka dołączyć moduł klawiatury i włożyć specjalny kartridż). Przyszłych nabywców skusić miała też oferta modułu do Atari 5200, zwanego "Slam-Pam" (autorstwa Gary'ego Rubio), pozwalającego na pełną kompatybilność z systemami 2600/7800 i tym samym możliwości korzystania z przeogromnej bazy gier.

W odróżnieniu od złożonej budowy manipulatorów 5200, manipulator Pro-Controller 7800 był prosty, wygodny i łatwy w obsłudze. Podobnie było z kszałtem obudowy - tym razem była ona niewielka i błyszcząca. By zapobiec nieporozumieniom związanym z koncepcją 5200, dotyczącą zupełnie innej budowy płyty i tym samym niezgodności formatu kartridży 5200 z 2600 (później temu zaradzono wypuszczając na rynek specjalny adapter [nie mylić z gramofonem ;) ]), postawiono na pełną zgodność programową z Atari 2600 VCS. Pozostawiono jednak "furtkę" w postaci specjalnego trybu 7800, pozwalającego na wykorzystanie możliwości układu MARIA. Atari doszło do wniosku, że powinno jakoś zabezpieczyć się przed zalaniem rynku przez pirackie kopie ich gier oraz gier bardzo niskiej jakości (jak to miało miejsce po wprowadzeniu 2600) i tym samym tryb podlegał aktywacji dopiero po użyciu firmowych kartridży Atari - trybem domyślnym był tryb 2600. Tryb 7800 włączał się dopiero po wykryciu 128 bajtów pod koniec pamięci pokrywających się ze schematem szyfrowania - w czasie tej operacji na ekranie wyświetlał się znaczek Atari.

Z tym szyfrowaniem tak w ogóle to jest ciekawa sprawa... Każdy kartridż (wg jednego ze źródeł tylko sprzedawane w USA) posiadał sygnaturę zaszyfrowania - przy czym nie chodzi o to, że zaszyfrowany był cały program znajdujący się na kartridżu, lecz o możliwość stwierdzenia autentyczności oprogramowania. Zaszyfrowanych było 960 bitów, więc po ich rozkodowaniu i stwierdzeniu poprawności uruchamiany był tryb 7800 - gdy brak cyfrowej sygnatury, to nie ma możliwości korzystania z zalet MARII. Wyżej wspomniane źródło nadmienia nawet, że to tylko prawo zakazujące wywozu tajemnic wojskowych za granicę (klucze 960-bitowe stosowane były w kryptografii wojskowej) spowodowało, że do Europy trafiły konsole i gry nie wymagające sprawdzania autentyczności i pozbawione wyświetlania logo Atari (nie wiadomo jednak, jak przechodziły do trybu 7800). Można stwierdzić, że te 960 bitów to swoistego rodzaju suma kontrolna, podlegająca analizie i ocenie. W jednym ze źródeł natknąłem się na opis możliwego sposobu użycia zabezpieczenia kluczem - oto on...

"Załóżmy, że napisałem pewną grę. Zgłaszam się do pewnej spółki produkującej kartridże; zawieram z nią umowę dotyczącą podziału zysków ze sprzedaży mojej gry. Upieram się na zastosowanie regionalnej kontroli [vide strefy DVD ^_^ - Voy] autentyczności - dla przykładu moja gra sprzedawana w Japonii nie uruchomi się na konsolach obecnych w USA i odwrotnie :). Dobra, przekazują mi ukończoną (chodzi o możliwość uruchamiania się na konsoli, bo ja dałem im tylko źródło) grę, a ja przepuszczam ją przez dwie funkcje matematyczne. Najpierw image kartridża leci przez funkcję zwaną "hash", dającą sumę kontrolną karta. Funkcje hash są zawsze nieodwracalnymi funkcjami typu trapdoor, które kompresują dane wejściowe do rozmiaru, z którym można coś zrobić. Więc biorę ultratajny, niesamowicie-dobrze-strzeżony "prywatny" klucz i przepuszczam przez niego to, co wyszło mi ostatnio :). Rezultatem tego jest nagłówek bezpieczeństwa.

Spółka daje mi bardzo duży czek, który realizuję w moim banku ;) i daję im nagłówek bezpieczeństwa. Biorą go sobie i robią tysiące kartridży z moją grą. Gdy użytkownik włoży kartridż do konsoli, zacznie ona analizować nagłówek i przepuszczać przez funkcję deszyfrującą przy użyciu klucza "publicznego". Muszę tu zaznaczyć: klucza "prywatnego", czyli tamtego, którego użyłem, NIE MA W KONSOLI. Funkcja szyfrująca nie jest obecna w konsoli - w niej są tylko klucz "publiczny" i funkcja deszyfrująca. Można powiedzieć, że bardzo trudnym jest (czy raczej jest to niemożliwe) otrzymanie wyglądu funkcji szyfrującej i/lub klucza prywatnego z funkcji deszyfrującej i/lub klucza publicznego. Ludzie obeznani z kryptografią powiedzieliby, że tu nieco generalizuję, ale... By załapać o co chodzi z tymi funkcjami, popatrz na to:

Naszą funkcją szyfrującą jest e(), a deszyfrującą funkcja zwana d().

          x=e(y,p1) y=d(x,p2)
 
   gdzie:
   x = jakieś cyferki (zaszyfrowany)
   y = czysty tekst (niezaszyfrowany)
   p1 = klucz prywatny
   p2 = klucz publiczny

Więc JEŚLI I TYLKO JEŚLI mam klucz p1 (prywatny), mogę zaszyfrować czysty tekst w cyferki i JEŚLI I TYLKO JEŚLI mam klucz p2 (publiczny) mogę zdeszyfrować cyferki w postać czystego. Ufff..."

No i tak to wygląda. Rzecz jest niesamowita, więc zostaje tylko dodać, iż chodzą plotki, że kilka lat temu Atari opublikowało źródła algorytmu szyfrującego 7800 przy okazji wydania Lynx Development Kit na Amigę (sic!). Co ciekawe, podobny mechanizm weryfikacji autentyczności stosowany był rzekomo w Atari Lynx (rzekomo, gdyż zamierzam to sprawdzić, a szczegółów spodziewajcie się w przyszłym numerze!


W 1984 roku Atari zostało sprzedane dotychczasowemu właścicielowi i twórcy Commodore Business Machines, czyli Jackowi Tramielowi. Ostatnią rzeczą, jaka przemknęłaby rodzinie Tramielów przez myśl, było sprzedawanie gier video. Tramiel chciał, by jego nową firmę zaczęto kojarzyć z nowym komputerem domowym, który miał ukazać się na rynku na początku 1985 roku - projekt Atari 7800 został więc zawieszony aż do odwołania. Wówczas Nintendo, które w 1983 roku nawiązać chciało współpracę co do sprzedaży ich nowej konsoli Famicon pod znakiem firmowym Atari, nie czuło się jeszcze na siłach pretendować do tytułu giganta rynku gier video. Spostrzegło, że Atari nie jest zainteresowane produkcją i sprzedażą ich systemu, opartego notabene na 6502; dodatkowo zniechęciła ich wypowiedź Michele Ebertin, szefa Consumer Electronics Division (dział handlowy Atari): "nabywcy nie tylko nie lubią dziwnego systemu video, który nie posiada joysticków - oni nienawidzą manipulatorów Nintendo". Nintendo obraziło się i sprzedało Famicon pewnej firmie ze Stanów, nazywając je "Nin- tendo Entertainment System" i z miejsca odniosło sukces handlowy. Atari Corp., widząc co się dzieje, do sprzedaży skierowało ukończony model 2600jr, który Atari Inc. pod wodzą Warner Comm. zdążyło opracować już w 1983 roku. Przekazano im też cały zespół materiałów produkcyjnych Atari 7800, gdzie ostatecznie ukończono prace nad systemem kierując go do sprze- daży w roku... Nie zgadlibyście :)... 1986!!! Było to znacznie za późno... Nintendo miało w garści cały rynek gier video - cały kram ;). Atari w tym wyścigu zajęło dopiero trzecie miejsce, uplasowując się za Segą, depczącą wraz ze swym Master System firmie Nintendo po piętach i marzyło o dawnych dobrych czasach, gdy niepodzielnie królowało przez długie lata na rynku konsol i automatów gier video. Ech, gdyby tylko Tramiel mógł poczekać odrobinę ze swoją serią XE...

Odeszliśmy nieco od głównego tematu... Pewnie z niecierpliwością oczekujecie szczegółów technicznych konsoli, a ja tu coś plotę o jej dziejach ^_^. Pora więc na przedstawienie podstawowych elementów systemu 7800.

PAMIĘĆ

W 7800 znajdują się dwa układy pamięci RAM o oznaczeniu 6116 (2Kx8) i zajmują adresy od $1800-$27FF (w sumie 4kB). Są również częściowo dostępne (cieniowane) w obszarach $0040-$00FF i $0140-$1FF w celu rozszerzenia strony zerowej (szybki dostęp) i pierwszej (patrz również "Mapa pamięci Atari 7800"). Wielkość wbudowanej pamięci stałej ROM wynosi także 4kB i zawiera się w adresach $F000-$FFFF; kod ROMu od adresu $F400 jest odbijany w RAM od adresu $2300 i przeznaczony do wykonania (w archiwum znajdziecie image ROMu 7800 :-). Maksymalnie do systemu może być dołączonych 52kB ROM.

PORTY WE/WY

Czyli dobrze znany układ 6532 (PIA, zwany też RIOT), użyty również w Atari 2600 VCS. W trybie 7800 wykorzystywany do operacji I/O, jakkolwiek w trybie 2600 służy za całą pamięć RAM i timery. Jego funkcje są nieco ograniczone, gdyż jest zbyt wolny do normalnego wykorzystywania; każdy dostęp do niego (joystick i przełączniki I/O) powoduje zwolnienie CPU do 1.19 MHz (patrz artek o 2600 :). Porty i przełączniki dołączone do 6532 to joysticki (bezpośrednio), Pause, Game Select, Game Reset oraz przełączniki trudności. Jako że jest to układ dwukierunkowy, może też wygenerować sygnały do portów joysticków. Jego wewnętrzna 128-bajtowa pamięć została przesunięta na stronę czwartą w stosunku do 2600, gdzie zajmowała stronę zerową. Patrz również artek "Mapa pamięci Atari 7800".

DŹWIĘK

Zadanie tworzenia dźwięku spadło na barki układu TIA (Television Interface Adapter - dokładniejszy opis tego układu znajduje się w poprzednim numerze "Seriousa"). W Atari 7800 oprócz wykonywania tego zadania wykorzystywane jest parę jego portów wejściowych. W trybie 2600 zajmuje adresy $0000-$003F, natomiast tylko częściowo dostępny jest w trybie 7800, gdyż widzialna jest tylko sekcja w obszarze $0000-$001F. Rejestrami znaczącymi (używalnymi) są jedynie rejestry uczestniczące w tworzeniu dźwięku i porty wejściowe (przyciski FIRE i wiosełka). Podobnie jak w przypadku 6532 dostęp do tego układu powoduje spowolnienie CPU do 1.19 MHz. Jedną z gier, które nie korzystały z mocy przerobowej TIA ;), jest "Ballblazer", posiadający własny układ dźwiękowy (sic!). Wg niektórych źródeł układem tym był POKEY! ^_^

PORT KARTRIDŻA

Bez problemu można wkładać do niego standardowe kartridże 2600, natomiast kartridże przeznaczone do "odpalania" w trybie 7800 są nieco większe. Posiada następujące dodatkowe linie: trzy linie adresowe (na złączu kartridża teraz jest ich dostępnych 16); linia R/W (READ/WRITE), więc RAM może być bardzo łatwo przydzielana do każdego kartridża; linia "Phase 2 clock" służy do obsługi kartridża z własnym procesorem (!); synchronizuje go z obecnym na płycie 6502C; linia EAudio pozwala na miksowanie sygnału dźwiękowego z kartridża z sygnałem TIA; linia złożonego sygnału obrazu, czyli jest możliwość doprowadzenia zewnętrznych sygnałów video oraz linia HALT, pozwalająca kartridżowi odróżniać dostępy układu MARIA do pamięci od dostępów mikroprocesora.

    Wyprowadzenia gniazda Cartridge
    -------------------------------
        1   R/W         17  A15
        2   Halt        18  EAudio
        3   D3          19  A7
        4   D4          20  A6
        5   D5          21  A5
        6   D6          22  A4
        7   D7          23  A3
        8   A12         24  A2
        9   A10         25  A1
        10  A11         26  A0
        11  A9          27  D0
        12  A8          28  D1
        13  +5V         29  D2
        14  Masa        30  Masa
        15  A13         31  IR1
        16  A14         32  CLK2

Do tego dochodzi złącze Expansion Port (rozszerzenia, dodatkowy osprzęt i tym podobne). Poniżej znajduje się rozpiska jego wyprowadzeń.

     Górny rządek     Dolny rządek
     ------------     ------------
       1-Masa           10-Masa
       2-+5V            11-Audio
       3-CVideo         12-Rdy
       4-MLum0          13-MCol
       5-MLum3          14-MLum2
       6-Blank          15-MLum1
       7-OscDis         16-Msync
       8-ExtMen         17-Clk2
       9-Masa           18-ExtOsc

CPU

Najzwyklejszy w świecie ;) 6502C "Sally" taktowany zegarem 1.79 MHz. Dostępność procesora kształtuje się w okolicach 90%, a więc jest prawie dwa razy większa, niż w standardowej Atari 2600.

GRAFIKA

Specjalnie opracowany na potrzeby konsoli układ MARIA (oznaczenie GCC1702), taktowany wewnętrznym zegarem 7.16 MHz (!), nie zmieniającym swej częstotliwości w zależności od częstotliwości głównego procesora. Jest sercem konsoli i obsługuje całą grafikę oraz jej wyświetlanie włączając obsługę sygnałów VSYNC i VBLANK. Jego rejestry znajdują się w obszarze $0020-$003F oraz w cieniu strony zerowej (adresy $0100-$013F), z której korzysta pospołu z TIA. Dokładny (bardzo dokładny, he he ^_^), opis tworzenia obrazu przy użyciu MARII znajdziesz w artku pt."MARIA - - czyżby następca ANTICa?", który ukaże się w przyszłym numerze "Seriousa".

Na rynku ukazały się w sumie trzy kolejne wersje Atari 7800 ProSystem:

ATARI CX7800 - gruntownie zmieniony i poszerzony model 2600 (tak! z początku traktowano go jak dopalony 2600!). Dwa porty joysticków na spodzie czołowego panelu. Nowy chipset (poza układem dźwiękowym); zawiera port rozszerzeń na upgrade'y. W zestawie dwa joysticki ProLine CX24, zasilacz, kabel antentowy oraz kartridż z "Pole Position 2". Uruchamiały się wszystkie gry z 2600 (poza trzema).

ATARI CX7800 - druga rewizja. Złącze portu rozszerzeń usunięto z płyty konsoli, lecz w obudowie pozostało jego gniazdo.

ATARI CX7800 - trzecia rewizja. Jak wyżej + znaczek na obudowie.

To nie wszystko! Ostrzcie sobie ząbki ;) na wyżej wymienione 2 artki!

Voy/SSG^Dial

PS. Dajcie znać, czy spodobał się Wam cykl o konsolach naszej ukochanej firmy... Adres w stopce!

PS.2 Czy wiecie, że 7800 można było kupić w Polsce? Nie wierzycie mi? Spójrzcie więc do "Bajtka" nr 11(69)'91 na stronę 42. W połowie grupy "Atari Video Game" znajduje się właśnie Atari 7800 ProSystem, błędnie określony jako Atari VCS 7800. Kosztował wtedy 920 tysięcy (o'coz starych :) złotych i w ofercie firmy TAL znajdowały się łącznie 34 gry, podzielone na 4 grupy...


Mapa pamięci 7800

W artykule znajduje się pełna mapa pamięci konsoli Atari 7800 ProSystem. Jest ona bardzo podobna do mapy 2600, co jest zrozumiałe wziąwszy po uwagę koncepcję Atari 7800 jako takiej. Mapę pamięci 2600 znajdziecie w jednym z przyszłych numerów "Seriousa".

Pamięć RAM w 7800 jest cieniowana (w odniesieniu do innych adresów) w zerowej, pierwszej, drugiej i trzeciej stronie, przy czym najbardziej znaczącymi są strony 0 i 1. Zauważ, iż brakuje tu 128 bajtów wewnętrznej pamięci 6532, będących w 2600 stroną zerową i tym samym stanowiących jedyną pamięć w systemie (powodem jest niezgodność co do szybkości obu systemów). Przesunięto je w obszar strony 4, co było jednak decyzją przejściową i miało się prawdopodobnie zmienić wraz z opracowaniem nowej wersji układu MARIA - obszar ten nie jest wykorzystywany.

CZĘŚĆ 1 - OGÓLNA MAPA PAMIĘCI

Poniżej znajdują się przedstawione bitowo obszary przydzielone konkretnym układom (gdzie X oznacza wartość obojętną; A - bity mogą być równe 1 lub 0). Wpisy 5 i 6 wskazują te fragmenty RAM z obszaru $1800-$27FF, które pojawiają się na stronach 0 i 1. Ostatni wpis pokazuje, że ostatni 2kB blok pamięci ($2000-$2700) powtarzany jest przy $2800, $3000 i $3000 tworząc ten 6kB obszar serią 2kB cieni.

        OD                  DO
 
 1.  TIA
 
 000000XX 00000000 - 000000XX 00011111
 
 2.  MARIA
 
 000000XX 00100000 - 000000XX 00111111
 
 3.  PORTY 6532
 
 00000010 10000000 - 00000010 11111111
 
 4.  6532 RAM (NIE UŻYWANA)
 
 0000010X 10000000 - 0000010X 11111111
 
 5.  RAM
 
 00011000 00000000 - 00100111 11111111
 
 6.  CIEM RAM
 
 00X0000A 01000000 - 00X0000A 11111111
 
 7.  CIEM RAM
 
 001XX000 00000000 - 001XX111 11111111

Na użytek szyfrowania w obszarze $FF7A-$FFF9 128 bajtów musi być wolnych. Przed szyfrowaniem obszar ten należy wypełnić wartością $FF.

Dla lepszego zobrazowania wszystkich lokacji w pamięci 7800 poniżej umieściłem tabelkę:

         _______________________
  0000  |                       |
        |      Rejestry TIA     |
        |_______________________|  001F
  0020  |                       |
        |     Rejestry MARII    |
        |_______________________|  003F
  0040  |                       |
        |          RAM          |
        |   (6116-blok zerowy)  |
        |_______________________|  00FF
  0100  |                       |
        |     Cień strony 0     |
        |     (TIA i MARIA)     |
        |_______________________|  013F
  0140  |                       |
        |          RAM          |
        |  (6116-blok pierwszy) |
        |_______________________|  01FF
  0200  |                       |
        |      Cieniowane       |
        |_______________________|  027F
  0280  |                       |
        |      Porty 6532       |
        |_______________________|  02FF
  0300  |                       |
        |      Cieniowane       |
        |_______________________|  03FF
  0400  |                       |
        |       Dostępna        |
        |_______________________|  047F
  0480  |                       |
        |  RAM 6532 - nie używ. |
        |_______________________|  04FF
  0500  |                       |
        |       Dostępna        |
        |_______________________|  17FF
  1800  |                       |
        |          RAM          |
        |_______________________|  203F
  2040  |                       |
        |  Cień bloku zerowego  |
        |_______________________|  20FF
  2100  |                       |
        |          RAM          |
        |_______________________|  213F
  2140  |                       |
        | Cień bloku pierwszego |
        |_______________________|  21FF
  2200  |                       |
        |          RAM          |
        |_______________________|  27FF
  2800  |                       |
        |Identyczny z 2000-27FF |
        |_______________________|  3FFF
  4000  |                       |
        |       Dostępna        |
        |_______________________|  FF79
  FF7A  |                       |
        |Rezerwacja na szyfrow. |
        |_______________________|  FFF9
  FFFA  |                       |
        |   Dostępna (wektory)  |
        |_______________________|  FFFF

CZĘŚĆ 2 - STANDARDOWE REJESTRY 7800

          Rejestry układu TIA:
          --------------------
 
 $01 INPTCTRL - INPuT PorT ConTRoL
       WO       ("VBLANK" w TIA)
 $08 INPT0 - PADDLE CONTROL INPuT 0
       WO
 $09 INPT1 - PADDLE CONTROL INPuT 1
       WO
 $0A INPT2 - PADDLE CONTROL INPuT 2
       WO
 $0B INPT3 - PADDLE CONTROL INPuT 3
       WO
 $0C INPT4 - PLAYER 0 FIRE BUTTON INPuT
       WO
 $0D INPT5 - PLAYER 1 FIRE BUTTON INPuT
       WO
 $15 AUDC0 - AUDio Control channel 0
       WO
 $16 AUDC1 - AUDio Control channel 1
       WO
 $17 AUDF0 - AUDio Frequency channel 0
       WO
 $18 AUDF1 - AUDio Frequency channel 1
       WO
 $19 AUDV0 - AUDio Volume channel 0
       WO
 $1A AUDV1 - AUDio Volume channel 1
       WO
 
         Rejestry układu MARIA:
         ----------------------
 
 $20 BACKGRND - BACKGRouND color
       R/W
 $21 P0C1 - Palette 0 - Color 1
       R/W
 $22 P0C2 - Palette 0 - Color 2
       R/W
 $23 P0C3 - Palette 0 - Color 3
       R/W
 $24 WSYNC - Wait for SYNC
       STROBE
 $25 P1C1 - Palette 1 - Color 1
       R/W
 $26 P1C2 - Palette 1 - Color 2
       R/W
 $27 P1C3 - Palette 1 - Color 3
       R/W
 $28 MSTAT - Maria STATus
       RO
 $29 P2C1 - Palette 2 - Color 1
      R/W
 $2A P2C2 - Palette 2 - Color 2
      R/W
 $2B P2C3 - Palette 2 - Color 3
      R/W
 $2C DPPH - DisPlay list list
      WO    Point High
 $2D P3C1 - Palette 3 - Color 1
      R/W
 $2E P3C2 - Palette 3 - Color 2
      R/W
 $2F P3C3 - Palette 3 - Color 3
      R/W
 $30 DPPL - DisPlay list list Point Low
      WO
 $31 P4C1 - Palette 4 - Color 1
      R/W
 $32 P4C2 - Palette 4 - Color 2
      R/W
 $33 P4C3 - Palette 4 - Color 3
      R/W
 $34 CHARBASE - CHARacter BASE address
      WO
 $35 P5C1 - Palette 5 - Color 1
      R/W
 $36 P5C2 - Palette 5 - Color 2
      R/W
 $37 P5C3 - Palette 5 - Color 3
      R/W
 $38 OFFSET - dla przyszłych rozszerzeń
      R/W     (normalnie jest tu 0)
 $39 P6C1 - Palette 6 - Color 1
      R/W
 $3A P6C2 - Palette 6 - Color 2
      R/W
 $3B P6C3 - Palette 6 - Color 3
      R/W
 $3C CTRL - MARIA ConTRoL register
      WO
 $3D P7C1 - Palette 7 - Color 1
      R/W
 $3E P7C2 - Palette 7 - Color 2
      R/W
 $3F P7C3 - Palette 7 - Color 3
      R/W
 
       Porty układu RIOT (6532):
       -------------------------
 
 $280 SWCHA - P0,P1 JOYSTICK
       R/W    DIRECTIONAL INPUT
 $282 SWCHB - CONSOLE SWITCHES
       RO
 $281 CTLSWA - I/O ConTroL for SWCHA
       R/W
 $283 CTLSWB - I/O ConTroL for SWCHB
       R/W
 
  gdzie: RO - tylko do odczytu
         WO - tylko do zapisu
        R/W - odczyt/zapis
     STROBE - dowolna wartość przy
              wpisie (rejestr reaguje
              już na sam fakt
              wpisania, dane są
              ignorowane)

CZĘŚĆ 3 - CYKLE DMA

Liczba cykli DMA (Direct Memory Access - bezpośredni dostęp do pamięci) nie jest pewna, gdyż wewnętrzny zegar MARII ma częstotliwość 7.16 MHz w przeciwieństwie do mikroprocesora, taktowanego 1.79 MHz lub 1.19MHz. W wyniku tego nie jest również znana liczba dodatkowych cykli potrzebnych na rozpoczęcie/wstrzymanie DMA w celu dostosowania się do 6502. Możliwe to jest jednak dla 6502, gdy TIA lub RIOT (6532) są połowie długiego okresu korzystania z pamięci (tzw. long access). Praca procesora jest wstrzymana, więc niepewność co do ilości dodatkowych cykli dochodzi wtedy do 5.

Przebiegi podane niżej odnoszą się do cykli 7.16 MHz.

Rozpoczęcie DMA:       5-9 cykli
 
 Nagłówek (4 bajty):    8   cykli
 Nagłówek (5 bajtów):   12  cykli
 
 Odczyt grafiki:
 - bezpośredni            3 cykle
 - pośredni/1 bajt        6 cykli
 - pośredni/2 bajty       9 cykli
 
 Dostęp do mapy znaków:   3 cykle
 
 Przebiegi przy wstrzymywaniu:
 - ostatnia linia obszaru 10-13 cykli
 - inne linie obszaru     4 - 7 cykli.

Koniec VBLANK osiągany jest przy rozpoczęciu DMA i przy długim wstrzymywaniu.

DMA przy każdej kolejnej linii obrazu można rozpocząć dopiero po 7 cyklach procesora (przy częstotliwości 1.79 MHz). Chodzi o to, by wystarczyło czasu na zmianę koloru lub zmianę CTRL przed rozpoczęciem DMA a w czasie HBLANK (Horizontal BLANK - wygaszanie poziome) oraz przed rozpoczęciem wyświetlania. Przy obliczeniach dotyczących DMA należy wziąć to pod uwagę.

Dla ciekawskich w archiwum A7800.LZH umieściłem oryginalny 4kB ROM konsoli Atari 7800 ProSystem, a dla leniuszków ^_^ disasemblację głównych części jego kodu, dokonaną pecetowym programem DiStella (chlip, chlip, ale nie przeze mnie... :-((( ).

Voy/SSG^Dial

 

madteam.atari8.info © MadTeam, hosted: www.atari8.info