@@ -15,11 +15,11 @@ _zx0_Decompress:
1515; -----------------------------------------------------------------------------
1616
1717dzx0_turbo:
18- ld bc , -1 ; preserve default offset 1
19- ld (dzx0t_last_offset+1), bc
20- inc bc
21- ld a, $80
22- jr dzx0t_literals
18+ ld iy , -1 ; preserve default offset 1
19+ lea bc, iy + 2 ; ld bc, 1
20+ scf
21+ jr dzx0t_start
22+
2323dzx0t_new_offset:
2424 dec bc
2525 dec bc ; prepare negative offset
@@ -37,14 +37,15 @@ dzx0t_new_offset_skip:
3737 inc hl
3838 rr b ; last offset bit becomes first length bit
3939 rr c
40- ld (dzx0t_last_offset+1), bc ; preserve new offset
40+ push bc
41+ pop iy ; preserve new offset
4142 ld bc, 1 ; obtain length
4243 call nc, dzx0t_elias
4344 inc bc
4445dzx0t_copy:
4546 push hl ; preserve source
46- dzx0t_last_offset:
47- ld hl, 0 ; restore offset
47+ ; dzx0t_last_offset:
48+ lea hl, iy ; restore offset
4849 add hl, de ; calculate destination - offset
4950 ldir ; copy from offset
5051 pop hl ; restore source
@@ -54,6 +55,7 @@ dzx0t_literals:
5455 inc c ; obtain length
5556 add a, a
5657 jr nz, dzx0t_literals_skip
58+ dzx0t_start:
5759 ld a, (hl) ; load another group of 8 bits
5860 inc hl
5961 rla
@@ -71,6 +73,7 @@ dzx0t_literals_skip:
7173dzx0t_last_offset_skip:
7274 call nc, dzx0t_elias
7375 jr dzx0t_copy
76+
7477dzx0t_elias:
7578 add a, a ; interlaced Elias gamma coding
7679 rl c
0 commit comments