Cartridge Expander

Budując, a właściwie konstruując swój projekt zmodyfikowanego Commodore 64 o kodowej nazwie Retro64 wpadłem na pomysł, aby jak najwięcej urządzeń elektronicznych przydatnych do współpracy, czy wręcz niezbędnych do jego normalnego, komfortowego działania, umieścić wewnątrz obudowy. Chyba każdy z Nas, jako użytkowników tego komputera pamięta różne żonglerki z cartridge’ami? Ja pamiętam i dlatego wpadłem na pomysł, aby umieścić wewnątrz obudowy te układy, a w obudowie mieć tylko przyciski lub przełączniki do ich przełączania. Rozważałem rożne wersje. Głównie adaptacje gotowych rozwiązań m. in. firmy Datalux. Niby to by było to, ale w XXI wieku toporne przełączanie przełącznikami mechanicznymi to jednak nie to… Zainspirowałem tym pomysłem dwóch kolegów elektroników (dokładnie to Jacek31 i 11111olo). To w głównej mierze dzięki nim powstała finalna wersja urządzenia, które potrafi połączyć ze sobą maksymalnie 8 cartridge’y i C64. Schemat układu przedstawiam poniżej:

Parę słów o działaniu układu. Głównym układem służącym przełączaniu jest układ 4017 (umożliwiający przełączać do 8 cartów) lub zamiennie układ 4022 (do 10 cartów). Układem sterują dwa przełączniki monostabilne: SELECT – pozwalający wybrać cart i RESET – resetujący C64 i inicjujący wybrany układ. Po włączeniu zasilania uruchamia się cart 1. Po naciśnięciu przycisku SELECT wybieramy drugi, trzeci, czwarty itd. Aż wróci do pozycji 1. I tu uwaga. Aby był wybór 3 układów, pozostałe wyjścia układu 4017 (4022) począwszy od linii Q3 należy je połączyć przez diodę do sygnału RESET w/w układu (jak na zamieszczonym schemacie). Przy większej ilości przełączanych cart’ów analogicznie kolejne linie Q muszą być zwarte przez diody do RESET by układ nie wysterował „pustego” cart’u.

Wyjścia sterujące 4017 (4022) sterują:
– układem 4066, który przyłącza linie sygnałowe GAME i EXROM danego cartu do C64,
– układem ULN2803, który dostarcza zasilania do danego cart’u.

Zasilanie każdego cart’u musi być oddzielane, by układy nie kolidowały ze sobą. Praktycznie te 3 linie – +5V, EXROM i GAME wystarczają do bezkonfliktowego przełączania układów. W moim przypadku, czyli przy podłączeniu Action Replay 7.3, Final 3 i Black Box 8 nie występują żadne problemy i układ działa stabilnie.

Na schemacie nie jest to narysowane, jest to oczywiste, ale trzeba o tym napisać. Oczywiście wszystkie wykorzystane linie cartridge’y należy połączyć ze sobą równolegle z właściwą linią w C64. Zalecam jak najbardziej posuniętą ostrożność, gdyż o pomyłkę czy błąd przy podłączaniu nie jest trudno, a chyba nie muszę tu o tym pisać czym to się może skończyć. Jeśli ktoś coś popsuje to niestety może mieć w tym momencie pretensje tylko do siebie.
Na koniec życzę udanego uruchomienia i dużo satysfakcji z działania układu.

Elementy komputera Commodore 64

Ten artykuł jest przeznaczony dla osób pragnących zajrzeć pod obudowę mikrokomputera i zapoznać się z nim od strony sprzętowej. Omówimy teraz funkcje poszczególnych elementów. Zrobimy to zgodnie z numeracją podaną na zdjęciu obok, przedstawiającym płytkę montażową z elementami C64.

1.Mikroprocesor 6510
Mikroprocesor jest najważniejszym elementem mikrokomputera odpowiedzialnym za wykonywanie wszystkich instrukcji programowych. Jest on 8-bitowym procesorem o częstotliwości 1 MHz lub 2 MHz (w C64 stosuje się 0,98 MHz dla PAL lub 1,02 MHz dla NTSC). Nie różni się on architektonicznie od popularnego mikroprocesora 6502. Zawiera jednak dodatkowo sześć programowalnych połączeń we-wy, z których trzy służą do sterowania pamięci i trzy do obsługi magnetofonu. Mikroprocesor może być dołączony do 16-bitowej trójstanowej magistrali adresowej i umożliwia dostęp do pamięci (DMA).

2.PLA
Ten układ scalony typu FPLA (ang.field programmable logic array) jest odpowiedzialny za sterowanie pamięci. Zastępuje on wiele bramek, przerzutników i multiplekserów potrzebnych do zrealizowania skomplikowanej struktury logicznej. Ma on 16 wejść i 8 wyjść i umożliwia przyporządkowanie każdej z 65536 (teoretycznie) kombinacji wejściowych odpowiedniej z 256 kombinacji wyjściowych. Specyfika tego i kilku innych układów scalonych zapewnia, że nie można samemu zbudować mikrokomputera „C64-podobnego”.

3.Basic ROM
Ta 8 KB-towa pamięć typu ROM zawiera główną część interpretatora Basicu, tzn.te procedury, które są wspólne dla wszystkich mikrokomputerów, i może być (teoretycznie) przeniesiona do innych modeli.

4.Kernal ROM
System operacyjny Kernal obejmuje wszystkie procedury specyficzne dla mikrokomputera C64, tzn.te, które obsługują urządzenia we-wy, realizują instrukcje LOAD i SAVE, śa odpowiedzialne za współpracę z videokontrolerem, generatorem dźwięku itp.

5.Generator znaków
Generator znaków jest zawarty w 4 KB-towej pamięci typu ROM i dostarcza dane do utworzenia każdego z 512 używanych w C64 znaków. Informacja dotycząca jednego znaku zajmuje 8 bajtów.

6.RAM
Do realizacji 64 KB-towej pamięci RAM użyto 8 układów scalonych typu 4164, z których każdy przechowuje 64 Kb (kilobity) informacji. Interesujący jest sposób adresowania tej pamięci. Wykorzystano mianowicie 8 linii adresowych i dwie linie wybierające: jedną dla oznaczenia, że na liniach adresowych znajdują się dane dotyczące mniej znaczącego bajtu, drugą – bardziej znaczącego. Pamięć ta jest pamięcią dynamiczną, co oznacza, że przechowuje informację tylko przez pewien czas i musi być „odświeżana”. Robi to automatycznie układ scalony VIC.

7.Pamięć koloru
Ten układ scalony zapamiętuje 1024×4 bity, z których są tworzone 1024 bajty. W każdym bajcie można więc modyfikować tylko 4 młodsze bity. Wystarcza to do zapamiętania jednego z 16 dostępnych kolorów dla 1000 znaków ukazujących się na ekranie (25 wierszy, 40 kolumn). Pozostałe 24 półbajty (ang.nibble) są zazwyczaj niewykorzystane.

8.Multipleksery dla RAM
Ze względu na przyjęty sposób adresowania pamięci RAM są potrzebne układy scalone umożliwiające przejście z 16-bitowej magistrali na 8-bitową oraz dwie linie wybierające.

9.SID
Głównym przeznaczeniem układu scalonego 6581 jest synteza dźwięku (trzy głosy). Zawiera on jednak poza tym dwa 8-bitowe przetworniki analogowo-cyfrowe umożliwiające np.podłączenie wiosełek (ang.paddles). Sygnał odpowiadający głosowi trzeciemu może być wykorzystywany jako „stochastyczny” lub do generacji ciągu liczb przypadkowych.

