Проапдейтить прошивку. Минимальная поддерживаемая версия- 2.2.
Вид для печати
Занимаясь переносом новых распаковщиков из 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.
Код на отлично сделан, всё понятно, без проблем перекинулись отсутствующие в 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, не ли распаковщиков для них?