Autor Wątek: V6 prawie jak Amiga ;)  (Przeczytany 6786 razy)

matofesi

  • *****
  • Wiadomości: 1770
  • Miejsce pobytu:
    Toruń/Poland
V6 prawie jak Amiga ;)
« dnia: 2015.10.23, 11:39:18 »
Jakiś czas temu gdzieś na G+ trafiłem na linka to postu Crash course to Amiga assembly programming. Choć nigdy nie robiłem nic poważnego na Amidze uznałem, że tekst może być wart przeczytania. Chyba miałem rację - we w miarę przystępny sposób (choć bez nadmiernych szczegółów) wprowadza w programowanie w assemblerze na Amidze a całość robi na przykładzie prostego demo-efektu - falującego logo.

Po przeczytaniu tekstu i ściągnięciu kodu źródłowego po raz kolejny utwierdziłem się, że Phil projektując OSCA do V6 wzorował się przynajmniej w części na Amidze - kolejne kawałki Amigowego kodu zaczęły mi się przekładać na odpowiednie rejestry i mechanizmy dostępne w OSCA. A jak już zaczęły uznałem, że sprawdzę, czy jestem w stanie przeportować ten efekt na Z80 z zachowaniem struktury tego, co siedzi w Amigowym oryginale i przy użyciu oryginalnych niemodyfikowanych danych.

Całość zajęła mi jakieś trzy dni - w tym większość czasu to przypomnienie sobie jak OSCA pracuje i jak się z tym gada ;)

W załączniku oryginalny kod dla Amigi wraz z wersją skompilowaną oraz moja wersja na V6 - również źródło i wersja skompilowana.

Nie wiem jak ten program wygląda na fizycznej Amidze bo odpalałem go tylko pod emulatorem, ale to co widzę tam i na V6 wygląda moim zdaniem identycznie ;)

Jakby ktoś sobie życzył to mogę omówić kod bliżej choć chyba nie specjalnie jest co omawiać ponad komentarze, które są zawarte w pliku.

Sir David

  • ****
  • Wiadomości: 336
  • Miejsce pobytu:
    Białystok
Odp: V6 prawie jak Amiga ;)
« Odpowiedź #1 dnia: 2015.10.23, 13:06:50 »
Na pewno sprawdzę na V6. I chętnie też coś spróbuję na nim napisać. Te includy na górze są jakieś standardowe i gdzieś dostępne? Czy wystarczający opis "jak OSCA pracuje i jak się z tym gada" jest na stronie V6Z80P wiki?

matofesi

  • *****
  • Wiadomości: 1770
  • Miejsce pobytu:
    Toruń/Poland
Odp: V6 prawie jak Amiga ;)
« Odpowiedź #2 dnia: 2015.10.23, 13:34:17 »
Opis OSCA, FLOSa itp. masz na wiki i to jest w zasadzie wszystko co ci jest potrzebne. Include'y poza linecop_macros.asm i my_macros.asm są standardowe. Ten pierwszy jest w załączniku, ten drugi w wypadku tego przykładu nawet nie jest używany - włączyłem go z rozpędu ;) A wsadzam sobie do niego jakieś drobiazgi, żeby nie powtarzać jak potrzebuję.

Cała reszta jest w archiwum ("Complete Archive") na wiki.

OSCA programuje się zupełnie nie jak Spectrum czy Sam głównie dlatego, że procesor jest ~4 razy szybszy niż w Spectrum a ekran w standardowym 320x200 to 64 kilo więc ciężko byłoby to obrobić samym procem. Dlatego bez użycia dostępnego hardware'u efekt będzie pewnie taki jak moja jedyna próba napisania czegoś na Amigę - prosty scroller po sinusie z fontem na 6 pikseli, który pisany w zasadzie tak jak na Spectrum zjadał ponad połowę Amigowej ramki ;)

Gryzor

  • *****
  • Wiadomości: 1765
  • Miejsce pobytu:
    Warszawa
Odp: V6 prawie jak Amiga ;)
« Odpowiedź #3 dnia: 2015.10.26, 22:21:01 »
Fajnie, ze jeszcze ktos pamieta o V6 :-) Nawet Phil porzucil swoje dziecko i zajal sie teraz ZXem i roznymi dodatkami.
Dla mnie od poczatku V6 to byla Amiga na Z80.
Nie odpalalem nigdy V6 na monitorze LCD, wiec bedzie okazja.

matofesi

  • *****
  • Wiadomości: 1770
  • Miejsce pobytu:
    Toruń/Poland
Odp: V6 prawie jak Amiga ;)
« Odpowiedź #4 dnia: 2015.10.27, 08:48:10 »
Ja pamiętam. To jedyny ~retro sprzęt jakiego w ogóle używam a kupiłem przecież nie po to, żeby na nim odpalać soft ze Spectrum (choć był to miły dodatek) tylko właśnie po to, żeby sobie pokodować na wypasionym sprzęcie z dobrze znanym procesorem :)