10.CIA 1
Układ scalony 6526 jest programowalnym układem sprzęgającym. Zawiera on dwie 8-bitowe bramy (ang.port), które mogą pracować jako wejścia lub wyjścia, rejestry sterujące te bramy (możliwe przesyłanie z potwierdzeniem), dwa niezależne układy czasowo – licznikowe, bramę transmisji szeregowej, a także zegar czasu rzeczywistego. Ten ostatni nie jest niestety efektywnie wykorzystany przez Kernal. Linie we-wy CIA 1 są użyte do sprzężenia z klawiaturą oraz gniazdami joysticków, przy czym brama A służy do odczytu rzędu naciśniętego klawisza i joysticka 2, a brama B – kolumny klawisza i joysticka 1. Połączone układy czasowo – licznikowe umożliwiają generację przebiegu o częstotliwości 60 Hz wykorzystywanego przy przeglądzie klawiatury i stosowanego jako sygnał przerywający IRQ.

11.CIA 2
Drugi z układów sprzęgających obsługuje urządzenia przyłączone do szeregowego interfejsu (dysk, standardową drukarkę) oraz gniazda użytkowego, np. przez linie RS-232C lub transmisji równoległej. CIA 2 umożliwia też wybór banku pamięci dla videokontrolera VIC. Układy czasowo – licznikowe są wykorzystywane przez procedury RS-232C do generacji sygnału przerywające NMI.

12.Rezystory
Dodatkowe rezystory przyłączone do źródła +5V utrzymują poziom wysoki na niektórych liniach interfejsu.

13.Bufor bramy szeregowej
W celu zwiększenia obiążalności linii transmisji szeregowej zastosowano dodatkowe inwertery.

14.Multiplekser sygnału analogowego
W grach wykorzystujących wiosełka używa się na ogół dwu ich zestawów przyłączonych do obu gniazd joysticków. Musimy więc mierzyć cztery napięcia na potencjometrach, a układ scalony SID ma jedynie dwa przetworniki analogowo – cyfrowe. Funkcją omawianego układu jest wybór pary potencjometrów, z których napięcia są mierzone. Przełączanie następuje niezależnie od wartości bitów 6 i 7 w bramie A układu CIA 1. Na ustalenie się napięcia na wyjściu multipleksera trzeba czekać około pół milisekundy.

15.Gniazdo klawiatury
Klawiatura może być odłączona od płyty głównej mikrokomputera. W gnieździe oprócz doprowadzeń do ośmiu rzędów i ośmiu kolumn klawiatury znajduje się doprowadzenie do osobnego klawisza RESTORE.

16.Generator sygnałów RESET i NMI
Ten układ scalony jest odpowiedzialny za generację sygnału RESET po włączeniu komputera. Inną jego funkcją jest generacja sygnału przerywającego NMI, gdy klawisz RESTORE zostaje szybko naciśnięty – uderzony (istotne jest zbocze impulsu).

17.Sterownik silnika magnetofonu
Do zasilania silnika magnetofonu jest potrzebne stabilizowane napięcie +6V (niezależne od +5V stale potrzebnych do zasilania jego układów elektronicznych). Napięcie to jest włączane w zależności od wartości piątego bitu w bramie procesora (adres $0001). W ten sposób uruchamia się, bądź zatrzymuje silnik. Można oczywiście do gniazda magnetofonu (zaciski 3 i 1) przyłączać przekaźnik sterujący dowolne urządzenia zewnętrzne, np.włączający światła w domu.

18.Gniazdo rozszerzenia
W gnieździe tym są dostępne wszystkie magistrale mikrokomputera: danych, adresowa i sterowania, a poza tym linie przerwań IRQ i NMI, linia RESET, sygnał zegara wizyjnego (7,88 MHz), zasilanie +5V itd. Sygnały GAME i EXROM służą w przypadku stosowania pamięci zewnętrznej (np.cartridge) do odłączania wewnętrznej pamięci RAM. Przy próbach przyłączania urządzeń zewnętrznych należy pamiętać, że magistrale są niebuforowane.

19.Gniazda drążków sterowniczych
Gniazda te są przeznaczone do przyłączania drążków sterowniczych (joysticków), ale ich pięć linii we-wy, dwie analogowe i zasilanie mogą być również wykorzystane do innych celów.

20.VIC-II
Jest to jeden z tych elementów, który zadecydował o sukcesie C64. Nota bene, jest on następcą układu scalonego VIC używanego w mikrokomputerze VIC-20. Odpowiada on za realizację wszystkich procedur związanych z wyświetlaniem informacji na monitorze w trybie tekstowym i graficznym. W odróżnieniu od swojego poprzednika umożliwia on generację duszków. VIC-II ma bezpośredni dostęp do pamięci, a pamięć ekranu może być umieszczona w dowolnym miejscu, ale w granicach 16 KB – tyle bowiem pamięci może on adresować. Dwa najstarsze bity adresu, ustalające o które 16 KB chodzi, są generowane przez CIA 2 – są to bity 6 i 4 w bramie A.

21.Ekranowany układ wizyjny
Metalowy ekran jest wykorzystywany dodatkowo jako radiator dla układu scalonego znajdującego się wewnątrz. Pod nim znajduje się VIC wraz z drobnymi elementami oraz układ dwu zegarów: procesora o częstotliwości 0,98 (lub 1,02 dla NTSC) MHz i wizyjnego o częstotliwości 7,88 (lub 8,18 dla NTSC) MHz. Ponieważ 6,5 MHz jest największą częstotliwością, przy której w typowym telewizorze można rozróżnić sąsiednie punkty, w zestawie znaków dla C64 wszystkie znaki mają po co najmniej dwa punkty w wierszu (obniża to częstotliwość o połowę dając ostre krawędzie liter – szczególnie ważne w kolorze).

22.Regulator intensywności koloru
Ten mały potencjometr umożliwia regulację nasycenia kolorów.

23.Regulator częstotliwości zegara
Zmiana częstotliwości następuje w małym zakresie i nie ma większego wpływu na działanie komputera, natomiast poprzez sprzężoną zmianę częstotliwości zegara wizyjnego znacznie wpływa na kolory ekranu. Głównym przeznaczeniem tego potencjometru jest dostrojenie kolorów podczas fabrycznej regulacji.

24.Modulator wizyjny
Zadaniem tego urządzenia jest dostarczenie modulowanego sygnału, który może być doprowadzony do gniazda antenowego telewizora.

25.Gniazdo zasilania
Do zasilania komputera C64 jest potrzebne stałe stabilizowane napięcie 5V i zmienne 9V. Napięcie 5V jest używane do zasilania wszystkich układów scalonych komputera za wyjątkiem videokontrolera. Napięcie zmienne jest prostowane wewnątrz komputera. Uzyskuje się w ten sposób napięcie: 5V do zasilania układu VIC i 12 V do zasilania VIC i SID. Napięcie zmienne jest też wykorzystane jako wzorzec częstotliwości dla zegara czasu rzeczywistego TOD.

26.Bezpiecznik
Bezpiecznik zabezpiecza tylko obwody zasilane napięciem zmiennym. Przerwa w obwodzie tego napięcia nie jest natomiast sygnalizowana przez diodę świecącą LED. Gdy dioda się świeci, a komputer „milczy”, może to świadczyć o przepaleniu się bezpiecznika.

27.Powielacz napięcia
Ten układ jest potrzebny do wytworzenia 16V napięcia stałego z 9V napięcia zmiennego.

28.Stabilizator napięcia 12V
Napięcie stałe 16V jest doprowadzane do stabilizatora, który utrzymuje je na poziomie 12V potrzebnych do zasilania układów VIC i SID.

29.Stabilizator napięcia 5V
Napięcie 9V po wyprostowaniu jest doprowadzone do tego stabilizatora dostarczającego drugiego napięcia potrzebnego do zasilania układu VIC.

30.Gniazdo wskaźnika zasilania
Dioda świecąca LED jest połączona przez to gniazdo z płytą główną komputera.

