Komputer 8-bitowy
Moderatorzy: gsmok, tszczesn, Romekd, Einherjer, OTLamp
- jethrotull
- 3125...6249 postów
- Posty: 4013
- Rejestracja: sob, 3 czerwca 2006, 21:51
- Lokalizacja: Poznań
Re: Komputer 8-bitowy
Bardzo mnie to cieszy (choć nie wiem o jakich Cobrach mowa).
Wpadłem na pomysł jak można zaimplementować ROM, RAM i pamięć masową używając tylko jednego czipu pamięci. W Mouserze można kupić układ AS6C4008: statyczną pamięć 512Kx8bit, i to uwaga: w wersji do montażu przewlekanego (DIP32)! Jest to największa pamięć jaką udało mi się znaleźć w obudowie DIP.
https://pdf1.alldatasheet.com/datasheet ... 55PCN.html
Według specyfikacji, układ ten specjalnie nadaje się do podtrzymywania pamięci baterią. Po dodaniu baterii i diody miałbym do dyspozycji 512KB nieulotnej pamięci.
Pierwsze 16KB służyłoby za ROM, zespół bramek chroniłby ten obszar przed przypadkowym zapisem. Próba takiego zapisu powodowałaby zgłoszenie przerwania niemaskowalnego, które pozwalałoby na obsłużenie błedu dostępu do pamięci. Hurra, mamy ochronę pamięci! Kolejne 16KB stanowiłby RAM ogólnego przeznaczenia. Łącznie, pierwsze 32KB przestrzeni adresowej byłoby na stałe zmapowane na pierwsze 32KB układu AS6C4008. Linie A18-A15 pamięci byłby połączone do masy przez rezystory.
W momencie kiedy procesor próbowałby się dostać do górnych 32KB przestrzeni adresowej (linia A15 w stanie wysokim), aktywowany jest rejestr 74HCT573, który podaje pewną (zapisaną wcześniej rozkazem OUT) wartość na cztery najstarsze bity adresowe pamięci. Tym samym, górne 32KB przestrzeni adresowej może być zmapowane na jeden z 15-stu trzydziestwodwukilowych banków pamięci.
Można to wykorzystać żeby po prostu zaadresować łącznie 496 (512 odjąć 16KB "ROMu") kilobajtów pamięci. Nieźle jak na komputer ośmiobitowy. Ale zaraz, przecież ta pamięć jest nieulotna! Można więc zrealizować przy jej użyciu pamięć masową. Bardzo prostym rozwiązaniem jest stworzenie "systemu plików", w którym każdy z 15-stu banków pamięci byłby traktowany jako osobny plik o maksymalnej wielkości 32KB. Załadowanie takiego pliku byłoby niezwykle proste: jeden rozkaz OUT w celu ustawienia wartości na 74HCT573 i voila: cały plik magicznie pojawia się w górnej połowie naszej przestrzeni adresowej! Niepotrzebne jest jakiekolwiek sekwencyjne czytanie pliku. Jeszcze łatwiejszy jest zapis do pliku. Nie trzeba robić dosłownie nic: każda zmiana 32KB pamięci jest automatycznie podtrzymywana w bieżącym banku.
Plusy:
- ROM, RAM i pamięć masowa w jednym czipie
- Eleganckie i proste dekodowanie pamięci (CE połączone bezpośrednio z MEMRQ)
- Sprytny system plików, z możliwością programowego rozszerzenia na jeszcze sprytniejszy, np. po kilka małych plików na bank
- Możliwość dowolnego balansowania między dostęnym rozmiarem RAMu i dysku bez zmian w sprzęcie
Minusy:
- Musiałbym zbudować programator na Arduino żeby zaprogramować ROM, bo TL866 nie obsługuje tej pamięci
- spora liczba układów logicznych potrzebnych żeby zrealizować ochronę pamięci.
Wpadłem na pomysł jak można zaimplementować ROM, RAM i pamięć masową używając tylko jednego czipu pamięci. W Mouserze można kupić układ AS6C4008: statyczną pamięć 512Kx8bit, i to uwaga: w wersji do montażu przewlekanego (DIP32)! Jest to największa pamięć jaką udało mi się znaleźć w obudowie DIP.
https://pdf1.alldatasheet.com/datasheet ... 55PCN.html
Według specyfikacji, układ ten specjalnie nadaje się do podtrzymywania pamięci baterią. Po dodaniu baterii i diody miałbym do dyspozycji 512KB nieulotnej pamięci.
Pierwsze 16KB służyłoby za ROM, zespół bramek chroniłby ten obszar przed przypadkowym zapisem. Próba takiego zapisu powodowałaby zgłoszenie przerwania niemaskowalnego, które pozwalałoby na obsłużenie błedu dostępu do pamięci. Hurra, mamy ochronę pamięci! Kolejne 16KB stanowiłby RAM ogólnego przeznaczenia. Łącznie, pierwsze 32KB przestrzeni adresowej byłoby na stałe zmapowane na pierwsze 32KB układu AS6C4008. Linie A18-A15 pamięci byłby połączone do masy przez rezystory.
W momencie kiedy procesor próbowałby się dostać do górnych 32KB przestrzeni adresowej (linia A15 w stanie wysokim), aktywowany jest rejestr 74HCT573, który podaje pewną (zapisaną wcześniej rozkazem OUT) wartość na cztery najstarsze bity adresowe pamięci. Tym samym, górne 32KB przestrzeni adresowej może być zmapowane na jeden z 15-stu trzydziestwodwukilowych banków pamięci.
Można to wykorzystać żeby po prostu zaadresować łącznie 496 (512 odjąć 16KB "ROMu") kilobajtów pamięci. Nieźle jak na komputer ośmiobitowy. Ale zaraz, przecież ta pamięć jest nieulotna! Można więc zrealizować przy jej użyciu pamięć masową. Bardzo prostym rozwiązaniem jest stworzenie "systemu plików", w którym każdy z 15-stu banków pamięci byłby traktowany jako osobny plik o maksymalnej wielkości 32KB. Załadowanie takiego pliku byłoby niezwykle proste: jeden rozkaz OUT w celu ustawienia wartości na 74HCT573 i voila: cały plik magicznie pojawia się w górnej połowie naszej przestrzeni adresowej! Niepotrzebne jest jakiekolwiek sekwencyjne czytanie pliku. Jeszcze łatwiejszy jest zapis do pliku. Nie trzeba robić dosłownie nic: każda zmiana 32KB pamięci jest automatycznie podtrzymywana w bieżącym banku.
Plusy:
- ROM, RAM i pamięć masowa w jednym czipie
- Eleganckie i proste dekodowanie pamięci (CE połączone bezpośrednio z MEMRQ)
- Sprytny system plików, z możliwością programowego rozszerzenia na jeszcze sprytniejszy, np. po kilka małych plików na bank
- Możliwość dowolnego balansowania między dostęnym rozmiarem RAMu i dysku bez zmian w sprzęcie
Minusy:
- Musiałbym zbudować programator na Arduino żeby zaprogramować ROM, bo TL866 nie obsługuje tej pamięci
- spora liczba układów logicznych potrzebnych żeby zrealizować ochronę pamięci.
- jethrotull
- 3125...6249 postów
- Posty: 4013
- Rejestracja: sob, 3 czerwca 2006, 21:51
- Lokalizacja: Poznań
Re: Komputer 8-bitowy
Aby uniknąć konieczności budowy programatora do AS6C4008, oraz konieczności wyjmowania całej kości razem z baterią w celu zaprogramowania, wymyśliłem kolejne rozwiązanie:
- pierwsze 32KB to zwykły EEPROM 28C256
- kolejne 16KB to RAM ogólnego przeznaczenia, zmapowane na stałe na pierwsze 16KB AS6C4008
- ostatnie 16KB to 31 przełączalnych banków, na tym samym AS6C4008
Tym samym liczba dużych czipów wzrośnie mi o jeden, bo potrzebuję teraz osobnego EEPROMu, za to liczba czipów realizujących logikę spadnie, bo nie będzie trzeba robić "ochrony pamięci".
Z innych nowin: przysłali mi wreszcie YM2413, więc chyba najbliższy subprojekt to szybka karta dźwiękowa.
- pierwsze 32KB to zwykły EEPROM 28C256
- kolejne 16KB to RAM ogólnego przeznaczenia, zmapowane na stałe na pierwsze 16KB AS6C4008
- ostatnie 16KB to 31 przełączalnych banków, na tym samym AS6C4008
Tym samym liczba dużych czipów wzrośnie mi o jeden, bo potrzebuję teraz osobnego EEPROMu, za to liczba czipów realizujących logikę spadnie, bo nie będzie trzeba robić "ochrony pamięci".
Z innych nowin: przysłali mi wreszcie YM2413, więc chyba najbliższy subprojekt to szybka karta dźwiękowa.
-
- 2500...3124 posty
- Posty: 2552
- Rejestracja: pt, 22 stycznia 2010, 18:34
- Lokalizacja: Wałbrzych
Re: Komputer 8-bitowy
Nie myślałeś o tym, żeby logikę do "klejenia" ze sobą pamięci i MCU robić na małej płytce z CPLD?
- jethrotull
- 3125...6249 postów
- Posty: 4013
- Rejestracja: sob, 3 czerwca 2006, 21:51
- Lokalizacja: Poznań
Re: Komputer 8-bitowy
Myślałem, ale nie mam z tym żadnego doświadczenia, zresztą to raptem cztery małe czipy, wliczając dekodowanie ROMu i We/Wy, więc nie wiem czy jest się o co bić. Bardziej myślałem o czymś w rodzaju PLA żeby sterować klawiaturą, bo tam liczba dyskretnych układów logicznych jest większa.
To powiedziawszy, jeśli możesz doradzić jak zrealizować na CPLD pięciobitowy zatrzask z wyjściem trzystanowym, sześć bramek OR i trzy bramki AND to jak najbardziej jestem zainteresowany. Moje ograniczenia są takie, że układ musi być programowalny posiadanym przez mnie programatorem i dostępny w wersji do montażu przewlekanego.
To powiedziawszy, jeśli możesz doradzić jak zrealizować na CPLD pięciobitowy zatrzask z wyjściem trzystanowym, sześć bramek OR i trzy bramki AND to jak najbardziej jestem zainteresowany. Moje ograniczenia są takie, że układ musi być programowalny posiadanym przez mnie programatorem i dostępny w wersji do montażu przewlekanego.
- jethrotull
- 3125...6249 postów
- Posty: 4013
- Rejestracja: sob, 3 czerwca 2006, 21:51
- Lokalizacja: Poznań
Re: Komputer 8-bitowy
OK, zrobiłem rozeznanie bojem, i oto wnioski:
ATF16V8 ma zbyt małą liczbę pinów żeby zrealizować całe klejenie
GAL20V8 jest idealny i do tego dostępny. Co prawda wygląda że jest to powolna i prądożerna kreatura, ale obie te wady powinny być w moim projekcie aceptowalne. Napisałem definicję układu w CUPLu, niestety mój kompilator: https://sourceforge.net/projects/cupl-ide/ wspiera tylko 16V8, a nie wspiera 20V8. WinCUPL nie jest już dostępny w internecie.
Czy mogę prosić o radę czym skompilować mój plik PLD?
ATF16V8 ma zbyt małą liczbę pinów żeby zrealizować całe klejenie
GAL20V8 jest idealny i do tego dostępny. Co prawda wygląda że jest to powolna i prądożerna kreatura, ale obie te wady powinny być w moim projekcie aceptowalne. Napisałem definicję układu w CUPLu, niestety mój kompilator: https://sourceforge.net/projects/cupl-ide/ wspiera tylko 16V8, a nie wspiera 20V8. WinCUPL nie jest już dostępny w internecie.
Czy mogę prosić o radę czym skompilować mój plik PLD?
-
- 2500...3124 posty
- Posty: 2552
- Rejestracja: pt, 22 stycznia 2010, 18:34
- Lokalizacja: Wałbrzych
Re: Komputer 8-bitowy
Mój pomysł był taki, że mimo tego, że Twój projekt jest retro, użyjesz płytki nowoczesnym CPLD, na przykład https://kamami.pl/zestawy-uruchomieniow ... c2c64.html, żeby móc tę "klejącą" logikę łatwo i szybko zmieniać w graficznym edytorze. Jak już znajdziesz działającą wersję to możesz wtedy uszyć to z pojedynczych scalaków albo jakiegoś GALa.
- jethrotull
- 3125...6249 postów
- Posty: 4013
- Rejestracja: sob, 3 czerwca 2006, 21:51
- Lokalizacja: Poznań
Re: Komputer 8-bitowy
OK, rozumiem. Ja sobie to tak czy owak symuluję w Logisimie a później prototypuję, więc znalezienie działającej wersji nie jest jakimś problemem 

