OldComp.cz

Komunitní diskuzní fórum pro fanoušky historických počítačů

Prijdte se bavit!

Právě je 24.09.2021, 05:04

Všechny časy jsou v UTC + 1 hodina [ Letní čas ]




Odeslat nové téma Odpovědět na téma  [ Příspěvků: 59 ]  Přejít na stránku Předchozí  1, 2, 3, 4
Autor Zpráva
 Předmět příspěvku: Re: Komprimacny program LZX
PříspěvekNapsal: 02.02.2021, 12:07 
Offline
Radil

Registrován: 18.10.2014, 23:10
Příspěvky: 286
Has thanked: 17 times
Been thanked: 80 times
Neuveritelné, môj rýchly test ukázal, že každý súbor spakoval lepšie ako prvá verzia.
Neporovnával som dĺžky depakovacích rutín, ale vyzerá to podobne, LZX_2 má o niečo dlhšie rutinky.
V súboroch spd0lens a spd1lens sa píše o dvoch stĺpcoch (compression a length), ale sú tri.

A dosť ma zaujala voľba -e "nastavenie dodatočného úsilia pre čo najlepší kompresný pomer".
Čo to znamená? Keď sa testuje skoro 3000 kompresných typov (počet je asi závislý od dĺžky pakovaného súboru)
a vyberie sa najlepší, ako sa môže vybrať ešte lepší? No podarilo sa mi takto na jednom súbore ušetriť 1 bajt.

Každopádne díky za skvelý program.


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Komprimacny program LZX
PříspěvekNapsal: 02.02.2021, 12:39 
Offline
Pan Štábní
Uživatelský avatar

Registrován: 18.05.2013, 14:56
Příspěvky: 1783
Has thanked: 215 times
Been thanked: 396 times
z00m píše:
Priložený zdroják a gcc -o lzxpack LzxPack.cpp ti nestačí?
Asi stačí. Zmátla mě absence Makefile, takže mě ani nenapadlo to zkusit.

_________________
https://cygnus.speccy.cz ZX Spectrum 128k, Betadisk, DivIDE, ESXDOS


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Komprimacny program LZX
PříspěvekNapsal: 02.02.2021, 12:54 
Offline
Pan Generální

Registrován: 22.05.2013, 21:14
Příspěvky: 3174
Bydliště: Bratislava
Has thanked: 324 times
Been thanked: 635 times
zxcygnus píše:
Pěkné a lákavé... bude i varianta pro skutečný operační systém, nebo jen pro spouštěč her a offisů z Redmondu?
Ale tych skutocnych operacnych systemov je spusta (linux, unix, ultrix, bsd, macos....) a zial nie je v mojich silach pre kazdy z nich vyrabat binarku.
Ale ako pisal z00m, zdrojaky su prilozene, pre ten tvoj konkretny skutocny operacny system, ktory pouzivas, si zdrojak mozes skompilovat.
Zdrojaky sice primarne pisem a ladim vo Visual Studiu (momentalne verzia 2015) ale pisem ich portable a finalny exac pre spustac hier kompilujem v gcc. Takze by to nemal byt problem skompilovat kdekolvek.
zxcygnus píše:
Zmátla mě absence Makefile, takže mě ani nenapadlo to zkusit.
No, zase na druhej strane, pisat makefile kvoli kompilacii jedneho suboru (1 subor/projekt) mi pride tak trosku ako skrabat sa lavou rukou na pravom uchu, a aj to este trikrat obtocenou okolo hlavy :)
Ale verim, ze ak je niekto na makefile zvyknuty (ja moc nie), nebude pre neho problem si ho vyrobit ;)


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Komprimacny program LZX
PříspěvekNapsal: 02.02.2021, 13:32 
Offline
Pan Generální

