Komputer 8-bitowy

Komputery retro, konsole do gier itd.

Moderatorzy: gsmok, tszczesn, Romekd, Einherjer, OTLamp

Awatar użytkownika
jethrotull
3125...6249 postów
3125...6249 postów
Posty: 4013
Rejestracja: sob, 3 czerwca 2006, 21:51
Lokalizacja: Poznań

Re: Komputer 8-bitowy

Post autor: jethrotull »

Ben robi na innym procesorze niż ja: 6502 (procesor bardzo słynny, działał na nim T-1000 z "Terminatora" oraz Bender z "Futuramy"). Jak byłem w liceum miałem Atari 65XE z tym właśnie procesorem i wtedy pierwszy raz programowałem w asemblerze. Niestety, nie miałem programu asemblera (dostępne były tylko gry przegrywane od kolegów na magnetofonie), więc pisałem i asemblowałem programy ręcznie na kartce, a potem wprowadzałem do Atari bezpośrednio w kodzie maszynowym. Także filmy Bena to dla mnie trochę powrót do czasów młodości :)
Jednak Z80 lepiej się nadaje do moich celów: ma m.in. osobną przestrzeń adresową We/Wy, bardziej elastyczny system przerwań i, szczerze mówiąc, lepszą dokumentację.
Awatar użytkownika
TooL46_2
1875...2499 postów
1875...2499 postów
Posty: 2024
Rejestracja: ndz, 20 lipca 2008, 12:06
Lokalizacja: Seattle, WA

Re: Komputer 8-bitowy

Post autor: TooL46_2 »

6502 to takze slynne Apple I oraz II ;) Caly czas myslalem, ze C64 tez go mial ale okazalo sie, ze tam byl 6510. Ja ostatnio sie 'wyposazylem' w C128 z 8502 i wlasnie Z80 na pokladzie by moc pracowac w trybie CP/M. Atari 65XE pamietam, bo rodzinka miala ale moim pierwszym komputerem byla 'niemodna' Amiga 600. Niestety, z braku dostepu do jakiejkolwiek literatury odnosnie programowania w mojej miejscowosci, C/C++ i innych dopiero zaczalem sie uczyc na studiach...
Pozdr,
-Tomek Drabas
________
‎"One should not pursue goals that are easily achieved. One must develop an instinct for what one can just barely achieve through one's greatest efforts."
—Albert Einstein

tomdrabas.com
Awatar użytkownika
jethrotull
3125...6249 postów
3125...6249 postów
Posty: 4013
Rejestracja: sob, 3 czerwca 2006, 21:51
Lokalizacja: Poznań

Re: Komputer 8-bitowy

Post autor: jethrotull »

Spędziłem ostatnie kilka dni inwestygując problem niepewnego działania komputera - czasem działał, a czasem robił głupoty. Okazało się, że ten problem, jak i inne opisane powyżej, były spowodowane zostawieniem wiszącego wejścia WE' w ROMie. Dotykanie palcem płytki ROMu powodowało zwieranie tego wejścia do okolicznych pinów, jeśli akurat zwarłem do czegoś co miało stan wysoki, komputer działał, a jak nie to nie działał.
Powinienm być właściwie na siebie zły za takie niedopatrzenie, ale nie jestem bo po pierwsze bardzo wiele się nauczyłem szukając problemu, a po drugie komputer wreszcie działa bez zarzutu!
IMG_20211027_134241271.jpg
A oto karta z buzzerem, dzięki której komputer po raz pierwszy zagadał:
IMG_20211027_134409705.jpg
Tymczasem składam na płytce prototypowej (stykowej) klawiaturę, jesli zadziała to zlutuję ją i zademonstruję działanie.
Awatar użytkownika
jethrotull
3125...6249 postów
3125...6249 postów
Posty: 4013
Rejestracja: sob, 3 czerwca 2006, 21:51
Lokalizacja: Poznań

Re: Komputer 8-bitowy

Post autor: jethrotull »

Mam działającą klawiaturę :D
Frajda jest nieziemska, prawie jak przy pierwszym działającym wzmacniaczu lampowym.
IMG_20211103_194405704.jpg
IMG_20211103_194410311.jpg
Awatar użytkownika
jethrotull
3125...6249 postów
3125...6249 postów
Posty: 4013
Rejestracja: sob, 3 czerwca 2006, 21:51
Lokalizacja: Poznań

Re: Komputer 8-bitowy

Post autor: jethrotull »

Mam pytanie:
Jestem w posiadaniu działającego czipu DS1244 (nota bene podarowanego mi przez kogoś z triody z 10 lat temu), który jest zwykłym ramem z wbudowaną bateryjką. Niestety, mój programator nie wspiera tego czipa, a jedynie DS1245, który ma inną pojemność. Z drugiej strony DS1244 ma ten sam układ wyprowadzeń co popularny 28C256. Moje pytanie brzmi: czy mogę zaprogramować DS1244 używając programatora w trybie 28C256, czy też EEPROMy i NVRAMy różnią się jakoś zasadniczo co do procedury programowania? Karta katalogowa 28C256 wspomina coś o jakimś pollingu służącym do sprawdzania czy operacja zapisu się zakończyła, ale nie mam pojęcia czy TL866 używa tego mechanizmu.
Awatar użytkownika
jethrotull
3125...6249 postów
3125...6249 postów
Posty: 4013
Rejestracja: sob, 3 czerwca 2006, 21:51
Lokalizacja: Poznań