Na koniec uwagi dla tych, którzy zachęceni opisem zdecydują się obejrzeć swego komodorka od wewnątrz. Jak wspomnieliśmy Commodore 64 jest rozmaicie montowany i rozmieszczenie elementów może – zależy to od serii – nie odpowiadać zdjęciu na górze. Bardzo istotne jest, ile układów scalonych jest na podstawkach. Im więcej, tym lepiej – łatwiej bowiem w przypadku awarii próbować samemu naprawić komputer.

Reset do C64 i stacji dysków

Tak, czas na kwas, to jest nasz pierwszy układ. Na początku biorąc pod uwagę, iż chcesz poważnie rozszerzać swoją komodę, zrobimy sobie reset do C64, ale taki z prawdziwego zdarzenia. Bynajmniej nie chodzi mi o reset w stylu Action’a czy innego kartridża. Taki reset nie robi nic innego, jak po prostu zwiera linię reset do masy, przez co wszystkie układy komody z wejściem reset ulegają zresetowaniu. Czy zatem można powiedzieć, że „chamski” reset spełnia swoją funkcję ? I tak, i nie. Tak, bo resetuje. Co prawda, powiedzmy, raz na 100 razy, kiedy wciskamy reset w Action’ie zdarza się, iż komoda potrafi się zawiesić i w tym momencie trzeba nacisnąć reset ponownie. Nie spełnia swojej funkcji, ponieważ długość sygnału reset nigdy nie jest taka, jaka być powinna (to nie stanowi zbyt dużego problemu), poza tym dochodzi jeszcze skutek uboczny, jakim są drgania występujące przy wciskaniu mikroprzełącznika. Najlepiej zobrazuje to poniższy rysunek.

Reset

Postaramy się wyeliminować te niedogodności. Bystrzy użytkownicy C64 zapytają pewnie, dlaczego komoda po załączeniu bez kartridża włącza się z chwilowym opóźnieniem? Dzieje się tak dlatego, iż układ zerowania C64 ustawia linię reset w stan niski na czas około 0,5 s. Jest to czas wymagany do rozpoczęcia poprawnej pracy przez system. Poza tym kernal sprawdza, czy do portu expansion jest podpięty jakiś kartridż i, jeśli stwierdzi obecność takowego, oddaje mu kontrolę nad systemem (dlatego z wciśniętym Action’em komoda startuje błyskawicznie). Jeśli natomiast kernal nie stwierdzi obecności kartridża, przeprowadza wtedy szereg inicjalizacji urządzeń we/wy, czyści ekran, drukuje komunikaty startowe i oddaje kontrolę Basic’owi (opisane w skrócie, w rzeczywistości dzieje się o wiele więcej i trochę to trwa).

Układy logiczne komodorka zaczynają poprawnie pracować przy napięciu około 4,75 V. W związku z tym linia reset jest utrzymywana w stanie niskim (a z tym samym system nie pracuje), aż do czasu, kiedy napięcie zasilania się ustali, oraz kiedy wszystkie bloki C64 (zegar systemowy, układ video itp.) będą zdolne do pracy.

Reset, który wykonamy, będzie ustawiał linię reset C64 w stan niski na czas 0,517 s (tyle wystarczy do poprawnego zresetowania logiki komody), a przy okazji będzie pozbawiony drgań występujących przy zmianie sygnałów.

Już wiemy, co mamy zrobić. Czas zobaczyć, jak to teraz wykonać. Mój układ polega na zbudowaniu podobnego układu zerowania, jakie były stosowane w starszych wersjach C64, oraz w C+4 i C16. Zachęcam do tej wersji, z tego względu, iż będzie można samemu dostosować długość sygnału reset według własnego uznania (mam nadzieję, że nikomu nie przyjdzie do głowy ustawienia sygnału reset na czas trwania np. 1 minuty?). Oczywiście, gdyby ktoś się uparł, to mógłby zrezygnować z budowy niniejszego układu i zbudować układ reset w oparciu o systemowy układ reset, i poprzez zmianę elementów RC na płycie C64 regulować długość sygnału reset, bowiem każdy komodorek (niezależnie od wersji) posiada na swojej płycie układ zerowania, który z powodzeniem można wykorzystać do zbudowania resetu. Nie zmieniając elementów RC, mamy czas trwania resetu ustalony na wspomniane wcześniej 517 ms. Jednak My jesteśmy ambitni i zbudujemy swój własny układ reset, ponieważ poza resetem komody ma możliwość zresetowania stacji dysków bez resetowania komody. Demomaniacy na pewno wiedzą jak irytujące jest, kiedy to po obejrzeniu jakiegoś trackma okazuje się, iż koder nie zresetował stacji, która po prostu wisi. Trzeba wtedy wyłączać i włączać komodę, aby ta z kolei zresetowała nam stację. Schemat poniżej.

Powiększ 14 KB

Rys. Schemat układu HARD RESET

Dla bardziej dociekliwych pobieżny opis układu. Zaczniemy od bramki NAND. Na wejście nr 13 układu IC2 jest podany na stałe poziom wysoki. Przełącznikiem SW1 możemy podać na nóżkę nr 12 poprzez opornik R3 sygnał wysoki. Elementy R3 i C5 służą do wyeliminowania drgań sygnału powstałych na przełączniku. Jak wiemy bramka NAND realizuje funkcję NAND (jestem bardzo spostrzegawczy) . Tak więc, dopóki przełącznik SW1 jest rozwarty, to zgodnie z tabelą prawdy na wyjściu bramki (nóżka nr 11) jest sygnał wysoki. Po wciśnięciu przełącznika sygnał ten zmieni się na niski. To natomiast spowoduje wyzwolenie układu NE555, który jest uniwersalnym układem czasowym, umożliwiającym generowanie monostabilne impulsów o czasach od mikrosekund do minut oraz generowanie astabilne ciągu impulsów o częstotliwościach aż do 200 kHz. Nie będę się tu rozpisywał na temat tego układu, bowiem w Internecie jest na jego temat bardzo dużo informacji. Warto jednak napisać, iż na długość generowanego impulsu ma wartość elementów R1 i C2. Czas trwania tego impulsu (długość sygnału reset) można wyliczyć według wzoru: 1.1 * R1 * C2 (w naszym przypadku: 1.1 * 47 * 10 = 517 ms). Na nóżce nr 3 układu IC1 uzyskamy sygnał wyjściowy, który jest aktywny stanem wysokim, a ponieważ do zresetowania komody potrzebny jest sygnał niski, to nasz sygnał wyjściowy należy przepuścić przez inwerter. Można by w tym celu użyć bramki NAND (w układzie 7400 są wolne jeszcze 2), jednak nie ma sensu bardziej gmatwać tego układu. Na płycie komody jest układ oznaczony symbolem U22 (7406 – sześć inwerterów), do którego końcówki nr 1 doprowadzony jest sygnał reset generowany przez układ 7414 (sześć inwerterów z układami Schmitta na wejściach). Właśnie do tej końcówki trzeba podlutować wyjście z naszego układu opisane jako RESET SIGNAL.

Pozostałe elementy to: C4, C1 – kondensatory bramkujące zasilanie, R4, R8, R2, R7, R5 – rezystory podciągające linie do określonych poziomów logicznych, D1 – odseparowanie układu od komody, D2 – odseparowanie układu od stacji…

Jeżeli chodzi o montaż, to całość proponuję zmontować na samodzielnie (zadanie domowe) zaprojektowanej i wytrawionej płytce. Jeśli się jednak ktoś uprze, to może zmontować prezentowany układ na płytce uniwersalnej (znam takich, co zrobili to w wersji typu „pająk” – ja! – prototyp). Wyjście oznaczone na schemacie jako Reset signal, jak już wcześniej wspominałem, lutujemy do nóżki nr 1 układu U22 (7406). Wyjście 1541 reset signal należy doprowadzić do nóżki nr 6 serial portu na płycie C64. Poza tym należy jeszcze doprowadzić zasilanie do układu. Układ nie wymaga żadnego strojenia. I to chyba wszystko, co można napisać na temat tego układu. Gorące pozdrowienia (podgrzane lutownicą) i do zobaczenia w kolejnym odcinku elektrospawacza.

