Komputer 8-bitowy
Moderatorzy: gsmok, tszczesn, Romekd, Einherjer, OTLamp
-
- 3125...6249 postów
- Posty: 3253
- Rejestracja: czw, 25 marca 2010, 00:12
Re: Komputer 8-bitowy
Dziękuję, Kolego Jethrotull, za odpowiedź.
Poproszę o wersję PNG.
Zależnie od Kolegi uznania
poproszę o przesłanie tych plików
(karty dźwiękowej może nie być,
jeżeli konieczne jest ograniczenie
sumarycznej wielkości plików) albo tutaj,
o ile to nie koliduje z tutejszymi
procedurami i nie jest to zbyt egoistyczne
z mej strony,że publiczną przestrzeń forum
zajmuję moją sprawą,albo na PRV do mnie
na leon22@op.pl.
Pozdrawiam uprzejmie.
Życzę dobrego wieczoru.
Jacek"b/t"
Poproszę o wersję PNG.
Zależnie od Kolegi uznania
poproszę o przesłanie tych plików
(karty dźwiękowej może nie być,
jeżeli konieczne jest ograniczenie
sumarycznej wielkości plików) albo tutaj,
o ile to nie koliduje z tutejszymi
procedurami i nie jest to zbyt egoistyczne
z mej strony,że publiczną przestrzeń forum
zajmuję moją sprawą,albo na PRV do mnie
na leon22@op.pl.
Pozdrawiam uprzejmie.
Życzę dobrego wieczoru.
Jacek"b/t"
-
- 2500...3124 posty
- Posty: 2815
- Rejestracja: śr, 12 maja 2021, 10:57
- Lokalizacja: Kraków/Węglówka
- Kontakt:
Re: Komputer 8-bitowy
Bardzo chętnie