Re: Komputer 8-bitowy

Post autor: jethrotull »

Dla potomności dzielę się obecnym schematem klawiatury. Warto zauważyć że prawa strona schematu: przerzutnik i bramki obsługujące piny IEI, IEO, INT, IORQ, M1, RESET można wykorzystać w innych urządzeniach mających komunikować się z procesorem za pomocą przerwań.
keyboard-buzzer.png
Awatar użytkownika
jethrotull
3125...6249 postów
3125...6249 postów
Posty: 4013
Rejestracja: sob, 3 czerwca 2006, 21:51
Lokalizacja: Poznań

Re: Komputer 8-bitowy

Post autor: jethrotull »

Jakby co to sprawdziłem, i da się zaprogramować DS1244 za pomocą TL866 w trybie 28C256.
Awatar użytkownika
jethrotull
3125...6249 postów
3125...6249 postów
Posty: 4013
Rejestracja: sob, 3 czerwca 2006, 21:51
Lokalizacja: Poznań

Re: Komputer 8-bitowy

Post autor: jethrotull »

Awatar użytkownika
jethrotull
3125...6249 postów
3125...6249 postów
Posty: 4013
Rejestracja: sob, 3 czerwca 2006, 21:51
Lokalizacja: Poznań

Re: Komputer 8-bitowy

Post autor: jethrotull »

Po tygodniach programowania dookoła dziwactw HD44870 (pisze pierwszą linię, potem trzecią, potem drugą, potem czwartą, a adresy znaków są nieciągłe - kilkanaście adresów między trzecią a drugą linią w ogóle nie istnieje) i walki z drganiami zestyków klawiatury, postanowiłem zająć się dla odmiany czymś innym. Chciałbym żeby mój komputer miał zegar czasu rzeczywistego który zgłasza przerwanie kilkanaście razy na sekundę żeby można było dokonać wtedy pewnych okresowych czynności, nazwijmy to, pielęgnacyjnych. Pamiętam że w komputerach ATARI tę rolę pełniły przerwania synchronizacji pionowej generowane przez ANTICa 50 razy na sekundę.

Narysowałem więc taki oto schemat programowalnego timera. Licznik na schemacie udaje że jest programowalnym dzielnikiem częstotliwości '292 (tego dzielnika nie ma w Logisimie). Programować można więc interwał między przerwaniami, a oprócz tego także adres wektora obsługi przerwań:
programmableCounter.png
Prawda że piękny?

Jak już się nacieszyłem tym widokiem to doszedłem do wniosku że kompletnie mi się nie chce tego budować, a zaprogramuję to raz na zawsze i później to całe programowanie będzie jedynie zbędnym balastem, więc zamiast tego zaprojektowałem (i zbudowałem) to:
SimpleCounter.png
Od razu lepiej :)
Dla wygody układ generuje przerwania niemaskowalne, które są łatwiejsze w obłsudze (przynajmniej dopóki generuje je tylko jedno urządzenie).
Układ jest oczywisty w działaniu, ale dla porządku: lewy inwerter działa w układzie oscylatora relaksacyjnego, podczas gdy drugi jest monoflopem.
Doboru wartości R i C należy dokonać pamiętając że:
- stała czasowa RC oscylatora musi być dłuższa niż stała czasowa RC monoflopa
- minimalny czas trwania stanu niskiego monoflopa musi wynosić 80ns, zgodnie z kartą katalogową Z80, inaczej przerwanie może nie zostać zarejestrowane.
Awatar użytkownika
jethrotull
3125...6249 postów
3125...6249 postów
Posty: 4013
Rejestracja: sob, 3 czerwca 2006, 21:51
Lokalizacja: Poznań

Re: Komputer 8-bitowy

Post autor: jethrotull »

Zbudowałem klawiaturę w postaci permanentej:
IMG_20211129_220313815.jpg
W lewym górnym rogu widać opisany wcześniej timer na dwóch inwerterach.
W prawym górnym rogu buzzer.

Tymczasem napisałem prosty monitor z następującymi funkcjami:
- wyświetlanie zawartości pamięci począwszy od zadanego adresu
- ustawianie zawartości pamięci (dowolna liczba komórek jedną komendą)
- wypełnianie zadanej liczby komórek pamięci tą samą wartością
- kopiowanie zadanej liczby bajtów z innej części pamięci.

Łącznie BIOS (obsługujący wyświetlacz, klawiaturę, buzzer i niedziałającą jeszcze kartę dźwiękową) zawiera około 1700 instrukcji assemblera i około 3KB kodu maszynowego.
Awatar użytkownika
jethrotull
3125...6249 postów
3125...6249 postów
Posty: 4013
Rejestracja: sob, 3 czerwca 2006, 21:51
Lokalizacja: Poznań

