# ROM export technical details ## instrument data TODO ## macro data read length, loop and then release (1 byte). if it is a 2-byte macro, read a dummy byte. then read data. ## binary command stream Furnace Command Stream, split version. ``` size | description -----|------------------------------------ 4 | "FCS\0" format magic 4 | channel count 4?? | pointers to channel data 1?? | preset delays | - 16 values 1?? | speed dial commands | - 16 values ??? | channel data ``` read command and values (if any). the list of commands follows. ``` hex | description ----|------------------------------------ 00 | note on: C-(-5) 01 | note on: C#(-5) 02 | note on: D-(-5) .. | ... b1 | note on: A-9 b2 | note on: A#9 b3 | note on: B-9 b4 | note on: null ----|------------------------------------ b5 | note off b6 | note off env b7 | env release b8 | instrument // (ins, force) be | panning // (left, right) c0 | pre porta // (inporta, isportaorslide) c2 | vibrato // (speed, depth) c3 | vibrato range // (range) c4 | vibrato shape // (shape) c5 | pitch // (pitch) c6 | arpeggio // (note1, note2) c7 | volume // (vol) c8 | vol slide // (amount, onetick) c9 | porta // (target, speed) ca | legato // (note) ----|------------------------------------ d0 | speed dial command 0 d1 | speed dial command 1 .. | ... df | speed dial command 15 ----|------------------------------------ e0 | preset delay 0 e1 | preset delay 1 .. | ... ef | preset delay 15 ----|------------------------------------ f4 | call symbol (16-bit index follows; only used internally) f5 | jump to sub-block (address follows) f6 | go to sub-block (32-bit offset follows) f7 | full command (command and data follows) f8 | go to sub-block (16-bit offset follows) f9 | return from sub-block fa | jump (address follows) fb | set tick rate (4 bytes) fc | wait (16-bit) fd | wait (8-bit) fe | wait one tick ff | stop ```