Pozdrawiam,
A.
Kupię lampy: 35Z4GT, 12K8GT,
- jethrotull
- moderator
- Posty: 3998
- Rejestracja: sob, 3 czerwca 2006, 21:51
- Lokalizacja: Poznań
Re: Komputer 8-bitowy
Mam nadzieję, że nikt się nie obrazi.
CPU: UART: Karta dźwiękowa:
download/file.php?id=98489&mode=view
Karta VGA:
download/file.php?id=96840&mode=view
Możliwe jest też użycie układu TellyMate: http://www.batsocks.co.uk/readme/art_SerialVideo_1.htm
Klawiatura:
download/file.php?id=93663&t=1
Możliwe jest też podłączenie zwykłej klawiatury PS2
CPU: UART: Karta dźwiękowa:
download/file.php?id=98489&mode=view
Karta VGA:
download/file.php?id=96840&mode=view
Możliwe jest też użycie układu TellyMate: http://www.batsocks.co.uk/readme/art_SerialVideo_1.htm
Klawiatura:
download/file.php?id=93663&t=1
Możliwe jest też podłączenie zwykłej klawiatury PS2
-
- 3125...6249 postów
- Posty: 3253
- Rejestracja: czw, 25 marca 2010, 00:12
Re: Komputer 8-bitowy
Dziękuję,Kolego Jethrotull i pozdrawiam.
Jacek
Jacek
- jethrotull
- moderator
- Posty: 3998
- Rejestracja: sob, 3 czerwca 2006, 21:51
- Lokalizacja: Poznań
Re: Komputer 8-bitowy
Zakończyłem, po wielu potknięciach, budowę karty graficznej PAL. Jest ona oparta luźno o ten pomysł:
https://www.waveguide.se/?article=bitma ... -interface
z m.in. następującymi zmianami:
- posiada generator znaków (jest wyłącznie znakowa)
- używa 2KB dwuportowej pamięci RAM jako pamięci obrazu
- znaczna część logiki jest skondensowana w układzie ATF16V8
- inny generator sygnału ładowania rejestru przesuwnego
Co do zasady działania, idea jest podobna jak przypadku mojej karty VGA, jednak diabeł tkwi w szczegółach. W obu kartach linia zawiera 64 bajty pamięci obrazu, mimo że nie wszystkie te bajty są wyświetlane jako znaki. Część znaków jest "przykryta" wygaszaniem poziomym. To rozwiązanie "marnuje" część pamięci obrazu, ale umożliwia użycie tego samego zestawu liczników i do adresowania tej pamięci, i do sterowania generatorem synchronizacji. Jednak rejestr pszesuwny nie jest wyłączany na czas wygaszania, i nadal emituje piksele odpowiadające tym niewidocznym znakom. W standardzie VGA, gdzie jest osobny sygnał obrazu i osobny dla synchronizacji nie ma to znaczenia. W przypadku monitora CRT co prawda może to powodować odwrócone i roziągnięte przypadkowe znaki rysowane przez cofającą się wiązkę elektronów, ale przynajmniej nie wpływa to na synchronizację. Przy monitorze LCD można sobie emitować cokolwiek w czasie wygaszania bez żadnych negatywnych następstw.
Karta PAL nie jest taka prosta, gdyż piksele i sygnał wygaszania są transmitowane jedną i tą samą linią. Emitowanie jakichkolwiek zapalonych pikseli w czasie wygaszania powoduje zatem problemy z synchronizacją. Co więcej, piksele te zakłócają ustalenie przez telewizor poziomu czerni, i tym samym uniemożliwiają uzyskanie poprawnego kontrastu (nawet na telewizorach LCD!).
Karta nie ma żadnego wbudowanego mechanizmu sprzętowego zapewniającego że żadne zapalone piksele nie będą emitowane w czasie wygaszania. Dlatego karta ta, w przeciwieństwie do karty VGA, nie działa poprawnie samodzielnie - nie podłączona do komputera. Komputer musi zainicjalizować pamięć obrazu i upewnić się że pod adresami znajdujacymi się poza obszarem widocznym są jedynie puste znaki (spacje lub zera). Jeden z widocznych na zdjęciach potencjometrów służył do ustalenia stosunku sygnału pikseli i sygnału synchronizacji. W przypadku pracy bez podłączonego komputera potencjometr ten umożliwiał uzyskanie albo zadowalającej geometrii obrazu, albo właściwego kontrastu, ale nie obu jednocześnie.
O ile wyzerowanie wszystkich bajtów pamięci obrazu odpowiadających obszarom wygaszania poziomego pozwala uzyskać prawidłowy obraz, o tyle w przypadku wygaszania pionowego nie mamy tego luksusu. Obraz łącznie zawiera 64 znaki (w tym 50 widocznych) w każdej z 32 linii, łącznie wymaga więc 2KB pamięci obrazu, czyli innymi słowy całej dostępnej pamięci. Nie zostaje już żaden obszar który można by wyzerować i emitować z niego same czarne piksele w okresie wygaszania pionowego. Ponieważ mój telewizor potrafi wyświetlić o kilka linii więcej niż 32, 33. linia była po prostu powtórką pierwszej itd. Aby to naprawić, użyłem pewnej sztuczki. Jako że używam jedynie połowy generatora znaków, drugą (górną) połowę całkowicie wyzerowałem, następnie linię N17 (na schemacie) podłączyłem do najwyższej linii adresowej generatora znaków. Wysoki stan tej linii (czyli numer linii ekranu powyżej 256, czyli numer linii znaków powyżej 32) powoduje że generator znaków "przełącza się" na swoją pustą połowę, i '165 emituje jedynie czarne piksele.
Ostatnią różnicą względem schematu jest inny generator sygnału ładowania rejestru przesuwnego. Na schemacie jest to generator impulsu wyzwalany dowolnym zboczem zbudowany na bramce XOR (IC8B) i linii opóźniającej złożonej z trzech bramek NOT (IC3D, IC3E, IC3F). Taki układ nie zachowywał się poprawnie w moim przypadku, generował wielokrotne impulsy gdzie powinny być pojedyncze. Po sprawdzeniu oscyloskopem okazało się, że wejście tego generatora jest poprawne, a wyjście zawiera nadprogramowe impulsy rozmaitej amplitudy. Zdecydowałem się zamiast tego na rozwiązanie sprawdzone w karcie VGA: inwerter z wejściem Schmitta, a wejście to połączone z linią N3 przez filtr górnoprzepustowy RC o stałej czasowej rzędu kilkudziesięciu ns. To rozwiązanie pozwoliło wreszcie uzyskać całkowicie stabilny i kontrastowy obraz. Załączone zdjęcie jest przepalone, w rzeczywistości wyświetlane znaki są idealnie ostre i czytelne, przynajmniej na telewizorze. Przy wyświetlaniu na czteroipółcalowym monitorze cofania znaki są zbyt małe aby można je wygodnie odczytać z rozsądnej odległości. Na zdjęciu widać też jak działa napisany przeze mnie wierszowy edytor tekstu.
Na koniec jeszcze jedna ciekawostka(?): karta VGA wyświetla znaki od pierwszego bajtu każdej linii, natomiast karta PAL wyświetla dopiero od siódmego bajtu. Wymaga to programowego przesunięcia każdego znaku w pamięci obrazu o siedem bajtów w stosunku do początku linii (np. pierwszy wyświetlany znak pierwszej linii ma adres VIDEO_RAM + 07h).
https://www.waveguide.se/?article=bitma ... -interface
z m.in. następującymi zmianami:
- posiada generator znaków (jest wyłącznie znakowa)
- używa 2KB dwuportowej pamięci RAM jako pamięci obrazu
- znaczna część logiki jest skondensowana w układzie ATF16V8
- inny generator sygnału ładowania rejestru przesuwnego
Co do zasady działania, idea jest podobna jak przypadku mojej karty VGA, jednak diabeł tkwi w szczegółach. W obu kartach linia zawiera 64 bajty pamięci obrazu, mimo że nie wszystkie te bajty są wyświetlane jako znaki. Część znaków jest "przykryta" wygaszaniem poziomym. To rozwiązanie "marnuje" część pamięci obrazu, ale umożliwia użycie tego samego zestawu liczników i do adresowania tej pamięci, i do sterowania generatorem synchronizacji. Jednak rejestr pszesuwny nie jest wyłączany na czas wygaszania, i nadal emituje piksele odpowiadające tym niewidocznym znakom. W standardzie VGA, gdzie jest osobny sygnał obrazu i osobny dla synchronizacji nie ma to znaczenia. W przypadku monitora CRT co prawda może to powodować odwrócone i roziągnięte przypadkowe znaki rysowane przez cofającą się wiązkę elektronów, ale przynajmniej nie wpływa to na synchronizację. Przy monitorze LCD można sobie emitować cokolwiek w czasie wygaszania bez żadnych negatywnych następstw.
Karta PAL nie jest taka prosta, gdyż piksele i sygnał wygaszania są transmitowane jedną i tą samą linią. Emitowanie jakichkolwiek zapalonych pikseli w czasie wygaszania powoduje zatem problemy z synchronizacją. Co więcej, piksele te zakłócają ustalenie przez telewizor poziomu czerni, i tym samym uniemożliwiają uzyskanie poprawnego kontrastu (nawet na telewizorach LCD!).
Karta nie ma żadnego wbudowanego mechanizmu sprzętowego zapewniającego że żadne zapalone piksele nie będą emitowane w czasie wygaszania. Dlatego karta ta, w przeciwieństwie do karty VGA, nie działa poprawnie samodzielnie - nie podłączona do komputera. Komputer musi zainicjalizować pamięć obrazu i upewnić się że pod adresami znajdujacymi się poza obszarem widocznym są jedynie puste znaki (spacje lub zera). Jeden z widocznych na zdjęciach potencjometrów służył do ustalenia stosunku sygnału pikseli i sygnału synchronizacji. W przypadku pracy bez podłączonego komputera potencjometr ten umożliwiał uzyskanie albo zadowalającej geometrii obrazu, albo właściwego kontrastu, ale nie obu jednocześnie.
O ile wyzerowanie wszystkich bajtów pamięci obrazu odpowiadających obszarom wygaszania poziomego pozwala uzyskać prawidłowy obraz, o tyle w przypadku wygaszania pionowego nie mamy tego luksusu. Obraz łącznie zawiera 64 znaki (w tym 50 widocznych) w każdej z 32 linii, łącznie wymaga więc 2KB pamięci obrazu, czyli innymi słowy całej dostępnej pamięci. Nie zostaje już żaden obszar który można by wyzerować i emitować z niego same czarne piksele w okresie wygaszania pionowego. Ponieważ mój telewizor potrafi wyświetlić o kilka linii więcej niż 32, 33. linia była po prostu powtórką pierwszej itd. Aby to naprawić, użyłem pewnej sztuczki. Jako że używam jedynie połowy generatora znaków, drugą (górną) połowę całkowicie wyzerowałem, następnie linię N17 (na schemacie) podłączyłem do najwyższej linii adresowej generatora znaków. Wysoki stan tej linii (czyli numer linii ekranu powyżej 256, czyli numer linii znaków powyżej 32) powoduje że generator znaków "przełącza się" na swoją pustą połowę, i '165 emituje jedynie czarne piksele.
Ostatnią różnicą względem schematu jest inny generator sygnału ładowania rejestru przesuwnego. Na schemacie jest to generator impulsu wyzwalany dowolnym zboczem zbudowany na bramce XOR (IC8B) i linii opóźniającej złożonej z trzech bramek NOT (IC3D, IC3E, IC3F). Taki układ nie zachowywał się poprawnie w moim przypadku, generował wielokrotne impulsy gdzie powinny być pojedyncze. Po sprawdzeniu oscyloskopem okazało się, że wejście tego generatora jest poprawne, a wyjście zawiera nadprogramowe impulsy rozmaitej amplitudy. Zdecydowałem się zamiast tego na rozwiązanie sprawdzone w karcie VGA: inwerter z wejściem Schmitta, a wejście to połączone z linią N3 przez filtr górnoprzepustowy RC o stałej czasowej rzędu kilkudziesięciu ns. To rozwiązanie pozwoliło wreszcie uzyskać całkowicie stabilny i kontrastowy obraz. Załączone zdjęcie jest przepalone, w rzeczywistości wyświetlane znaki są idealnie ostre i czytelne, przynajmniej na telewizorze. Przy wyświetlaniu na czteroipółcalowym monitorze cofania znaki są zbyt małe aby można je wygodnie odczytać z rozsądnej odległości. Na zdjęciu widać też jak działa napisany przeze mnie wierszowy edytor tekstu.
Na koniec jeszcze jedna ciekawostka(?): karta VGA wyświetla znaki od pierwszego bajtu każdej linii, natomiast karta PAL wyświetla dopiero od siódmego bajtu. Wymaga to programowego przesunięcia każdego znaku w pamięci obrazu o siedem bajtów w stosunku do początku linii (np. pierwszy wyświetlany znak pierwszej linii ma adres VIDEO_RAM + 07h).
- jethrotull
- moderator
- Posty: 3998
- Rejestracja: sob, 3 czerwca 2006, 21:51
- Lokalizacja: Poznań
Re: Komputer 8-bitowy
Wiecie może, czy istnieją jakieś porządne, mechaniczne klawisze (nie microswitche) pasujące do perfboardu? Coś w stylu Cherry https://www.google.com/search?q=cherry+ ... 31&dpr=2.5, tylko że Cherry ma dziwny rozstaw pinów.
-
- 2500...3124 posty
- Posty: 2802
- Rejestracja: sob, 18 września 2004, 19:38
- Lokalizacja: Bielsko-Biała
Re: Komputer 8-bitowy
nawet nie wiedziałem, że w moich szpoargałech zachowało się coś takiego.
sam sobie w życiu
jakoś nie radzę
więc biuro porad
dla innych prowadzę
/Sztaudynger/
jakoś nie radzę
więc biuro porad
dla innych prowadzę
/Sztaudynger/
-
- 2500...3124 posty
- Posty: 2802
- Rejestracja: sob, 18 września 2004, 19:38
- Lokalizacja: Bielsko-Biała
Re: Komputer 8-bitowy
Powinienem dodać, że jako jednostkę centralną w tym systemie przewidziano MCY7880
sam sobie w życiu
jakoś nie radzę
więc biuro porad
dla innych prowadzę
/Sztaudynger/
jakoś nie radzę
więc biuro porad
dla innych prowadzę
/Sztaudynger/
- jethrotull
- moderator
- Posty: 3998
- Rejestracja: sob, 3 czerwca 2006, 21:51
- Lokalizacja: Poznań
Re: Komputer 8-bitowy
Po długiej walce napisałem zestaw narzędzi programistycznych dla wymyślonego przeze mnie języka programowania.
Zestaw zawiera:
zaprezentowany już wcześniej edytor tekstu
kompilator konwertujący kod źródłowy do bajtkodu
interpreter bajtkodu
W przeciwieństwie do większości dialektów BASICa dostępnych na typowych komputerach ośmiobitowych, mój jezyk programowania jest bardziej strukturalny - nie wymaga wpisywania numerów linii kodu i skakania do nich, zamiast tego wspiera nazwane procedury i pełne konstrukty programisytyczne jak pętla WHILE, czy instrukcje warunkowe z dowolną liczbą instrukcji w blokach IF/ELSE (np. w ATARI BASIC można użyć tylko jednej instrukcji w bloku IF, a ELSE nie występuje w ogóle). Nie są natomiast wspierane zmienne lokalne. Ich dodanie nie byłoby wielkim problemem, natomiat biorąc pod uwagę ograniczone zasoby sprzętowe, nie wydaje mi się jakoby było to celowe.
Na poniższym przykładzie widać prosty program zapisany w edytorze i jego wyjście.
Zestaw zawiera:



