Data elements are stored low byte first (little-endian). All integer fields are
unsigned.

ISX File
===============================================================================
Type        Field            Note
-------------------------------------------------------------------------------
Header      Header           May not be present: check for Identifier
Record[]    Records          ISX file records
===============================================================================

Header (32 bytes)
===============================================================================
Type        Field            Note
-------------------------------------------------------------------------------
u24         Identifier       0x585349 ("ISX" in ASCII)
u8[29]      Memo             Arbitrary? Contains version/author text in ASCII
===============================================================================

Record
===============================================================================
Type        Field            Note
-------------------------------------------------------------------------------
u8          Type             Record type:
                               0x01: Code   (SNES)
                               0x03: Range  (SNES)
                               0x04: Symbol (SNES)
                               0x11: Code   (Virtual Boy)
                               0x13: Range  (Virtual Boy)
                               0x14: Symbol (Virtual Boy)
                               0x20: System (undocumented)
                               0x21: System (undocumented)
                               0x22: System (undocumented)
u8[*]       Fields           Format depends on Type
===============================================================================

Record.0x01 - Code (SNES)
===============================================================================
Type        Field            Note
-------------------------------------------------------------------------------
u8          Type             0x01
u8          Bank             Cartridge bank number
u8          BankHigh         Only present if Bank >= 0x80
u16         Address          CPU bus address
u16         DataLength       Number of bytes in Data
u8[*]       Data             Actual code bytes
===============================================================================

Record.0x03 - Range (SNES)
===============================================================================
Type        Field            Note
-------------------------------------------------------------------------------
u8          Type             0x03
u16         Count            Number of ranges
Range[*]    Ranges           Count elements
  u8          Bank           Cartridge bank number
  u16         StartAddress   Lowest CPU bus address
  u16         EndAddress     Highest CPU bus address
  u8          RangeType      See: Range Types
===============================================================================

Record.0x04 - Symbol (SNES)
===============================================================================
Type        Field            Note
-------------------------------------------------------------------------------
u8          Type             0x04
u16         Count            Number of symbols
Symbol[*]   Symbols          Count elements
  u8          NameLength     Number of bytes in Name
  u8[*]       Name           Symbol name
  u8          Flags          Undocumented
  u8          Bank           Cartridge bank number
  u16         Address        CPU bus address
===============================================================================

Record.0x11 - Code (Virtual Boy)
===============================================================================
Type        Field            Note
-------------------------------------------------------------------------------
u8          Type             0x11
u32         Address          CPU bus address
u32         DataLength       Number of bytes in Data
u8[*]       Data             Actual code bytes
===============================================================================

Record.0x13 - Range (Virtual Boy)
===============================================================================
Type        Field            Note
-------------------------------------------------------------------------------
u8          Type             0x13
u16         Count            Number of ranges
Range[*]    Ranges           Count elements
  u32         StartAddress   Lowest CPU bus address
  u32         EndAddress     Highest CPU bus address
  u8          RangeType      See: Range Types
===============================================================================

Record.0x14 - Symbol (Virtual Boy)
===============================================================================
Type        Field            Note
-------------------------------------------------------------------------------
u8          Type             0x14
u16         Count            Number of symbols
Symbol[*]   Symbols          Count elements
  u8          NameLength     Number of bytes in Name
  u8[*]       Name           Symbol name
  u16         Flags          Undocumented
  u32         Address        CPU bus address
===============================================================================

Record.0x20, 0x21, 0x22 - System
===============================================================================
Type        Field            Note
-------------------------------------------------------------------------------
u8          Type             0x20, 0x21 or 0x22
u32         DataLength       Number of bytes in Data
u8[*]       Data             Debug data bytes
===============================================================================

Range Types
-----------
0x41 ('A')   8-bit integer (.db), string
0x42 ('B')   8-bit integer (.db), numeric
0x43 ('C')   Compiled C code
0x44 ('D')   16-bit integer (.dd, high byte first)
0x45 ('E')   65C816 code (8-bit accumulator, 8-bit index)
0x46 ('F')   65C816 code (8-bit accumulator, 16-bit index)
0x47 ('G')   65C816 code (16-bit accumulator, 8-bit index)
0x48 ('H')   65C816 code (16-bit accumulator, 16-bit index)
0x4C ('L')   32-bit integer (.dl SNES, .dw Virtual Boy, low byte first)
0x53 ('S')   Size reservation, as in .bss allocation (.ds)
0x57 ('W')   16-bit integer (.dw SNES, .dh Virtual Boy, low byte first)