Вектор-06Ц/Сжатие данных: различия между версиями
Nzeemin (обсуждение | вклад) Нет описания правки |
Nzeemin (обсуждение | вклад) Нет описания правки |
||
Строка 1: | Строка 1: | ||
{{ДИ|Источник=Форум https://zx-pk.ru/forums/55-vektor.html}} | |||
Собрание распаковщиков различных форматов. | Собрание распаковщиков различных форматов. | ||
Строка 244: | Строка 246: | ||
https://github.com/ivagorRetrocomp/DeLZSA/tree/main/8080 | https://github.com/ivagorRetrocomp/DeLZSA/tree/main/8080 | ||
[[Категория:Вектор-06Ц]] |
Версия от 00:48, 28 сентября 2022
Данный материал защищён авторскими правами!
Использование материала заявлено как добросовестное, исключительно для образовательных некоммерческих целей. Источник: Форум https://zx-pk.ru/forums/55-vektor.html |
Собрание распаковщиков различных форматов.
ZX0 / ZX1 / ZX2
https://github.com/ivagorRetrocomp/DeZX
Быстрый упаковщик для ZX0: https://github.com/emmanuel-marty/salvador
https://github.com/ivagorRetrocomp/DeZX/blob/main/ZX0/8080/OLD_V1/dzx0_CLASSIC.asm
; ----------------------------------------------------------------------------- ; ZX0 8080 decoder by Ivan Gorodetsky - OLD FILE FORMAT v1 ; Based on ZX0 z80 decoder by Einar Saukas ; v7 (2022-04-30) - 92 bytes forward / 94 bytes backward (source address now in DE, slightly faster) ; ----------------------------------------------------------------------------- ; Parameters (forward): ; DE: source address (compressed data) ; BC: destination address (decompressing) ; ; Parameters (backward): ; DE: last source address (compressed data) ; BC: last destination address (decompressing) ; ----------------------------------------------------------------------------- ; compress forward with <-c> option (<-classic> for salvador) ; ; compress backward with <-b -c> options (<-b -classic> for salvador) ; ; Compile with The Telemark Assembler (TASM) 3.2 ; ----------------------------------------------------------------------------- ;#define BACKWARD #ifdef BACKWARD #define NEXT_HL dcx h #define NEXT_DE dcx d #define NEXT_BC dcx b #else #define NEXT_HL inx h #define NEXT_DE inx d #define NEXT_BC inx b #endif dzx0: #ifdef BACKWARD lxi h,1 push h dcr l #else lxi h,0FFFFh push h inx h #endif mvi a,080h dzx0_literals: call dzx0_elias call dzx0_ldir jc dzx0_new_offset call dzx0_elias dzx0_copy: xchg xthl push h dad b xchg call dzx0_ldir xchg pop h xthl xchg jnc dzx0_literals dzx0_new_offset: call dzx0_elias #ifdef BACKWARD inx sp inx sp dcr h rz dcr l push psw mov a,l #else mov h,a pop psw xra a sub l rz push h #endif rar\ mov h,a ldax d rar\ mov l,a NEXT_DE #ifdef BACKWARD inx h #endif xthl mov a,h lxi h,1 #ifdef BACKWARD cc dzx0_elias_backtrack #else cnc dzx0_elias_backtrack #endif inx h jmp dzx0_copy dzx0_elias: inr l dzx0_elias_loop: add a jnz dzx0_elias_skip ldax d NEXT_DE ral dzx0_elias_skip: #ifdef BACKWARD rnc #else rc #endif dzx0_elias_backtrack: dad h add a jnc dzx0_elias_loop jmp dzx0_elias dzx0_ldir: push psw dzx0_ldir1: ldax d stax b NEXT_DE NEXT_BC dcx h mov a,h ora l jnz dzx0_ldir1 pop psw add a ret .end
ZX7 mini
https://github.com/svofski/bazis-bbstro/tree/master/zx7mini
ZX7
https://zx-pk.ru/threads/9532-vektor-06ts-sredstva-razrabotki.html?p=983364&viewfull=1#post983364
; ----------------------------------------------------------------------------- ; ZX7 decoder by Einar Saukas, Antonio Villena & Metalbrain ; ----------------------------------------------------------------------------- ; Parameters: ; HL: source address (compressed data) ; DE: destination address (decompressing) ; ----------------------------------------------------------------------------- ; 8080 version - Ivan Gorodetsky, 2018 ; 104 bytes - single-use ; 109 bytes - reusable dzx7_standard: ;следующие две строки не нужны при одноразовом использовании распаковщика ; mvi a,80h ; sta dzx7s_next_bit+1 dzx7s_copy_byte_loop: mov a,m stax d inx h inx d dzx7s_main_loop: call dzx7s_next_bit jnc dzx7s_copy_byte_loop ; next bit indicates either literal or sequence ; determine number of bits used for length (Elias gamma coding) push d lxi b,0 mov d,b dzx7s_len_size_loop: inr d call dzx7s_next_bit jnc dzx7s_len_size_loop ; determine length dzx7s_len_value_loop: cnc dzx7s_next_bit mov a,c\ ral\ mov c,a mov a,b\ ral\ mov b,a jc dzx7s_exit dcr d jnz dzx7s_len_value_loop inx b ; determine offset mov a,m\ stc\ ral\ mov e,a inx h jnc dzx7s_offset_end mvi d,10h dzx7s_rld_next_bit: call dzx7s_next_bit mov a,d\ ral\ mov d,a jnc dzx7s_rld_next_bit mvi a,1\ add d\ rar\ mov d,a dzx7s_offset_end: mov a,e\ rar\ mov e,a ; copy previous sequence xthl xchg mov a,e\ sbb l\ mov l,a mov a,d\ sbb h\ mov h,a push psw ldir: mov a,m stax d inx h inx d dcx b mov a,b ora c jnz ldir pop psw dzx7s_exit: pop h jnc dzx7s_main_loop dzx7s_next_bit: mvi a,80h add a sta dzx7s_next_bit+1 rnz mov a,m inx h ral sta dzx7s_next_bit+1 ret .end
UCL NRV2d
https://github.com/usr38259/nrv2d-i80