W przeciwieństwie do większości dialektów BASICa dostępnych na typowych komputerach ośmiobitowych, mój jezyk programowania jest bardziej strukturalny - nie wymaga wpisywania numerów linii kodu i skakania do nich, zamiast tego wspiera nazwane procedury i pełne konstrukty programisytyczne jak pętla WHILE, czy instrukcje warunkowe z dowolną liczbą instrukcji w blokach IF/ELSE (np. w ATARI BASIC można użyć tylko jednej instrukcji w bloku IF, a ELSE nie występuje w ogóle). Nie są natomiast wspierane zmienne lokalne. Ich dodanie nie byłoby wielkim problemem, natomiat biorąc pod uwagę ograniczone zasoby sprzętowe, nie wydaje mi się jakoby było to celowe.
Na poniższym przykładzie widać prosty program zapisany w edytorze i jego wyjście.
- Tomasz Gumny
- 1875...2499 postów
- Posty: 2288
- Rejestracja: pn, 1 stycznia 2007, 23:18
- Lokalizacja: Trzcianka/Poznań
- Kontakt:
Re: Komputer 8-bitowy
Miło poczytać, że Twój projekt wszedł na wyższy poziom (języka). I gratuluję determinacji.
Tomek
Re: Komputer 8-bitowy
Wygląda bardzo fajnie
. Ja łudzę się, że da się kiedyś chociaż częściowo odtworzyć oprogramowanie do MSA-80...

