speccy.pl
Facebook Like


SPECCY.PL

[SPECCY.PL PARTY 2023.1]

[WIKI SPECCY.PL]
Polecamy

KOMITET SPOŁECZNY KRONIKA POLSKIEJ DEMOSCENY
PIXEL HEAVEN 2023
AYGOR
Forum ZX Spectrum
Zawartość panelu chwilowo niedostępna
Archiwum plików ZX Spectrum
Nawigacja
[Zin80#4] V6Z80P

Tekst został opublikowany w Zin80 #4

V6Z80P
ZA MAŁO, ZA PÓŹNO

by mat/ESI

W dzisiejszych czasach projektów hobbystycznych można żałować, że ten konkretny nie zdobył większej popularności. Oczywiście szansę na zdobycie popularności mają dzisiaj raczej rozwiązania pompowane marketingiem (vide ZX Spectrum Next) a rzeczy naprawdę interesujące kończą jako przypis w historii.

W pierwszej kolejności odpowiedzmy sobie co oznacza nazwa V6Z80P – według wpisów autora z jego strony jest to skrót angielskiej nazwy Version 6 of my Z80 Project – "wersja 6 mojego projektu na Z80". Czym więc jest ten „projekt” i kto jest jego autorem? V6 to jednopłytkowy komputer z procesorem Z80, pamięcią, układami wejścia/wyjścia oraz układem FPGA mieszczącym całkiem sporą konfigurację. Autorem całości jest Phil Ruston, który na swojej stronie 1 opisuje historię swoich projektów – coraz bardziej skomplikowanych komputerów z procesorem Z80. V6 jest ostatnim z tych projektów i – niestety – nie jest już rozwijany ani nawet produkowany. Dostępna jest pełna dokumentacja projektu i gdyby komuś chciało się z tym walczyć, prawdopodobnie, o ile uda się nabyć mniej popularne układy, w tym FPGA Xilinx Spartan II, dałoby się wyprodukować nowe egzemplarze.

Wiemy już czym jest V6 i jak na razie prawdopodobnie nie ma w nim nic niezwykłego – kolejny hobbystyczny projekt komputerka z FPGA na którym nic sensownego nie da się zrobić. W porównaniu z innymi takimi projektami tutaj mamy jednak właściwie kompletne rozwiązanie – na fizycznym sprzęcie uruchamiany jest „rdzeń” o nazwie OSCA (Old School Computer Architecture) realizujący bardzo fajną platformę sprzętową, na której z kolei działa system operacyjny FLOS (Freezer Like Operating System), który pozwala uruchamiać programy, zarządzać zawartością karty pamięci z której te programy są wczytywane oraz ogólnie wspomaga tworzenie programów dla platformy. FLOS oferuje również zestaw procedur „systemowych” – obsługę plików, klawiatury, wyświetlanie tekstów w standardowym trybie systemowym itp.

System operacyjny FLOS (Freezer Like Operating System)
System operacyjny FLOS (Freezer Like Operating System)

V6 możemy użyć również jako „sprzętowego emulatora” ZX Spectrum i pochodnych – istnieją rdzenie implementujące z dużą dokładnością Spectrum 48, 128 czy Pentagona. Nie to jest jednak najciekawszą cechą całego rozwiązania.

HARDWARE

To co w V6 jest najbardziej interesujące i co sprawiło, że sprzęt mnie bardzo zainteresował to właśnie OSCA oraz to, co FPGA z tą konfiguracją potrafi. A potrafi całkiem sporo. Poza FPGA na płycie znajduje się fizyczny procesor Z80 z zegarem 16 MHz i pamięcią 512 KB (stronicowaną co 32 KB). Drugie 512 KB to VRAM dostępny dla FPGA a w przestrzeń adresową procesora włączany w kawałkach po 8 KB. Trzeci blok RAM to 128 KB pamięci dla sprite'ów dostępnej dla procesora w bloku 4 KB. Na płycie znajduje się czytnik kart SD, gniazda myszy i klawiatury (PS/2), port szeregowy (nietypowy mini DIN, ale kupując V6 stosowny kabelek był dołączony do zestawu), dwa porty joysticka DSUB-9, wyjście dźwięku mini jack stereo i wyjście video na gniazdku VGA, do którego podłączamy telewizor ze złączem RGB SCART (kabel również przychodził w komplecie) albo monitor VGA (tryb pracy wybierany jest zworą na płycie). Korzystając z tego hardware'u OSCA implementuje m.in: trzy główne tryby graficzne w 256 kolorach, system sprite'ów, blitter i sprzętowe rysowanie linii, LineCop – koprocesor wyzwalany pozycją rastra, czterokanałowy dźwięk oraz wspomaganie obliczeń matematycznych.

GRAFIKA

System graficzny OSCA operuje w całości na pamięci VRAM, do której procesor ma dostęp przez ośmiokilobajtowe okno, które można „podłączyć” pod kolejne adresy co 8 KB. Mogłoby się wydawać, że taki rozmiar będzie utrudniał pracę ale tak naprawdę dostęp do VRAMu w większości sytuacji potrzebny jest tylko do tego, żeby do niego załadować dane na początku programu – później operujemy na nich głównie za pośrednictwem OSCA.

Podstawowa rozdzielczość ekranu to odpowiednik 320×200 pikseli, ale fizyczny ekran w pamięci może mieć rozmiar 512×256 a to co jest faktycznie wyświetlane reguluje się ustawiając parametry „okna”. Dzięki temu możemy wyświetlić grafikę na całym ekranie bez żadnej ramki. Zwykle jednak programy używają bardziej standardowych trybów – 320×200 lub 320×240 pikseli.

OSCA oferuje trzy tryby graficzne, każdy w 256 kolorach z dwunastobitowej palety (4096 kolorów):

  • chunky – liniowa organizacja, 1 bajt na piksel
  • bitplane – 1-8 jednobitowych bitplane'ów składanych w indeks kolorów, a co za tym idzie od 2 do 256 kolorów
  • tilemap – tryb „kafelkowy” z osobno przechowywanymi danymi tile'i (8×8 lub 16×16 pikseli) i dwiema mapami ekranu (plus podwójne buforowanie map).
Każdy z trybów oferuje specyficzne możliwości, jak np. sprzętowy scroll w trybie bitplane, „rozszerzane” piksele czy sprzętowe rysowanie linii w trybie „chunky” itp. Wyświetlany ekran może być pozycjonowany w pamięci z dokładnością do jednego bajtu, linie mogą mieć ustawiony przeskok maskujący większy niż wyświetlany obraz itp.

SPRITE'Y

System sprite'ów pozwala na wyświetlanie niezależnych od grafiki obiektów w 256 kolorach. Hardware jest w stanie wyświetlić maksymalnie 56 sprite'ów w jednej linii, ale dzięki temu, że mamy 127 bloków kontrolnych dla sprite'ów, można je multipleksować i bez problemów wyświetlić na ekranie znacznie więcej obiektów.

Sprite'y mają zawsze 16 pikseli szerokości, ale mogą mieć od 16 do 240 pikseli wysokości. Przy odpowiednim przygotowaniu danych dla sprite'ów można je wyświetlać „przed” albo „za” grafiką, można je wyświetlać w odbiciu lustrzanym, pojedynczym kolorze itp.

BLITTER

Blitter służy do szybkiego przerzucania bloków danych w VRAMie (i tylko w VRAMie) bez zajmowania czasu procesora – potrafi przerzucać prostokątne bloki o maksymalnym rozmiarze 256×256 pikseli, z możliwością zachowania „przezroczystości” (piksele o indeksie 0 są przy transferze pomijane), przeskakiwaniem danych źródłowych i docelowych itp. Dane są przerzucane z prędkością 1 bajtu na 2 takty zegara – przerzucenie danych procesorem przy użyciu instrukcji LDIR to prędkość 21 taktów na bajt.

LINECOP

Prosty „koprocesor” zbliżony koncepcyjnie do amigowego Coppera pozwala niezależnie od procesora modyfikować rejestry OSCA przy użyciu własnego zestawu trzech rozkazów. Zapisy są wyzwalane pozycją rastra (w odróżnieniu od Amigi – tylko linii rastra) dzięki temu możemy uzyskać różne ciekawe efekty, począwszy od najprostszych „tęcz,” poprzez przełączanie trybów graficznych, ekranów itp. aż po możliwość uruchamiania blittera w konkretnej linii ekranu.

DŹWIĘK

OSCA potrafi wygenerować dźwięk w czterech niezależnych ośmiobitowych kanałach, każdy z nich może być wysyłany na lewy, prawy, albo na oba kanały wyjściowe na raz. Dźwięk jest sterowany przez DMA – ustawiamy adres początku i długość „sample'a” i czekamy na przerwanie informujące, że odtwarzanie się zakończyło. Dzięki temu systemowi stosunkowo niedużym kosztem można na V6 odtwarzać standardowe czterokanałowe moduły z ProTrackera.

I INNE

Całość uzupełnia m.in. sprzętowe wspomaganie obliczeń matematycznych – szybkie mnożenie wartości szesnastobitowej przez drugą wartość szesnastobitową wybieraną indeksem z tablicy 256 pozycji. Mnożenie daje w wyniku 16 bitów czyli tylko część (i do tego „ze środka”), ale przy odpowiednim przygotowaniu danych pozwala w pewnych sytuacjach na bardzo szybkie operacje.

Do dyspozycji mamy też timer synchronizowany z głównym zegarem systemowym, który na zakończenie cyklu generuje przerwanie.

Rozbudowana obsługa przerwań, komunikacja szeregowa w standardzie RS232, obsługa klawiatury, myszy i joysticków (z dwoma przyciskami zgodnie ze standardem gamepadów z ośmiobitowych konsol Segi) dopełniają całości.

OPROGRAMOWANIE

Wszystkie te możliwości pozwalają na tworzenie całkiem rozbudowanych efektów graficznych i dźwiękowych, czyli oczywiście dem. Niestety, w związku z niskim rozpowszechnieniem konstrukcji, produkcji takich jest niewiele – kilka dem stworzył sam autor, aby przetestować i zademonstrować możliwości konstrukcji. Poza tym właściwie jedyna „zewnętrzna” produkcja do demo Loopback (https://www.pouet.net/prod.php?which=54669) grupy Altair, wystawione w konkurencji „wild” na Breakpoint Party 2010. Sam „popełniłem”, raczej w ramach wprawek i uczenia się nowej platformy, kilka (2 lub 3 zależnie jak liczyć ;)) produkcji w tym The Lyra 3.1 (https://www.pouet.net/prod.php?which=87637) – odtworzone na V6 efekty z oryginalnego dema The Lyra 3 na SAMa Coupé.

V6 JAKO SPECTRUM

Dzięki temu, że system bazuje na programowalnym sprzęcie w postaci FPGA, możliwe jest oczywiście uruchomienie innych „wsadów” – w tym również implementujących ZX Spectrum. Procedura nie jest jednak tak prosta jak w innych urządzeniach z FPGA – V6 jest jednak przede wszystkim platformą do uruchamiania tandemu OSCA/FLOS. Na starcie systemu mikrokontroler PIC wczytuje z zewnętrznego EEPROMu dane konfiguracyjne dla FPGA, które uruchamia Z80 „podając” bootloader, z którego następuje dalszy start systemu. EEPROM ma rozmiar pozwalający na zapisanie w nim ośmiu pełnych konfiguracji FPGA – dwa sloty są niezbędne do działania systemu, w pozostałych możemy zapisać własne konfiguracje. Start takiej konfiguracji następuje po uruchomieniu z poziomu FLOS polecenia EMU, które pozwala wybrać slot i rekonfiguruje FPGA z wybranej konfiguracji.

Dostępne konfiguracje Spectrum autorstwa Alessandro Dorigattiego realizują właściwie pełną zgodność z oryginałem. Do dyspozycji jest wersja z timingami Spectrum 48, 128 oraz Pentagona, tryby graficzne Timexa, ULA+, dźwięk AY oraz DivMMC z działającą wersją esxDOSa. Dzięki temu możemy na V6 uruchamiać gry czy dema ze Spectrum – w większości przypadków z bardzo dobrymi rezultatami.

ZA PÓŹNO, ZA MAŁO...

Jak widać sprzęt oferuje bardzo fajne możliwości i kiedy był dostępny jego cena była całkiem przystępna – za mój egzemplarz we wrześniu 2012 zapłaciłem trochę ponad 110 funtów razem z kosztami przesyłki. Niestety ostatnie egzemplarze Phil wyprodukował w 2014 roku i od tego czasu projekt jest właściwie martwy.

Koncepcja OSCA to nieźle przemyślana architektura przypominające ośmiobitową wersję Amigi. Oczywiście pojawienie się sprzętu z takimi możliwościami w 2009 roku należy traktować wyłącznie w kategoriach ciekawostek. Gdyby jednak pofantazjować i wyobrazić sobie, że taki sprzęt pojawił się na rynku jako rozwiązanie komercyjne dostępne w większych ilościach oraz ze wsparciem komercyjnych deweloperów powiedzmy w pierwszej połowie lat 90. sprawa mogłaby wyglądać zupełnie inaczej. Oczywiście wtedy zmieszczenie takich możliwości w przystępnej cenie – zwłaszcza po doliczeniu produkcji obudowy, klawiatury, uwzględnieniu faktu, że karty SD pojawiły się dopiero pod koniec dekady – byłoby całkowicie niemożliwe.

W dzisiejszych czasach projektów hobbystycznych można żałować, że ten konkretny nie zdobył większej popularności – Phil wyprodukował w sumie około 200 egzemplarzy kolejnych wersji V6.

Oczywiście szanse na zdobycie popularności mają dzisiaj raczej rozwiązania pompowane marketingiem (vide ZX Spectrum Next) a rzeczy naprawdę interesujące kończą jako przypis w historii.

Mimo tego smutno brzmiącego podsumowania uważam, że V6 jest jedną z fajniejszych platform sprzętowych dla kogoś, kto hobbystycznie lubi sobie podłubać w kodzie dla Z80. Dostępność, a właściwie jej brak, powoduje, że ewentualne produkcje pozostają całkowicie niszowe, co mnie osobiście zupełnie nie przeszkadza i w wolnych chwilach, jeśli najdzie mnie wena, mam zamiar nadal coś na tę platformę tworzyć. A w przyszłości liczę, że może gdzieś znajdzie się jakiś entuzjasta FPGA, który usłyszawszy o OSCA spróbuje przenieść tę konfigurację na jakiś bardziej popularny i dostępny sprzęt – np. MiSTer. Czego sobie i czytelnikom życzę.

Przykładowe grafiki z dem na V6Z80P
LoopBack / Altair
Pipes / Phil Ruston
The Lyra 3.1 / Mat/ESI 2020
V6Z80P Version 6 of my Z80 Project
Rok produkcji:2009 (wersja 1.0)
Autor/producent: Phil Ruston
http://blog.retroleum.co.uk/electronics-articles/v6z80p/
Procesor:Z80 16MHz
FPGA:Xilinx Spartan II
RAM:512 KB
VRAM:512+128 KB
Złącza:Karta SD, Klawiatura PS/2, Mysz PS/2, RS232, Dźwięk stereo, VGA/video, 2×DSUB-9 joystick, Zasilanie 9V
Rozmiar płytki:116×123 mm
Brak komentarzy. Może czas dodać swój?
Dodaj komentarz
Zaloguj się, aby móc dodać komentarz.
Oceny
Tylko zarejestrowani użytkownicy mogą oceniać zawartość strony
Zaloguj się , żeby móc zagłosować.

Brak ocen. Może czas dodać swoją?