Registrován: 22.05.2013, 21:14
Příspěvky: 3174
Bydliště: Bratislava
Has thanked: 324 times
Been thanked: 635 times
Antony/DTA píše:
Neuveritelné, môj rýchly test ukázal, že každý súbor spakoval lepšie ako prvá verzia.
Neporovnával som dĺžky depakovacích rutín, ale vyzerá to podobne, LZX_2 má o niečo dlhšie rutinky.
Jednoduche kompresie (napr. 2 a 4) maju depakery podobne dlhe, a zlozite sofistikovane kompresie (od 6 vyssie), pokryvajuce velmi vela moznosti a tym schopne dosiahnut lepsie kompresne pomery, maju (logicky) depakery dlhsie.
Pre pakovanie dlhych suborov (napr. nejaka hra na celu 48kB pamet) dlhsie depakery nevadia, lebo usetrena dlzka na lepsie spakovanych datach je (obvykle) vecsia nez strata na dlzke depakera, a zase pri kratkych suboroch (napr. 1k intro) je vyhodnejsie stratit par bajtov na horsom kompresnom pomere, ale s podstatne kratsim depakerom.
Antony/DTA píše:
V súboroch spd0lens a spd1lens sa píše o dvoch stĺpcoch (compression a length), ale sú tri.
Aha, vdaka za podnet, popis na zaciatku tychto suborov som zabudol updatnut. Treti stlpec su dlzky depakerov urcenych pre depak od konca (volba -tr.. a nastavenie revers=1). Dlzky sa mozu mierne lisit napriklad preto, lebo pri normalnom depaku je pre urcenie adresy pouzite SBC HL,DE kdezto pri depaku od konca staci o bajt kratsie ADD HL,DE.
Antony/DTA píše:
A dosť ma zaujala voľba -e "nastavenie dodatočného úsilia pre čo najlepší kompresný pomer".
Čo to znamená? Keď sa testuje skoro 3000 kompresných typov (počet je asi závislý od dĺžky pakovaného súboru)
a vyberie sa najlepší, ako sa môže vybrať ešte lepší? No podarilo sa mi takto na jednom súbore ušetriť 1 bajt.
Toto je trosku na dlhsie vysvetlovanie, zatial to ber ako taky tajny magicky parameter vdaka ktoremu sa spakovane data este lepsie "utrasu" :)
Zatial len tolko, ze to sa netyka vyberu najlepsej kompresie, ale je to nastavenie vyhodnocovania vyhodnosti sekvencii, a tyka sa to vsetkych cca 3000 kompresii, takze to moze zlepsit kompresny pomer ktorejkolvek z nich.
Antony/DTA píše:
Každopádne díky za skvelý program.
Vdaka :thumbup:


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Komprimacny program LZX
PříspěvekNapsal: 31.08.2021, 18:51 
Offline
Pan Generální

Registrován: 22.05.2013, 21:14
Příspěvky: 3174
Bydliště: Bratislava
Has thanked: 324 times
Been thanked: 635 times
Po dlhsom case dve male zmeny v programe LzxPack02:

- Mala korekcia v LzxList pri statistike nespakovanych blokov pri pouziti volby -s
- Do include suboru pribudol label deplen = dlzka depakovacej rutinky

Dlzka depakera sa berie zo suborov "spd*lens" ak je subor spakovany s prepinacom -d. Ak nie, nastavi sa na nulu. Depaker sam ju k nicomu nepotrebuje, ale programator ju moze pouzit k rychlemu urceniu kolko bajtov mu zaberie spakovany subor aj s depakerom dokopy (aj bez toho, aby musel depaker kompilovat).


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Komprimacny program LZX
PříspěvekNapsal: 02.09.2021, 08:54 
Offline
Radil

Registrován: 26.11.2018, 16:59
Příspěvky: 280
Bydliště: Holešov
Has thanked: 8 times
Been thanked: 35 times
zkoušel někdo tu depakovací rutinu předělat ze Z80 kódu na i8080 pro použití na CS 8-bitech? (PMD/PP01/IQ151)
případně dotaz na BUSYho, je to vůbec reálné?


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Komprimacny program LZX
PříspěvekNapsal: 02.09.2021, 13:53 
Offline
Pan Generální

Registrován: 22.05.2013, 21:14
Příspěvky: 3174
Bydliště: Bratislava
Has thanked: 324 times
Been thanked: 635 times
l00k píše:
zkoušel někdo tu depakovací rutinu předělat ze Z80 kódu na i8080 pro použití na CS 8-bitech? (PMD/PP01/IQ151)
případně dotaz na BUSYho, je to vůbec reálné?
Ak si dobre pametam, pre LzxPack01 rutinky na 8080 kedysi prerabal rombor, ale pre tuto verziu 02 neviem ci existuje nejaky port.

V kazdom pripade, realne to urcite je, a ak ma nikto nepredbehne, mam v plane to spravit ja (ked budem potrebovat nieco vecsie zapakovat na 8080 pocitacoch).

