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 »

Wczoraj dołożyłem generator znaków, i niby wszystko działa, ale płytka stykowa już chyba ledwo styka bo ruszanie nią powoduje rozmaite zakłócenia lub nawet utratę sygnału. To chyba znak że pora zacząć lutować ten układ.

W tym miejscu wydaje się celowe omówienie sposobu generacji kursora, który, jak wszystko w tym projekcie, jest sprytny w swoim prymitywizmie (ś. p. sir Clive Sinclair byłby dumny). Aby uniknąć konieczności implementacji kursora w sprzęcie, postanowiłem dolne 1024 bajty generatora znaków przeznaczyć na wzory znaków ASCII, a w górnych 1024 bajtach są umieszczone te same znaki, ale z dodanym kursorem. Generator znaków zawiera kilka różnych czcionek, i w zależności od czcionki dodanie kursora może oznaczać albo linię na dole danego znaku, albo znak w negatywie. Włączenie lub wyłączenie kursora będzie się więc sprowadzało do, odpowiednio, ustawienia lub wyzerowania najstarszego bitu znaku w pamięci obrazu. Będzie to można zrobić całkowicie programowo. Co więcej, procedura obsługi przerwania niemaskowalnego (która jak pamiętamy uruchamia się około 10 razy na sekundę) będzie mogła co jakiś czas włączyć i wyłączyć kursor aby uzyskać efekt animowanego (mrugającego) kursora.
Awatar użytkownika
Tomasz Gumny
1875...2499 postów
1875...2499 postów
Posty: 2301
Rejestracja: pn, 1 stycznia 2007, 23:18
Lokalizacja: Trzcianka/Poznań

Re: Komputer 8-bitowy

Post autor: Tomasz Gumny »

jethrotull pisze: śr, 16 lutego 2022, 08:27[...] dolne 1024 bajty generatora znaków przeznaczyć na wzory znaków ASCII, a w górnych 1024 bajtach są umieszczone te same znaki, ale z dodanym kursorem.
Lubię takie rozwiązania. Onegdaj*) zrobiłem emulator sprzętowy mikrokontrolera, w którym żeby nie zajmować linii portu, odsyłanie stanu rejestrów i pamięci wewnętrznej odbywało się za pomocą linii adresowej, a program co bit skakał miedzy górną i dolną połówka pamięci programu.
*) sprawdziłem - :shock: 30 lat temu
Tomek
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 »

Tomasz Gumny pisze: śr, 16 lutego 2022, 09:56 Onegdaj*) zrobiłem emulator sprzętowy mikrokontrolera, w którym żeby nie zajmować linii portu, odsyłanie stanu rejestrów i pamięci wewnętrznej odbywało się za pomocą linii adresowej, a program co bit skakał miedzy górną i dolną połówka pamięci programu.
No to już, nazwijmy to, bardzo agresywna optymalizacja, lub, żeby użyć terminu technicznego, hardkor :)
*) sprawdziłem - :shock: 30 lat temu
:D
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 »

jethrotull pisze: pn, 14 lutego 2022, 12:56 Mam pamięć dwuportową, (...) można ją jednocześnie odczytywać i zapisywać, w sposób całkowicie asynchroniczny
Nie jest to w rzeczywistości 100% prawda.
Pamięć pozwala na asynchroniczny dostęp z obu portów, pod warunkiem że nie jest to dostęp do tej samej komórki pamięci.
Układ występuje w dwóch wersjach:
:arrow: 7132 - MASTER, posiada wyjścia BUSY sygnalizujące próbę dostępu do komórki pamięci która właście jest odczytywana lub zapisywana z drugiego portu,
:arrow: 7142 - SLAVE, te same piny BUSY to tym razem wejścia, służy do rozszerzania pamięci do 16 bitów na słowo.

Pamięć którą ja posiadam to 7142, czyli SLAVE. W żaden sposób nie sygnalizuje ona jedoczesnego dostępu, oznacza to że nie można uniknąć utraty danych tym spowodowanych (jednoczesny dostęp powoduje zignorowanie operacji zapisu do pamięci).