- jethrotull
- 3125...6249 postów
- Posty: 4013
- Rejestracja: sob, 3 czerwca 2006, 21:51
- Lokalizacja: Poznań
Re: Komputer 8-bitowy
dzięki, ściągnąłem, ale chce licencję. tak czy owak po ponownym przeliczeniu okazało się że i tak by mi zabrakło nóżek w GALu więc zostaję przy dyskretnej logice.
Tymczasem jednak dopadły mnie problemy związane z moim wolnym zegarem, koledzy Tomasz i Tomek jednak mieli rację. Wszystko działa OK dopóki nie podłączę HD44780, jednak po podłączeniu wyświetlacza komputer zaczyna robić głupoty, już przy pierwszym wywołaniu jakiejkolwiek funkcji odkłada na stos błędny adres powrotny i ląduje w burakach. Problem nie występuje prze taktowaniu zegarem 1.8MHz. Pewnie trzeba było obudować procesor buforami '244 i '245 to by się takie cuda nie działy, może jeszcze dorzucę bufor bezpośrednio na płytkę wyświetlacza.
Zdiagnozowanie tego problemu zajęło mi długie dni, ale teraz już wracam do budowy karty dźwiękowej i klawiatury.
Tymczasem jednak dopadły mnie problemy związane z moim wolnym zegarem, koledzy Tomasz i Tomek jednak mieli rację. Wszystko działa OK dopóki nie podłączę HD44780, jednak po podłączeniu wyświetlacza komputer zaczyna robić głupoty, już przy pierwszym wywołaniu jakiejkolwiek funkcji odkłada na stos błędny adres powrotny i ląduje w burakach. Problem nie występuje prze taktowaniu zegarem 1.8MHz. Pewnie trzeba było obudować procesor buforami '244 i '245 to by się takie cuda nie działy, może jeszcze dorzucę bufor bezpośrednio na płytkę wyświetlacza.
Zdiagnozowanie tego problemu zajęło mi długie dni, ale teraz już wracam do budowy karty dźwiękowej i klawiatury.
- jethrotull
- 3125...6249 postów
- Posty: 4013
- Rejestracja: sob, 3 czerwca 2006, 21:51
- Lokalizacja: Poznań
Re: Komputer 8-bitowy
Próba stworzenia karty dźwiękowej na YM2413 zakończyła się kompletnym fiaskiem. Kiedy karta jest włożona do swojego slotu komputer przestaje się bootować. Sprawdzałem czy nie ma może zwarć między pinami danych na karcie, i okazało się że mój chip pokazuje bardzo dziwne wyniki - między niektórymi z sąsiednich pinów danych nie ma przejścia, między innymi miernik pokazuje ~1300mV spadku (tryb sprawdzania zwarć jest też trybem testowania diód), a między innym zaledwie 135mV. Może chip jest uszkodzony lub jest fałszywką.
Spróbuję jeszcze raz, tym razem izolując YM2413 od magistrali, tak jak tu: https://www.waveguide.se/?article=the-ym2413-fm-opll
To nauczka żeby robić najprościej jak się da, ale nie prościej. Bardzo żałuję, że nie dodałem buforów bezpośrednio na płytę główną, teraz dodanie ich wiązałoby się z budową nowej płyty, bo nie ma żadnych które miałyby wyjścia naprzeciwko odpowiadających im wejść, więc dodanie ich do istniejącej płyty jest niemożliwe.
Tymczasem, aby komputer przemówił, konstruuję prostą płytkę z buzzerem i zatrzaskiem.
Spróbuję jeszcze raz, tym razem izolując YM2413 od magistrali, tak jak tu: https://www.waveguide.se/?article=the-ym2413-fm-opll
To nauczka żeby robić najprościej jak się da, ale nie prościej. Bardzo żałuję, że nie dodałem buforów bezpośrednio na płytę główną, teraz dodanie ich wiązałoby się z budową nowej płyty, bo nie ma żadnych które miałyby wyjścia naprzeciwko odpowiadających im wejść, więc dodanie ich do istniejącej płyty jest niemożliwe.
Tymczasem, aby komputer przemówił, konstruuję prostą płytkę z buzzerem i zatrzaskiem.
- jethrotull
- 3125...6249 postów
- Posty: 4013
- Rejestracja: sob, 3 czerwca 2006, 21:51
- Lokalizacja: Poznań
Re: Komputer 8-bitowy
A jednak, jak zwykle problem znajduje się między biurkiem a fotelem.jethrotull pisze: ↑pn, 25 października 2021, 08:46 Próba stworzenia karty dźwiękowej na YM2413 zakończyła się kompletnym fiaskiem. (...) Może chip jest uszkodzony lub jest fałszywką.
Zapomniałem przerwać ścieżek między rzędami wyprowadzeń chipów