Avsak ak by niekto potreboval, tak na 6502 je depaker preportovany uz davno, portoval ho Loki.
Stahujte tu: https://server.loksa.sk/temp/declzx02.asm


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Komprimacny program LZX
PříspěvekNapsal: 12.09.2021, 21:33 
Offline
Pan Generální

Registrován: 22.05.2013, 21:14
Příspěvky: 3174
Bydliště: Bratislava
Has thanked: 324 times
Been thanked: 635 times
Zda ze ma nikto nepredbehol (a ak ano, nedal to na sebe poznat), takze tuhla, Lzx depacker pre 8080:
https://busy.speccy.cz/tmp/declzx02i8080.zip
Rutinky su o kusok dlhsie nez Z80-kove, predsa len take veci ako LDIR alebo SBC HL,BC treba robit "rucne".
K depackeru som pribalil aj subory s dlzkami depakerov pre jednotlive kompresie, aby LzxPack aj pre 8080 vedel najst minimalnu velkost suctu depacker + spakovane data.


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Komprimacny program LZX
PříspěvekNapsal: 13.09.2021, 12:44 
Offline
Radil

Registrován: 26.11.2018, 16:59
Příspěvky: 280
Bydliště: Holešov
Has thanked: 8 times
Been thanked: 35 times
super, vyzkouším, jen pár dotazů:
- je to psané pro Sjasm?
- dá se ze zkomprimovaných dat a typu komprese určit doba depacku? (třeba v taktech procesoru)
- šlo by upravit packer aby hledal N i R verze automaticky a vybral lepší z nich?
- jak to zautomatizovat - data -> packer -> výsledná binárka (tap/hex/bin) i s depack rutinou


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Komprimacny program LZX
PříspěvekNapsal: 13.09.2021, 14:27 
Offline
Pan Generální

Registrován: 22.05.2013, 21:14
Příspěvky: 3174
Bydliště: Bratislava
Has thanked: 324 times
Been thanked: 635 times
l00k píše:
super, vyzkouším, jen pár dotazů:
- je to psané pro Sjasm?
Ano, vsetky svoje asemblerove programy pre Z80 aj 8080 kompilujem v SjASMPlus. Ten sice vie iba mnemoniku Z80 (mne to uplne staci) avsak ma prepinac --i8080 pri ktorom kontroluje ci programator pouziva iba instrukcie pre 8080. Ak v programe pouzije instrukciu ktoru ma iba Z80, ohlasi na nej chybu.
l00k píše:
- dá se ze zkomprimovaných dat a typu komprese určit doba depacku? (třeba v taktech procesoru)
Nad tymto som sa zatial nezamyslal, ale samotne jadro depakera, ktore kopiruje vsetky data, je na Z80 robene pomocou LDIR, na porte pre 8080 je to potom klasicka kopirovacia slucka:
Kód:
slucka:
ld a,(hl)
ld (de),a
inc hl
inc de
dec bc
ld a,b
or c
jp nz,slucka
Okolo slucky je nejaka pomocna rezia, ktora v podstate iba zabezpecuje parametre pre tuto slucku, takze ak su v datach bud velke pakovatelne bloky (obrazky s velkymi jednofarbenymi plochami) alebo su to hutne data v ktorych nie je vela co pakovat (napr. kod programu) tak sa rychlost depaku limitne blizi k rychlosti tejto slucky.
l00k píše:
- šlo by upravit packer aby hledal N i R verze automaticky a vybral lepší z nich?
Teoreticky samozrejme slo, aj som nad touto moznostou rozmyslal, ale obvykly scenar je taky, ze pakovane aj depakovane data sa naraz do pameti nevojdu a programator ma potom smer depaku urceny obvykle tym ci depakovane data su pred pakovanymi alebo az za nimi. Taktiez, ked sa skusa viac typov kompresii, niektore cinnosti (hladanie sekvenci...) sa robia spolocne raz a ich vysledky sa nasledne pouziju pre vsetky typy kompresii. Pri otocenom smere pakovania by toto nebolo mozne takto zoptimalizovat a vsetky kompresie pre opacny smer by bolo treba robit uplne odznovu, preto som to pre jednoduchost zatial neimplementoval. A v pripade, ze je programatorovi jedno, ktorym smerom sa data budu depakovat, a chce co najlepsi kompresny pomer, tak tie dve moznosti (-tn/-tr) bude moct vyskusat aj "rucne" :)
l00k píše:
- jak to zautomatizovat - data -> packer -> výsledná binárka (tap/hex/bin) i s depack rutinou
Aj na toto som myslel - pri volbe -i LzxPack generuje include subor, ktory je mozne priamo includnut do zdrojaku a v ktorom su informacie o pouzitej kompresii. Takze uzivatel sa uz nemusi o nic starat a skompilovanie binarky s vyberom najlepsej kompresie sa mu urobi v nejakom makefile automaticky. Vdaka tomuto suboru si potom depaker vie skontrolovat ci nahodou depakovane data neprepisu este neprecitane spakovane data. Vsetko je to popisane v prilozenom manuali. Ked budem mat chvilku cas, skusim vymysliet nejaky jednoduchy priklad a hodim ho sem.


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Komprimacny program LZX
PříspěvekNapsal: 13.09.2021, 20:40 
Offline
Radil

