Welcome, Guest. Please login or register.


Author Topic: Fájltömörítés Enterprise-on (Read 206832 times)

Offline IstvanV

  • EP addict
  • *
  • Posts: 4822
Re: Fájltömörítés Enterprise-on
« Reply #30 on: 2008.November.17. 16:56:30 »
A DTF  nem a lemezművelet miatt lassú, hanem azért, mert bitenként dolgozza fel a statisztikai tömörítésű adatfolyamot és ezek kitologatása pedig időigényes. Ki kell tolni az éppen aktuális számú bitet, és az aktuális táblázatából keszedni a neki megfelelő bájtot, majd így tovább. Hiába a statisztikai elv így követeli meg, igyekeztem optimalizálni, de csak ennyire futotta.  :oops:
A DTF betöltők a DTL kicsomizót használják, az attus.ldr már gyorsabban tölt, mivel ez a legfejlettebb kicsomizómat tartalmazza.  :roll:
A bitenkénti léptetés valóban időigényes, ezért hasznos lehet az a megoldás, amikor a tömöríthetetlen byte-okat egészben lehet beolvasni bitenkénti léptetés nélkül, és csak a jelzőbiteket stb. kell bitenként olvasni. Bár az epcompress által használt formátum egy már létező formátum továbbfejlesztett változata, tehát az ötlet nem az enyém, de a fenti trükköt a bitenkénti olvasás elkerülésére használja.
Ha sikerül egy sorozatot tömöríteni, akkor a hosszúság és távolság paramétereket statisztikai tömörítéssel (amely hasonlít a DTF-hez, csak nincs második táblázat a karakterkészlethez) tárolja, így azokat már bitenként kell olvasni, de ez elfogadható kompromisszumot jelent - a PC-s tömörítő programokkal összemérhető (legalábbis kb. gzip szintű) hatásfokot és gyors kicsomagolást. Azonban az a tény, hogy egy byte hosszúságú "sorozatot" is lehet tömöríteni, szintén felfogható egyfajta statisztikai tömörítésként, mert így a gyakori byte-ok rövidebbek is lehetnek, mint 8 bit, a ritkábbak pedig 9 bitesek (mert egy bit jelzi, hogy tömörítetlen).

Egyébként a bitenkénti léptetést is lehet egy kis mértékben gyorsítani, például én ilyen rutint írtam legfeljebb 8 bit olvasására:
Code: ZiLOG Z80 Assembler
  1. read8Bits:
  2.         ld a, 001h
  3. readBits:
  4.         exx
  5. lrb_01: sla e
  6.         jr z, lrb_03
  7. lrb_02: adc a, a
  8.         jp nc, lrb_01
  9.         exx
  10.         ret
  11. lrb_03: inc l
  12.         call z, readBlock
  13.         ld e, (hl)
  14.         rl e
  15.         jp lrb_02
  16.  
Itt nincs külön változó a bitek számlálására, hanem maguknak a léptetett regisztereknek a túlcsordulása illetve nulla értéke jelzi, hogy mikor van kész az olvasás, illetve mikor kell új byte-ot olvasni. Viszont a beolvasandó bitek számát 2^(8-N) fromában kell megadni, de azt a DTF-nél előre is ki lehetne számolni, és a táblázatban már így tárolni.

Offline IstvanV

  • EP addict
  • *
  • Posts: 4822
Re: Fájltömörítés Enterprise-on
« Reply #31 on: 2008.November.17. 17:26:12 »
Pláne, hogy a fejlesztések nem állnak le, lásd TVC emu, IVIEW; ki tudja, mi lesz még itt, amit esetleg jó lesz tömöríteni. Amúgy ha jól emlékszem, Geco is használt valami tömörítést a CPC-s Impossible Mission 2 átírásakor.
Az IVIEW formátumban már lehet ilyen tömörítést használni, bár nem tudom, hogy az előbbi Z80 kód mennyire használható a fejlesztéshez, vagy hogy esetleg célszerűbb lenne-e más formátumot választani.

Offline Attus

  • EP addict
  • *
  • Posts: 1225
  • Country: hu
Re: Fájltömörítés Enterprise-on
« Reply #32 on: 2008.November.17. 19:25:48 »
mert így a gyakori byte-ok rövidebbek is lehetnek, mint 8 bit, a ritkábbak pedig 9 bitesek (mert egy bit jelzi, hogy tömörítetlen).
A statisztikai bites tömörítésnek pont ez a lényege, amit írsz. Az, hogy osztályozzuk az előforduló bájtokat gyakorisági sorrendben, és jó esetben a leggyakrabban előforduló két bájtot akár 1 bittel is lehet értelmezni. Ha megfigyeled az attus.ldr tömörítését, akkor ő kiírja az általa optimálisnak talált tömörítési rendszert, mivel matematikailag meghatározható a tömörítés végrehajtájta előtt a leendő fájl hossza, minden tömörítési módszer esetén. A tömörítési módszerek száma, már amit a progim végignéz nem túl sok, lehet, hogy van optimálisabb is az adott fájl összetételére nézve, mint amiket végigpróbál.