Rozbudowa C64. Część 3

Port użytkownika.

Port B układu U2 (PB0 – PB7) jest dostępny jako port użytkownika, umożliwiając bardzo łatwe przesyłanie danych w postaci równoległej. Linie SP2 i SP1 podłączone są do dwukierunkowych portów szeregowych. Sygnały synchronizacji dla portów szeregowych przesyłane są na dwukierunkowych liniach CNT1 i CNT2.

Opis końcówek mikroprocesora 6510 (8500).

Mikroprocesor 6510 (8500)

1. Ø1
Wejście zegara Ø1. Zegar Ø1 jest używany przez mikroprocesor do wytworzenia, przesuniętego w fazie, zegara Ø2 o częstotliwości 1 MHz.
2. RDY
Wejście pracy krokowej. Procesor zatrzymuje się, gdy linia przechodzi w stan niski. Na szynie adresowej utrzymany jest adres ostatnio pobranego rozkazu. Wejście to umożliwia współpracę mikroprocesora z urządzeniami wolniejszymi.
3. IRQ
Wejście żądania przerwania. Stan niski tej linii powoduje, że procesor wykonuje skok do adresu określonego przez zawartość komórek pamięci o adresach $FFFE i $FFFF. W związku z tym, że jest to przerwanie maskowalne, skok do podprogramu obsługi przerwania odbędzie się tylko wtedy, gdy przerwanie nie jest zamaskowane.
4. NMI
Wejście przerwania niemaskowalnego. Przejście linii w stan niski powoduje, że procesor wykonuje skok do adresu podprogramu obsługi przerwania, określonego przez zawartość komórek pamięci o adresach $FFFA i $FFFB.
5. AEC
Wejście sterujące uaktywnieniem szyny adresowej. Stan niski na tej linii powoduje, że szyna adresowa mikroprocesora przechodzi w stan wysokiej impedancji, umożliwiając innym urządzeniom przejęcie kontroli nad szyną adresową.
6. VCC
Zasilanie +5V

 

7 – 20. A0 – 15
Wyjścia adresowe. Jest to jednokierunkowa szyna umożliwiająca adresowanie pamięci i urządzeń we/wy.
22, 23
Szyna adresowa może być wprowadzona w stan wysokiej impedancji przez odpowiednie sterowanie wejścia AEC.
21. GND
Masa.
24 – 29. P0 – P5
Dwukierunkowy port we/wy, który może być sterowany przez komórki pamięci o adresie $0000 i $0001, gdzie:
$0000 – rejestr wyjściowy,
$0001 – rejestr sterujący kierunkiem przepływu danych.
30 – 37. DB0 – BB7
Dwukierunkowa szyna danych. Przesyła dane do lub z urządzeń we/wy i pamięci.
38. R/W
Sygnał wyjściowy czytaj/pisz (read/write). Podczas operacji zapisu procesor ustawia na linii R/W poziom niski, a podczas odczytu poziom wysoki. Sygnał ten jest zwykle używany przy operacjach zapisu i odczytu do uaktywnienia pamięci lub urządzeń we/wy.
39. Ø2
Wyjście zegara Ø2. Procesor generuje zegar Ø2 z sygnału zegarowego Ø1. Sygnały te są przesunięte w fazie o 180o. Współpraca z urządzeniami we/wy i pamięcią odbywa się, gdy zegar Ø2 jest w stanie wysokim.
40. RES
Wejście zerowania. Przejście linii w stan niski powoduje, że procesor przechodzi do wykonywania programu, którego adres jest określony przez zawartość komórek pamięci o adresach $FFFC i $FFFD. Po włączeniu zasilania, gdy generowany jest sygnał zerowania, inicjowane są wszystkie układy sterowane przez mikroprocesor.

Opis końcówek układu WE/WY 6526 CIA.

Układ 6526 CIA

1. GND
Masa.
2 – 9. PA0 – PA7
Dwukierunkowy port równoległy A.
10 – 17. PB0 – PB7
Dwukierunkowy port równoległy B.
18. PC
Wyjście sterujące. Niski poziom tego wyjścia jest ustawiany po odczycie lub zapisie portu B.
19. TOD
Wejście taktujące zegara, programowane na 50 lub 60 Hz.
20. VCC
Zasilanie +5V.
21. IRQ
Wyjście przerwania podłączone do wejścia IRQ mikroprocesora.
22. R/W
Wejście CZYTAJ/PISZ sterowane sygnałem R/W z mikroprocesora.
23. CS
Wejście wybierające układ. Stan niski tego wejścia powoduje uaktywnienie układu CIA.
24. FLAG
Wejście przerwania, aktywne na opadające zbocze sygnału
25. Ø2
Wejście zegara Ø2, podłączone do zegara Ø2 procesora.
26 – 33. DB0 – DB7
Dwukierunkowa szyna danych, podłączona do szyny danych mikroprocesora.
34. RES
Wejście zerujące, aktywne na stan niski. Inicjuje układ CIA
35 – 38. RS0 – RS3
Wejścia wybierające rejestry. Używane są do wyboru wszystkich wewnętrznych rejestrów układu, któree sterują pracą portów równoległych, układem zegara i portem szeregowym (SP).
39. SP
Dwukierunkowy port szeregowy. Wewnętrzny rejestr układu zamienia dane przesyłane przez mikroprocesor w postaci równoległej na dane szeregowe i odwrotnie.
40. CNT
Wejście licznika. Impulsy w sygnale podłączonym do tego wejścia mogą być zliczane przez wewnętrzny licznik. Właściwość ta może być wykorzystana w przypadku potrzeby określenia częstotliwości występowania pewnych zjawisk.

Opis końcówek generatora dźwięku 6581 SID.

Układ 6581 SID 1, 2. CAP1A, 1B
Podłączenie filtrów pojemnościowych.
3, 4. CAP2A, 2B
5. RES
Wejście zerujące, aktywne na stan niski. Inicjuje układ SID.
6. Ø2
Wejście sygnału zegara Ø2.
7. R/W
Wejście sygnału zapis/odczyt.
8. CS
Wejście uaktywniające układ.
9 – 13. A0 – A4
Wejście linii adresowych z procesora.
14. GND
Masa.
15 – 22. D0 – D7
Podłączenie szyny danych.
23. POT Y
Wejście przetwornika analogowo-cyfrowego (A/D), do którego można podłączyć regulowaną rezystancję. Z reguły wykorzystywane do podłączenia manipulatora analogowego („wiosełka”).
24. POT X
Spełnia taką samą funkcję jak POT Y.
25. VCC
Zasilanie +5VDC.
26. EXT IN
Wejście fonii zewnętrznej.
27. AUDIO OUT
Wyjście fonii.
28. VDD
Zasilanie 12VDC.

Schematy różnych typów C64.

251469-1 – 269 KB
251469-2 – 225 KB
251138-1 – 280 KB
251138-2 – 276 KB
326106-1 – 250 KB
326106-2 – 266 KB

252278-1 – 252 KB
252278-2 – 218 KB
252312-1 – 406 KB
252312-2 – 380 KB
250469-1 – 162 KB
250469-2 – 131 KB

 

Opis i sposoby naprawy ważniejszych uszkodzeń.