Registrován: 26.11.2018, 16:59
Příspěvky: 280
Bydliště: Holešov
Has thanked: 8 times
Been thanked: 35 times
Busy píše:
LzxPack generuje include subor, ktory je mozne priamo includnut do zdrojaku a v ktorom su informacie o pouzitej kompresii. Takze uzivatel sa uz nemusi o nic starat a skompilovanie binarky s vyberom najlepsej kompresie sa mu urobi v nejakom makefile automaticky. Vdaka tomuto suboru si potom depaker vie skontrolovat ci nahodou depakovane data neprepisu este neprecitane spakovane data. Vsetko je to popisane v prilozenom manuali. Ked budem mat chvilku cas, skusim vymysliet nejaky jednoduchy priklad a hodim ho sem.


toto jsem v popisu viděl, ale moc si to makefile nedokážu představit, stejně někde musím tomu překladači říct minimálně ORG pro překlad, dát tam INC na ten Include soubor a pak ještě druhej na data, přičemž sice vím jak asi bude dlouhá rutina ale musím to dohledat v dalším souboru (kvůli ORG), pak přeložit, a pak z toho udělat třeba intelhex, takže nic moc jednoduchého


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Komprimacny program LZX
PříspěvekNapsal: 15.09.2021, 13:31 
Offline
Pan Generální

Registrován: 22.05.2013, 21:14
Příspěvky: 3174
Bydliště: Bratislava
Has thanked: 324 times
Been thanked: 635 times
Skusim teda sem napisat tak "polopatisticky" take tri mozne sposoby, ako pouzit depaker.

Prvy sposob je vhodny, ked su uz data na spakovanie definitivne, a depaker sa vola napriklad z basicu. V takom pripade staci v zdrojaku depackera na potrebne hodnoty nastavit ORG,srcadd,dstadd,lzxspd a potom parametre kompresie od revers az po totlen. Zdrojak DecLzx02 je cely samostatny, sebestacny, staci doplnit v akej forme chceme binarku (SAVEBIN, SAVETAP...) a nasledne skompilovanim v SjASMPlus ziskame hotovy kod ktory staci so spakovanymi datami len umiestnit do pameti a zavolat (kludne aj z basicu).

Druhy sposob je ten isty ako prvy, akurat vsetky parametre kompresie (od revers az po totlen) sa automaticky doplnia z include suboru. V zdrojaku depakera staci odkomentovat riadky
Kód:
  INCLUDE filename.inc
  DEFINE  declzx_pack_params
a meno suboru v prikaze INCLUDE zmenit na to, co vygeneroval LzxPack spusteny s parametrom -i. Tento sposob je vhodny, ked sa pakovane data behom vyvoja menia, a tym padom sa moze zmenit aj typ kompresie optimalnej pre tieto data. Programator tak nemusi zakazdym tieto parametre rucne prepisovat, namiesto toho sa nacitaju automaticky.

Treti sposob je vhodny ked je depaker sucastou nejakeho vecsieho projektu ktory okrem depakera obsahuje aj ine casti pisane v asembleri. V takom pripade zdrojak dekapera vobec netreba menit, da sa rovno pouzit tak ako je, a vsetky parametre a nastavenia sa daju urobit mimo neho - v inom zdrojaku, napriklad takymto sposobom:
Kód:
  ORG ...
  ....
srcadd  =  ...
dstadd  =  ...
lzxspd  =  0 alebo 1
  DEFINE  declzx_user_params
  DEFINE  declzx_pack_params
  INCLUDE filename.inc
  INCLUDE DecLzx02.asm