A ten monitor co podłączasz to jest VGA czy normalne RGB na 50Hz? Bo szczerze mówiąc nie wiem jak będzie wyglądała synchronizacja i w ogóle ekran w trybie VGA albo w 60Hz... Tutaj to prosty efekt więc raczej nie powinno być problemu, ale przy bardziej zaawansowanych na 60Hz raster jest krótszy i efekty potrafią się nie wyrabiać. Widać to ładnie w demku Wireframe - w 50Hz wszystkie bryły chodzą płynnie, w 60Hz te ostatnie - największe - się przycinają.

Gryzor

  • *****
  • Wiadomości: 1765
  • Miejsce pobytu:
    Warszawa
Odp: V6 prawie jak Amiga ;)
« Odpowiedź #5 dnia: 2015.10.27, 21:01:50 »
Moj monitor CRT dziala i w 60Hz i 50Hz, ale zawsze VGA :-), za to LCD to w zasadzie TV, wiec moge
sprawdzic zarowno VGA jak i PAL. Podejrzewam, ze trudno byloby napisac demo dzialajace poprawnie i na VGA 60hz i w PAL 50hz, tak jak zreszta piszesz. Nie pamietam tylko gdzie mam kabel SCART do V6  >:(

ZbyniuR

  • *****
  • Wiadomości: 2841
  • Miejsce pobytu:
    Carlisle w UK
  • CPC AGA PSX
Odp: V6 prawie jak Amiga ;)
« Odpowiedź #6 dnia: 2015.10.27, 22:15:31 »
Czy może ktoś napisać po ludzku co to jest ten OSCA i V6 ?
Coś być musi do cholery za zakrętem.

matofesi

  • *****
  • Wiadomości: 1770
  • Miejsce pobytu:
    Toruń/Poland
Odp: V6 prawie jak Amiga ;)
« Odpowiedź #7 dnia: 2015.10.28, 09:40:34 »
Moj monitor CRT dziala i w 60Hz i 50Hz, ale zawsze VGA :-), za to LCD to w zasadzie TV, wiec moge
sprawdzic zarowno VGA jak i PAL. Podejrzewam, ze trudno byloby napisac demo dzialajace poprawnie i na VGA 60hz i w PAL 50hz, tak jak zreszta piszesz. Nie pamietam tylko gdzie mam kabel SCART do V6  >:(

Demo działające poprawnie w każdym trybie da się zrobić. Część demek Phila ma detekcję monitora i stosownie do tego przestawia różne stałe czasowe i "pozycjonujące" tak, żeby program wyglądał poprawnie. Problem zaczyna się w wypadku takich rzeczy, które dochodzą do granicy czasu w ramce i w NTSC po prostu się nie wyrabiają.

Ja mam V6 podłączone w trybie retro - kupiłem 14 calowego Trinitrona z wejściem RGB - w związku z tym uznałem, że nie ma się co szarpać i po prostu robię detekcję i wyświetlam info, że odpalasz na własną odpowiedzialność a ja nie gwarantuję, że będzie działać ;)

Czy może ktoś napisać po ludzku co to jest ten OSCA i V6 ?

V6 to V6Z80P - projekt komputerka z FPGA, RAMem, fizycznym procesorem Z80 i stosownymi przyległościami. OSCA to podstawowa konfiguracja FPGA dla V6 - daje w efekcie coś, co żartobliwie nazywamy "Amigą na Z80". To, co w OSCA jest wbudowane to m.in:
- 512kB RAMu dla procesora, 512 kB VRAMu i 128kB Sprite RAMu
- trzy podstawowe tryby graficzne - chunky (bajt na piksel, 256 kolorów), bitplane (jak w amidze tylko do 8 bitplaneów) i tilemap (jak w różnych automatach arcade i starych konsolach)
- sprite'y w 256 kolorach
- blitter przerzucający bloki danych w VRAMie
- LineCop czyli odpowiednik Amigowego Coppera - osobny prosty program synchronizowany z rastrem (czekaj na linię, zapisz dane do rejestru, czekaj na linię itp.)
- czterokanałowy dźwięk zbliżony do Amigowego napędzany DMA (pozwala odpalać moduły Protrackerowe)
- sprzętowe wspomaganie arytmetyki (maszynka do sprzętowego mnożenia i tablicowania danych)
- sprzętowe rysowanie linii (dość skomplikowane w ustawieniach, ale za to znacznie szybsze niż robienie tego na piechotę)

I jeszcze trochę innych drobiazgów.

Ogólnie jest to zasadniczo zabawka dla kogoś, kto bawi się w kodowanie na Z80. Ale poza tym można odpalić na tym inną konfigurację FPGA - bardzo ładny rdzeń implementujący Spectrum (48, 128 i Pentagona).

Jedyny problem na chwilę obecną jest taki, że właściwie nie da się kupić nowego V6 a ludzie, którzy mają raczej nie będą chcieli sprzedać ;)