1. Po włączeniu zasilania ekran monitora pozostaje wygaszony.
Sprawdź: zasilacz zewnętrzny, Kernal ROM, PLA, CPU 6510, Basic ROM, U8 (7406), VIC II, U9 – U12 (4164 RAM), U21 – U24 (4164 RAM), VR2, CR4, VR1.
2. Po włączeniu zasilania pojawia się komunikat „OUT OF MEMORY ERROR”.
Sprawdź: U9 – U12 (4164 RAM), U21 – U24 (4164 RAM), Użyj testu diagnostycznego zapisanego na dysku.
3. Brak kursora.
Sprawdź: 6526 CIA, U15 (74LS139), CPU 6510.
4. Migotanie ciemnego ekranu.
Sprawdź: 6526 CIA, CPU 6510.
5. Po włączeniu – ekran jest w trybie graficznym i migający kursor.
Sprawdź: U14 (74LS258).
6. Po włączeniu wyświetlane są wszystkie znaki.
Sprawdź: U26 (74LS373)
7. Przerywane wyświetlanie.
Sprawdź: C88 (prawdopodobnie zły kontakt).
8. Po włączeniu pojawia się komunikat – „PRESS PLAY ON TAPE” i ekran pozostaje ciemny.
Sprawdź: CPU 6510, R1 (prawdopodobnie brak kontaktu).
9. Po włączeniu kursor jest zablokowany.
Sprawdź: CPU 6510, U20 (556).
10. Kursor wraca do pozycji spoczynkowej po przyciśnięciu RETURN dla komendy RUN.
Sprawdź: Basic ROM.
11. Nie działa komenda POKE.
Sprawdź: Basic ROM.
12. Niepoprawna praca joysticka.
Sprawdź: 6526 CIA, U28 (4066).
13. Nieodpowiednia częstotliwość.
Sprawdź: C70.
14. Brak wyświetlania liter.
Sprawdź: Basic ROM, 6526 CIA.
15. Zamiast liter wyświetlane są znaki graficzne.
Sprawdź: VIC II.
16. Po włączeniu pojawia się komunikat, ale brak kursora.
Sprawdź: 6526 CIA, U15 (74LS139), CPU 6510, Kernal ROM.
17. Kursor „skacze” do pozycji spoczynkowej.
Sprawdź: CPU 6510.
18. W literach pojawiają się niewłaściwe kolory.
Sprawdź: U6 (2114 RAM), U16 (4066).
19. Podczas włączania i wyłączania wyświetlane są różne znaki, kursor jest zablokowany.
Sprawdź: RAM.
20. System nie zeruje się i nie działa klawisz RESTORE.
Sprawdź: U20 (556).
21. W dół ekranu przesuwają się białe pasy.
Sprawdź: zasilacz zewnętrzny, VR2 (stabilizator +5V).
22. Po nagrzaniu znika kursor.
Sprawdź: 6526 CIA.
23. Po nagrzaniu pojawia się komunikat „SYNATAX ERROR”.
Sprawdź: RAM, Basic ROM.
24. Po nagrzaniu zaczyna falować obraz na monitorze.
Sprawdź: zasilacz zewnętrzny, U31 (74LS629), U30 (74LS193).
25. Po nagrzaniu mikrokomputer zeruje się, nie można załadować długich programów.
Sprawdź: CPU 6510, Basic ROM.
26. Po nagrzaniu klawiatura działa niepoprawnie.
Sprawdź: 6526 CIA, Basic ROM.
27. Po nagrzaniu przez ekran przesuwają się ciemne pasy.
Sprawdź: zasilacz zewnętrzny, C90, C88, CR4, VR2 (stabilizator +5V).
28. Nie wyłącza się silnik pamięci kasetowej.
Sprawdź: CPU 6510.
29. Silnik pamięci kasetowej obraca się po załadowaniu programu. Tranzystor TIP29 staje się bardzo gorący, istnieje możliwość przepalenia bezpiecznika.
Sprawdź: zwarcie na porcie pamięci kasetowej, R4 (prawdopodobnie rozwarty).
30. Po podłączeniu pamięci kasetowej znika kursor.
Sprawdź: CPU 6510.
31. Pamięć kasetowa obraca się bardzo wolno. Program pozornie ładuje się, ale nie startuje.
Sprawdź: CPU 6510.
32. Podczas ładowania programu z kasety pojawia się komunikat „SYNTAX ERROR”.
Sprawdź: U20 (556).
33. Przy używaniu dysku pojawia się komunikat „DEVICE NOT PRESENT ERROR”.
Sprawdź: 6526 CIA, CPU 6510, R28, R29, R30.
34. Po próbie załadowania programu dysk kontynuuje przeszukiwanie.
Sprawdź: 6526 CIA.
35. Po przyciśnięciu dowolnego klawisza czwartego wiersza klawiatury, podczas ładowania z dysku, kursor przechodzi do pozycji spoczynkowej.
Sprawdź: U20 (556), R35 (prawdopodobnie brak kontaktu).
36. Podczas ładowania z dysku wyświetlany jest komunikat „FILE NOT FOUND ERROR”.
Sprawdź: Kernal ROM, 6526 CIA.
37. Podczas używania dysku wyświetlany jest komunikat „OUT OF MEMORY ERROR”.
Sprawdź: U20 (556).

Przed końcem.

I to by było na tyle, jeśli chodzi o pobieżne spojrzenie na wnętrze komodiusza. Muszę tutaj wspomnieć iż powyższy materiał został opracowany na bazie schematu serwisowego komputera Commodore 64 w wersji NTSC. Jednakże wszystkie układy jakie w przyszłości zaprezentuję w tym cyklu będą przystosowane i opisywane pod kątem współpracy z płytą bazową C64 o symbolu 250469. W związku z tym może niekiedy okazać się iż czytelnik posiadający inną płytę bazową będzie zmuszony do wprowadzenia drobnych poprawek w moich układach . Mimo to zachęcam do wnikliwej analizy artykułu i zrozumienia pracy jakże wspaniałej maszynki jaką jest Commodore 64. Przedstawiony powyżej materiał będzie nam pomocny w budowie własnych urządzeń do C64 oraz niezastąpiony w razie awarii komputera.

Zgodnie z obietnicą czas na listę najpotrzebniejszych nam narzędzi i podstawowych części. Oczywiście na dzień dzisiejszy nie jestem w stanie przedstawić spisu wszystkiego co będzie nam potrzebne w przyszłości. Nie należy od razu zaopatrywać się w wszystkie niżej wymienione układy scalone. Dobrym sposobem na pozyskiwanie układów z serii TTL jest demontaż. W dzisiejszych czasach można kupić za grosze płyty główne np. 286, 386… Z nich można wylutować sporo układów (również pamięci statyczne). Jeśli chodzi o pamięci DRAM, to pozyskuję je ze starych kart VGA (te po 512 KB przeważnie posiadają po 8 układów 41464). Natomiast układy z serii 65xx pozyskuje z tanio zakupionych komputerów Commodore (np. C64, C+4, C16, C128 itp.).

Narzędzia:
Lutownica 60 – 100W, wkrętaki, odsysacz do cyny, pęseta, cążki boczne, ostry nóż, wiertarka, wiertła Ø0.75 do Ø6,
Materiały:
Cyna z kalafonią, drut srebrzony na zwory, kalafonia rozpuszczona w spirytusie, laminat do trawienia, roztwór do trawienia płytek, podstawki DIL pod układy, przewód izolowany w formie taśmy itp…
Części elektroniczne:
Układy scalone z serii TTL – 7400, 7402, 7406, 7407, 7408, 7410, 7411, 7442, 7447, 7490, 7492, 7493, 74121, 74138, 74139, 74150, 74151, 74152, 74153, 74154, 74174, 74175, 74240,74244, 74245, 74373, 74374.
Układy scalone z rodziny 65XX: 6502, 6510 (8500), 6520, 6522, 6525, 6526, 6551 (jeśli ktoś myśli o poważnym rozbudowaniu komcia, to te układy będą potrzebne).
Inne układy: 41464 (DRAM), 62256 (SRAM), 8255,
Poza tym rezystory, kondensatory, diody (przede wszystkim 1N4148), tranzystory itp…
Literatura:
1. „Mikroprocesor 6502 i jego rodzina” – Henryk Kruszyński, Krzysztof Kulpa.
2. „Elektronika łatwiejsza niż przypuszczasz – technika cyfrowa” – Dieter Nuhrmann.
3. „Mapa pamięci C64” – autor nieznany.
4. „Schemat Serwisowy Commodore 64” – autor nieznany.