Na zaklade definovanych symbolov declzx_user_params a declzx_pack_params depaker vie, ze ako uzivatelske a kompresne parametre ma brat uz existujuce definicie, vytvorene v zdrojakoch kam sa depaker includuje. Uzivatelske parametre (umiestnenie dat v pameti) sa urcia kompilaciou a kompresne parametre sa vezmu z include suboru vygenerovaneho LzxPack-om s prepinacom -i tak ako v predchadzajucom pripade. Samozrejme je treba vlozit meno include suboru do direktivy INCLUDE.

Este poznamka k menam include suborov generovanych LzxPack-om. Defaultne je meno rovnake ako vysledny spakovany subor, iba namiesto koncovky LZX ma koncovku INC. V pripade ze si nechavate generovat include subor, je vhodne pouzit aj prepinac -o <meno_suboru> ktory LzxPack-u povie aby spakovane data zapisal do tohto suboru. Include subor bude mat potom presne toto iste meno, akurat koncovka sa zmeni na INC. Dolezite je tu hlavne to, ze meno include suboru v takom pripade nebude obsahovat typ kompresie a bude rovnake pre akukolvek vybranu kompresiu.


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Komprimacny program LZX
PříspěvekNapsal: 15.09.2021, 21:29 
Offline
Radil

Registrován: 26.11.2018, 16:59
Příspěvky: 280
Bydliště: Holešov
Has thanked: 8 times
Been thanked: 35 times
návod super, mezitím jsem se s tím už popral, ještě bych doplnil že lze data přeložit zároveň s rutinou tak, že zakomentujeme

;srcadd = #6000 ;; Begin of source packed data

a tam kde chceme mít data přidáme

srcadd incbin jmeno.lzx

ještě mne potrápila neznalost sjasmplus a chvilku mi trvalo jak ho donutit uložit binárku přeloženého souboru - nutno použít přepínač --raw=jmeno.bin


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Komprimacny program LZX
PříspěvekNapsal: 15.09.2021, 23:39 
Offline
Pan Generální

Registrován: 22.05.2013, 21:14
Příspěvky: 3174
Bydliště: Bratislava
Has thanked: 324 times
Been thanked: 635 times
l00k píše:
zakomentujeme
;srcadd = #6000 ;; Begin of source packed data
a tam kde chceme mít data přidáme
srcadd incbin jmeno.lzx
Ano, napriklad nieco take som myslel ked som napisal
Uzivatelske parametre (umiestnenie dat v pameti) sa urcia kompilaciou
l00k píše:
ještě mne potrápila neznalost sjasmplus a chvilku mi trvalo jak ho donutit uložit binárku přeloženého souboru - nutno použít přepínač --raw=jmeno.bin
Aj tak sa da :thumbup:
Dalsie sposoby som naznacil ked som napisal:
staci doplnit v akej forme chceme binarku (SAVEBIN, SAVETAP...)
Priklad:
Kód:
DEVICE ZXSPECTRUM48 ; Vytvori 64kB virtualny adresovy priestor do ktoreho sa bude ukladat kod
...kod...
SAVEBIN "jmeno.bin" , adresa , dlzka ; Ulozi do suboru danu cast adresoveho priestoru
Prikaz SAVEBIN v podstate presne zodpoveda basicovemu prikazu SAVE "jmeno.bin" CODE adresa,dlzka

Inak, prepinac --raw=jmeno.bin sa da nahradit aj direktivou OUTPUT priamo v zdrojaku:
Kód:
OUTPUT jmeno.bin
...kod...
Vsetok kod, tak ako sa vygeneruje kompilaciou, sa ulozi do binarky "jmeno.bin".


Nahoru
 Profil  
 
Zobrazit příspěvky za předchozí:  Seřadit podle  
Odeslat nové téma Odpovědět na téma  [ Příspěvků: 59 ]  Přejít na stránku Předchozí  1, 2, 3, 4

Všechny časy jsou v UTC + 1 hodina [ Letní čas ]


Kdo je online

Uživatelé procházející toto fórum: Žádní registrovaní uživatelé a 1 návštěvník


Nemůžete zakládat nová témata v tomto fóru
Nemůžete odpovídat v tomto fóru
Nemůžete upravovat své příspěvky v tomto fóru
Nemůžete mazat své příspěvky v tomto fóru
Nemůžete přikládat soubory v tomto fóru

Hledat:
Přejít na:  
Založeno na phpBB® Forum Software © phpBB Group
Český překlad – phpBB.cz