Difference between revisions of "EPcompress leírás"

From Enterprise Wiki
Jump to: navigation, search
(Tömörítési idő)
Line 671: Line 671:
 
|0.977
 
|0.977
 
|0.680
 
|0.680
 +
|}
 +
 +
{| class="wikitable"
 +
!Teljes idő !! -1 !! -2 !! -3 !! -4 !! -5 !! -6 !! -7 !! -8 !! -9 !! -X
 +
|-
 +
|m0
 +
|
 +
|
 +
|
 +
|
 +
|
 +
|
 +
|
 +
|
 +
|
 +
|
 +
|-
 +
|m1
 +
|
 +
|
 +
|
 +
|
 +
|
 +
|
 +
|
 +
|
 +
|
 +
|
 +
|-
 +
|m4
 +
|
 +
|
 +
|
 +
|
 +
|
 +
|
 +
|
 +
|
 +
|
 +
|
 
|}
 
|}
  

Revision as of 11:33, 15 April 2019

Parancssor, paraméterek

epcompress [PARAMÉTEREK...] INFILE[...] OUTFILE

Általános

  • -h | -help | --help: Rövid leírást ír ki a program használatáról, és kilép.
  • --: Minden további paraméter fájl név.
  • -x: Tömörített fájl kicsomagolása.
  • -t: Fájl(ok) tesztelése.

Fájl formátum

  • -raw | -noraw: EXOS fejlécek figyelmen kívül hagyása -raw esetén, az alapértelmezés -noraw. Támogatott EXOS modul típusok:
    • 05h: Új alkalmazói program (-m0, -m2, -m3), a mérete a szabványosnál nagyobb is lehet, kicsomagolva a 3. lapot is használhatja
    • 06h: Abszolút rendszerbővítő (-m2, -m3)
    • 49h: IVIEW kép (-m0, -m2, -m3, a CVIEW bővítő azonban csak az -m2-t támogatja)
  • -m0..m6: Formátum választása, az -m5 (ZLib) helyett használható -mz is, az alapértelmezés -m2, illetve a bemeneti fájl alapján automatikusan választott, ha az lehetséges.
  • -m6:ENCODING: -m6 módban a kódolást definiálja (lásd lent), ami alapértelmezés szerint "FG0L,G,,12345678,0123456789ABCDEF".
  • -a | -n: Archívum készítése több fájlból -a esetén, az alapértelmezés -n.
  • -V: Több részre (volume) bontott bemeneti fájl, csak kicsomagolásnál és tesztelésnél.
  • -V <N>: Tömörítésnél a kimenet N kilobájt méretű részekre bontása. N csak 4 többszöröse lehet.

Tömörítési paraméterek

  • -1 ... -9 | -X: Gyorsabb vagy nagyobb hatásfokú tömörítés beállítása, az alapértelmezés 5. A nagyobb értékek egyes esetekben rosszabb fájl méretet is eredményezhetnek. -m0 és -mz formátumnál az -X nagyon lassú.
  • -fast: Gyors 4 szálú tömörítő használata, ez csak -raw -m2 és -mz módban lehetséges, és fix paramétereket tételez fel. Az ep128emu snapshot és PNG fájl mentésekor használja.
  • -minlen <N>: LZ77 minimális hosszúság 1 és 3 között, az alapértelmezés a formátum által támogatott legkisebb érték. A növelése rontja a fájl méretet, de gyorsítja a kicsomagolást.
  • -maxoffs <N>: LZ77 maximális távolság (szótár méret). Alapértelmezés szerint a legnagyobb, amit a formátum szabványosan támogat, általában 64 kilobájt. Kivétel az -mz (ZLib) formátum, ahol 32768 bájt, nagyobb érték pedig nem szabványos bővítést engedélyez. Az -m1, -m2, és -m4 esetében a maximum 524288 bájt, amit a Z80 rutinok azonban nem támogatnak. A csökkentése rontja a tömörítés hatékonyságát, 1 bájt egyszerű RLE eljárásnak felel meg. A távolság korlátozása hasznos lehet speciális esetben, például cirkuláris puffer használatakor.
  • -blocksize <N>: Fix blokk méret használata. Az alapértelmezés 0, ami optimális módon próbálja blokkokra bontani a bemeneti adatot, ha ezt a választott formátum lehetővé teszi (az -m3 és -m6 nem), a keresés mélysége függ az -1..-X paramétertől.

Önkicsomagoló programok paraméterei

  • -borderfx | -noborderfx: A keretcsíkozás engedélyezése vagy tiltása.
  • -cleanup | -nocleanup: A lapozás és veremmutató EXOS-hoz hasonló beállítása.

