Ezzel a továbfejlesztett kicsomagoló rutinnal bármilyen méretű epcompress-el tömörített adatot be lehet tölteni. A kód, a változók, és az olvasáshoz használt 256 byte hosszúságú puffer bárhol lehet a 0. vagy a 3. lapon, és a kód ROM-ban is futhat, mert nincsenek önmódosító részek. A memóriát egy előre lefoglalt szegmenseket tartalmazó lista alapján lehet használni, de automatikusan is tud foglalni EXOS 24 hívásokkal.
Hátrányok: nagyobb és lassabb, mint az eredeti kitömörítő, amely csak egy fix 64K-s címterületen működött lapozás nélkül; nem veszi figyelembe, ha egy szegmens megosztott. Hibák még lehetségesek.
A decompressData rutin hívásakor a következő regisztereket kell beállítani:
DE: a kicsomagolt adatokat erre a címre írja; a felső két bitnek nincs jelentősége, mert a szegmensszámokat az IY címen található táblázat határozza meg
HL: 256 byte-os puffer a tömörített adatok olvasásához, a 0. vagy 3. lapon. Csak az L változik, és amikor 0, akkor meghívja a readBlock rutint, hogy a puffert újra feltöltse. A readBlock nem változtathat meg semmilyen regisztert, kivéve a HL-t, amelyet új pufferre is beállíthat.
IX: a kitömörítő rutin által használható memória területre (változók stb.) mutat a 0. vagy 3. lapon. Az alsó byte-ot (XL) nem veszi figyelembe, mindig az XH00h-XHA3h területet használja.
IY: a felhasználható szegmenseket tartalmazó táblázatra mutat a 0. vagy 3. lapon. Ha egy szegmens száma 0, akkor azt EXOS 24 hívással lefoglalja, és tárolja a táblázatban; ha 1, akkor hibával visszatér (így korlátozható a lefoglalt memória mérete).
Sikeres visszatéréskor a DE és HL regiszterek az olvasott és írt adatoknak megfelelően módosulnak, az A és a carry bit nulla, a Z bit 1, az IY pedig az utolsó felhasznált szegmensre mutat a táblázatban.
Hiba esetén az A 255, a carry bit 1, a Z bit 0, és az IY arra a szegmensre mutat, amelynél a hiba történt.
Az 1. és 2. lapon található szegmenseket mindkét esetben visszalapozza.
Forráskód z80-asm (egyszerű PC-s Z80 assembler) és FENAS formátumban: