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

matofesi

  • *****
  • Wiadomości: 2048
  • 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: 391
  • 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: 2048
  • 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: 2009
  • 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: 2048
  • 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: 2009
  • 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: 3333
  • 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 ?
- Jeśli masz w domu światło i wodę, tzn. że masz światłowód. ;)

matofesi

  • *****
  • Wiadomości: 2048
  • 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ć ;)

matofesi

  • *****
  • Wiadomości: 2048
  • Miejsce pobytu:
    Toruń/Poland
Odp: V6 prawie jak Amiga ;)
« Odpowiedź #8 dnia: 2020.04.27, 11:04:41 »
Po latach nieużywania w związku z pewnym nadmiarem wolnego czasu w weekendy spowodowanym aktualną sytuacją odkurzyłem moje V6. Podłączyłem, odpaliłem - działa - i postanowiłem coś pokodować.

Zrobiłem wprawkę z wykorzystaniem tych kawałków OSCA, których wcześniej nie używałem - głównie sprzętowe "poszerzanie" pikseli w trybie chunky oraz blittowanie danych. W efekcie powstało takie coś:

https://www.youtube.com/watch?v=XGCQFXfec7c

(uwaga - filmik mruga itp., bo nadal nie opanowałem metody na dobre zgrywanie z V6 - był kręcony telefonem z ekranu telewizora ;))

W załączniku plik do odpalenia na fizycznym sprzęcie (na niedorobionym emu coś się kaszani ze sprite'ami) - będzie działał poprawnie w trybie PAL 50Hz - w NTSC albo VGA na 99% nie wyrobi się w ramce. Niestety liczenie plazmy nie jest tanie i w takiej wersji jak teraz nie specjalnie da się tam coś więcej upchnąć żeby się mieściło w ramce. Może jakby pooptymalizować trochę bardziej albo przejść z pikseli 4x4 na 5x5 to dałoby się np. dodać muzykę.

Cały efekt plazmy jest liczony w rozdzielczości 80x50, ekran ma rozdzielczość 320x200 i włączone poszerzanie pikseli (co daje pierwszą z ćwiartek "dużych" pikseli). Potem ten wygenerowany kawałek jest blittowany w ekran z właściwym przeplotem a następnie 3 razy z odpowiednim przesunięciem dając w efekcie wypełnienie całego ekranu. Samo wypełnienie zajmuje jakieś minimalne ilości czasu - nie wychodzi nawet poza górny border. Dopiero liczenie plazmy zjada całą resztę (a w każdym razie większość tej reszty ;)) czasu.
Napis na wierzchu to sprite'y - 20 sztuk w kawałkach 16x96 pikseli. Cała bitmapa dla napisu ma 30 kilo i to jest większość rozmiaru pliku.
Plazma jest generowana w 128 kolorach, sprite'y miały wydzieloną drugą połowę palety w sumie zjadają jakieś 80 kolorów ;)

Sir David

  • ****
  • Wiadomości: 391
  • Miejsce pobytu:
    Białystok
Odp: V6 prawie jak Amiga ;)
« Odpowiedź #9 dnia: 2020.04.27, 15:01:48 »
W załączniku plik do odpalenia na fizycznym sprzęcie (na niedorobionym emu coś się kaszani ze sprite'ami)

To jest jakiś emulator V6? Który to? Może też coś spróbuję dłubnąć, na pewno łatwiej na nim testować niż na fizycznym sprzęcie. Nawet jeżeli ma błędy.

matofesi

  • *****
  • Wiadomości: 2048
  • Miejsce pobytu:
    Toruń/Poland
Odp: V6 prawie jak Amiga ;)
« Odpowiedź #10 dnia: 2020.04.27, 15:18:07 »
Jest w standardowym pakiecie softu na sourceforge'u (albo tu: http://www.basoft.co.uk/wordpress/emulation/computer-system-emulation/v6z80p/osca-emulator/). Niedorobiony strasznie. To, co emuluje to OSCA 672 ale niepełna i nie wszystko dobrze. Ogólnie doszedłem do wniosku, że nie warto się z nim szarpać - mam podłączonego laptopa RSem do V6, na V6 zapuszczoną pętlę robiącą RX * i na laptopie szybki cykl pasmo+send po serialu. Może z dobrym emu byłoby szybciej, ale tak przynajmniej od razu mam pewność, że działa na prawdziwym sprzęcie ;)

matofesi

  • *****
  • Wiadomości: 2048
  • Miejsce pobytu:
    Toruń/Poland
Odp: V6 prawie jak Amiga ;)
« Odpowiedź #11 dnia: 2021.01.12, 14:38:06 »
Zebrałem się w końcu i poprawiłem plazmę tak, że przy "pikselach" 4x4 jest jeszcze dość czasu, żeby zmieścić muzyczkę.

Wrzuciłem program tu: https://www.pouet.net/prod.php?which=87757

Poprzednia wersja generowała plazmę w rozdzielczości 80x50 w VRAMie a potem cztery razy kopiowała dane uwzględniając odpowiednie przeploty itp. żeby uzyskać poprawny obraz z pikselami 4x4. Teraz dane są generowane bezpośrednio w VRAMie od razu w takiej formie jaka jest potrzebna i nie są kopiowane tylko linie są powielane linecopem. W efekcie wykorzystanie procesora mocno spadło i tym razem nie ma problemu z wsadzeniem muzyki :)

Sir David

  • ****
  • Wiadomości: 391
  • Miejsce pobytu:
    Białystok
Odp: V6 prawie jak Amiga ;)
« Odpowiedź #12 dnia: 2021.01.12, 22:02:42 »
Twoja plazma wygląda lepiej, niż ta z dema Loopback! Są dość podobne i łatwo porównać. Ciekawe, czy inne efekty też dałbyś radę zrobić lepiej ;)

matofesi

  • *****
  • Wiadomości: 2048
  • Miejsce pobytu:
    Toruń/Poland
Odp: V6 prawie jak Amiga ;)
« Odpowiedź #13 dnia: 2021.01.12, 22:07:11 »
W Loopbacku plazma nie używa pompowanych pikseli i ma prostszy algorytm. Reszta efektów na ile się przyglądałem też nie jest jakoś bardzo wypasiona tylko po prostu sprytna. No i grafika i design zrobione przez kogoś, kto sie na tym zna a nie przez programistę ;)

matofesi

  • *****
  • Wiadomości: 2048
  • Miejsce pobytu:
    Toruń/Poland
Odp: V6 prawie jak Amiga ;)
« Odpowiedź #14 dnia: 2021.01.20, 10:12:39 »
Jako, że udało mi się dogadać z zestawem do zgrywania video wrzuciłem trochę lepszy filmik tu: https://www.youtube.com/watch?v=U9iriqZa2GA