P.S. Jeśli ktoś ma jakieś pytania, to może pisać. W miarę możliwości postaram się odpowiedzieć na zapytania. Jednak niech zainteresowani wezmą pod uwagę iż preferuję pocztę elektroniczną.

Rozbudowa C64. Część 2

Adresowanie ROMu i układów wejścia/wyjścia, port rozszerzenia.

Adresowanie ROMu
Powiększ – 33 KB

Adresowanie Układów wejścia/wyjścia.

VIC

$D000 – $D02E

SID

$D400 – $D41C

COLOR RAM

$D800 – $DBFF

CIA1

$DC00 – $DC0F

CIA2

$DD00 – $DD0F

I/O1

$DE00 – $DEFF

I/O2

$DF00 – $DFFF

Układ U17 jest programowalną tablicą logiczną (PLA). Wyjście F5 układu U17 (końcówka 12) oznaczone jako I/O przechodzi w stan „niski”, jeżeli wybrany jest którykolwiek układ WE/WY sterowany przez układ U15. Poniżej przedstawiona jest zajętość przestrzeni adresowej przez poszczególne układy WE/WY.

Adresowanie ROMu.

ROM BASIC’a umieszczony jest w przestrzeni adresowej od adresu $A000 do $BFFF. BASIC ROM jest uaktywniany, gdy wyjście F1 (końcówka 17) układu PLA U17 przechodzi w stan „niski”.
KERNAL ROM umieszczony jest w przestrzeni adresowej od adresu $E000 do $FFFF. KERNAL ROM jest uaktywniany, gdy wyjście F2 (końcówka 16) układu PLA U17 przechodzi w stan „niski”.

ROM generatora znaków (CHARACTER GENERATOR ROM) umieszczony jest w przestrzeni adresowej od adresu $D000 do $DFFF. Generator znaków jest uaktywniany, gdy wyjście F3 (końcówka 15) układu PLA U17 przechodzi w stan „niski”.

Port rozszerzenia.

Port rozszerzenia jest przedłużeniem szyny danych, szyny adresowej i sygnałów sterujących mikroprocesora. Oprócz tego, wyprowadzone są sygnały ROML i ROMH. Pierwszy z nich uaktywnia układy umieszczone od adresu $8000 do $9FFF, a drugi od $E000 do $FFFF. Przy pomocy tych wyjść układ PLA wybiera cartridge zainstalowany na porcie rozszerzenia.

Dalsze dwa sygnały I/O1 i I/O2 generuje układ U15. Sygnał I/O1 uaktywnia układy umieszczone od adresu $DE00 do $DEFF. Sygnał I/O2 uaktywnia układy umieszczone od adresu $DF00 do $DFFF.

Sterowanie pamięci RAM.

Sterowanie pamięcią RAM
Powiększ – 26 KB

Układy U13 i U25 pracują jako multipleksery linii adresowych. Jeżeli sygnał AEC, wytwarzany przez układ VIC, jest w stanie „wysokim”, wtedy do pamięci RAM docierają adresy z mikroprocesora. Jeżeli sygnał AEC jest w stanie „niskim” do pamięci RAM dociera adres odświeżania z końcówek 24 – 31 układu VIC.

Sygnał AEC przechodzi w stan „niski”, gdy zegar systemowy Ø2 jest w stanie „niskim”. Ponieważ wszystkie układy wejścia/wyjścia są dekodowane, gdy zegar Ø2 jest w stanie „wysokim”, więc odświeżanie nie przeszkadza w działaniu procesora (odświeżanie w przeciw fazie). Przy użyciu ośmiu układów 4164 DRAM zrealizowana jest pamięć 64kB. Układ pamięci RAM 2114 (1kB * 4 bity) służy do przechowywania informacji o kolorze obrazu.

Układy wyjściowe wizji i fonii – złącze 5-cio końcówkowe.

Układy wyjściowe wizji i fonii
Powiększ – 46 KB

Układ VIC generuje sygnał luminacji zsumowany z sygnałem synchronizacji na końcówce 15. Na końcówkę 14 wyprowadzony jest sygnał niosący informację o kolorze.
Całkowity sygnał video tworzony jest przez połączenie tych dwóch sygnałów. Kompletny sygnał video podawany jest na modulator i końcówkę 4 złącza monitorowego (CN5). W przeciwieństwie do wersji 8-mio końcówkowej złącza CN5, nie jest tutaj dostępny sygnał koloru.

Układy wyjściowe wizji i fonii – złącze 8-cio końcówkowe.

Układy wyjściowe wizji i fonii
Powiększ – 41 KB

Układ video kontrolera U19 VIC jest odpowiedzialny za tworzenie sygnału video. Luminacja wraz z synchronizacją (poziomą i pionową) wyprowadzona jest na końcówkę 15. Następnie, sygnał ten podawany jest na nóżkę 2 modulatora. Sygnał koloru z nóżki 14 układu U19 podawany jest na końcówkę 3 modulatora. Końcówka 9 układu U19 VIC umożliwia podłączenie pióra świetlnego.

Układ U18 SID jest odpowiedzialny za fonię. Końcówka 27 jest wyjściem fonii, a końcówka 26 wejściem fonii zewnętrznej. Modulator łączy sygnał luminacji, koloru oraz fonii i generuje kompletny sygnał TV na nóżce 5. Oprócz tego modulator przesyła na złącze CN5 sygnały wyjściowe z układu U19 VIC.
Sygnał fonii z nóżki 27 układu U18 SID, po przejściu przez wzmacniacz Q2, jest podłączony do końcówki 3 złącza CN5.
Sygnał fonii zewnętrznej z końcówki 5 złącza CN5 podawany jest na nóżkę 26 układu U18 SID. Manipulator analogowy („wiosełka”) jest podłączony do jednego z portów sterujących i testowany przez układ U18 SID na końcówkach 23 i 24.

Interfejs pamięci kasetowej.

Intefejs pamięci kasetowej
Powiększ – 30 KB

Jedną z cech układu 6510 jest wbudowany port we/wy (P0-P5). Linie P3 – P5 sterują większością funkcji interfejsu pamięci kasetowej. Na linii P3 wyprowadzony jest sygnał danych do zapisu, który podłączony jest do końcówek E i 5 złącza CN3. P4 jest wejściem, które służy do określania stanu w jakim znajduje się przycisk odtwarzania pamięci kasetowej. Linia P5 jest wyjściem, które steruje silnikiem pamięci kasetowej. Przejście linii P5 w stan niski powoduje zatkanie tranzystora Q2, co w rezultacie doprowadza do ustalenia napięcia na bazie tranzystora Q1 na poziomie 7.5V. Tranzystory Q1 i Q3 zostają nasycone, umożliwiając przepływ prądu przez uzwojenia silnika pamięci kasetowej.

Układ U1 realizuje funkcję rozbudowanego układu we/wy. Zwiera porty równoległe, wyjścia szeregowe i układy czasowe. Dane odczytane z pamięci kasetowej są podłączone do końcówek D i 4 złącza CN3, a następnie na nóżkę 24 (FLAG) układu U1.

Interfejs klawiatury, joysticka i manipulatora analogowego.

