Autor Wątek: Tryb gigascreen  (Przeczytany 109615 razy)

YERZMYEY/HOOY-PROGRAM

  • *****
  • Wiadomości: 1187
  • Miejsce pobytu:
    Rubber Planet
  • AY RIDERS
    • ZX Spectrum demos/games
Tryb gigascreen
« dnia: 2011.11.14, 22:52:56 »
Aha, i Tygrys - jeśli obliczysz mi, jaką max. rozdzielczość można wyrobić na Spectrum 48 lub 128 (tu będzie większa) w interlace'owanym GigaScreenie (niby dwa obrazki, ale wiesz - zmieniane co linię - i to nie jak ostatnio Rosjanie - co dwie linie [mniej zjada procka] tylko co jedną, bo co dwie to nie da się oglądać tego nawet), to pewnie Joulo też by coś dosłał.
Dla porównania - Pentago wyrabia full-screen w tym trybie. Na 100% 128 tego nie zrobi, a gumiak bdzie miał jeszcze gorzej (ale i tak sporo dem na gumiaka ma gigascreen).

YERZMYEY/HOOY-PROGRAM

  • *****
  • Wiadomości: 1187
  • Miejsce pobytu:
    Rubber Planet
  • AY RIDERS
    • ZX Spectrum demos/games
Odp: Tryb gigascreen
« Odpowiedź #1 dnia: 2011.11.17, 12:53:09 »
Coś by pewnie dosłał, bo w ramach odgrzybiania własnej osoby zamierza powalczyć trochę z pikselami ;)
No właśnie.
Z tym, że z pixelami to standardowe 256/192 wystarczy.
Natomiast gdyby się chciało więcej kolorów (ze 112 tam jest w tym trybie), to by trzeba było walić gigascreen. W rozdzielczości 256/192 on pójdzie, ale chyba tylko na Pentagonie, żeby był odpowiedni tryb wyświetlania. A Spectrum 128 już pełnego ekranu nie uciągnie.
Kiedyś pomęczę o to Tygrysa. :)

YERZMYEY/HOOY-PROGRAM

  • *****
  • Wiadomości: 1187
  • Miejsce pobytu:
    Rubber Planet
  • AY RIDERS
    • ZX Spectrum demos/games
Odp: Tryb gigascreen
« Odpowiedź #2 dnia: 2011.11.17, 13:44:18 »
Chodzi mi o to: http://pc.sux.org/tomcat/Animals.zip



Plik LINEAR to zwykłe wyświetlanie gigascreen. Mruga bardzo.

Ale można multicolorem zrobić tak, żeby znacznie mniej mrugało. (Plik INTER).
W tym ostatnim na Spectrum 128K idzie za wolno i gubi synchro (skośne linie - tego na Pentagonie nie ma). Ale mruga bardzo mało.

Stąd moje pytanie - ile wydoli 128K - obrazek jakiej rozdzielczości - żeby nie gubił synchro.
Warto zobaczyć efekt na realnej maszynie (telewizor CRT) - robi wrażenie, nawet pomimo zbyt wolnych brytyjskich maszyn.
« Ostatnia zmiana: 2011.11.17, 14:00:13 wysłana przez YERZMYEY/HOOY-PROGRAM »

YERZMYEY/HOOY-PROGRAM

  • *****
  • Wiadomości: 1187
  • Miejsce pobytu:
    Rubber Planet
  • AY RIDERS
    • ZX Spectrum demos/games
Odp: Tryb gigascreen
« Odpowiedź #3 dnia: 2011.11.17, 13:56:23 »
Chyba jednak 128K da radę full-screen puścić - 256/192.
Oto obrazek mojego kolegi Blackera:
http://www.zxdemo.org/f/200303/fvr4/ruthersford.zip


Zaraz po wgraniu zmienia co dwie linie. Zajmuje mniej czasu procka, ale wygląda brzydko.
Naciśnijcie "5" - i włącza się właściwy tryb - zmiana co linię. Obraz jest niemalże statyczny nawet na emulatorach (już nie mówiąc o realnym sprzęcie, gdzie wygląda doskonale).
"4" - powrót do trybu wyświeltania co dwie linie (fuj).