Możliwe rozwiązania:
1. Nabyć pamięć 7132 MASTER. Podłączyć pin BUSY pamięci do pinu WAIT procesora.
2. Programowo unikać konfliktów - wpisywać dane obrazu do bufora gdzieś w RAMie zamiast bezpośrednio do pamięci obrazu. Podłaczyć sygnał synchronizacji pionowej do pinu NMI procesora. W procedurze obsługi przerwania niemaskowalnego przepisywać dane do pamięci obrazu. W tym samym czasie blokować pamięć obrazu od strony karty graficznej za pomocą sygnału blankowania. Po narysowaniu całego ekranu, a przed rozpoczęciem rysowania kolejnego jest akurat jedna milisekunda która można poświęcić na przerzucenie 2KB pamięci. Dodatkowo za darmo dostajemy podwójne buforowanie.
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 »

Roboczy schemat karty graficznej po dodaniu generatora znaków, przy założeniu użycia pamięci 7132. Dla przejrzystości usunąłem dekodowanie adresów.

VGAwithCharGen.png
Nie masz wymaganych uprawnień, aby zobaczyć pliki załączone do tego posta.
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 »

Kiedy budowałem prototyp, moją uwagę przykuło wejście WAIT procesora. Ma ono być podłączone zarówno do wyjścia W/READY układu DART (zaprogramowanego aby wyjście działało w trybie WAIT a nie READY) jak i do wyjścia BUSY pamięci 7132. O ile wyjście DARTa to zwykły otwarty dren, o tyle wyjście 7132 to totem pole. Stanąłem więc przed zadaniem przekonwertowania wyjścia 7132 w taki sposób, aby można było połączyć je bezpośrednio z wyjściem DARTa i wejściem WAIT CPU (dodanie bramki byłoby niekorzystne bo wymagałoby dodania dodatkowego czipa do płytki).

Poniżej dwa rozwiązania znalezione w internecie, i trzecie mojego autorstwa. Poprosze o komentarze które z nich są korzystne, w szczególności czy spadek napięcia na diodzie schottky w pierwszej opcji nie będzie problemem oraz jaki tranzystor wybrać dla opcji drugiej i trzeciej:
openCollector.png
Nie masz wymaganych uprawnień, aby zobaczyć pliki załączone do tego posta.
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 »

Przepraszam, do schematu wdarł się błąd.
Moderatorów proszę o usunięcie załącznika i dodanie tego:
openCollector.png
Nie masz wymaganych uprawnień, aby zobaczyć pliki załączone do tego posta.
Awatar użytkownika
tszczesn
moderator
Posty: 11243
Rejestracja: wt, 12 sierpnia 2003, 09:14
Lokalizacja: Otwock

Re: Komputer 8-bitowy

Post autor: tszczesn »

W układzie z bramką brakuje opornika między bazą a wyjściem bramki. Ja bym użył pierwszego układu. Wyjścia układów CMOS w stanie niskim mają praktycznie 0V, więc te 300mV z diody na pewno nie zakłóci wejścia, a ta wersja jest najprostsza.
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, tak zrobię.
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 »

Wykonałem dziś (tzn. robiłem przez wiele tygodni, ale dziś skończyłem) płytę główną komputera w wersji 640KB (128KB ROM i 512KB RAM z przełączaniem banków). Całe urządzenie będzie się składało, oprócz płyty głównej, jeszcze z klawiatury, która już jest gotowa oraz z karty graficznej, którą już zacząłem lutować. Kartę graficzną tymczasowo zastąpi ekran LCD, żeby nie trzeba było testować dwóch dużych podzespołów jednocześnie.
IMG_20220227_134846481.jpg
IMG_20220227_134859526.jpg
Nie masz wymaganych uprawnień, aby zobaczyć pliki załączone do tego posta.
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 »

Może pamiętacie że układ łączący wyświetlacz LCD z procesorem wygląda tak:
lcdDisplayOld.png
Zdałem sobie sprawę, że jeśli do jakiegoś urządzenie peryferyjnego tylko się pisze lub tylko czyta, albo też, jak w tym wypadku, kierunek przesyłu jest wybierany osobno (tutaj za pomocą linii A1), mogę zignorować zupełnie linie RD i WR i uprościć układ, a nawet zaoszczędzić jeden czip na płytce.
lcdDisplayNew.png
Nie masz wymaganych uprawnień, aby zobaczyć pliki załączone do tego posta.
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 »

