From: Gwenole B. <gb...@di...> - 2002-04-06 01:01:11
|
Hi, > The decoding routine should be somewhere in the ELF part. Maybe you can > get > the parameters from there. OK, the ROM Trampoline code is generally located at rom_tmp + elf_offset + 0x100; I then dumped trampoline code of both v1.6 and v3.8 NewWorld ROMs. Searching for $0fee (dict_idx) is sucessful in both cases and the decompression routines are exactly the same. Besides, what you implemented in decode_lzss() turns out to exactly match that code in higher level language. ;-) I came up to the same solution with crf0 - crf2 propagation and partial redundancy elimination for run_mask computations. So, I am pretty sure the implementation is correct. There are some differences in the code preceding the call to the decompression routine betwen the above-mentioned ROMs. I have not looked at them in further details yet but I suspect some pattern is first applied to the uncompressed ROM area prior to decompressing it in the v3.8 ROM case? This would be weird or they probably compressed several hunks/resources independently ? That might explain why in newer ROMs (v3.x), strings|grep -i lzss yield more results than with v1.x ROMs. Bye, Gwenole |