Co prawda we właściwym pełnym trybie nie zostaje już czasu procka nawet na muzykę ponoć, ale można dawać takie obrazki na końcu produkcji lub na początku (ma czas na testowanie klawiatury).

Tygrys

  • Administrator
  • *****
  • Wiadomości: 4537
  • Miejsce pobytu:
    Warszawa
  • mistrz ceremonii
Odp: Tryb gigascreen
« Odpowiedź #4 dnia: 2011.11.17, 14:50:03 »
dobra, rzucę okiem.

matofesi

  • *****
  • Wiadomości: 2048
  • Miejsce pobytu:
    Toruń/Poland
Odp: Tryb gigascreen
« Odpowiedź #5 dnia: 2011.11.17, 15:08:44 »
No ja rzuciłem. I albo czegoś nie rozumiem albo umyka mi subtelność koncepcji. Tak na szybko kod zajmuje się głównie odczekiwaniem aż raster wejdzie w ekran a potem przez kolejne 192 linie przełączaniem na przemian ekranów. Jak się zrobi zrzut ekranu z emulatora i obejrzy dokładnie to widać, że w pojedynczym cellu są max 4 kolory i max 2 w linii. Czyli mamy dwa ładnie dopasowane obrazki i kod, który co linię wyświetla na przemian raz jeden raz drugi. Jeśli nie ma tu nic bardziej sprytnego, co na szybko mógłbym przegapić to nie rozumiem dlaczego 128 miałoby tego efektu nie pociągnąć? A brak czasu na dźwięk jest łatwy do wyjaśnienia - najpierw musimy się wstrzelić dokładnie w początek ekranu - z braku przerwań trzeba po prostu odczekać czas od początku ramki a potem przez większość ekranu chodzą głównie dokładne pętle opóźniające. Na procedurę do dźwięku zostaje ten kawałek na dolnym borderze i (nie zastrzelcie jeśli się mylę - nie pamiętam w którym momencie wyzwalane jest przerwanie) powrót plamki.

No chyba, że zupełnie nie zrozumiałem koncepcji ;)

YERZMYEY/HOOY-PROGRAM

  • *****
  • Wiadomości: 1187
  • Miejsce pobytu:
    Rubber Planet
  • AY RIDERS
    • ZX Spectrum demos/games
Odp: Tryb gigascreen
« Odpowiedź #6 dnia: 2011.11.17, 15:26:50 »
MAT:

> No ja rzuciłem. I albo czegoś nie rozumiem albo umyka mi subtelność koncepcji. Tak na szybko kod zajmuje się głównie odczekiwaniem aż raster wejdzie w ekran a potem przez kolejne 192 linie przełączaniem na przemian ekranów. Jak się zrobi zrzut ekranu z emulatora i obejrzy dokładnie to widać, że w pojedynczym cellu są max 4 kolory i max 2 w linii. Czyli mamy dwa ładnie dopasowane obrazki i kod, który co linię wyświetla na przemian raz jeden raz drugi. Jeśli nie ma tu nic bardziej sprytnego, co na szybko mógłbym przegapić to nie rozumiem dlaczego 128 miałoby tego efektu nie pociągnąć?
---------------
Nie nie, no więc właśnie napisałem później, że jednak pociągnie, skoro Zilog (ten czeski scener) wypuścił engine w 2003 roku, czy coś koło tego, po prostu nigdy nie wzróciłem uwagi, że to właśnie jest takie wyświeltanie, jak piszesz - co linię.
Bardziej sprytne rzeczy to są w samym konwerterze na PC, a w procedurze wyświetlania to już mniej (chociaż i tak był to świetny pomysł).
Teraz się jeszcze zastanawialiśmy z Tygrysem, do jakieś rozdzielczości trzebaby zmniejszych obrazek, żeby to działało też na 48K (nad wymianą zawartości ekranu tu oczywiście trzebaby pomyśleć inaczej, niż na 128K, ale były dema w tym stylu robione, więc pamiętam, że się da).
Ot taka ciekawostka. Chociaż gdyby było, to zapewne prędzej czy później tego użyjemy.