Praca cały czas wre, ale efekty przychodzą bardzo powoli.
Zacząłem przymierzać się do obudowy żeby dać sobie trochę odpocząć od lutowania i programowania:
IMG_20220330_182044263.jpg
IMG_20220330_182052278.jpg
IMG_20220330_182106317.jpg
Konstrukcja bardzo w duchu DIY, ale mnie się podoba, wygląda jak samorobne komputery 8-bitowe z drugiej połowy lat 70-tych.
Na ostatnim zdjęciu widać już niemal działającą kartę graficzną, brakuje jedynie okabolwania gniazda łączącego z komputerem i dekodowania adresów, żeby umieścić pamięć obrazu w przestrzeni adresowej procesora, ale karta już wyświetla poprawnie zawartość swojej pamięci (która póki co jest losowa).

Tymczasem sam komputer konsekwetnie odmawia działania, tzn. niemal działa ale tu i ówdzie pojawiają się dziwne i niewytłumaczalne bugi, mimo że dokładnie ten sam soft działa bez zarzutu na egzemplarzu prototypowym. Wymieniłem już wszystkie komponenty, co do ostatniej bramki, między tym komputerem a prototypem i nic to nie dało. Spędziłem już na tym dobre dwa tygodnie, i wygląda że będzie to jeszcze długi i bolesny proces debugowania.
Nie masz wymaganych uprawnień, aby zobaczyć pliki załączone do tego posta.
staszeks
2500...3124 posty
2500...3124 posty
Posty: 2957
Rejestracja: sob, 18 września 2004, 19:38
Lokalizacja: Bielsko-Biała

Re: Komputer 8-bitowy

Post autor: staszeks »

Jeżeli nie ma pomyłki w lutowaniu a układ prototypowy y działał poprawnie to zbyt długie odcinki prowadzonych równolegle przewodów.
N.P. Odra była "szyta" w ten sposób aby przewody szły po prostej.
Przewody w ten sposób są krótsze o nie idą równolegle.
Tylko tam było łączenie do łączówek na "okrętkę" i nie było lutowania.
sam sobie w życiu
jakoś nie radzę
więc biuro porad
dla innych prowadzę
/Sztaudynger/
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 »

Niestety, to samo mi przyszło do głowy. Mówię "niestety" bo to by oznaczało, że muszę cały komputer przelutować od nowa.
Wydaje mi się jednak, że może to nie być ten problem, z kilku powodów:
- przewody nie są aż takie znowu długie, w porównaniu z np. ścieżkami na płycie drukowanej typowego fabrycznego komputera,
- zegar tego komputera to zaledwie 2.5MHz, więc prowadzenie linii nie powinno być krytyczne
- tymczasem wykonana tą samą techniką karta graficzna z zegarem 12.5MHz działa bez zarzutu
- wydaje mi się, że błędy wynikające z przesłuchów między liniami powinny być bardziej losowe, podczas gdy zachowanie które obserwuję jest bardzo konsystentne
- wzorowałem sposób montażu na tym projekcie "https://www.waveguide.se/?article=bitma ... -interface" (w tej chwili link nie działa, ale ogólnie działa), oczywiście mój jest dużo mniej schludny bo jestem początkujący.

Dodatkowo, nawet jeśli przelutuję całość od nowa i zacznie działać, to nigdy się nie dowiem czy nie działało przez metodę montażu czy przez błąd lutowniczy. Tym niemniej sprawdziłem wszystkie połączenia pod kątem ciągłości oraz wszystkie sąsiednie piny pod kątem zwarć już z pięć razy i nie widzę błędu, więc może istotnie to montaż :(
Einherjer
2500...3124 posty
2500...3124 posty
Posty: 2601
Rejestracja: pt, 22 stycznia 2010, 18:34
Lokalizacja: Wałbrzych

Re: Komputer 8-bitowy

Post autor: Einherjer »

A czy w układzie prototypowym były te same egzemplarze układów scalonych?