Offline Povi

  • EP addict
  • *
  • Posts: 2296
  • Country: hu
    • http://povi.fw.hu
Re: Fájltömörítés Enterprise-on
« Reply #33 on: 2008.November.17. 21:37:46 »
Ne haragudjatok, de tulajdonképpen mi ez az epcompress? (arra rájöttem, hogy tömörítő :))
*** Speicherplatz zu klein

Offline MrPrise

  • Administrator
  • EP addict
  • *
  • Posts: 2754
  • Country: hu
    • Enterprise Forever
Re: Fájltömörítés Enterprise-on
« Reply #34 on: 2008.November.17. 22:07:25 »
Az, hogy osztályozzuk az előforduló bájtokat gyakorisági sorrendben, és jó esetben a leggyakrabban előforduló két bájtot akár 1 bittel is lehet értelmezni.
Erre jó példa a Morse-kód. Ott a leggyakrabban előforduló betűknek a legrövidebb a kódja, a ritkábbaknak pedig hosszabb.

Offline Attus

  • EP addict
  • *
  • Posts: 1225
  • Country: hu
Re: Fájltömörítés Enterprise-on
« Reply #35 on: 2008.November.17. 22:15:20 »
Erre jó példa a Morse-kód. Ott a leggyakrabban előforduló betűknek a legrövidebb a kódja, a ritkábbaknak pedig hosszabb.
Klassz példa!  :smt041

Offline IstvanV

  • EP addict
  • *
  • Posts: 4822
Re: Fájltömörítés Enterprise-on
« Reply #36 on: 2008.November.17. 22:26:58 »
jó esetben a leggyakrabban előforduló két bájtot akár 1 bittel is lehet értelmezni
Csak akkor lehet mindkét leggyakrabban előforduló byte-ot 1 biten tárolni, ha a karakterkészlet mérete 2. :)

Offline IstvanV

  • EP addict
  • *
  • Posts: 4822
Re: Fájltömörítés Enterprise-on
« Reply #37 on: 2008.November.17. 22:58:52 »
Ne haragudjatok, de tulajdonképpen mi ez az epcompress? (arra rájöttem, hogy tömörítő :))
PC-n lehet vele tömöríteni 5-ös fejlécű EP programokat, IVIEW képeket, és ezen kívül bármilyen egyéb (nem csak EP specifikus) adatot.
A programokból önkicsomagoló, önállóan futtatható file-t készít, szintén 5-ös fejléccel, és a bemeneti file mérete legfeljebb 63.25K lehet (de elvileg lehetne több is az új kicsomagoló rutinnal).
Az IVIEW képeknél külön tömöríti a palettát (ez természetesen csak akkor hasznos, ha a paletta soronként változik :)), és a pixel adatokat, és a tömörített képet szintén IVIEW (049h) fejléccel menti, a fejlécben jelezve a tömörített formátumot.
Egyéb adatfile-t fejléc nélüli, "nyers" formátumba tömörít, amit a fenti Z80 assembler rutinnal lehet kicsomagolni. A méret elvileg bármekkora lehet, de a tömörítő program jelenlegi verziója a gyakorlatban nagyon lassú és sok memóriát használ az eredetileg tervezett 64K-nál lényegesen nagyobb file-ok tömörítésekor. :oops: Az ilyen tömörített adatokat természetesen csak új fejlesztésű EP programok tudnák használni, de egyszerűen lehetne írni olyan programot vagy bővítőt, amely a file-t EP-n kicsomagolja.

Az 'epcompress' program az összes formátumot (program, kép, és adat) ki is tudja csomagolni, és ellenőrizni is tudja, hogy hibás-e egy tömörített file. Tehát elméletileg lehetne használni csak PC-n gzip-hez hasonló tömörítő programnak, de ennek nem sok értelme van a tömörítés lassúsága és memóriahasználata miatt - a formátum egyetlen előnye, hogy viszonylag jó (zip-hez hasonló) tömörítési hatásfokot lehet vele elérni úgy, hogy a kicsomagolás elég gyors 8 bites gépeken is.

Offline Attus

  • EP addict
  • *
  • Posts: 1225
  • Country: hu
Re: Fájltömörítés Enterprise-on
« Reply #38 on: 2008.November.17. 23:10:16 »
Csak akkor lehet mindkét leggyakrabban elõforduló byte-ot 1 biten tárolni, ha a karakterkészlet mérete 2. :)

