START _______________
Atari 8-bit
GAL-MMU
SIO2PC
Atari static RAM
Atari R-Flex
Atari Turbofreezer III
ARC by Pasiu/SSG
Atari Cartridge
Emulator USB Joy
SIDari
YAMari
SONari
SAMari
TIGari
NOMari
I/O Dekoder
CART+ECI expander
Atari Multicart XE
Atari Full S-RAM
Real Safety Gear
|
SIDari
SID w Atari - bardzo ciekawe połączenie... Istnieje SlightSID Sebana oraz Evie Pasia. Teraz i ja dorzucam swój wkład do sprzętu dźwiękowego Atari. Nazwa wzięła się od
połączenia dwóch wyrazów - SID i Atari. Moim zdaniem brzmi całkiem sympatycznie :) Historia tego rozszerzenia zaczęła się w roku 2006. Pomyślałem trochę i złożyłem pierwszy układ -
działał choć z jakimiś problemami (trzaski i zaniki dźwięku) Poźniej doszedłem, że popełniłem błąd w układzie wyzwalania buforów... Chciałem skończyć projekt ale życie wymyśliło dla mnie naprawdę sporo innych zajęć,
więc hobby musiałem na długo odłożyć na bok. I tak - po ośmiu latach - uruchomiłem proto. Działa, ładnie gra, umieszczony został od adresu $D500 w obszarze cartridge
w celach testowych. Do odgrywania użyłem SID Playera napisanego przez Świętego... Poniżej kilka zdjęć: Zestaw testowy do sprawdzenia działania obwodów wejściowych - na zdjęciu moja płyta
Atari 800XL, proto SIDari oraz trochę próbników logicznych + SALEAE. SIDari jest wpięty do portu cartridge oczywiście. Zdjęcie już uruchomionego układu- po prawej rezerwowy SID... Opis sprzętu:
Projekt jest w tym momencie w fazie prototypu jednakże zdecydowałem o publikacji już teraz ponieważ inni użytkownicy - konstruktorzy mogą mieć również dobre pomysły
usprawniające rozwiązania zastosowane przeze mnie. Uwagi i wskazówki są oczywiście mile widziane i oczekiwane. Do rzeczy: Schemat SIDari: Omówienie funkcji poszczególnych elementów:
Układy IC1 i IC2 są ośmiokrotnymi przerzutnikami D wyzwalanymi zboczem dodatnim i pełnią funkcję zapamiętywania adresów oraz danych w cyklu zapisu do urządzenia.
Bramka IC4D wraz z bramkami IC5B i IC4E tworzą impulsy taktujące przetwarzanie - CLK i komplementarny /CLK (ukośnik oznacza negację sygnału). Układ IC6A oraz IC6B
jest podwójnym przerzutnikiem D wyzwalanym zboczem dodatnim pełniącym funkcję synchronizatora ze względu na to, że w SIDari zostały połączone dwie domeny zegarowe - Atari PHI2 oraz SID PHI2 o zupełnie róznych częstotliwościach.
Częstotliwość zegara Atari PHI2
ma wartość 1.77 MHz a SID PHI2 ma 0.985 MHz.Bramki IC4A, IC4B, IC4F oraz IC5A tworzą układ wytwarzający sygnał zakończenia
sekwencji.Oryginalny układ wytwarzania zegara systemowego Commodore64 - 8701 IC9 wraz z otaczającymi elementami i dzielnikiem asynchronicznym modulo 8 IC10 wykonanym
na układzie licznika binarnego tworzą SID PHI2 o wartości takiej jak w C64 ver.PAL.
C64_SID to oczywiście układ syntezy dźwięku Commodore. Układ oraz elementy otaczające są takie same jak w oryginale. Również schemat układu wyjściowego jest taki sam.
Niestety - C64 po zabiegach wymontowania SIDa oraz 8701 wraz z kwarcem "poległ" Takie są koszty uzyskiwania trudno osiągalnych i nieprodukowanych elementów. Cóż...
Diagram zależności czasowych: Porównując na powyższym obrazku okresy zegara Atari i SID widać wyraźnie, że są
różne i asynchroniczne względem siebie. Istota układu polega na synchronizacji dwóch układów synchronicznych pracujących z różnym taktowaniem.
W momencie zapisu czegokolwiek w obszar $D5XX na szynie Atari w części zegara w stanie niskim ustalają się sygnały
A /CS - chip select oraz A R/W - niski co przygotowuje układ IO do zapisu danej. W tym czasie również ustalają się adresy na szynie adresowej. Bramka IC4D neguje zegar A PHI2. W czasie gdy A /CS
=0, A R/W=0 i A PHI2=1 na wyjściu bramki IC5B jest generowany dodatni impuls CLK, którego zbocze narastające powoduje zatrzaśnięcie przez układ IC1 adresu rejestru SID
obecnego już na szynie Atari. Po zanegowaniu impulsu CLK przez bramkę IC4E zbocze narastające /CLK powoduje zatrzaśnięcie przez układ IC2 danej, która ma zostać
zapisana w SID - to kończy buforowanie danych i jednocześnie sygnał /CLK tym samym zboczem powoduje ustawienie przerzutnika IC6A. Sygnał SYNC (wyjście Q) przyjmuje
wartość 1, która przygotowuje przerzutnik IC6B na nadejście narastającego zbocza zegara S PHI2. W chwili gdy się pojawi narastające zbocze S PHI2 i SYNC ma wartość
1 na wyjściu /Q IC6B pojawi się stan niski - sygnał /RUN, który odblokowuje układ C64_SID do zapisu oraz przygotowuje zakończenie procesu. W czasie gdy /RUN jest w stanie niskim zegar S PHI2
swoim zboczem ujemnym (opadającym) powoduje wpisanie danej obecnej na wyjściach układu IC2 pod adres obecny na wyjściach układu IC1 do C64_SID. Pozostaje jeszcze zakończyć proces. Do tego celu służy układ na bramce
IC5A. Jak widać jest to trzywejściowa bramka NOR. Na jej wyjściu w tym momencie gdy /RUN=0 i S PHI2 opada - pojawia się stan wysoki, który jest negowany przez łańcuch
trzech inwerterów również w celu wprowadzenia opóźnienia. Powstały w ten sposób sygnał /END powoduje wyzerowanie przerzutników IC6A i IC6B, które ustawiają się w
stanie początkowym, a to powoduje również, że sygnał /RUN przyjmuje stan wysoki i sygnał /END w wyniku tego przyjmuje również stan wysoki co przerywa zerowanie
przerzutników synchronizatora i blokuje układ C64_SID.
Układ czeka na kolejne wywołanie.
Jedyną w zasadzie wadą jest to, że zapis może być dokonywany nie częściej niż 4 okresy zegara A PHI2
co w praktyce nie zajdzie chociażby ze względu na ilość taktów niezbędnych do załadowania i przesłania danej LDA xxxx, STA xxxx...
Jest to opis układu prototypowego, który został przeze mnie zmontowany dla wygody na płytce uniwersalnej przy użyciu typowych układów cyfrowych TTL LS.
Można użyć serii HCT a także HC - będzie pożerać mniej prądu. Do zasilania proto użyłem standardowego zasilania +5V z portu cartridge oraz +9V uzyskanego przy pomocy przetwornicy opublikowanej tutaj
Całość jak najbardziej nadaje się do
upakowania i uporządkowania. To będzie następny etap. Moim celem jest montaż wewnątrz Atari układu StereoSIDari w obszarze adresowym zaproponowanym przez
Pasia w projekcie Evie. Możliwość sterowania ze strony $D5XX także zostanie najprawdopodobniej pozostawiona.
A tak wygląda prototypowy SIDari.
Użytkownik Mono na forum zadał kilka pytań:
1. Można prosić o jakąś specyfikację?
2. Jak to się zachowuje na szynie (czy rejestry są tylko W, czy są też R a jeśli nie to jak się zachowują)? 3. Czy można to jakoś wykryć?
4. Czy jest 8580R5 czy przewidziane są inne układy (ja wiem, że napięcia i takie tam)? 5. Czy przewidziana jest wersja z 2 (3?) SIDami? 6. Jaką częstotliwością jest taktowany SID?
Wbudowałbym support do mojego playerka...
Edit: Pytania.
1. Specyfikacja to SID standard więc wszystko co dla komody jest i tutaj
2.
Rejestry są wyłącznie do zapisu co jest związane z tym, że niesłychanie trudno wykonać logice skok "w przyszłość" a dlaczego tak jest? Gdy układ nie jest połączony
z systemem bezpośrednio wtedy zapis da się wykonać bez problemu ponieważ najpierw Atari wpisuje dane do rejestrów bufora wejściowego (z perspektywy SID) a w drugim
kroku sprzęg wpisuje dane do SIDa "z automatu" i to działa (widać to na schemacie). Gdy jednak chcemy odczytać dane - jeden cykl odczytu nie wystarczy, ponieważ to
dopiero wpisze dane do rejestrów bufora wyjściowego - DOPIERO PO WYKONANIU DRUGIEGO CYKLU uda się odczytać dane z bufora dla Atari - to poważnie komplikuje
zarówno układ jak i software i ze względu na nikłe korzyści z tym związane odczyt rejestrów SIDa nie jest w tej wersji możliwy. Przy zastosowaniu mikroprocesora jest to
możliwe - jednakże mikroprocesor musiałby wykonywać ciągły polling rejestrów SID aby nie zostać zaskoczonym przez "niespodziwany odczyt" hehe). Podsumowując - WRITE
tak, READ nie - przynajmniej na razie. Myślę nad układem pollingu dwóch rejestrów OSC3 i ENV3 - wtedy da się je czytać jednym rozkazem LDA XXXX tak jak w oryginale
jednak z lekkim przesunięciem w czasie co być może nie będzie zauważalne:)
3. W obecnej postaci nie. Można oczywiście dodać pod wybranym adresem jeden
rejestr do odczytu z konkretną wartością identyfikującą układ. Nie planowałem tego ale to żaden problem. Kwestia adresu i danej, która ma tam być (jako dana typu ROM)
4.
Są pewne różnice odnośnie 6581 i 8580 - jedna to napięcie zasilania analog - 6581 - 12V, 8580 - 9V - co oczywiście zależy jak się zbuduje zasilacz, przetwornicę - to można
zrobić stosunkowo łatwo, czyli zworką. Druga różnica to kondensatory filtrów - 6581 ma 2x 470 pF a 8580 ma 2x 22nF - myślę, że też ewentualnie mogłoby to być na zworkach
ale się zastanawiam czy jest sens. Najlepiej zrobić pod konkretny układ. Wyboru zbyt dużego nie ma.
5. Nie ma żadnego problemu z większą ilością SIDów poza miejscem w IO komputera
i mocą zasilacza +5V. Układ wystarczy powielać w zależności od potrzeb - logika sprzęgu w sporej części nie może być wspólna niestety. Istotne jest dla jakich adresów
jest generowany sygnał /CS. Dla każdego SIDa musi być wygenerowany oddzielnie.
6. Taktowanie SID jest identyczne jak w C64 PAL ponieważ zastosowałem oryginalny
kwarc 17.73447 MHZ oraz układ 8701 i po podzieleniu DOT CLOCK 7.88 MHz przez 8 jest 985 Khz z możliwością delikatnej regulacji trymerem.
Chciałem zbudować układ przy pomocy takich scalaków jakie były stosowane w
dawnych czasach. Po prostu lubię oldskulowe jazdy... Oczywiście można i da się wrzucić logikę w jakiś układ CPLD tak jak w SLightSID. Zostawię to jakiemuś ochotnikowi - ja zajmę się być może kolejnym atarynkowym
projektem. Chociaż nie przesądzam - chciałbym poćwiczyć CPLD - mam garść ispLSI LATTICE i może tam wrzucę interfejs?
Od strony Atari ten sprzęg będzie widoczny prawie dokładnie tak jak SightSID
wyłączając odczyt rejestrów więc wszystko co będzie grać dla SlightSIDa zagra i tutaj. W obecnej postaci SIDari działa i może być bez przeszkód rozwijane przez
innych ludzi. Liczy się pomysł i wykonanie. Każdy dodatek podnoszący jakość jest czymś naturalnym i w miare możliwości projekt bedzie udoskonalany...
Jako, że jest to etap prototypowy - nie zamieszczam w tym momencie dalszych materiałów - ciąg dalszy z pewnością jednak nastąpi. Gdy uwzględnię uwagi i sugestie
być może kilka rzeczy ulegnie zmianie, liczę jednak też na aktywność użytkowników hardłerowców :) |