Tömörített formátumok leírása

  • -m0: Huffman kódolást is használó, bonyolultabb formátum, ami különösen konvertált képeknél és digitális hangnál lehet hatékonyabb. Hátránya, hogy a Z80 rutin viszonylag nagy és lassú, de a bemeneti adattól függően a tömörített fájl méretének a csökkenése is jelentős lehet.
  • -m1: Az -m4 módosított változata, 32 bájt távolságig lehetővé teszi sorozatok ismétlését eltolási érték hozzáadásával is. Ez elsősorban egyes táblázatoknál, növekvő vagy csökkenő sorozatoknál (például lineáris burkológörbék) lehet hasznos. Az általános hatásfok azonban kis mértékben rosszabb az -m4-hez képest, és valamivel hosszabb rutinra van szükség a kicsomagolásához, fájl függő, hogy megéri-e a használata. (assembly forráskód, régebbi verzió)
  • -m2 (alapértelmezett): Magnus Lind Exomizer 2 formátumához hasonló elven működik, de dinamikus kódolással, ami gyakran hatékonyabb tömörítést tesz lehetővé, elsősorban nagyobb és bonyolultabb bemeneti fájl esetén. Az adatot blokkokra bontja, amelyek eltérő optimális kódolást használhatnak. A kicsomagoláshoz itt található assembly forráskód, célszerűbb lehet azonban az újabb -m4 formátumot használni, amely többnyire (ha nincs szükség tömörítetlen blokkokra) hasonlóan hatékony, de a Z80 kód rövidebb és gyorsabb.
  • -m3: Egyszerű fix kódolású formátum, ami az -m6:BG1R,G,,12345678,0123456789ABCDEF definíciónak felel meg, de eltérő fejléccel. A fájl elejére a tömörített adat mérete kerül (2 bájt), ezt a tömörített adat követi EOF jel nélkül, majd a tömörítetlen adat relatív mérete (2 bájt), azaz a növekedés a kicsomagolás során. Ha ez 0, akkor az egész fájl tömörítetlen. (Z80 rutin)
  • -m4: Az -m2-höz hasonló, de kissé egyszerűsített formátum. Nem támogat tömörítetlen blokkokat (ez néhány száz bájtnál nagyobb összefüggő tömöríthetetlen adat méretét kb. 0.8 százalékkal növeli), blokk méret helyett EOB/EOF jelet használ, nincs ellenőrző összeg, és a kódolás leírása is módosult a hatékonyabb Z80 kicsomagoló rutin (régebbi és kis méretre optimalizált verzió) érdekében.
  • -m5 | -mz: Szabványos ZLib formátum, ami bővíthető legfeljebb 65536 bájt szótár méretre és 3 helyett 2 bájt minimális hosszúságra, 32768 feletti -maxoffs paramétert megadva. A gyakorlatban azonban az -m0 formátum többnyire hatékonyabb, és a Z80 kód is rövidebb és gyorsabb a decompress_zlib.s-hez képest.
  • -m6[:KÓDOLÁS]: Felhasználó által definiálható fix kódolású formátum, az alapértelmezett kódolás kicsomagolására itt található példa assembly forráskód.

Az m6 formátum definíció leírása

-m6:ÁLTALÁNOS,HOSSZÚSÁG,TÁVOLSÁG1,TÁVOLSÁG2,TÁVOLSÁG3

Paraméterek nélkül csak az -m6 a forráskódban található decompress_m6.s rutinnal kompatibilis formátumot állít be. Kis- és nagybetűk is használhatók.

Általános paraméterek

  • F: normál irány (forward), az LDIR-hez hasonlóan
  • B: fordított irány (backward), ilyenkor az adatot a végétől visszafelé haladva kell kicsomagolni
  • 9: a tömöríthetetlen byte-ok egyszerűen 9 bitesek lesznek (1b + eredeti byte, a file elején nincs jelzőbit)
  • G: a tömöríthetetlen byte-okat sorozatként tárolja, először a hosszúság Elias gamma kódolással, majd az eredeti adat. Ezt mindig tömörített sorozat követi, és a file mindig ilyennel kezdődik. Tömörített sorozat után jelzőbit adja meg a következő sorozat típusát (1 = tömörítetlen)
  • L: a bitenként olvasott adatot balra kell léptetni (SLA)
  • R: a bitenként olvasott adatot jobbra kell léptetni (SRL)
  • 0: normál jelzőbitek (0..01)
  • 1: invertált jelzőbitek (1..10), a régebbi formátumok ezt használják

Hosszúság

