JiFFI :: Jaguar File Format Interchanger

Status: released


C O D E : G G N

T E S T I N G : S H 3, N E O, R E M O W I L L I A M S


For Windows

JiFFI is a program to convert between the various homebrew formats of the Atari Jaguar and so much more. The formats it works with are:

    • COFF/ABS (generated by mac/aln and smac/sln)
    • BIN/BJL (headerless, popular because of the BJL mod for the Jaguar)
    • Jaguar Server (v2 and v3, special header produced by ST assemblers mostly)
    • ULS (the phenomenally easy CD creator for homebrews from Reboot!)
    • ROM

It also now preforms EVEN MOAR tasks and has better AI - check out the infos on V1.4:

Version 1.4 - 17-Oct-12 - changes the following:

  • Bug fixes:
    • Output dir in some cases could be blank when the user clicked "create".
    • All main form buttons are disabled when the user clicks "create" until everything is finished.
    • File size limits enforced: a binary loaded to RAM (such as COFF or BJL) can't be bigger than 2080768 bytes and a ROM can't be bigger than 6MB.
    • Small bug in the ROM detection code removed (would give false ROM positives of a random image).
    • When started from command line and run adress=0 and load address<>0, then run address is assumed equal to load address.
    • Conversion/creation routines rewritten. Noticable speed increase in ULS CD image creation.
  • File recognition.
      Most of the homebrew titles and ROMs are now recognised by JiFFI because the input file's CRC32 is calculated and checked against a database of known titles. Many thanks to Shamus for allowing the use of his CRC32 table from Virtual Jaguar :).
  • Patches support.
      JiFFI gives the user the option to modify known titles it recognises with patches. For the time being only 3 patches are available (infinite lives for Tempest 2000, rotary menu enabled on Tempest 2000 from the get go, steering patch for Checkered Flag) but the framework exists now for any others that surface. Note that for the time being patched images are not recognissed by JiFFI as they don't exist in its CRC32 table.
      When a file is open and recognised and there are patches for it, then the button "Title extra options" is enabled and there the user can select which patches to apply. Note that for the patches to take effect, either a new file has to be created (using the "create file(s)" button) or it has to be sent to the Jaguar via Sunkboard or BJL. The source file is never modified.
  • Skunkboard support.
      JiFFI now supports uploading the binary directly to a Skunkboard connected to the machine. Harmless Lion's jcp.exe is called with the right parameters depending on what the user requires. Some examples:
      • Flashing a ROM.
      • Uploading a homebrew.
      • Uploading a homebrew as ROM (converted on the fly by JiFFI and then uploaded).
      • Applying patches to a ROM and then flashing it (again, you don't need to create any file, conversion is done on the fly).
      Prior to uploading/flashing, JiFFI can send a command to the Skunkboard to reset the Jaguar. This is enabled by the respective check box next to the "send to Jaguar via Skunkboard" button
      As Harmless Lion has released everything Skunkboard related openly to the public, I have taken the liberty of including jcp.exe bundled inside JiFFI's archive. If this is not cool, contact me and I'll remove it. In any case keep jcp.exe in the folder JiFFI.Exe resides for the process to work. Finally, it is assumed that the Skunkboard driver is installed and working properly and the Skunkboard is connected to the PC and the Jaguar running prior to hitting "send" in JiFFI.
  • BJL support.
      JiFFI now supports uploading homebrews via Zerosquare's patched Lo_inp. This is included in the archive with permission from Zerosquare. You can switch on the 8bit uploader or turn off the switch command (similar to -n switch in lo_inp.exe). It is assumed that Lo_inp.exe and inpout32.dll are both inside the directory JiFFI.Exe resides.

Version 1.3 - 31-Aug-12 - changes the following:

- Some minor UI fixes:

- When ROM mode is enabled in undetected binaries, disable the unapplicable output buttons
- Some typos corrected
- Switching from ROM to BJL in "Treat undetected as" now enables and disables the appropriate output check boxes
- Potential crash when the about music was not found
- Newer style buttons now included (tested in Windows 7). Make sure jiffi.exe.manifest is in the same directory JiFFI resides.

- Output directory logic was slightly changed. Now the user can specify a default output directory instead of it being the same as the input directory. For this, a new check box was introduced to the user interface: "Generate output files in the source directory". This is on by default in order to mimic the pre-1.3 behaviour. When this box is unchecked then the "Output path" button is enabled and the user can then select the output directory.

- Configuration file. This is created when JiFFI exits and saves the output path and the state of the "Generate output files in the source directory". If a valid configuration file is found (jiffi.cnf) in the same directory JiFFI resides when it's run, then it is read and parsed.

- An "Overwrite all files" button was added (but not enabled by default). This simply suppresses warning messages when a destination file exists. Like the label of the check box says, use with CAUTION!

- Starting with this version JiFFI introduces a new experimental algorithm to detect binaries. Some games released in ROM format can actually be converted to homebrew formats as coff, bjl etc. The new detection algorithm uses heuristics to try to detect this and extract the binary for conversion to other formats. At the time of writing the algorithm is in early stages and might give out false positives. If this happens please get in touch with us! It will generally get better with future versions of JiFFI.

- Command line switches have been added, so JiFFI can now be added to a developer's build script, or can be used for batch conversion. The switches are:

-i Input filename. If you omit the path, JiFFI will assume the path it resides.
-o Output path. If omitted, JiFFI will assume the input file's path
-load Load address. If omitted, JiFFI will assume $4000 (unless the binary's format is known. In which case any value passed will be ignored.)
-run Run address. Ditto with Load address.
-rom Output a ROM file.
-bjl Output a BJL file (if possible).
-coff Output a COFF file (if possible).
-jagr2 Output a Jaguar server v2 file (if possible).
-jagr3 Output a Jaguar server v3 file (if possible).
-uls Output a ULS .cdi file (if possible).
-romh Output a headerless ROM file (if possible).
-j64 Output a J64 file (if possible).
-all Output all the above output formats
-treat-as-rom Treat undetected binaries as ROM (when applicable)
-overwrite Do not ask when destination file exists.

Commands can be entered in any order. Note that if the input file is detected as a ROM, only three valid ouput formats are available. Also note that for this version no output is printed to the console, so any error messages are displayed as dialog boxes. This will hopefully be fixed in a later version.
Some examples:

jiffi -i c:\binaries\input.bin -o c:\output -load 4000 -run 5000 -bjl -coff -rom
will open c:\binaries\input.bin, assume load and run addresses of 4000 and 5000 (however, if the file is detected as COFF, Jaguar server, ULS, JiFFI ROM or a plain ROM, these switches will be ignored), and then write BJL, COFF and JiFFI ROM files in c:\output

jiffi -all -i testfile.ext -overwrite
will open testfile.ext which must reside in the same folder JiFFI is run, assume the same directory for output, produce all possible output files and overwrite any existing file with the same name as those created.

Version 1.2 - 29-Jul-12 - changes the following:

- New ROM header code when creating ROM files out of coff/bjl/etc. Confirmed that works on EEPROMs (previous version exhibited weird behaviour) - special thanks to OMF for testing!

- Added code to detect a v1.1 ROM generated by JiFFI as well as v1.2.

- Fixed the detection code as it would not detect a headerless ROM created from coff/bjl/etc.

- Fixed a bug that would pad a 1mb ROM created from coff/bjl/etc to 2mb, a 2mb to 4mb (i.e. each time you ran JiFFI on a ROM file created by itself it would expand the file until the 4MB limit is reached. Not that anyone had tried this, but you never know :)

- Now the "treat undetected as" radio buttons are disabled when the program detects one of the known formats (hopefully making the UI a bit less confusing)

Q: What it's all about?

A: In case you haven't figured it out yet, this is a program to convert between the various homebrew formats of the Atari Jaguar. More specifically:
- COFF/ABS (generated by popular toolchains such as mac/aln and smac/sln)
- BIN/BJL (headerless, popular because of the BJL mod for the Jaguar)
- Jaguar Server (v2 and v3, special header produced by ST assemblers mostly)
- ULS (the phenomenally easy CD creator for homebrews from Reboot!)
- ROM (read below for more info)

Q: Why make such a program anyway?

A: Well, there are lots of reasons. Off the top of our heads:
- SH3 wanted to flash 2 homebrew titles on his Skunkboard and use it without lugging a pc with him to flash the games on the spot. To achieve this, GGN invented a (tiny) semi-automatic method to create a ROM file that booted the titles. We just thought it'd be a neat little program and expanded it further.
- We can't think of anything similar from what we've seen so far.
- With a few simple clicks, our collection increased 5-fold :P.
- There are thoughts for further development of this (again, read below for more info).

Q: Will this program run on my machine?

A: Sure, as long as it runs Windows. Theoretically it should run on all versions bigger or equal to 3.x. Unfortunately we've only been able to test on XP and 7. It probably runs under Wine in linux, but this is totally unconfirmed. Anyone is free to try and tell us though :).

Q: How do I use it?

A: Couldn't be more simple! (we hope so at least :)). Upon running, you can select the source file. If it's detected (apart from BIN/BJL), the loading and run address boxes are filled in automatically. In any other case you need to supply those addresses manually. The destination folder is assumed to be the same as the source's. If you want to change it, just click on "destination folder" and select the folder you want (make sure "Generate output fiels in the source directory" is unchcked). Then you want to select the output format(s) (yes, you can create multiple versions of the same file at once :)). Finally, simply press "create file(s)" and off it'll go!

(of course, if you ran the program you'd figure all of this in 5 seconds, but hey - it's a manual :D)

Q: When I run the program it complains it can't find GfaWin23.Ocx. What gives?

A: That's why we included it in the archive. Just make sure that it's in the same directory as the executable. Or, if you prefer, put it in your windows\system32 directory and forget its existence.

Q: So what's the deal with the ROM format? Can I use any rom file such as game dumps etc?

A: This is a special format that this program creates. It simply copies the program from cart space to RAM and runs it. So, trying to convert any other ROM file to, say, COFF, will simply produce something that won't work. If you're unsure, just open the ROM file in question - if the load/run address boxes get filled in, then you're good to go!

Q: So I used the program, and it produced a file that doesn't work. Now what?

A: Verify that the original file you use works (in emulators, a real Jaguar, whatever). If you're 100% positively sure about this, then you've most probably stumbled upon a bug, and we're sorry. You could mail us at info.reboot@gmail.com, attaching the file in question if possible, and we'll try to fix this.

Q: I have more questions! Can you help?

A: Sure, just mail us at the address above, we'll try to answer all!

Q: What's the future hold for this program?

A: Since v1.0 we've asked for feedback and suggestions regarding a more generic Jaguar file manager, but we have received no comments about this. Therefore we'll be adding functionality when and if we feel like it.

Q: What, an Atari 16/32 port?

A: Well, since the main program is written in GFA basic, the bulk of it is portable to the Atari 16/32 range of computers. So far only v1.0 has been ported to the ST, and if nobody requests for it there will probably not be any further work on it.


Yet another "Press the button" production out in the public, hope you find this small program useful!