- TooL46_2
- 1875...2499 postów
- Posty: 2024
- Rejestracja: ndz, 20 lipca 2008, 12:06
- Lokalizacja: Seattle, WA
Re: Komputer 8-bitowy
Taka tylko ciekawostka, bo domyslam sie, ze znasz, ale moze inni nie: https://www.youtube.com/watch?v=HyznrdD ... 5dvjafglHU Sledze watek z zaciekawieniem! Powodzenia!
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
-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
- TooL46_2
- 1875...2499 postów
- Posty: 2024
- Rejestracja: ndz, 20 lipca 2008, 12:06
- Lokalizacja: Seattle, WA
Re: Komputer 8-bitowy
Zapomialem dodac, ze Ben tworzy takze komputer na IC tylko, ze nie na Z80 a na 6502 z C64: https://www.youtube.com/watch?v=LnzuMJL ... z1mu7dp7eH 'Wytworzyl' takze najgorsza karte graficzna
https://www.youtube.com/watch?v=l7rce6IQDWs
Tu mozna poogladac i zakupic: https://eater.net/
@jethrotull -- przepraszam za off-topic!

Tu mozna poogladac i zakupic: https://eater.net/
@jethrotull -- przepraszam za off-topic!
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
-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
- jethrotull
- 3125...6249 postów
- Posty: 4013
- Rejestracja: sob, 3 czerwca 2006, 21:51
- Lokalizacja: Poznań
Re: Komputer 8-bitowy
Nie ma sprawy, Bena oczywiście znam (niestety mie osobiście, ale znam jego kanał na YT) i każdy film widziałem, niektóre wielokrotnie 

- TooL46_2
- 1875...2499 postów
- Posty: 2024
- Rejestracja: ndz, 20 lipca 2008, 12:06
- Lokalizacja: Seattle, WA
Re: Komputer 8-bitowy
Dzieki niemu 'liznalem' troche assemblera (w koncu!) Byc moze kiedys zakupie ten kit na plytkach dla syna jak troche podrosnie 

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
-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