> A brak czasu na dźwięk jest łatwy do wyjaśnienia - najpierw musimy się wstrzelić dokładnie w początek ekranu - z braku przerwań trzeba po prostu odczekać czas od początku ramki a potem przez większość ekranu chodzą głównie dokładne pętle opóźniające. Na procedurę do dźwięku zostaje ten kawałek na dolnym borderze i (nie zastrzelcie jeśli się mylę - nie pamiętam w którym momencie wyzwalane jest przerwanie) powrót plamki.
------------
Uuuuu, no to już dla mnie oczywiście czarna magia. :) :) :) :) Ale dobrze wiedzieć, jak będę kogoś o to męczył i otrzymam odpowiedź, że "się nie da", to powiem, że napewno się da, bo MAT tak powiedział. :) :) :) :) :) :) :) :) :) :) :) :) :)

No nic, chodzi o to, że zapewne Joulo nie będzie chciał pixelować na Spectrum, tylko na PC (rozumiem go), a skoro na PC, to mógłbym mu udostępnić większą paletę, skoro w tym trybie Spectrum wyświetli ok. 112 kolorów. Przynajmniej się chłopaczyna rozrusza, przypominając sobie dawne czasy, haha.

Pzdr.

matofesi

  • *****
  • Wiadomości: 2048
  • Miejsce pobytu:
    Toruń/Poland
Odp: Tryb gigascreen
« Odpowiedź #7 dnia: 2011.11.17, 15:34:59 »
Swoją drogą jeśli faktycznie cały efekt polega na interlace'owym przełączaniu ekranów i jedynym problemem jest wstrzelenie się w odpowiedni punkt w czasie to przy założeniu, że robimy ten efekt dla konkretnego urządzenia (albo jesteśmy w stanie zrobić detekcję i wygenerować kod opóźniający dla dowolnej maszyny) to moim zdaniem powinno się tam dać puścić jakiegoś chiptune'a - trzeba by tylko zrobić custom playera tak, żeby go podzielić na dwie części - pierwsza musiałaby się liczyć zawsze w tym samym czasie i byłaby częścią pierwszej pętli opóźniającej, druga - grająca musiałaby się zmieścić na końcu ekranu.

Można też zaryzykować coś innego - w prawdziwymy 128 (nie wiem jak w innych wersjach/klonach) można się było "wtaktować" w konkretną linię czytając coś z któregoś portu - nie pamiętam dokładnie jak to szło, ale robiłem kiedyś w ramach testów prostego scrollera skaczącego po sinusoidzie (FLIP?) z normalnym obrazkiem w tle. Całość działała tak, że najpierw robił się scroller w konkretnym punkcie ekranu bez żadnego czyszczenia poprzedniej wersji itp. Potem wyświetlany był ekran z tłem i pętla czekała na konkretną linię, włączała ekran ze scrollerem i czekała jeszcze parę linii a potem z powrotem włączała tło. Efekt był prosty, ale pokazywał, że da się wstrzelić w konkretny punkt ekranu. Można by więc zrobić część playera na górnym borderze tak, żeby na pewno nie wlazło na ekran a potem się wstrzelić w początek ekranu ścinając na przykład pierwsza linię grafiki i dalej już normalny interlace z borderem jako buforem na te parę taktów niedokładności na procedurę czekającą na początek ekranu. I na koniec druga część playera. I w zasadzie przy poprawnym rozwiązaniu kwestii całość mogłaby chodzić z wyłączonymi przerwaniami ;)

Uff... Sorry za teoretyczne dywagacje i off-topic ;)

matofesi

  • *****
  • Wiadomości: 2048
  • Miejsce pobytu:
    Toruń/Poland