- jethrotull
- moderator
- Posty: 3998
- Rejestracja: sob, 3 czerwca 2006, 21:51
- Lokalizacja: Poznań
Re: Komputer 8-bitowy
Wróciłem ostatnio do tematu zapisywania danych w postaci dźwięku. Próbowałem to onegdaj zrobić "na piechotę", generując odpowiednie zmodulowane przebiegi akustyczne i demodulując je później analogowo w celu odzyskania danych, z których to dwóch zadań ukończyłem jedynie pierwsze. Następnie zdałem sobię sprawę, że istnieją już urządzenia do modulowania i demodulowania dźwięku w celu przesyłu danych cyfrowych, a mianowicie modemy. Moją uwagę przyciągnął układ Motoroli MC 145442. Co ważne, modemy takie nie tylko występują w postaci pojedynczego chipu (i to niewielkiego, wąski DIP20), ale także są dostępne na allegro. Pierwszy kupiony układ okazał się co prawda martwy, ale już kolejne działają bez zarzutu.
Kiedy piszę, że modem działa w postaci układu na jednym czipie to dokładnie to mam na myśli, jego poziom sygnału wyjściowego oraz czułość wejścia analogowego są wystarczająco wielkie aby zbędne były jakiekolwiek dodatkowe wzmacniacze. Wszystko co potrzebne do działania takiego modemu to kryształ do oscylatora i kilka elementów pasywnych.
W ramach testów udało mi się przesłać portem szeregowym (przez Putty) ciąg znaków z zawrotną prędkością 300 bodów na modem, a następnie nagrać wygenerowany sygnał zmodulowany na komórkę za pomocą aplikacji rejestrującej dźwięk. Następnie dokonałem operacji odwrotnej, i na terminalu ukazały się wpisane wcześniej znaki (a także kilka śmieci).
Karta katalogowa: https://wolumen53.com/pdf/MC145442_MC14 ... torola.pdf
Podłączenie takiego układu do mikrokomputera (np. na procesorze 8085, który ma wbudowany "port szeregowy") nie powinno być zbyt wielkim wyzwaniem.
Kiedy piszę, że modem działa w postaci układu na jednym czipie to dokładnie to mam na myśli, jego poziom sygnału wyjściowego oraz czułość wejścia analogowego są wystarczająco wielkie aby zbędne były jakiekolwiek dodatkowe wzmacniacze. Wszystko co potrzebne do działania takiego modemu to kryształ do oscylatora i kilka elementów pasywnych.
W ramach testów udało mi się przesłać portem szeregowym (przez Putty) ciąg znaków z zawrotną prędkością 300 bodów na modem, a następnie nagrać wygenerowany sygnał zmodulowany na komórkę za pomocą aplikacji rejestrującej dźwięk. Następnie dokonałem operacji odwrotnej, i na terminalu ukazały się wpisane wcześniej znaki (a także kilka śmieci).
Karta katalogowa: https://wolumen53.com/pdf/MC145442_MC14 ... torola.pdf
Podłączenie takiego układu do mikrokomputera (np. na procesorze 8085, który ma wbudowany "port szeregowy") nie powinno być zbyt wielkim wyzwaniem.
- jethrotull
- moderator
- Posty: 3998
- Rejestracja: sob, 3 czerwca 2006, 21:51
- Lokalizacja: Poznań
Re: Komputer 8-bitowy
Zmęczyło mnie użeranie się z klawiaturami PS2. Mają one szereg cech, które z mojego punktu widzenia są niedogodnościami:
- brak na rynku gniazd PS2 przyjaznych dla płytek prototypowych;
- generowanie własnego sygnału zegarowego który ma częstotliwość równą częstotliwości bitów x1 - np. UART wbudowany w procesor Z180 nie potrafi pracować z takim zegarem, wymaga zegara co najmniej x16;
- niekonsystentne zachowanie między róznymi modelami klawiatur, np. niektóre modele same się nie resetują po załączeniu napięcia;
- całkowicie szalone przesyłanie danych z hosta do klawiatury;
- przesyłanie scankodów zamiast kodów ASCII - wymagana translacja;
Postanowiłem więc zbudować własną klawiaturę, z następującymi założeniami
- klawisze mechaniczne;
- zasilanie z komputera;
- łączenie z komputerem złączem jack 3.5mm;
- przesyłanie znaków ASCII...
- ... za pomocą normalnego protokołu szeregowego...
- ... o dowolnj prędkości transmisji;
W tym celu zakupiłem klawisze Royal Kludge. One również nie są przyjazne płytkom prototypowym. Po raz pierwszy od jakichś dwudziestu lat wytrawiłem więc własną płytkę, i była to niemal kompletna porażka. Móstwo mostków niewytrawionej miedzi, a jednocześnie niemal wszystkie ścieżki poprzegryzane przez roztwór trawiący. Ostatecznie z miedzi ostały się tylko pady lutownicze, a wszystkie połączenia wykonałem ręcznie linką.
Mózgiem urządzenia jest mikrokontroler 87c51. Od razu zaprzyjaźniłem się z asemblerem tego układu - dużo rejestrów i bardzo ortogonalna lista rozkazów (przynajmniej w porównaniu z x80/z80). Mikrokontroler skanuje klawisze, zapewnia programowy debouncing, konwertuje scankody do ASCII i przesyła przez wbudowany UART. Prędkość przesyłu programowana za pomocą mikroswitchy. x51 ma timer służący do generacji baudrate'u, dzięki czemu można uzyskać dowolną prędkość przesyłu, a nie tylko zegar/całkowita potęga dwójki.
Ze względu na użycie trzypinowego złącza jack, możliwe jest przesyłanie tylko w jednym kierunku - z klawiatury do hosta, ale to jest ok, bo klawiatura się sama resetuje, więc nie wymaga resetowania programowego przez hosta.
Układ klawiatury, jak widać, bardzo minimalistyczny - 10 cyfr, 26 liter, dwa klawisze funkcyjne: SHIFT do wpisywania wielkich liter i FUNC do znaków specjalnych, plus enter i spacja. Zrezygnowałem z typowego, długiego klawisza spacji, zamiast tego mam spację w prawym dolnym rogu, jak w Spectrumie.
- brak na rynku gniazd PS2 przyjaznych dla płytek prototypowych;
- generowanie własnego sygnału zegarowego który ma częstotliwość równą częstotliwości bitów x1 - np. UART wbudowany w procesor Z180 nie potrafi pracować z takim zegarem, wymaga zegara co najmniej x16;
- niekonsystentne zachowanie między róznymi modelami klawiatur, np. niektóre modele same się nie resetują po załączeniu napięcia;
- całkowicie szalone przesyłanie danych z hosta do klawiatury;
- przesyłanie scankodów zamiast kodów ASCII - wymagana translacja;
Postanowiłem więc zbudować własną klawiaturę, z następującymi założeniami
- klawisze mechaniczne;
- zasilanie z komputera;
- łączenie z komputerem złączem jack 3.5mm;
- przesyłanie znaków ASCII...
- ... za pomocą normalnego protokołu szeregowego...
- ... o dowolnj prędkości transmisji;
W tym celu zakupiłem klawisze Royal Kludge. One również nie są przyjazne płytkom prototypowym. Po raz pierwszy od jakichś dwudziestu lat wytrawiłem więc własną płytkę, i była to niemal kompletna porażka. Móstwo mostków niewytrawionej miedzi, a jednocześnie niemal wszystkie ścieżki poprzegryzane przez roztwór trawiący. Ostatecznie z miedzi ostały się tylko pady lutownicze, a wszystkie połączenia wykonałem ręcznie linką.
Mózgiem urządzenia jest mikrokontroler 87c51. Od razu zaprzyjaźniłem się z asemblerem tego układu - dużo rejestrów i bardzo ortogonalna lista rozkazów (przynajmniej w porównaniu z x80/z80). Mikrokontroler skanuje klawisze, zapewnia programowy debouncing, konwertuje scankody do ASCII i przesyła przez wbudowany UART. Prędkość przesyłu programowana za pomocą mikroswitchy. x51 ma timer służący do generacji baudrate'u, dzięki czemu można uzyskać dowolną prędkość przesyłu, a nie tylko zegar/całkowita potęga dwójki.
Ze względu na użycie trzypinowego złącza jack, możliwe jest przesyłanie tylko w jednym kierunku - z klawiatury do hosta, ale to jest ok, bo klawiatura się sama resetuje, więc nie wymaga resetowania programowego przez hosta.
Układ klawiatury, jak widać, bardzo minimalistyczny - 10 cyfr, 26 liter, dwa klawisze funkcyjne: SHIFT do wpisywania wielkich liter i FUNC do znaków specjalnych, plus enter i spacja. Zrezygnowałem z typowego, długiego klawisza spacji, zamiast tego mam spację w prawym dolnym rogu, jak w Spectrumie.
- Tomasz Gumny
- 1875...2499 postów
- Posty: 2288
- Rejestracja: pn, 1 stycznia 2007, 23:18
- Lokalizacja: Trzcianka/Poznań
- Kontakt:
Re: Komputer 8-bitowy
Sygnalizację wstecz, np. reset a nawet jakąś transmisję możesz zrobić "na jednym drucie". Wyjścia z otwartym kolektorem (również RxD/TxD) w '51 doskonale się do tego nadają.
P.S. Musiałem sprawdzić co znaczy "niekonsystentne".
P.S. Musiałem sprawdzić co znaczy "niekonsystentne".

Tomek
- jethrotull
- moderator
- Posty: 3998
- Rejestracja: sob, 3 czerwca 2006, 21:51
- Lokalizacja: Poznań