Ez a tömörített sorozatok hosszúságának a kódolása, ami lehet egyszerűen "G" is, ez a már említett Elias gamma kódot állítja be ('0123456789ABCDEF", 1 és 65535 közötti hosszúságot támogat, 16 '0' bit a file végét jelzi), és többnyire elfogadható eredményt ad. A definíció működése talán megérthető az alábbi példa alapján, "0128" megadásakor:

  • 1b + 0 bit: 1
  • 01b + 1 bit: 2-3
  • 001b + 2 bit: 4-7
  • 0001b + 8 bit: 8-263
  • 0000b: file vége

Ha a minimális hosszúság nagyobb 1-nél (lásd lent), akkor minden értéket megfelelően növelni kell.

Távolság1

Az 1 byte hosszúságú tömörített sorozatoknál a távolság kódolása. Ha üres, akkor az ilyenek nem támogatottak, és a minimális hosszúság 2 lesz. Lehet "I" és "X" közötti karakter, ami egyszerű fix méretű kódot jelent 1 és 16 bit között, például a "K" 3 bites, 1 és 8 közötti távolságot tesz lehetővé. Ebben a módban ha lehetséges, akkor az alsó 8 bitet (illetve "X"-nél a teljes értéket) egyszerű byte-ként írja ki az epcompress. Ez hasznos lehet akkor, ha a sebesség a fontos kicsomagolásnál. Egyébként a fentihez hasonló rendszer szerint írható le a kódolás, de "G" nem használható, és kissé eltér a kimeneti formátum. Például az '1234" ezt jelenti:

  • 00b + 1 bit: 1-2
  • 01b + 2 bit: 3-6
  • 10b + 3 bit: 7-14
  • 11b + 4 bit: 15-30

Távolság2

Távolság3

Az előzőhöz hasonlóak, csak 2 byte, illetve 3 vagy hosszabb sorozatokhoz. Az utóbbi nem lehet üres, viszont ha az 1-es és a 2-es üres, akkor 3 lesz a minimális hosszúság.

Összehasonlítás

Z80 regiszter és memória használat

Z80 kód méret Táblázat méret Táblázat kezdőcím Regiszter használat

(*: feltételes fordítás, +: mentve és visszaállítva)

decompress_m0.s 418-436 864 xx00h, xx80h AF, BC, DE, HL, BC', DE', HL', IX+, IY+
decompress_m1.s 227-241 156 xx24h, xx44h, xx64h AF, BC, DE, HL, IX, IY*
decompress_m1_old.s 242-248 153 xx00h-xx63h AF, BC, DE, HL, IX
decompress_m2.s 249-265 156 xx00h-xx64h AF, BC, DE, HL, BC', DE', HL'
decompress_m3.s 136-143 0 AF, BC, DE, HL, BC', HL'
decompress_m4.s 194-208 156 xx24h, xx44h, xx64h AF, BC, DE, HL, IX, IY*
decompress_m4_old.s 202-209 156 xx00h-xx63h AF, BC, DE, HL, IX*
decompress_m4_small.s 188 156 xx24h, xx44h, xx64h AF, BC, DE, HL, IX, IY
decompress_m6.s 91-96 0 AF, BC, DE, HL
decompress_zlib.s 533-564 851 xx00h, xx80h AF, BC, DE, HL, BC', DE', HL', IX+, IY+
deexo.asm 169 156 AF, BC, DE, HL, IX, IY
deexo.asm (módosított) 174 156 AF, BC, DE, HL, IX, IY

Kicsomagolási idő

(4 MHz-es Z80, tiltott megszakítás és memória várakozás, minden Z80 forráskód alapértelmezett beállításokkal fordítva)

arizona.raw ball1 batman.apl batman.com exolon.prg

(Attus)

fcontact.com

(kicsomagolva)

magicbal.com otw.bin sorcery2 sorcery3
decompress_m0.s 5.863 3.760 4.223 0.479 3.091 3.176 0.078 2.649 2.138 1.097
decompress_m1.s 3.248 1.579 2.563 0.318 2.098 2.186 0.040 1.938 1.606 0.747
decompress_m1_old.s 3.372 1.616 2.634 0.336 2.170 2.248 0.040 2.038 1.691 0.780
decompress_m2.s 3.287 1.681 2.695 0.340 2.192 2.260 0.045 2.030 1.676 0.795
decompress_m3.s 2.884 1.392 2.069 0.313 1.684 2.002 0.030 1.775 1.483 0.613
decompress_m4.s 3.144 1.507 2.465 0.313 2.007 2.111 0.040 1.893 1.569 0.732
decompress_m4_old.s 3.294 1.567 2.582 0.329 2.103 2.215 0.042 1.983 1.652 0.768
decompress_m4_small.s 3.336 1.597 2.640 0.329 2.132 2.243 0.043 1.984 1.652 0.775
decompress_m6.s 2.389 1.042 1.741 0.283 1.462 1.833 0.024 1.647 1.388 0.552
decompress_zlib.s 6.070 4.063 4.408 0.567 3.319 4.021 0.104 3.039 2.316 1.158
deexo.asm 4.493 2.186 3.824 0.467 2.906 3.131 0.060 2.789 2.344 1.078
deexo.asm (módosított) 3.877 1.883 3.311 0.407 2.509 2.725 0.053 2.430 2.037 0.934

Tömörített méret

arizona.raw ball1 batman.apl batman.com exolon.prg

(Attus)

fcontact.com

(kicsomagolva)

magicbal.com otw.bin sorcery2 sorcery3
Eredeti fájl 55218 48142 44288 7552 37538 45830 1152 63232 30580 16969
epcompress (2.0.11.2) -raw -m0 -9 41044 26134 29157 3075 20789 18633 530 15370 12854 7156
epcompress -raw -m0 -9 -blocksize 65536 43912 26448 29420 3072 21108 19624 530 15712 13158 7175
epcompress -raw -m1 -9 43527 25863 29661 3254 21114 18446 497 15464 13180 7229
epcompress -raw -m1 -1 43841 26332 29987 3264 21415 19456 497 15816 13339 7265
epcompress -raw -m2 -9 43467 26866 29665 3247 21193 19489 502 15506 13146 7264
epcompress -raw -m3 -9 44579 27936 30472 3554 21839 21907 512 16399 13946 7504
epcompress -raw -m4 -9 43491 26846 29667 3245 21194 19485 501 15503 13145 7262
epcompress -raw -m4 -1 43821 27181 29997 3252 21509 20471 501 15910 13341 7308
epcompress -raw -m6 -9 44574 27731 30508 3520 21865 21936 508 16349 13849 7484
epcompress -raw -mz -9 41043 27571 29775 3136 21185 20327 531 15655 13296 7288
epcompress -raw -mz -9 -maxoffs 65536 40957 27381 29203 3143 20923 19933 531 15470 13021 7210
exomizer (3.0.2) raw -P0 43853 27239 30030 3198 21465 20418 511 15895 13303 7319

Tömörítési idő

(64 bites Linux, 3.9 GHz Intel CPU)

arizona.raw ball1 batman.apl batman.com exolon.prg

(Attus)

fcontact.com

(kicsomagolva)

magicbal.com otw.bin sorcery2 sorcery3
epcompress (2.0.11.2) -raw -m0 -9 0.534 1.181 0.464 0.083 0.616 0.663 0.020 1.384 0.397 0.326
epcompress -raw -m0 -9 -blocksize 65536 0.054 0.160 0.050 0.014 0.058 0.092 0.004 0.222 0.045 0.048
epcompress -raw -m1 -9 1.960 2.224 1.809 0.537 1.493 1.474 0.062 1.873 1.202 0.762
epcompress -raw -m1 -1 0.106 0.160 0.084 0.021 0.086 0.081 0.005 0.126 0.072 0.035
epcompress -raw -m2 -9 2.258 1.933 1.833 0.539 1.503 1.519 0.133 1.872 1.339 0.783
epcompress -raw -m3 -9 0.076 0.047 0.019 0.004 0.018 0.028 0.002 0.054 0.015 0.011
epcompress -raw -m4 -9 1.942 1.885 1.810 0.515 1.514 1.524 0.062 1.870 1.358 0.777
epcompress -raw -m4 -1 0.107 0.139 0.086 0.021 0.072 0.082 0.005 0.125 0.077 0.035
epcompress -raw -m6 -9 0.076 0.043 0.020 0.006 0.020 0.027 0.003 0.058 0.016 0.013
epcompress -raw -mz -9 0.364 0.560 0.349 0.136 0.410 0.498 0.090 1.127 0.314 0.279
epcompress -raw -mz -9 -maxoffs 65536 0.414 0.603 0.430 0.142 0.519 0.542 0.091 1.228 0.355 0.386
exomizer (3.0.2) raw -P0 1.626 2.242 1.171 0.326 0.955 3.307 0.027 3.243 0.977 0.680
Teljes idő -1 -2 -3 -4 -5 -6 -7 -8 -9 -X
m0
m1
m4

Linkek

EP128Emu, a csomag tartalmazza az EPcompress aktuális verzióját

Z80 assembly rutinok

libepcompress forráskód (GPL), C++ programba építhető