Re: Komputer 8-bitowy

Post autor: jethrotull »

Ostatnie parę tygodni spędziłem na próbach skonstruowania generatora sygnału VGA, czegoś podobnego do https://www.waveguide.se/?article=bitma ... -interface, z tym że wpadłem na "genialny" pomysł aby zastąpić całą logikę kombinacyjną pamięcią ROM.

Pierwsze problemy miałem już na etapie wyboru liczników - CD4040 jest koszmarnie wolny i nie chce poprawnie działać nawet na sygnale zegara o częstotliwości 6MHz. Z kolei 74LS590 ma na wyjściu rejestr, w związku z czym nie da się go zresetować w żądanym momencie.
W końcu stanęło na kombinacji 74LS161 żeby zredukować częstotliwość, a reszta na CD4040.

Układ wydaje się "działać" w tym sensie że generuje wszystkie potrzebne sygnały, jednak są one bardzo zanieczyszczone szpilkami o szerokości podejrzanie zbliżonej do czasu dostępu do pamięci (120ns). Szpilki te niestety uniemożliwiają poprawne taktowanie licznika Y. Na zdjęciu u góry sygnał licznika Y pochodzący z wyjścia ROMu, a na kolejnym kanale sygnał wyjściowy z pierwszego stopnia licznika - wyraźnie widać że szpilki są zliczane i powodują niechciane inkrementacje licznika :(.

Wszelkie sugestie mile widziane, póki co próbowałem
- odfiltrować zasilanie każdej kości kondensatorem 100n znajdującym się w pobliżu kości
- przetestować różne liczki synchroniczne i asynchroniczne
- obciążać wyjścia pamięci rezystorami kilka kOm lub kondensatorami kilkadziesiąt pF
Wszystko jest zmontowane na płytce stykowej, ale raczej schludnie, bez długich czy zapętlonych połączeń.
VGA glitches.png
CHOPIN66
1875...2499 postów
1875...2499 postów
Posty: 2104
Rejestracja: pn, 10 sierpnia 2009, 17:47
Lokalizacja: Gdańsk

Re: Komputer 8-bitowy

Post autor: CHOPIN66 »

Dałeś kondensatory 47nF na zasilaniu każdego układu scalonego ? Muszą być przylutowane bezpośrednio do sclaków .
Awatar użytkownika
tszczesn
moderator
Posty: 11225
Rejestracja: wt, 12 sierpnia 2003, 09:14
Lokalizacja: Otwock
Kontakt:

Re: Komputer 8-bitowy

Post autor: tszczesn »

Pomacaj zasilanie oscyloskopem, to się upewnisz, że to w nim jest problem. Jak podejrzewasz pamięć o zasyfianie zasilania, to zasil ją przez dławik, i zbocznikuj zasilanie pamięci kondensatorem 100nF i ewentualnie 10µF.

Jak szybko ma ci się ustalać stan tych liczników? Z łatwo dostępnych scalaków masz 74LS/HCT161 - czterobitowy licznik, czasy propagacji rzędu 50ns, jak potrzebujesz krócej to jest wersja F, rząd wielkości szybsza.
Awatar użytkownika
jethrotull
3125...6249 postów
3125...6249 postów
Posty: 4013
Rejestracja: sob, 3 czerwca 2006, 21:51
Lokalizacja: Poznań

Re: Komputer 8-bitowy

Post autor: jethrotull »

Właśnie nie wiem czy pamięć sieje szpilkami po zasilaniu, szczerze mówiąc trochę w wątpię bo przecież taki sam problem miałbym z ROMem samego komputera. Bardziej wydaje mi się że przez pierwsze 120ns po ustaleniu adresu stan wyjść pamięci jest nieustalony. Może spróbuję włączać i wyłączać CS pamięci w takt zegara.
Awatar użytkownika
jethrotull
3125...6249 postów
3125...6249 postów
Posty: 4013
Rejestracja: sob, 3 czerwca 2006, 21:51
Lokalizacja: Poznań

Re: Komputer 8-bitowy

Post autor: jethrotull »

OK, jestem już pewien, że szpilki nie pochodzą z zasilania. Dodałem obok kondensatora ceramicznego 100n przy każdej kostce jeszcze elektrolit 47uF, pamięć zasiliłem przez dławik 100mH i odnotowałem brak poprawy.
Dodatkowo, ustaliłem że wspomniana szerokość szpilki wynosząca 120ns pochodzi po prostu z częstotliwości próbkowania analizatora logicznego wynoszącej 8Mhz. Po przełączeniu się na częstotliwość 16MHz zarejestrowana szerokość szpilek spadła o połowę.

Załączam zdjęcie montażu, od lewej ROM, liczniki, generator 25.125MHz. Widoczne kondensatory filtrujące zasilanie, dławik i przewody prowadzące do analizatora logicznego.
IMG_20211215_170303134.jpg
ODPOWIEDZ