ZX Spectrum > SOFTWARE

On-the-fly Screen Compressor

<< < (3/3)

Dalthon:
Albo dawać kolor atrybutu, 8 bajtów danych wypełniające ten 8*8 i następny atrybut, 8 bajtów... i tak 768 razy ;)

Phonex:

--- Cytat: Tygrys w 2023.07.24, 20:51:02 ---Zawsze dane mogą zawierać adres pamięci dla pixeli i kolorów. Wtedy wprawdzie blok danych będzie trochę dłuższy, ale osiągniesz to co chcesz.

--- Koniec cytatu ---
Nie warto. To jest dobre jak chce się zrobić fikuśną kolejność pokazywania obrazka, ale bardzo wydłuża blok. A tu będzie zawsze tak samo: kolumnami od lewej.


--- Cytat: Dalthon w 2023.07.24, 21:02:44 ---Albo dawać kolor atrybutu, 8 bajtów danych wypełniające ten 8*8 i następny atrybut, 8 bajtów... i tak 768 razy ;)

--- Koniec cytatu ---
Właśnie tak.
Tylko wolę najpierw pixele, a potem kolor, bo jak się zrobi przed ładowaniem INK = PAPER, to będzie się pojawiał od razu cały kwadrat. Będzie wybór :)

Phonex:
Zrobione.
Nawet łatwo poszło - w sensie kodowanie, bo oczywiście znalezienie sposobu znowu wymagało zalogowania się do "tego-jeszcze-nie-grali.com".
Ale po kolei: najprostszy sposób ładowania razem z kolorami pokazałem poprzednio. Naiwnie myślałem, że przestawienie atrybutów na początek załatwi sprawę przynajmniej w większości obrazków. No bo jak jest jednolite czarne tło, to bez pikseli całość będzie czarna, prawda?
Nieprawda. Przez małą rozdzielczość kolorów w Spectrum, obrazki wymagają kombinowania z INVERSE - część treści obrazka jest zrobiona inkiem, część pejperem. W załączniku jest HEAD-atr - to same atrybuty obrazka z Head Over Heels (bez pikseli czyli widać sam PAPER).
Pomysł upadł - wykorzystałem go do zrobienia dema tego, co chcę osiągnąć.
Następny pomysł: przygotować plik tak, żeby atrybuty były co 8 bajtów pikseli. Odpada od razu, bo przecież wszystko jest skompresowane i nie sposób przewidzieć ile bajtów pikseli będzie w jednym rekordzie. Można by pokazać najpierw x bajtów pikseli, a potem x/8 bajtów koloru. Wyglądałoby trochę amatorsko. Chociaż teraz pomyślałem, że może spróbuję w wolnej chwili... ;)
Na szczęście pomysł pierwszy - żeby przestawić atrybuty na początek - naprowadził mnie na rozwiązanie: tak, atrybuty ładują się na początku, ale rozkompresowują nie na ekran tylko wyżej. A potem przy dekompresji/pokazywaniu pikseli, w momencie obliczania kolejnego adresu, gdy po 8 liniach jest potrzebna poprawka przenosząca do następnej linii znakowej, pokazywany jest kolor. Potrzebne są tylko trywialne obliczenia adresu atrybutów z adresu pikseli. Procedura ma 9 bajtów - wreszcie natknąłem się na tą zaletę, która stała za taką akrobatyczną organizacją ekranu - łatwość obliczenia adresu atrybutów! Bo do tej pory napotykałem tylko trudności wydłużające obliczenia. Zorganizowanie kopiowania kolejnych bajtów z pamięci na ekran, to pestka. I nawet uruchomiło się od pierwszej próby :D
W związku z tym program używa teraz również max.768 bajtów od adresu 49152 (16384+32768 dla łatwego adresowania). Wrócił pusty ekran - ale tylko na kilka sekund (średnio 2-3, max.4) kiedy nic nie widać, dopiero potem pokazuje się obrazek. Bardzo ładnie się pokazuje - teraz mi się podoba 8)
Loader/dekompresor jest teraz trochę dłuższy: ma 256 bajtów, czyli jest o 62 dłuższy. To i tak świetny wynik, bo gdyby zachować różnicę długości wersji dekompresujących z pamięci - powinno wyjść 284.

Atrybuty ładują się po pikselach, więc są dwa sposoby wyświetlania: niewidoczny (INK = PAPER w loaderze) gdy piksele są niewidoczne i cały kwadrat pokazuje się wtedy gdy wchodzi kolor i widoczny (INK <> PAPER) gdy piksele widać cały czas. Z tym że to jest szybkie i niespecjalnie widać konkretne piksele, bardziej powstaje efekt kursora.
Mamy też drugi wybór: czy ładować jak zwykle na czarnym tle, czy na białym - tu efekt jest bardziej "dramatyczny", bo zmienia się i tło i treść.

I wreszcie!
Widać zmiany szybkości w trakcie ładowania! :D Jak ładują się puste pola (np. w Vulcan).
Jeszcze szczegół techniczny: ostatnia kolumna Vulcana i dwa kwadraty przedostatniej pokazywane są "offline", a dla Head - 10 ostatnich kwadratów.

Tygrys:
Niezła magia! Super to wyszło ;)

A z pamięcią ekranu ZX to, jak na pierwszy rzut oka, nie wygląda to źle, ot, jedynie trzeba zrozumieć jak to działa, i jak z tego skorzystać (w tym wykorzystując właściwości Z80)

Nawigacja

[0] Indeks wiadomości

[*] Poprzednia strona

Idź do wersji pełnej