There are a lot of program files in FFT. Why is anyone's guess, but for a long time I've thought it would be really useful to be able to scan various files for program code (ASM). The problem is, the MIPS disassemblers you find online assume big endian byte ordering.
Enter LEDecoder, my newest program, that will decode files with a little endian option. You just select the input/output files and have it do its thing. This'll let us find the ASM in any FFT file. The output is very similar to what you'd see in the disassembly portion of the pSX debugger.
LEDecoder basically means 'little endian decoder', but of course, I couldn't call it LEDecoder without including an LED. A software LED, perhaps. ...Well, okay, maybe it's just a filled in circle. But anyway, it indicates the status of the program by its color. Most of the time it'll go orange and then green quite quickly when it's told to process. It's fine to run another decode as long as the LED isn't orange.
Blue = Ready (Program start)
Red = Decode failed (Usually if the input file/path is invalid)
Green = Decode succeeded!
Orange = Processing
So, what would be an interesting target file to run the decoder on? Say... perhaps an effect (animation) file?
...Yup, they've got ASM in them. Might explain why some work one way and others work another regardless of the graphics/palette/what have you!EDIT:
Version 2 added to fix some problems with the decoder... It didn't recognize srav, jalr, or break. This uses the MassHexASM decoder, so anytime I update that, I have to update this, basically. New version is attached.EDIT:
Version 3 added:
* Fixed a problem where the program counter was incorrect, resulting in incorrect hex for branch instructions (thanks fdc)
* Used a save file dialog for the output file, so now you should be able to just type in output filenames.EDIT:
Version 4 added:
* When decoding, immediates will now properly show as signed or unsigned based on the instruction. These are the affected commands:
Unsigned: andi, ori, xori, sltiu
Signed: addi, addiu, sltiEDIT:
Version 5 added: Check the MassHexASM thread's original post for details. This now uses the same engine as MassHexASM. (A shared DLL, not just copied functions between binaries!)