Autor Wątek: On-the-fly Screen Compressor  (Przeczytany 397 razy)

Phonex

  • *****
  • Wiadomości: 1084
  • Miejsce pobytu:
    Warszawa
On-the-fly Screen Compressor
« dnia: 2018.12.24, 15:47:03 »
Przyszło mi do głowy, żeby połączyć plusy zwykłego ładowania screena i skompresowanego screena, czyli rozkompresowywać na bieżąco w trakcie ładowania. Czemu nie wpadłem na ten pomysł kiedyś?
Kompresor stosuje ten sam algorytm co Fast Compressor, tyle że "w biegu" - nie trzeba czekać na zakończenie ładowania. Nie zmienia kolorów ekranu, jak się ustawi czarne na czarnym, to nie będzie widać ładowania, tylko wtedy po co stosować "on-the-fly"? No ale można.
Kto był na Speccy party 2018.2 to widział, pokazywałem jak działa.
Kompresor zgrywa dwa pliki: dekompresor/loader: normalny plik CODE z nagłówkiem i obrazek: bez nagłówka i z krótkim pilotem żeby zaoszczędzić czas.
Oczywiście krótkiego pilota zgrywa tylko na taśmę, do pliku tap/tzx trafia normalny, trzeba sobie samodzielnie zmienić w razie potrzeby.

Używanie LOAD ""CODE: RANDOMIZE USR 40000
Dekompresor/loader ma 194 bajty, ładuje się pod 40000 i nie jest relokowalny. Uruchomienie RANDOMIZE USR 40000 powoduje załadowanie/rozkompresowanie obrazka.
Jeżeli w grze był skompresowany obrazek to prawdopodobnie już jest tam taka sekwencja żeby załadować i rozkompresować obrazek, więc możliwe że nie trzeba nic zmieniać. Jeżeli było zwykłe LOAD ""SCREEN$ to trzeba zamienić na wspomnianą wyżej parę.

Efekt? Wygląda jak normalne ładowanie obrazka, tylko szybciej! :D
Dzieje się to na tyle szybko, że nie widać zmian szybkości w trakcie (czego trochę oczekiwałem, efektu trochę podobnego do zwalniającego licznika w COPY 128 V3).
Co zyskujemy? Obrazek rysuje się od początku ładowania, nie trzeba przez kilkanaście sekund patrzeć w pusty ekran czekając do końca ładowania żeby rozkompresować. A długość jest mniejsza!

Zastosowanie jest oczywiście tylko do taśmy i do plików tap/tzx na emulatorze.
Załączam przykład. Szczegóły wkrótce.
« Ostatnia zmiana: 2018.12.24, 17:33:52 wysłana przez Phonex »

Dalthon

  • ***
  • Wiadomości: 239
  • Miejsce pobytu:
    TriCity
Odp: On-the-fly Screen Compressor
« Odpowiedź #1 dnia: 2018.12.25, 00:22:20 »
Yeah!! ;)

Klaud

  • *****
  • Wiadomości: 3800
  • Miejsce pobytu:
    trzecia planeta od Słońca
  • Mordimer Madderdin
Odp: On-the-fly Screen Compressor
« Odpowiedź #2 dnia: 2018.12.25, 13:34:21 »
Mogę tylko popodziwiać i trzymać kciuki za chęci. Oby tak dalej.
KL
-----
Poszukuję TS1500, TK95 oraz C=116.

tooloud

  • *****
  • Wiadomości: 2429
  • Miejsce pobytu:
    Warszawa
  • mydłem go!
Odp: On-the-fly Screen Compressor
« Odpowiedź #3 dnia: 2018.12.25, 15:54:29 »
Bosko, dzięki!
dużo sprzętu mało czasu.

ZX Freeq

  • *****
  • Wiadomości: 1559
  • Miejsce pobytu:
    Warszawa