Odp: Tryb gigascreen
« Odpowiedź #8 dnia: 2011.11.17, 15:44:02 »
Na 48 to za wiele nie pociągniesz. Czytałem ostatnio analizę Simona Owena (http://simonowen.com/blog/2011/09/29/zxodus-engine/) ile się da zmienić atrybutów na 48 - w kontekście ZXodus Engine'a. Wynika z niej, że to, co ZXodus robi czyli 144 piksele szerokości (18 kolumn) z pełną kontrolą atrybutów z dokładnością do linii to jest max tego, co można zrobić. A to oznacza, że być może max tego, co dałoby się z 48 wycisnąć to połowa tego - do zrobienia pełnego interlace'u trzeba podmienić zarówno atrybuty jak i samą bitmapę. Tyle, że tych 9 kolumn też się nie da zrobić bo 18 atrybutów to jest już totalny wyścig z rastrem i na pewno obraz by się ciął. Pewnie jakby pogłówkować to jakiś kawałek dałoby się wymodzić, ale tak na prawdę zrobienie takiego efektu to znacznie więcej niż prosty multicolor.

Ja bym się w każdym razie nie podjął dłubaniny - podejrzewam, że efekt byłby niewart włożonej roboty.

Tygrys

  • Administrator
  • *****
  • Wiadomości: 4537
  • Miejsce pobytu:
    Warszawa
  • mistrz ceremonii
Odp: Tryb gigascreen
« Odpowiedź #9 dnia: 2011.11.17, 18:09:22 »
Dzięki MAT za analizę. Tam, ponad to co napisałeś więcej nie ma.

Dla 48ki można zrobić procedurę generującą gotowy kod dla konkretnego obrazka. Taki kod by zajmował kilka kilo, a przy odrobinie wysiłku mógłby obsługiwać dowolny model ZXa (opóżnienia itp).

Co do muzyki to powinna się jeszcze odegrać po skończeniu podmiany atrybutów. Jeżeli chce się to zrobić przed narysowaniem pierwszego koloru, to ma sie do dyspozycji okolo 14000T. Mi to wystarczyło do przerzucenia 768bajtów atrybutów i odebraniu muzyki.


A jeżeli to byłoby problematyczne to nie widzę problemu przeliczenia muzyki już poza rastrem, a wysłanie danych do rejestrów AY już w przerwaniu.


Pyza^Illusion

  • *****
  • Wiadomości: 586
  • Miejsce pobytu:
    Lubań, dolnośląskie
Odp: Tryb gigascreen
« Odpowiedź #10 dnia: 2011.11.17, 18:14:28 »
Co do multikolorowego obrazka to 48 wyciąga około pół ekranu (w pionie). Jest na nawet edytor stworzony przez NOP o nazwie Color DRAW (w załączniku), który zapisuje obrazek z gotowym "playerem" do wykorzystania we własnych produkcjach. Jego właściwości to ciągle 2 kolory w atrybucie ale w obszarze 1x8 pikseli. Linia pod spodem może mieć już zupełnie inne kolory, natomiast piksele muszą być tak jak były (zawsze są stałe).

Idea GigaScreenu, to dwa multikolorowe ekrany w interlace. Rozmiar atrybutu to 2x8 czyli co drugą linię. Co linię nasz Z80 nie byłby w stanie wrzucić tego na ekran żadnym stosem czy innymi sztuczkami.

Na taki obrazek składa się zatem 2x6144 bajtów (pikseloza) oraz 2x(32x96) (atrybuty w multikolorze), czyli 18432 bajtów samych danych. Do tego procedura i tablice nawalania tego na ekran.

A co do muzyki, to mam gdzieś player do ST (albo też do SQT) o stałej ilości taktów i mieszczący się jeszcze przed końcem górnej części bordera :p Autorstwa panów z Exodus :) Musiałbym tylko poszperać...
« Ostatnia zmiana: 2011.11.17, 20:20:57 wysłana przez Pyza^Illusion »
ZX Spectrum+ (128kB by STAVI), FDD3000, TI-OF-TTL/ZXVGS, Masterface2b, MacFace II, DivIDE plus, Just Speccy 128...

matofesi

  • *****
  • Wiadomości: 2048
  • Miejsce pobytu:
    Toruń/Poland
Odp: Tryb gigascreen
« Odpowiedź #11 dnia: 2011.11.17, 18:55:15 »
Ok. Rozumiem koncepcję obrazka multikolorowego z atrybutem 8x1 - to jest dokładnie to, co robi ZXodus Engine. Tam kod podmienia atrybuty co linię dla 18 kolumn.

