Elektroda.pl
Elektroda.pl
X
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

Konsola Atari 2600 - drugie życie

phanick 29 Dec 2013 02:18 41532 53
Altium Designer Computer Controls
  • Konsola Atari 2600 - drugie życie

    Niedawno kupiłem dość starą, ale popularną konsolę - Atari 2600 (Rocznik 1982). Sprzedawana jako `niesprawdzona (niesprawna)`, bez dołączonych jakichkolwiek akcesoriów (zasilacz, przewody podłączeniowe, kartrydże, dżojstiki).
    Konsola Atari 2600 - drugie życie

    Trochę technikaliów
    Nośniki z grami do konsoli są w postaci kartrydży (jak w popularnym PEGASUSIE), można tez podłączyć dwa joysticki. Podobieństwo do Pegasusa wcale na tym się nie kończy! W konsoli siedzi uboga wersja procesora 6502 - z uwagi na oszczędności, zmniejszono jego ilość wyprowadzeń i tym samym jego przestrzeń adresowa z 64 kB zmniejszyła sie do 8 kB. Mapa pamięci procesora jest tak zorganizowana, że tylko połowa z tego (4 kB) przypada na pamięć rom kodu gry z kartrydża. I większość gier na tą konsole zajmuje właśnie tylko 4 kB!

    Układ graficzny to TIA (Television Interface Adapter). Nie posiada on żadnego bufora ekranu (framebuffera), więc procesor w odpowiednich chwilach sam steruje układem TIA aby ten wygenerował piksel o danym kolorze gdy akurat wiązka elektronów w telewizorze świeci na dany punkt kineskopu. Może właśnie dlatego konsola jest tak piękna, bo programiści musieli nieźle się nagłówkować, aby napisać jakąkolwiek grę.

    Mój wkład
    Zasilanie
    Gniazdo zasilania wygląda jak wtyk mini jack w standardowych słuchawkach. Konieczne było stworzenie odpowiedniej przejściówki mini jack - dc, gdyż dysponowałem zasilami tylko o takich wtykach. W konsoli obecny jest stabilizator 7805 oraz spory kondensator filtrujący (2200 uF), zatem na wejściu wystarczy podać np. 9 V DC.
    Konsola Atari 2600 - drugie życie

    Nośniki z grami
    Nośnikami sa popularne kartrydże. Niżej rozpiska pinów w gnieździe konsoli:
    Konsola Atari 2600 - drugie życie

    Ponieważ nie posiadam żadnych gier, aby przetestować konsolę, zaprojektowałem mini-adapter do gniazda kartrydży, pozwalający podłączyć dowolną pamięć EEPROM/Flash z zaprogramowaną grą.
    Konsola Atari 2600 - drugie życie

    Wykorzystana pamięć flash (512 kB) to 29f040. Do programowania użyłem zaprojektowanego i wykonanego własnoręcznie programatora opartego o atmegę 8, łączącego się z PCtem po rs232. Oprogramowanie na PC napisane zostało też własnoręcznie.
    Konsola Atari 2600 - drugie życie

    Wyjścia wideo/audio
    Jedynym wyjściem z konsoli jest zmodulowany sygnał audio+video, podłączany do wejścia antenowego w telewizorze. Niestety pomimo wielu starań, nie udało mi się zestroić konsoli z telewizorem aby uzyskać obraz przyzwoitej jakości (wynika to albo z niezgodności standardu modulacji, albo ze słabej jakości kabla antenowego albo z uszkodzonych elementów modulatora w konsoli - np. wyschnięte kondensatory ze starości).

    Postanowiłem porwać się na projekt marzeń - stworzyć płytkę która wyciągnie wprost z układu graficznego konsoli sygnał S-VIDEO, czyli najlepszy możliwy do uzyskania.

    Poniżej projekt w eaglu:
    Konsola Atari 2600 - drugie życie Konsola Atari 2600 - drugie życie

    W skrócie - układ graficzny konsoli generuje cyfrowy sygnał luminancji (jasności), który za pomocą drabinki rezystorowej jest mieszany i konwertowany do postaci analogowej, a następnie wzmocniony i dostosowany do odpowiedniego poziomu napięć za pomocą tranzystora.
    Podobne wzmocnienie ma miejsce z sygnałem chrominancji (koloru).
    Z sygnału audio za pomocą kondensatora zostaje odfiltrowana składowa stała.

    Płytka po wytrawieniu:
    Konsola Atari 2600 - drugie życie Konsola Atari 2600 - drugie życie

    i po przylutowaniu elementów:
    Konsola Atari 2600 - drugie życie Konsola Atari 2600 - drugie życie

    Najtrudniejsze okazało się zdobycie gniazda S-Video (mini din 4), które wylutowałem z uszkodzonej karty graficznej.

    Kontrolery
    Nie mam żadnych joysticków, jednak gniazda są identyczne jak w Commodore 64.
    Ponieważ wcześniej stworzyłem konwerter padów z pegasusa na commodore 64 (www.elektroda.pl/rtvforum/viewtopic.php?t=2340054), więc tutaj właściwie od razu miałem czym sterować.

    Podsumowanie
    Konsola znów może cieszyć. Uzyskana jakość obrazu jest najlepsza jaką dało się z konsoli wyciągnąć:
    Konsola Atari 2600 - drugie życie Konsola Atari 2600 - drugie życie

    W przyszłości planuję wykonanie programowalnego kartrydża, w którym raz wgrywa się gry a później można je wybierać albo zworkami, albo (wersja trudniejsza) na ekranie telewizora z menu.

    Poniżej film z działania - najpierw uruchomienie gry Pitfall! (jednej z najpopularniejszych na Atari 2600), a później przeprogramowanie kości i odpalenie PacMana.




    Cool? Ranking DIY
    Can you write similar article? Send message to me and you will get SD card 64GB.
    About Author
    phanick
    Level 28  
    Offline 
    Has specialization in: energetyk najwyższych napięć
    phanick wrote 2490 posts with rating 2566, helped 57 times. Live in city Warszawa. Been with us since 2007 year.
  • Altium Designer Computer Controls
  • #2
    User removed account
    Level 1  
  • #3
    phanick
    Level 28  
    Konsola Atari 2600 - drugie życie

    Nie jest to procesor 6502 tylko układ graficzny.
    Ważne aby sprawdzić, czy masz konsolę PAL czy NTSC (np. z tyłu na nalepce).
    U mnie był to układ 6526P (P pewnie od PAL), na samym dole PCB.

    Ciekawostka - większość gier występuje w obu wersjach. Jeśli np. wgrałem na konsole wersję NTSC Pitfall-a, to drzewa były koloru niebieskiego!

    Co do nagrywania gier - mapa pamięci procesora wygląda tak:
    Code:

    $0000 - $007F   |  TIA registers
    $0080 - $00FF   |  RAM
    $0200 - $02FF   |  RIOT registers
    $1000 - $1FFF   |  ROM

    Dostęp do pamięci w kartrydżu realizowany jest pod adresami $1000 - $1FFF, a wtedy A12 = 1. Stwarza to pewien kłopot przy dekodowaniu adresów, gdyż wiekszość obenych pamięci EEPROM/Flash jest aktywowana sygnałem niskim (akurat te za czasów Atari 2600 były stanem wysoki więc wystarczyło podpiąc linie A12 do wejścia !CS).

    Wykorzystując np. bramkę NOT (lub bramkę NAND jeśli taką akurat posiadamy) możemy zbudować taki kartrydż:
    Konsola Atari 2600 - drugie życie

    Nagrywając do pamięci kolejne 4 kilobajtowe romy z grami (a zmieścimy ich 512 kB / 4 kb/ROM = 128) możemy stworzyć multicarta. Teraz tylko ustawiając odpowiednia kombinacje bitów na górnych adresach pamięci A12..A18 (za pomocą dip switcha) wybieramy odpowiednią gre.
  • #5
    miszczo997
    Level 28  
    Co do samych cartridgów i menu z grami, znalazłem kiedyś ciekawy projekt podczas szukania biblioteki eagle cartridga. Mianowicie na jednej kości pamięci zostały umieszczone 32 gry, gdzie dodatkowo w języku c zostało do nich dopisane menu z którego można było je wybierać. Myślę, że warto odszukać ten projekt, ponieważ były tam umieszczone źródła. Od siebie daję pdfa z cartridgem nadającym się do prototypów.
  • #6
    shadow0013
    Level 34  
    Napisz coś więcej o programatorze.
  • #7
    phanick
    Level 28  
    Programator to atmega8 + trzy zatrzaski 74hc574 (aby procesorowi starczyło wyjść). Do tego gniazdo ZIF aby ułatwić wkładanie i wyjmowanie pamięci.

    Do tego zaprojektowany przezemnie protokół przesyłu danych - pc wysyła do mikrokontrolera po r232 paczki danych (po 255 bajtów każda) z sumą kontrolną. Jeśli suma się nie zgadza - atmega żąda przesłania paczki ponownie. Paczka danych to może być np. rozkaz wyczyszczenia pamięci, rozkaz zaprogramowania pamięci odpowiednimi danymi od podanego adresu wzwyż czy rozkaz odczytu bajtów pamięci. Niestety suma często się niezgadza co powoduje częsta konieczność retransmisji. Nie wiem czy to wina niestarannie napisanej aplikacji czy wadliwego adaptera rs232-usb przedstawiającego się w menadżerze urządzeń jako Prolific.

    Schemat programatora:
    Konsola Atari 2600 - drugie życie
  • Altium Designer Computer Controls
  • #8
    bobeer
    Level 28  
    Bardzo podoba mi się Twój projekt !
    Z konwerterem na układzie prolific (PL2303) miałem do czynienia, i nie wspominam współpracy z nim pozytywnie, więc może spróbuj zmienić konwerter, na jakiś pewniejszy.
    Czyżbyś był jedną z nielicznych osób które zrozumiały, że jasna grafika na ciemnym tle o wiele mniej męczy wzrok i umożliwia dłuższą pracę ?
    (to odnośnie schematów w eaglu)
  • #9
    podly
    Level 16  
    Super :) Też mam taką działającą - wyciągnąłem z niej sam composite - jest dużo lepiej niż przez wewnętrzny modulator, a trochę mniej roboty niż z s-video. Mimo, że mam kilka cartridgy, to marzy mi się coś ala spectrumowe divIDE - menu z wyborem gier i slot na kartę SD albo CF :) W sumie na A2600 jest chyba około 4MB tytułów - można by zrobić taki cardridge all-in-one.
  • #10
    User removed account
    User removed account  
  • #11
    phanick
    Level 28  
    Przymierzam się do zrobienia czegoś takiego na Atari - choć ktoś wcześniej już coś takiego wymyślił i zrobił - nazywa się Harmony i jest do kupienia w USA za ok 100$.

    Fascynujące jest to, jak twórcy gier, pomimo tak wielu ograniczeń w budowie konsoli oraz skromnej liczbie wyprowadzonych sygnałów na wyjście kartrydża dawali sobie radę.

    Np. w konsoli jest obecne tylko 128 bajtów RAMu, więc niektórzy twórcy bardziej wymagających gier postanowili dołożyć własny RAM w kartrydżu. Niestety na złączu kartrydża nie ma sygnału informującego, czy dany cykl procesora jest zapisem czy odczytem, wobec czego urządzenie dekodujące obecne w nośniku z grą nie jest w stanie stwierdzić, czy procesor odwołując się aktualnie pod adres np. $1234 chcę dokonać zapisu czy odczytu. Dlatego też projektanci takiej gry wykonali sprytny manewr - podzielili przestrzeń tak, że adresy $1000-$10FF to port odczytu do dodatkowej pamięci, a $1100-$11FF to port zapisu. Czyli chcąc zapisać coś do komórki o adresie 3 wykonujemy zapis pod adres $1103, a odczyt z tej komórki jest możliwy pod adresem #1003.

    Kolejnym problemem jest brak sygnału gotowości procesora na złączu kartrydża, aby można było stwierdzić, że sygnały adresowe / danych są już stabilne..

    Dodano po 3 [minuty]:

    R-MIK wrote:
    phanick wrote:

    Nie jest to procesor 6502 tylko układ graficzny.
    Ważne aby sprawdzić, czy masz konsolę PAL czy NTSC (np. z tyłu na nalepce).
    U mnie był to układ 6526P (P pewnie od PAL), na samym dole PCB.

    6526 to CIA. Ma 2 timery, dwa porty Io 8-bit, rejestr przesuwający 8-bit, zegar 24H i kilka innych drobiazgów. W sprzęcie Atari (komputery, konsole) oraz w C-64 były używane do obsługi IO. Zmodernizowana wersja 8520 pracowała w Amidze.

    Możliwe, ale u mnie wszystkie układy w Atari są to klony produkcji UMC więc był to układ UM6526 (a przytoczony przez Ciebie jest oryginałem MOS Technologies). Być może brak zgodności w numeracji,a może faktycznie układ ten się inaczej nazywał niż podałem. Ciekawostka że UMC wyprodukowała też klon CPU i PPU w konsoli pegasus oraz tzw. NES-on-a-chip (UM6561) czyli jeden układ scalony w którym jest już zintegrowany cały pegasus wraz z pamięciami.
  • #12
    User removed account
    User removed account  
  • #14
    podly
    Level 16  
    phanick wrote:
    Przymierzam się do zrobienia czegoś takiego na Atari - choć ktoś wcześniej już coś takiego wymyślił i zrobił - nazywa się Harmony i jest do kupienia w USA za ok 100$.


    No właśnie - 100$ to jednak cena trochę z księżyca - przynajmniej dla mnie. 100PLN za taki cart all-in-one było by idealnie :)
  • #15
    User removed account
    User removed account  
  • #16
    reaven22
    Level 29  
    Jeśli ktoś chciałby przypomnieć sobie gry z atari 2600 i innych podobnych konsol to polecam na stronkę z emulatorem w przeglądarce.
    https://archive.org/details/atari_2600_library
    Wystarczy kliknąć tytuł gry by przenieść się do końca lat 70tych :)
  • #17
    User removed account
    User removed account  
  • #18
    Jamie
    Level 20  
    Miałem nadzieję na wykorzystanie pomysłu na wyjście S-Video, ale nic z tego nie będzie bo w moim klonie A2600 siedzą jakieś All-In-One - WB2600-4MP-GS to chyba będzie ROM z grami, ale na temat głównego scalaka WDL WB-5388 nie znalazłem w internecie zbyt wiele - nie robię sobie wielkich nadziei, ale może ktoś z was ma rozpiskę pinów do tego wytworu chińskiej technologii?...
  • #19
    Fixxxer1
    Level 15  
    Super Ci to wyszło!
    Możesz udostępnić schemat płytki gotowej do wytrawienia albo pliki eagla?
    Planujesz wykonać podobne modyfikacje np. Ameproda lub innych pongów?
  • #20
    phanick
    Level 28  
    Schemat eagle konwertera na s-video.
    Dołączam także schemat eagle kartridża, umożliwiającego wgranie dużej ilości gier po 4 kB i ustawianie gry gotowej do uruchomienia dip-switchem.

    Swoją drogą, gdybym to robił po raz drugi, to zamiast gniazda S-Video i RCA wyprowadziłbym to wszystko jednym kablem jako eurozłącze, aby przy podłączaniu do telewizora nie mieć dwóch kabli. Zniknąłby tez problem z umieszczeniem płytki - obecnie jest przykręcona do obudowy Atari z zewnątrz na dwie śrubki, a tak byłaby schowana w środku..
  • #21
    User removed account
    User removed account  
  • #22
    phanick
    Level 28  
    Co do programatora to problem faktycznie występuje z adapterem USB-RS232 Profilific.
    Miałem przed chwilą okazje przetestować programator na bardzo dużo starszym i wolniejszym komputerze, ale wyposażonym w standardowy port RS232. Programowałem cąłą pamięć (512 kilobajtów) i nie wystąpiła ani jedna potrzeba retransmisji pakietu.
    Rozwiązaniem jest być może przejście na adapter oparty o ft232 albo stworzenie programatora czysto pod USB (widziałem biblioteki i atmega8 daję rade).
  • #23
    User removed account
    User removed account  
  • #24
    sikor_atari
    Level 9  
    Kilka słów od Atarowca:
    1. Pamięć RAM - 128 bajtów
    2. Procesor - 6507 (okrojona wersja 6502)
    3. Banki pamięci - po 4KB
    Projekt multicarta na 512 gier (jak ktoś by wykonał płytkę - uśmiechnę się): http://rdemming.home.xs4all.nl/Atari/MultiCart2600/index.htm
    Mod kompozytu video: http://www.benheck.com/book/support/Atari2600VidMod.htm - taki mam zrobiony na drutach w swojej konsoli i sprawdza się na wszystkich CRT, na LCD trzeba odpowiednio dobrać oporniki
    Pozdrawiam i powodzenia
    p.s.
    Zamiast takiego carta przydałby się projekt czegoś w rodzaju SIO2SD z Atari 8-bit - przystawka do korzystania z karty SD.
    Co do wersji i kolorów: NTSC - 128kolorów, PAL - 64 kolory, Secam - 9 kolorów.
    ===============
    Jeszcze jedno: http://www.atarimania.com/pgemainsoft.awp?type=G&system=2 - codo gier ;)
  • #25
    stryker2
    Level 19  
    podly wrote:
    No właśnie - 100$ to jednak cena trochę z księżyca - przynajmniej dla mnie. 100PLN za taki cart all-in-one było by idealnie :)

    Dokładnie 59,99$ + przesyłka 12$ z USA co daje nam ~229zł
    Dwa dni temu takowy do mnie dotarł :)
    Patrząc na ceny niektórych cartów 20-40 PLN .... do pogrania/demoscenowania idealny :)
  • #27
    seban_slt
    Level 2  
    @phanick: kawał porządnej dobrze wykonanej pracy. Podoba mi się Twoje podejście do tematu oraz sposób rozwiązania problemów które napotkałeś podczas tego projektu.

    Pomysł ze zrobieniem własnego CARTRIDGE oraz wcześniejsze stworzenie programatora EEPROM/FLASH, bardzo mi się podoba :) Tak trzymaj kolego!

    co do samego TIA, to cytując Atariki ( http://atariki.krap.pl/index.php/TIA )

    "Umożliwia wyświetlenie pola gry o rozdzielczości 40x192 i dwóch graczy (player), dwóch pocisków (missile) i jednej piłki (ball) na wysokość całego ekranu, paleta 128 kolorów. Pociski i piłka mają rozdzielczość poziomą 1 bitu, gracz natomiast składa się z 8 bitów. Różnica między pociskami a piłką jest taka, że ta druga ma dodatkowy rejestr opóźniający wyświetlanie o jedną linię; ponieważ program aktualizuje rejestry TIA zazwyczaj co dwie linie, rejestr ten zwiększa dokładność przesuwu pionowego. Wszystkie obiekty ruchome można rozciągać w poziomie, obiekty typu player dodatkowo mają możliwość lustrzanego odbicia oraz powielania do 3 razy."

    jakby kogoś interesowało jak działa 2600 oraz TIA, garść linków:

    http://en.wikipedia.org/wiki/Television_Interface_Adaptor
    http://www.atarihq.com/danb/files/stella.pdf
    http://www.atariage.com/2600/archives/schematics_tia/index.html
    http://www.atarihq.com/danb/files/TIA_HW_Notes.txt
    http://atariage.com/2600/programming/
    http://www.atariguide.com/pdfs/Atari_2600_VCS_Domestic_Field_Service_Manual.pdf

    pozdrawiam
    Seban/Slight
  • #28
    damik
    Level 15  
    Aby nie było tak kolorowo trzeba wspomnieć, że zamieszczony schemat karta sprawdzi się jedynie w prostych i najczęściej starszych grach o pojemności Rom 2-4 KB.
    Niestety by zagrać w ciekawsze gry (większe niż 4KB) kartridż powinien już posiadać trochę bardziej rozbudowaną logikę przełączającą banki pamieci (tzw. Memory mapper).
    Mechanizm powszechnie stosowany też w innych konsolach jak np NES/Famicom.

    Cały problem polega na tym że nowsze i bardziej rozbudowane gry do Atari 2600 stosowały wiele różnych rodzajów bankowania pamięci co komplikuje realizację uniwersalnego karta. I stąd takie wysokie ceny uniwersalnych rozwiązań np Harmony.
    Gry napisane pod jeden typ mappera nie działają na innym, widziałem co prawda konwersje kodu kilku gier pod inny rodzaj mappera, ale to pojedyncze przypadki i to do dość skomplikowany proces raczej dla zaawansowanych programistów znających dobrze tę konsolę.
    Wspomnę jeszcze, że był też kartridż z mapperem posiadający pamięć RAM, gdzie jej zawartość ładowało się z magnetofonu, ale takich gier nie było zbyt wiele.

    Dla zainteresowanych tutaj opisy najbardziej typowych mapperów:
    http://blog.kevtris.org/blogfiles/Atari%202600%20Mappers.txt
  • #29
    phanick
    Level 28  
    Tylko jak na podstawie ROMu z grą stwierdzić, z jakiego mapera on korzysta, skoro w tym ROMie nie ma nawet nagłówka, w którym byłoby to zapisane (jak np. w NESie)?

    Jedyny rozsądny sposób wg mnie, to stworzyć sobie bazę CRC32 pliku z grą <-> rodzaj mapera, którą należałoby zaszyć w oprogramowaniu tego kartrydżą. Potem przy wyborze gry, procesor liczyłby CRC32 wybranego ROMu i szukał odpowiadającego mu mapera w bazie.
  • #30
    damik
    Level 15  
    Kiedyś też się zastanawiałem nad zrobieniem jakiegoś uniwersalnego kartridża obsługującego gry większe niż 4KB, kilka tygodni szukałem informacji w necie, robiłem testy i eksperymenty, jednak nie mam teraz już na to czasu i musiałem temat odłożyć.

    W załączniku lista bardziej popularnych gier posortowana w/g producentów z informacją o objętości rom stosowanych mapperach i wymaganym użyciu tzw. Super Chip'a (dodatkowa pamięć RAM).

    Dodatkowo dodaję znaleziony gdzieś przypadkiem projekt w Eagle'u schematy + PCB kartridża obsługującego popularne bankowanie typu F8 dla 4 gier po 8KB.

    Jako ciekawostkę załączam jeszcze schemat kartridża Arcadia Supercharger z 1982 r pozwalającego na wgrywanie gier z magnetofonu do jego wbudowanej pamięci RAM. ;)