Intefejs klawiatury, joysticka i manipulatora analogowego
Powiększ – 47 KB

Matryca klawiatury.

Matryca klawiatury
Powiększ – 15 KB

Klawiatura podłączona jest do układu U1 CIA. Do dekodowania przycisków klawiatury użyte zostały obydwa równoległe porty układu U1. Sygnały portu A (PA0 – PA7) są wyjściami. Sygnały portu B (PB0 – PB7) są wejściami. Na liniach portu A pojawia się wędrujące „0”. Przyciśnięcie któregokolwiek klawisza powoduje pojawienie się „0” na odpowiadającej mu linii portu B.
Program zapisany w KERNAL ROM generuje wędrujące „0” na liniach portu A i dekoduje powracające sygnały na liniach portu B.
Przyciśnięcie klawisza RESTORE powoduje generację impulsu przez wygenerowanie przerwania niemaskowalnego – NMI. W wyniku tego procesor wykonuje procedurę, która inicjuje układy we/wy. Jeżeli w tym samym czasie zostanie wciśnięty klawisz STOP inicjowane są również flagi BASICa.

Interfejs joysticka.

Układ U1 współpracuje również z joystickiem. Joystick B, związany z portem 2, jest podłączony do portu A. Joystick A, związany z portem 1, jest podłączony do portu B. Przesunięcie dźwigni joysticka w górę, w dół, w lewo, w prawo lub przyciśnięcie przycisku „fire” powoduje zwarcie odpowiedniego wejścia układu U1 do masy.

Interfejs manipulatora analogowego.

Pokrętło manipulatora połączone jest z regulowanym rezystorem. Obracając pokrętłem, zmieniamy rezystancję, która z kolei wpływa na stałą czasową układu RC. Napięcie, które ustali się na kondensatorze podawane jest na wejście przetwornika analogowo-cyfrowego (A/D), znajdującego się w układzie U18 SID. Informacja w postaci cyfrowej jest przechowywana w jednym z rejestrów układu SID. Położenie manipulatora może być określone przez odczyt zawartości tego rejestru. Do przełączania sygnałów z obydwu manipulatorów wykorzystano układ kluczy analogowych 4066 CMOS (układ U28). Sygnały z manipulatorów są przekazywane do układu SID, podczas gdy wejścia zezwalające (E0-E3) układu U28 są w stanie „wysokim”.

UWAGA: Przyporządkowanie końcówek portu U1 podane na schematach jest błędne. Właściwy opis umieszczony jest na rysunku matrycy klawiatury.

Interfejs szeregowy i port użytkownika.

Interfejs szeregowy i port użytkownika
Powiększ – 41 KB

Interfejs szeregowy.

Interfejs szeregowy sterowany jest z układu U2 CIA przez sygnały PA3 – PA7 portu równoległego.
Sygnał PA3 jest sygnałem wyjściowym i spełnia funkcję linii zajętości (ATN). Sygnał zajętości jest odwracany przez układ U8. Linia PA4 jest wyjściem zegara. Transmisja danych z mikrokomputera C64 do urządzenia zewnętrznego jest synchronizowana sygnałem zegarowym na linii PA4. Dane wyjściowe przesyłane są na linii PA5. Sygnały PA4 i PA5 są buforowane przez układ U8.

Transmisja danych z urządzenia zewnętrznego do mikrokomputera C64 jest synchronizowana sygnałem zegarowym generowanym przez urządzenie nadające, który podłączony jest do linii PA6.
Transmisja danych z urządzenia zewnętrznego do mikrokomputera odbywa się na linii PA7. Urządzenie zewnętrzne, które chce nawiązać łączność z mikroprocesorem wystawia sygnał żądania obsługi wprowadzając linię SRQ IN w stan „niski”.

Rozbudowa C64. Część 1

Wstęp.

Witam w kąciku elektromaniaka, czyli sposobów kilka na przerobienie i rozbudowę C64. Jest to pierwszy artykuł z wielu (mam nadzieję :-)) które będą traktowały o własnym ulepszaniu poczciwej sześćdziesiątki czwórki. Z góry informuję, iż nie będzie to kolejny cykl dla początkujących. Nie będzie tutaj też artykułów w stylu – „Jak do C64 podłączyć diodę LED i nią mrugać”. Jeżeli ktoś słabo czuje się w roli spawacza cynowego (brak umiejętności posługiwania się lutownicą), a bardzo lubi swoją komodę, to radzę nie próbować samemu eksperymentować z bebechami (wnętrznościami?) kompa (a jeśli ktoś nie lubi swojego C64 to niech mi go podeśle, adres na końcu). Poza tym, jeśli nie znasz podstaw elektroniki cyfrowej, to nie myśl, że tutaj się ich nauczysz. Spróbuj odwiedzić stronę www.elektronika.gery.pl lub www.elektroda.pl. Po udanych korepetycjach zapraszam z powrotem. Niestety, ale nie mam aż tyle czasu ani natchnienia, aby pisać teraz o bramkach NAND czy przerzutnikach (jak to mówią – life is brutal), a są to bardzo istotne informacje i w zasadzie bez podstaw elektroniki cyfrowej (zera i jedynki) nie da się zrozumieć działania prezentowanych przeze mnie układów. Jak więc widzisz, drogi Czytelniku, sednem tego cyklu jest abyś zrozumiał to co robisz ze swoim komputerem, a nawet dołożył do proponowanych przeze mnie układów swoje przysłowiowe 5 groszy (tzn. ulepszył je, poprawił, dostosował do swoich celów).

Wszystkie układy i usprawnienia które przedstawię w tym cyklu będą wymagały ingerencji w płytę C64. Mówiąc prosto: bez lutownicy (a często i bez odsysacza) nie wykonacie żadnego z przedstawianych i opisywanych przeze mnie układów. Większość układów wykonana będzie na łatwo dostępnych układach TTL. Najbardziej potrzebne nam rzeczy spiszę pod koniec artykułu i będziecie mieli czas na zgromadzenie ich aż do następnego odcinka. Teraz jednak muszę napisać trochę o samej komodzie. No, może nawet trochę więcej. Na początek dane techniczne.

Podstawowe dane techniczne C64.

Mikroprocesor

6510A z zegarem 1.02 MHz (kompatybilny z 6502)

Pamięć

64k RAM

ROM

20k ROM (zawiera system operacyjny Kernal i interpreter Basic oraz generator znaków – Char ROM)

Tryb Tekstowy

40 kolumn x 25 linii tekstu. – 16 kolorów tła, ramki i znaków
– litery małe i duże, cyfry i symbole
– znaki w inwersji
– znaki graficzne

Tryb Graficzny

Rozdzielczości:
Hires – 320×200 punktów, 2 kolory
Lores – 160×320 punktów, 4 kolory

Obiekty Ruchome (Sprites)

– 8 niezależnych obiektów ruchomych
– każdy złożony z matrycy 24×21
– wyświetlanie w trybie lores i hires
– niezależne poszerzanie w pionie i poziomie
– wykrywanie kolizji między obiektami oraz między obiektem i danymi (znakami i rysunkami)

Dźwięk

– generator dźwięku SID 6581 (8580) zawiera 3 niezależne generatory
– każdy zawiera programowany generator, który umożliwia niezależną regulację kształtu fali, częstotliwość i obwiedni (ADSR)
– możliwość kształtowania charakterystyki sygnału przy użyciu filtrów dolno-przepustowych, górno-przepustowych i pasmowych
– zewnętrzne wejście fonii

Klawiatura

Pełnowymiarowa klawiatura maszyny do pisania

Klawisze

– ogółem 66 klawiszy
– 2 klawisze sterujące kursorem
– 4 klawisze funkcyjne (możliwość definiowania przez użytkownika do 8 funkcji)
– zestaw małych i dużych liter
– zestaw znaków graficznych

