EPcompress leírás

From Enterprise Wiki
Revision as of 10:55, 13 April 2019 by IstvanV (talk | contribs) (Tömörített formátumok leírása)

Jump to: navigation, search

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 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, blokk méret helyett EOF/EOB 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.

Linkek

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

Z80 assembly rutinok

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