Komputer jednopłytkowy na mikroprocesorze Z80 - konstrukcja własna
: wt, 16 stycznia 2024, 23:55
Za lat pacholęcych przeczytałem w gazecie jak mi się wydaje "Audio-Video" artykuł o samodzielnej konstrukcji komputera, chyba Cobra. Pierwsza reakcja "Co? Jak? To tak można?". W głowie zakiełkował pomysł zrobienia czegokolwiek na procesorze 8-bitowym, ale wtedy brakowało mi wiedzy i umiejętności żeby zrobić cokolwiek chociaż minimalnie przypominającego mikrokomputer. Pomysł w głowie pozostał, minęło kilkanaście lat aż pół roku temu przyszedł odpowiedni moment jego realizację. Skonstruowałem prosty komputerek jednopłytkowy o następujących parametrach:
-procesor Z80 z zegarem 4.9152MHz
-16kB ROMu (właściwie 64kB przełączane zworkami)
-64kB RAMu
-port szeregowy 8251A
-timer 8253
-port równoległy 8255
-port wyjściowy 74273
Domyślnie pierwsze 16kB RAMu jest przysłonięte przez ROM, można je odsłonić przez ustawienie pierwszego bitu zatrzasku 74273. Pozostałe 7 bitów jest wolne. Przydały się do migania diodami przy pierwszych uruchomieniach. Na zewnątrz zostały wyprowadzone prawie wszystkie dostępne sygnały: szyny adresowa i danych, sygnały sterujące, wolne wyjścia dekodera adresów, USART w postaci TTL i RS-232, wolne wyścia timera 8253, porty równoległe układu 8255, wolne linie zatrzasku 74273. Dlaczego prawie wszystkie? Bo zamiast wyprowadzić układy MEMRQ, IORQ, WR i RD wyprowadziłem już zdekodowane MEMR, MEMW, IOR, IOW - nie są trójstanowe, więc na ten moment nie jest możliwe podłączenie dodatkowego układu przejmującego kontrolę nad szyną systemową. Jest to konieczne w przypadku DMA i przydatne przy CRTC. Jak już jestemy przy wpadkach - zapomniałem też podłączyć kilku rezystorów podciągających, zasilania do układu MAX232 i pomyliłem linie portu szeregowego
Na szczęście nie jest to nic czego nie dałoby się poprawić cięciem ścieżek i lutowaniem przewodów
Przewody widoczne na zdjęciu to połączenie pierwszego kanału timera do wejścia NMI procesora.
Ostatnio pracuję głównie nad oprogramowaniem, które piszę w C. "Hurr-durr! Dlaczego nie assembler?!?! Przecież C na Z80 jest niewydajne!". Z prostego powodu - projekt powstaje całkowicie dla przyjemności. W C radzę sobie całkiem nieźle, a assemblera znam bardzo słabo. Może przyjdzie moment, że spróbuję, ale na razie zostaje tak jak jest.
Kod źródłowy jest znajduje się w repozytorium GITa, tutaj: https://gitlab.com/mdanilewicz/z80-monitor-program
Jest to prosty monitor, który umożliwia podglądanie i edytowanie zawartości pamięci, ładowanie danych przez port szeregowy i uruchamianie załadowanych programów.
Co dalej? W miarę nowych pomysłów będę kontynuował klepanie kodu. Od strony sprzętowej, jeśli czas pozwoli spróbuję pokombinować z układem CRTC 6845 lub/i obsługą stacji dyskietek przy pomocy kontrolera 8272. Do tego drugiego będzie mi potrzebny separator danych, którego jeszcze nie mam. Znalazłem ogłoszenie z FDC9229, może uda się kupić. Chyba, że któryś z kolegów ma
Schematy udostępnię w bliżej nieokreślonej przyszłości po naniesieniu poprawek.
-procesor Z80 z zegarem 4.9152MHz
-16kB ROMu (właściwie 64kB przełączane zworkami)
-64kB RAMu
-port szeregowy 8251A
-timer 8253
-port równoległy 8255
-port wyjściowy 74273
Domyślnie pierwsze 16kB RAMu jest przysłonięte przez ROM, można je odsłonić przez ustawienie pierwszego bitu zatrzasku 74273. Pozostałe 7 bitów jest wolne. Przydały się do migania diodami przy pierwszych uruchomieniach. Na zewnątrz zostały wyprowadzone prawie wszystkie dostępne sygnały: szyny adresowa i danych, sygnały sterujące, wolne wyjścia dekodera adresów, USART w postaci TTL i RS-232, wolne wyścia timera 8253, porty równoległe układu 8255, wolne linie zatrzasku 74273. Dlaczego prawie wszystkie? Bo zamiast wyprowadzić układy MEMRQ, IORQ, WR i RD wyprowadziłem już zdekodowane MEMR, MEMW, IOR, IOW - nie są trójstanowe, więc na ten moment nie jest możliwe podłączenie dodatkowego układu przejmującego kontrolę nad szyną systemową. Jest to konieczne w przypadku DMA i przydatne przy CRTC. Jak już jestemy przy wpadkach - zapomniałem też podłączyć kilku rezystorów podciągających, zasilania do układu MAX232 i pomyliłem linie portu szeregowego


Ostatnio pracuję głównie nad oprogramowaniem, które piszę w C. "Hurr-durr! Dlaczego nie assembler?!?! Przecież C na Z80 jest niewydajne!". Z prostego powodu - projekt powstaje całkowicie dla przyjemności. W C radzę sobie całkiem nieźle, a assemblera znam bardzo słabo. Może przyjdzie moment, że spróbuję, ale na razie zostaje tak jak jest.
Kod źródłowy jest znajduje się w repozytorium GITa, tutaj: https://gitlab.com/mdanilewicz/z80-monitor-program
Jest to prosty monitor, który umożliwia podglądanie i edytowanie zawartości pamięci, ładowanie danych przez port szeregowy i uruchamianie załadowanych programów.
Co dalej? W miarę nowych pomysłów będę kontynuował klepanie kodu. Od strony sprzętowej, jeśli czas pozwoli spróbuję pokombinować z układem CRTC 6845 lub/i obsługą stacji dyskietek przy pomocy kontrolera 8272. Do tego drugiego będzie mi potrzebny separator danych, którego jeszcze nie mam. Znalazłem ogłoszenie z FDC9229, może uda się kupić. Chyba, że któryś z kolegów ma

Schematy udostępnię w bliżej nieokreślonej przyszłości po naniesieniu poprawek.