Kartridż z procesorem "W E R O N I K A"

      Projekt dotyczy rozszerzenia zainstalowanego do Atari poprzez gniazdo kartridża. W założeniu chodzi o to, by drugi procesor przetwarzał dane przygotowane przez Atari i odsyłał je z powrotem. Praca na dwa procesory to jest COŚ! Technika ta zastosowana może być do grafiki, szczególnie animacji i szybkiego przełączania ekranów. Choć, jak zawsze inwencja należy do programistów i stworzonego oprogramowania.
Aby osiągnąć założoną szybkość przetwarzania danych przez drugi procesor, po pierwsze powinien to być procesor pracujący na większej częstotliwości niż 6502, po drugie przygotowany i przetworzony blok danych na tyle pojemny by coś sensownego w sobie mieścił, no i można by wymyślać wiele innych postulatów, ale do rzeczy...

Trochę przypomnień, ustaleń i dalej... ogólny i bardziej szczegółowy rys projektu + schemat poglądowy.

Kartridż pozwala przełączać za jednym zamachem pamięć wielkości 16kB w stosunkowo prosty sposób. Z poziomu BASICa bez specjalnych zabiegów przygotowawczych można zaadresować przestrzeń $8000-$9FFF Zatem w opisanym tu projekcie właśnie ta przestrzeń będzie wykorzystywana. Dodatkowo, na stronie $D5 można umieścić rejestry sprzętowe i jak za chwilę się okaże, posłużą one do sygnalizowania "co się dzieje".
Zatem do dyspozycji mamy 8kB pamięci typu SRAM umieszczonej na kartridżu. Aby opisać zasadę działania projektu, pamięć ta zostanie zmniejszona do 256 bajtów by w użyciu było mniej elektroniki.
Podstawowym problemem do rozwiązania jest dostępność do tej samej pamięci przez dwa procesory, ten w Atari 6502 i procesor umieszczony na kartridżu. Dla ułatwienia opisu, przyjmujemy że jest to też procesor 6502. Aby jednoznacznie określić o który procesor chodzi, procesor umieszczony na kartridżu będzie miał indeks "K" (6502K). Podobny indeks będą miały wszystkie inne układy scalone "widziane" od strony procesora 6502K.
Kolejne założenie to takie, że całością rozszerzenia zarządzać będzie oprogramowanie umieszczone w pamięci Atari, zatem Atari jako urządzenie jest nadrzędnym urządzeniem i procesor 6502K musi się słuchać właśnie procesora 6502 i pracować pod jego dyktando.

Mamy zatem pamięć SRAM o pojemności 256 bajtów. Jej szyna danych jest podwójnie zbuforowana układami 74245 i 74245K. Szyna adresowa, A0-A7 podobnie zbuforowana jest dwoma układami 74245 i 74245K. Wejścia WE, OE, CS przełączane są multiplekserami.
Aby projekt miał sens, istnieją dwa takie zestawy pamięci. Zestaw "A" i zestaw "B". Po co i dlaczego?
Otóż w danej chwili do pamięci "A" ma dostęp procesor 6502 a do pamięci "B" procesor 6502K.
Po chwili, na żądanie procesora 6502 obydwa zestawy zostają przełączone i od teraz procesor 6502 ma dostęp do pamięci "B" a procesor 6502K do pamięci "A". Ot, i cała tajemnica. A w szczegółach...

Po włączeniu komputera, procesor 6502 ma dostęp do pamięci "A" natomiast procesor 6502K do pamięci "B". Procesor 6502 przygotowuje jakiś blok danych i umieszcza go w pamięci "A". W tym czasie procesor 6502K nie ma nic sensownego do roboty, więc czeka sobie w pętli na informację przesłaną mu poprzez rejestr sprzętowy że może już przetwarzać dane przygotowane przez procesor 6502.
Procesor 6502 zakończył przygotowywanie bloku danych i na koniec odczytał informację umieszczoną w rejestrze sprzętowym przez procesor 6502K. Wynika z niej że procesor 6502K oczekuje na blok danych. Zatem, procesor 6502 przełączy pamięci i poprzez rejestr sprzętowy zasygnalizuje procesorowi 6502K że blok danych jest dla niego już dostępny. Od teraz pamięć "A" dostępna jest dla procesora 6502K a pamięć "B" dla procesora 6502. Każdy z nich robi swoje, jednocześnie procesor 6502 sprawdza stan rejestru sprzętowego informującego czy procesor 6502K zakończył przetwarzanie danych, z kolei procesor 6502K po zakończeniu przetwarzania sygnalizuje poprzez rejestr sprzętowy że praca zakończona. Od tego momentu, pod nadzorem procesora 6502 może dojść do przełączenia pamięci, tak by dla procesora dostępna była pamięć "A" a dla procesora 6502K pamięć "B". Po przełączeniu "od razu" jeden i drugi procesor mają GOTOWY blok danych do dyspozycji, od razu 16kB (8kB) [tu 256 bajtów].
Jak można zauważyć, nie cały rejestr sprzętowy a poszczególne jego bity służą do wzajemnego porozumiewania się pomiędzy procesorami, stąd też rejestr sprzętowy jest do zapisu i do odczytu. Niektóre bity tylko do zapisu, niektóre tylko do odczytu, a inne mogą mieć uniwersalne przypisanie.
Zastosowane bufory 74245 skutecznie zapobiegają ewentualnym zwarciom mogącym powstać na szynie danych czy na szynie adresowej. I tak, gdy procesor 6502 ma dostęp do pamięci "A", bufory 74245 mu to umożliwiają, zarówno od strony szyny danych i adresowej. W tym czasie drugie bufory 74245K od strony szyny danych i adresowej są zablokowane. Z kolei dla procesora 6502K sytuacja jest odwrotna. Dodatkowo multipleksery umożliwiają odczyt/zapis raz jednej raz drugiej pamięci, przez procesor 6502 lub 6502K.
W opisie pomijam fakt, że oprócz pamięci "A" lub "B" dostępnej dla procesora 6502K na kartridżu jest też dodatkowa pamięć EPROM + RAM w której zapisany jest jakiś sensowny program/procedura pozwalająca temu procesorowi na bezpieczne "zakotwiczenie się" na czas przełączenia pamięci lub na sprawne przetwarzanie danych.
Dodatkowo, na poglądowym schemacie nie ma zaprojektowanego mechanizmu przełączania sygnałów S4\, RD4 oraz dekodera adresu dla rejestru sprzętowego.

Poglądowy schemat kartridża z procesorem

Jak widać, pamięć "A" oraz pamięć "B", raz taktowana jest poprzez procesor 6502 (ten od Atari) a drugim razem poprzez procesor 6502K (ten na kartridżu). W rzeczywistym projekcie procesor 6502K powinien być zastąpiony bardziej wydajnym procesorem, pracującym na wyższej częstotliwości. Ważne by miał na zewnątrz wyprowadzoną szynę danych i adresową podobnie jak procesor 6502.
Zastosowane multipleksery na wejściach WE i OE pamięci SRAM pozwalają przełączać sygnał Zapis/Odczyt by nie dochodziło do kolizji.

Zenon/DIAL
      Wersja oryginalna (DOC)