Занимаясь переносом новых распаковщиков из ZXTune в xLook нашёл ошибку в коде распаковщика LZH:Если это старшая часть смещения то надо такКод:static std::size_t GetLZDistHi(uint_t data) { return data & 15; }Код:return (data & 15) << 8;
Действительно
Код:0023: AND #0F t=7 0025: LD B,A t=4 0026: RLD t=18 0028: SUB #05 t=7 002A: LD C,A t=4 002B: INC HL t=6 002C: PUSH HL t=11 002D: LD A,E t=4 002E: SUB (HL) t=7 002F: LD L,A t=4 0030: LD A,D t=4 0031: SBC A,B t=4 0032: LD H,A t=4 0033: DEC HL t=6 0034: DEC HL t=6 0035: LD B,#00 t=7 0037: LDIR t=16/21 0039: POP HL t=10
Ошибка не всегда проявляется. Только если есть старшая часть смещения.
Ещё обнаружилось что в модуле для распаковки ZXZIP только 2 алгоритма из трёх сделаны. В xZXZIP все методы поддержаны, оттуда можно код взять.
Ну да этот алгоритм в отличие от двух других в PKZIP отсутствует, больше взять неоткуда. А код вполне рабочий, без проблем даже в x64 скомпилировался. Все почему-то удивляются, а вот перенести никто не осилил.
Похожий способ переноса на другую платформу я видел в коде упаковщика Hrust2 для PC.
С любовью к вам, Yandex.Direct
Размещение рекламы на форуме способствует его дальнейшему развитию
Код на отлично сделан, всё понятно, без проблем перекинулись отсутствующие в xLook распаковщики CHARPRES, GAMEPACK, LZH, MEGALZ, PACK2, TURBOLZ. Сейчас ошибки отлавливаю.
Среди исходников ZXTune в примерах запакованных файлов два распаковываться как надо не хотят: dsq\win4096 и dsq\win16384. Похоже ошибка здесь в самих файлах а не в коде распаковщика.
В свою очередь встречный вопрос, в распаковщиках заимствованных из xLook/xZXZIP ошибки не встречались?
Помимо ZXZIP и HRiP существуют ещё два архиватора: LZ-Compressor by V.Gamazov и PKMARK by Michael Markowsky, не ли распаковщиков для них?
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)