Rozumiem już koncepcję GigaScreenu. I na moje oko to, co Yerzmyey pokazywał na 128-kę to nie jest giga screen, chyba, że coś przeoczyłem. Na moje oko to są po prostu dwa obrazki ze standardowymi atrybutami interlace'owane z dwóch screenów. Stąd jak się przyjrzeć w powiększeniu wygląda to (na pojedynczym statycznym zrzucie) tak, jakby obrazek miał po prostu 4 kolory w komórce 8x8 ale dzięki sprytnemu doborowi kolorów całość może faktycznie wyglądać nieźle. I taki obraz daje się na 128 zrobić w prosty sposób na całym ekranie.

Zrobienie pełnego gigascreena wymagałoby oczywiście dodanie do interlace'owania bitmap multicolorowego kodu podmieniającego atrybuty co drugą linię. I tu nie jestem pewien, czy da się to zrobić na standardowym 128 na pełnym ekranie.

Pyza^Illusion

  • *****
  • Wiadomości: 586
  • Miejsce pobytu:
    Lubań, dolnośląskie
Odp: Tryb gigascreen
« Odpowiedź #12 dnia: 2011.11.17, 20:19:51 »
Z tym GigaScreenem to chyba jednak tylko dwa ekrany:

Cytuj
Another software hacked mode is called GigaScreen (see example picture). This is a recently introduced screenmode based on the fast changing of 2 (specially prepared) images. When watching these graphics on a Speccy there is a bit of lacing involved, but it is not as nasty as with 3colour. The main advantage of this mode is that the palette is enlarged to 36 real colours! There is an editor for this mode, but unfortunately this editor is only available on PC and not on a real Speccy. Graphicians are only beginning to master this mode.

Patrząc jednak na żółwia to oprócz GigaScreena jest jeszcze tryb interlace dla atrybutów i nawet jak nie co 2 linie to przynajmniej co 4. Wydaje mi się jednak, że co 2 linie też jakoś by się wyrobiło. Pytanie czy warto się z tym babrać i czy ktoś zrobi taki obrazek :D O Edytorze nawet nie mówię :p
ZX Spectrum+ (128kB by STAVI), FDD3000, TI-OF-TTL/ZXVGS, Masterface2b, MacFace II, DivIDE plus, Just Speccy 128...

matofesi

  • *****
  • Wiadomości: 2048
  • Miejsce pobytu:
    Toruń/Poland
Odp: Tryb gigascreen
« Odpowiedź #13 dnia: 2011.11.17, 20:26:13 »
No właśnie ten żółw w wersji "linear" mnie zastanawia ;)

A poza tym - samo zakodowanie gigascreena dla 128 nie jest problemem - największym problemem jest własnie przygotowanie grafiki tak, żeby dobrze wyglądała. A to już robota dla artysty albo sprytnego konwertera ;)

Największym wyzwaniem byłoby chyba zrobienie edytora działającego na fizycznej maszynie. Ale ja się nie podejmuję ;)

YERZMYEY/HOOY-PROGRAM

  • *****
  • Wiadomości: 1187
  • Miejsce pobytu:
    Rubber Planet
  • AY RIDERS
    • ZX Spectrum demos/games
Odp: Tryb gigascreen
« Odpowiedź #14 dnia: 2011.11.17, 20:48:38 »
Pyza:


> Z tym GigaScreenem to chyba jednak tylko dwa ekrany:
------------------
Tak.



> Patrząc jednak na żółwia to oprócz GigaScreena jest jeszcze tryb interlace dla atrybutów
--------------------------
I tak.



> Pytanie czy warto się z tym babrać i czy ktoś zrobi taki obrazek :D
------------------
Takich obrazków powstaje rocznie kilka.
Ale nie podobają mi się użyte tam playery.
Chodzi mi o player użyty w obrazku Blackera - i to wersji po naciśnięciu klawisza "5".



> O Edytorze nawet nie mówię :p
------------------
Takich edytorów jest już bardzo wiele i więcej nie trzeba.
Problem w tym, że nie ma porządnego źródła do użycia tego w demie/grze.
Zilog swoje wypuścił jako coś tam na Linuxa - ja się nie znam.
Zapytam Hellboja.