Odp: On-the-fly Screen Compressor
« Odpowiedź #4 dnia: 2018.12.25, 18:19:38 »
Niesamowite to jest. dzięki.
ZX80|ZX81+16kB+PandAY|ZX 48k/+/128k+/+2/+2A/+3/Vega|QL+QIDE|JS128|Timex 2048+2040 Printer|UK2086|FDD3000+3.5''|AY|ZX HD|Divide2k11/2k14|DivMMC/PicoDivSD|BetaDisk 128|Opus|Masakrator FM|If 1/2/Microdrv|Multiface 1|+2A\B SDI-1|SJS 1/2|ZX Printer|TZXDuino|+3 HxC USB|ZXUno|Omni
Z88|A500/600|PC200|Ent128

Phonex

  • *****
  • Wiadomości: 1084
  • Miejsce pobytu:
    Warszawa
Odp: On-the-fly Screen Compressor
« Odpowiedź #5 dnia: 2018.12.26, 12:47:43 »
Mogę tylko popodziwiać i trzymać kciuki za chęci. Oby tak dalej.

No nie wiem, czy będzie jeszcze jedna taka sytuacja. Jednym z powodów było to, że Tygrys zorganizował speccy party w Remoncie, drugim rozmowa z Dalthonem o kompresorach, trzecim Dalthona "wszystkie ręce na pokład" w związku z Remontem. A w książce "Jak blefować doskonale: programowanie" napisali, że co jakiś czas trzeba coś pokazać żeby ludzie uwierzyli że jestem w tym dobry ;D
Nie miałem pomysłu na demo jako demo, więc postanowiłem napisać użytka i do niego demo ;) Niestety nie udało się go wtedy pokazać.

Czwartym powodem powstania programu, był pomysł.
Pierwsze przemyślenia sugerowały, że rzecz jest niewykonalna. Nie było szans żeby wyrobić się czasowo. Wydawało mi się że jest to jeszcze trudniejsze niż napisanie np. kopiera z kompresją, bo tam jest tak: w czasie ładowania kopier liczy powtarzające się bajty i wynik wpisuje do pamięci (trzy wpisy: znacznik, licznik, bajt), w czasie zgrywania odczytuje ilość (do trzech odczytów z pamięci) a potem wysyła ileś bajtów na taśmę. A tu trzeba odczytać z taśmy jeden do trzech bajtów a potem z tego wykonać 1 do 128 wpisów do pamięci PRZED załadowaniem następnego bajta z taśmy!
To nie mogło się udać.
Aż wpadłem na pomysł, że przecież nie trzeba zakończyć PRZED załadowaniem następnego bajta - można ładować jak zawsze: skompresowany obrazek jak zwykle ładuje się pod 40000, a drugi proces sprawdza sobie czy są nowe bajty i je obrabia. I ponieważ jest jednak więcej nieskompresowanych niż skompresowanych bajtów, to spokojnie można na luzie wpisywać 1 może 2 powtarzające się bajty na raz! Do końca pliku się wyrówna.
To z kolei groziło tym, że jeśli skompresowane bajty będą pod koniec pliku (a często będą - na końcu są atrybuty) - program nie zdąży ich rozkompresować przed zakończeniem ładowania.
Zacząłem już nawet kombinować na ile bajtów przed końcem obrazka zaprzestać kompresji, aż wpadłem na następny pomysł - przecież nie musi skończyć przed zakończeniem ładowania! Po zakończeniu, dzięki temu że to niezależny proces, można wielokrotnie wywoływać dekompresję aż nie zasygnalizuje że już wszystkie bajty zrobione. Bez ładowania uwinie się dosłownie w mgnieniu oka i nawet nie będzie widać.
Żeby nawiązać do Fast Compressora (i może z lenistwa) nie zmieniałem interfejsu programu, dorobiłem tylko pulsującą nazwę, żeby go wyróżnić.

Ach! Teraz pisząc o tym, zrozumiałem dlaczego nie ma oczekiwanego przeze mnie efektu zmian szybkości w trakcie ;) Tego można by oczekiwać po tej pierwotnej "niewykonalnej" wersji.

trojacek

  • *****
  • Wiadomości: 4527
  • Miejsce pobytu:
    Warszawa
Odp: On-the-fly Screen Compressor
« Odpowiedź #6 dnia: 2018.12.26, 13:24:49 »
Ahaaaaaa...! ;)
To teraz wszystko jasne :)