Na jó. Szélsõséges voltam. :ds_icon_cheesygrin:

Offline IstvanV

  • EP addict
  • *
  • Posts: 4822
Re: Fájltömörítés Enterprise-on
« Reply #39 on: 2008.November.19. 18:53:30 »
de egyszerűen lehetne írni olyan programot vagy bővítőt, amely a file-t EP-n kicsomagolja.
Az alábbi bővítő az első ilyen jellegű próbálkozás :) A használata:
  uncompress file1 file2
Kicsomagolja "file1"-et "file2"-be.
  uncompress file
Ugyanaz, csak nem új file-t hoz létre, hanem az eredetit írja felül.
  uncompress /L file1 file2
Kicsomagolás után automatikusan betölti "file2"-t EXOS modul betöltés (29) hívással.
  uncompress /L file
Ez is betölti a kicsomagolt file-t, de a kimeneti file név 'uncomp__.tmp'.
  uncompress /T file1 file2 file3 ...
Az összes megadott nevű file-t teszteli, de nem ír semmit a lemezre.

Offline Zozosoft

  • Global Moderator
  • EP addict
  • *
  • Posts: 14721
  • Country: hu
    • http://enterprise.iko.hu/
Re: Fájltömörítés Enterprise-on
« Reply #40 on: 2008.November.19. 19:47:38 »
A programokból önkicsomagoló, önállóan futtatható file-t készít, szintén 5-ös fejléccel, és a bemeneti file mérete legfeljebb 63.25K lehet

Egyéb adatfile-t fejléc nélüli, "nyers" formátumba tömörít
A THELYRA2.COM kifogott a rendszeren :-) Lehetne egy olyan paraméter, amivel fejléctõl függetlenül meg lehet mondani, hogy "nyers" formátumot csináljon?

Offline IstvanV

  • EP addict
  • *
  • Posts: 4822
Re: Fájltömörítés Enterprise-on
« Reply #41 on: 2008.November.19. 21:08:42 »
A THELYRA2.COM kifogott a rendszeren :-) Lehetne egy olyan paraméter, amivel fejléctõl függetlenül meg lehet mondani, hogy "nyers" formátumot csináljon?
Új verzió feltöltve :) A -raw paraméter használatakor figyelmen kívül hagyja az EXOS fejlécet. Ezen kívül a csomag tartalmazza a Z80-as kicsomagoló minden változatát, és az előbbi "uncompress" bővítést is (.ext és .rom).
A Lyra 2 tömörítve:

Offline IstvanV

  • EP addict
  • *
  • Posts: 4822
Re: Fájltömörítés Enterprise-on
« Reply #42 on: 2008.November.20. 14:06:47 »
A Lyra 2 tömörítve:
Összehasonlítás néhány más tömörítővel, és kicsomagolási idők EP-n (384K-ra bővített memóriával):

thelyra2.com            325781  (eredeti file)
thelyra2.dtf            179224  (attus.ldr EP-n)
  attus.ldr:
    DISK: -> DISK:  ~112 s
    FILE: -> FILE:  ~63 s
thelyra2.dtf            177899  (dtf.cpp PC-n, kompatibilis az attus.ldr-el)
thelyra2.zip            114205  (Info-ZIP 2.32)
thelyra2.exo            108927  (exomizer 2.0b7)
thelyra2.zip            107220  (p7zip 4.57)
thelyra2                105160  (epcompress)
  uncompress.ext:
    DISK: -> DISK:  ~79 s
    DISK: -> FILE:  ~27.5 s
    FILE: -> FILE:  ~21 s
thelyra2.rar            104272  (rar 3.80)
thelyra2.7z              93203  (p7zip 4.57)

Offline MrPrise

  • Administrator
  • EP addict
  • *
  • Posts: 2754
  • Country: hu
    • Enterprise Forever
Re: Fájltömörítés Enterprise-on
« Reply #43 on: 2008.November.20. 15:00:33 »
Úgy látom már a 7z-vel is felveszi a versenyt, ami szép teljesítmény! Gratulálok!

Offline IstvanV

  • EP addict
  • *
  • Posts: 4822
Re: Fájltömörítés Enterprise-on
« Reply #44 on: 2008.November.20. 15:31:51 »
Úgy látom már a 7z-vel is felveszi a versenyt, ami szép teljesítmény! Gratulálok!
A 7z-vel nem igazán, mert több, mint 10% a különbség, de a például a RAR file méretével közel azonos lett. Ez azonban a file típusától is függ, más adatokkal nem biztos, hogy ugyanennyire jól működne. De a zlib-et használó programokkal (pl. gzip, Info-ZIP) általában rosszabb esetben is kb. hasonló méretet ér el.