Wejście/Wyjście

– port użytkownika
– port szeregowy
– port umożliwiający podłączenie zewnętrznego ROMu (cartridge)
– 2 porty do podłączenia joysticka/manipulatora analogowego – „wiosełka” (ang. Paddle)
– port video
– port do podłączenia pamięci kasetowej np. C1530

Charakterystyka oprogramowania

Wbudowany BASIC 2.0
– ponad 70 poleceń, instrukcji i funkcji
– pełnoekranowy edytor

Zasilanie

220V, 50 Hz

Oczywiście dane te są danymi producenta. Koderzy pewnie nie zgodzą się z wszystkimi danymi (np. tryby graficzne, ilość sprite’ów, itd.). Wszystkie sztuczki programowe wymyślone na przestrzeni lat przez koderów nasuwają mi pewną myśl. Skoro można było ulepszyć komodę od strony softu, to dlaczego nie ulepszyć jej od strony hardware’owej. Oczywiście nie mam tu na myśli zakupu np. rozszerzenia REU 17xx i wetknięciu go w expansion port. Myślę o własnych rozszerzeniach które zbudujemy sami (co byście powiedzieli na komodę i dwa procki?). Zanim jednak dojdziemy do budowy własnego hard’u musimy omówić sobie poszczególne bloki komody, ważniejsze układy, procesor itd. Być może niektórym wyda się iż zaczynam nudzić, ale bez zrozumienia pracy komody od strony kabelków nie będzie łatwo zaprojektować samemu jakiś układ. By nie przedłużać zapraszam do lektury (a będzie ona długa i szczegółowa).

Schemat blokowy C64.

Schemat blokowy C64
Powiększ – 17 KB

Zasilacz.

Zasilacz


Powiększ – 28 KB

Zasilacz


Powiększ – 6 KB

Zasilacz zewnętrzny dostarcza napięcia stabilizowanego 5VDC (stałe), i niestabilizowanego 9VAC (zmienne). Napięcie 5VDC jest podłączone do końcówki 5 i 1 złącza CN7 płyty bazowej C64. Po odfiltrowaniu przez elementy L5, C97 i C100 podane jest na przełącznik S1. Napięcie 5VDC zasila układy logiczne. Warto kontrolować te napięcie, ponieważ jego wahania nie mogą być większe niż +- 5%. Czyli minimum 4.75V, maksimum 5.25V. Jeżeli napięcie nie mieści się w normie, to należy wymienić stabilizator napięcia w zasilaczu oznaczony symbolem 7805. W przeciwnym wypadku mogą ulec uszkodzeniu układy logiczne komody. Z własnej praktyki wiem iż najbardziej podatne na tego typu uszkodzenia są pamięci RAM 41464 komodiusza. W którymś z kolejnych odcinków postaramy się zrobić zasilacz do komody na bazie zasilacza od PC (czyli zasilacz z niezłym kopem).

Napięcie 9VAC jest podłączone do końcówki 6 i 7 złącza CN7 płyty bazowej C64.
Napięcia +12VDC, +5VDC CAN i 9VDC niestabilizowane są otrzymywane z napięcia 9VAC. Napięcie 9VAC jest wyprowadzone na końcówkę 10 i 11 portu użytkownika – złącze CN2.

Wytwarzanie napięcia 12VDC.

Napięcie 9VAC jest dodawane do napięcia 9VDC przez diodę CR6 i prostowane przez diodę CR5. Niestabilizowane napięcie wyjściowe jest filtrowane przez kondensatory C88 i C89, a następnie stabilizowane do napięcia 12VDC przez układ VR1. Stabilizowane napięcie wyjściowe jest filtrowane przez kondensatory C57 i C59.
Napięcie 12VDC zasila układy VIC i SID oraz wzmacniacz fonii.

Wytwarzanie napięcia +5V CAN.

Napięcie 9VAC jest prostowane przez mostek prostowniczy CR4. Niestabilizowane napięcie wyjściowe jest filtrowane przez kondensatory C19 i C95, a następnie stabilizowane do napięcia 5VDC przez układ VR2.
Stabilizowane napięcie wyjściowe jest filtrowane przez kondensatory C102 i C103. Napięcie wyjściowe opisane jako 5VDC CAN jest rozdzielone i indywidualnie filtrowane na dwa napięcia, określone jako VVID i VC. Napięcie VVID zasila układ video, a napięcie VC zasila zegar systemowy.

Wytwarzanie niestabilizowanego napięcia 9VDC.

Mostek prostowniczy CR4 prostuje wejściowe napięcie 9VAC. Na jego wyjściu otrzymujemy niestabilizowane napięcie 9VDC, które wykorzystywane jest do zasilania silnika pamięci kasetowej i modulatora w wersji C64B.

Układ zerowania.

Układ zerowania
Powiększ – 10 KB

Układ U20 pracuje jako przerzutnik monostabilny. Szerokość impulsu wyjściowego jest określona przez elementy R34 i C24. Szerokość impulsu = 1.1 * R34 * C24, co daje w przybliżeniu 0.5 sekundy. Wyjście układu (końcówka 9) jest aktywne stanem wysokim. Sygnał z końcówki 9 układu U20 podawany jest na wejście inwertera U8.
Wyjście układu U8 jest aktywne stanem niskim. Sygnał RESET inicjuję całą logikę procesora i powoduje, że procesor ładuje licznik rozkazów adresem pierwszej instrukcji systemu operacyjnego określonego mianem KERNAL. Adres startowy przechowywany jest w lokacjach pamięci o adresach $FFFC i $FFFD. Pierwsza instrukcja jest dekodowana i wykonywana dając systemowi KERNAL kontrolę nad działaniem komputera.

Układ zegara systemowego C64.

Układ zegara systemowego C64
Powiększ – 27 KB

Układ zegara systemowego zbudowany jest w oparciu o rezonator kwarcowy Y1 o częstotliwości 14.31818 MHz. Układ U31 jest podwójnym oscylatorem sterowanym napięciem (VC0). Sygnał wyjściowy na końcówce 10 o częstotliwości 14.31818 MHz nazywany jest zegarem koloru (?COLOR). Rezystor R27 umożliwia dokładną regulację częstotliwości wyjściowej. Układ U30 jest dzielnikiem częstotliwości, który na wyjściu (końcówka 6) dostarcza sygnał o częstotliwości 2 MHz.
Układ U29 (przerzutnik typu D) pracuje w układzie dzielnika przez 2, dając na wyjściu (końcówka 9) sygnał o częstotliwości 1 MHz.
Układ U32 pracuje jako detektor fazy, porównując sygnał wyjściowy z układu U29 z sygnałem zegara Ø0. Napięcie wyjściowe na końcówce 8 jest proporcjonalne do różnicy faz pomiędzy sygnałami wejściowymi. Druga połowa układu U31 generuje sygnał zegara o częstotliwości 8.1818 MHz nazywany zegarem kropek (DOT CLOCK).
Układ VIC dzieli częstotliwość sygnału DOT CLOCK przez osiem i wyprowadza sygnał zegarowy Ø0 na końcówce 17. Wyjście detektora fazy jest podłączone do końcówki 2 układu U31 sterującej częstotliwością sygnału DOT CLOCK. Tak zamknięta pętla sprzężenia zwrotnego powoduje, że sygnał DOT CLOCK śledzi sygnał ØCOLOR.

Układ zegara systemowego C64B.

Układ zegara systemowego C64B
Powiększ – 9 KB

Układ zegara systemowego zbudowany jest w oparciu o rezonator kwarcowy Y1 o częstotliwości 16 MHz i układ U31. Sygnał DOT CLOCK o częstotliwości 8.1818 MHz wyprowadzony jest na końcówce 6, a sygnał ØCLOCK o częstotliwości 14.31818 MHz na końcówce 8.