pub struct Program {Show 35 fields
pub slot_selection: Selector<2>,
pub dual_keyboard: bool,
pub split_low_note: SplitNote,
pub split_high_note: SplitNote,
pub split_three_zones: bool,
pub split_two_zones: bool,
pub organ_pitch_stick: bool,
pub transpose_enabled: bool,
pub transpose: StageTranspose,
pub master_clock: MasterTempo,
pub organ_model: Selector<2>,
pub organ_b3_vibrato_mode: Selector<3>,
pub organ_b3_harmonic_third: bool,
pub organ_b3_decay_fast: bool,
pub organ_b3_volume_soft: bool,
pub organ_vox_vibrato_mode: Selector<2>,
pub organ_vox_vibrato_on: bool,
pub organ_farfisa_vibrato_mode: Selector<2>,
pub organ_farfisa_vibrato_on: bool,
pub piano_slot_detune: Selector<3>,
pub reverb_on: bool,
pub reverb_type: ReverbType,
pub reverb_amount: Level,
pub compressor_on: bool,
pub compressor_amount: Level,
pub rotary_speaker_on: bool,
pub rotary_speaker_source: Selector<2>,
pub rotary_speaker_drive: Level,
pub rotary_speaker_stop_mode: bool,
pub rotary_speaker_speed: RotorSpeed,
pub rotary_speaker_speed_wheel: MorphOf<1>,
pub rotary_speaker_speed_aftertouch: MorphOf<1>,
pub rotary_speaker_speed_ctrl_pedal: MorphOf<1>,
pub slot_a: Slot,
pub slot_b: Slot,
/* private fields */
}Expand description
The program-wide globals at the head of the body. Bits are MSB-first from body
byte 0 (0x2c in a type-1 file), so byte 0x02 bit 5 is bit 18.
Reads and writes byte-exactly. A read verifies the container checksum, gates
on KNOWN_VERSIONS, and range-checks every field; unclaimed bits survive a
re-encode verbatim. Placements from the community byte maps; values raw except
where those maps enumerate them. Inferred from specimens; not confirmed on
hardware.
Unclaimed bits, kept verbatim through a re-encode: 0..=15, 19, 30..=32, 39..=42, 51..=63, 66..=71, 78..=88, 92..=104, 108..=119, 123..=135, 170..=183.
The body’s map, in offset order:
| bytes | bits | field | type |
|---|---|---|---|
0x00..0x02 | 0..=15 | — | unclaimed |
0x02 bits 7..6 | 16..=17 | slot_selection | Selector<2> |
0x02 bit 5 | 18..=18 | dual_keyboard | bool |
0x02 bit 4 | 19..=19 | — | unclaimed |
0x02 bits 3..0 | 20..=23 | split_low_note | SplitNote |
0x03 bits 7..4 | 24..=27 | split_high_note | SplitNote |
0x03 bit 3 | 28..=28 | split_three_zones | bool |
0x03 bit 2 | 29..=29 | split_two_zones | bool |
0x03 bits 1..0; 0x04 bit 7 | 30..=32 | — | unclaimed |
0x04 bit 6 | 33..=33 | organ_pitch_stick | bool |
0x04 bit 5 | 34..=34 | transpose_enabled | bool |
0x04 bits 4..1 | 35..=38 | transpose | StageTranspose |
0x04 bit 0; 0x05 bits 7..5 | 39..=42 | — | unclaimed |
0x05 bits 4..0; 0x06 bits 7..5 | 43..=50 | master_clock | MasterTempo |
0x06 bits 4..0; 0x07 bits 7..0 | 51..=63 | — | unclaimed |
0x08 bits 7..6 | 64..=65 | organ_model | Selector<2> |
0x08 bits 5..0 | 66..=71 | — | unclaimed |
0x09 bits 7..5 | 72..=74 | organ_b3_vibrato_mode | Selector<3> |
0x09 bit 4 | 75..=75 | organ_b3_harmonic_third | bool |
0x09 bit 3 | 76..=76 | organ_b3_decay_fast | bool |
0x09 bit 2 | 77..=77 | organ_b3_volume_soft | bool |
0x09 bits 1..0; 0x0a bits 7..0; 0x0b bit 7 | 78..=88 | — | unclaimed |
0x0b bits 6..5 | 89..=90 | organ_vox_vibrato_mode | Selector<2> |
0x0b bit 4 | 91..=91 | organ_vox_vibrato_on | bool |
0x0b bits 3..0; 0x0c bits 7..0; 0x0d bit 7 | 92..=104 | — | unclaimed |
0x0d bits 6..5 | 105..=106 | organ_farfisa_vibrato_mode | Selector<2> |
0x0d bit 4 | 107..=107 | organ_farfisa_vibrato_on | bool |
0x0d bits 3..0; 0x0e bits 7..0 | 108..=119 | — | unclaimed |
0x0f bits 7..5 | 120..=122 | piano_slot_detune | Selector<3> |
0x0f bits 4..0; 0x10 bits 7..0 | 123..=135 | — | unclaimed |
0x11 bit 7 | 136..=136 | reverb_on | bool |
0x11 bits 6..4 | 137..=139 | reverb_type | ReverbType |
0x11 bits 3..0; 0x12 bits 7..5 | 140..=146 | reverb_amount | Level |
0x12 bit 4 | 147..=147 | compressor_on | bool |
0x12 bits 3..0; 0x13 bits 7..5 | 148..=154 | compressor_amount | Level |
0x13 bit 4 | 155..=155 | rotary_speaker_on | bool |
0x13 bits 3..2 | 156..=157 | rotary_speaker_source | Selector<2> |
0x13 bits 1..0; 0x14 bits 7..3 | 158..=164 | rotary_speaker_drive | Level |
0x14 bit 2 | 165..=165 | rotary_speaker_stop_mode | bool |
0x14 bit 1 | 166..=166 | rotary_speaker_speed | RotorSpeed |
0x14 bit 0 | 167..=167 | rotary_speaker_speed_wheel | MorphOf<1> |
0x15 bit 7 | 168..=168 | rotary_speaker_speed_aftertouch | MorphOf<1> |
0x15 bit 6 | 169..=169 | rotary_speaker_speed_ctrl_pedal | MorphOf<1> |
0x15 bits 5..0; 0x16 bits 7..0 | 170..=183 | — | unclaimed |
0x17..0x110 | 184..=2175 | slot_a | Slot |
0x110..0x209 | 2176..=4167 | slot_b | Slot |
Fields§
§slot_selection: Selector<2>Bits 16..=17 (byte 0x02, bits 7..6).
dual_keyboard: boolBits 18..=18 (byte 0x02, bit 5).
split_low_note: SplitNoteBits 20..=23 (byte 0x02, bits 3..0).
split_high_note: SplitNoteBits 24..=27 (byte 0x03, bits 7..4).
split_three_zones: boolBits 28..=28 (byte 0x03, bit 3).
split_two_zones: boolBits 29..=29 (byte 0x03, bit 2).
organ_pitch_stick: boolBits 33..=33 (byte 0x04, bit 6).
transpose_enabled: boolBits 34..=34 (byte 0x04, bit 5).
transpose: StageTransposeBits 35..=38 (byte 0x04, bits 4..1).
master_clock: MasterTempoBits 43..=50 (byte 0x05, bits 4..0; byte 0x06, bits 7..5).
organ_model: Selector<2>Bits 64..=65 (byte 0x08, bits 7..6).
organ_b3_vibrato_mode: Selector<3>Bits 72..=74 (byte 0x09, bits 7..5).
organ_b3_harmonic_third: boolBits 75..=75 (byte 0x09, bit 4).
organ_b3_decay_fast: boolBits 76..=76 (byte 0x09, bit 3).
organ_b3_volume_soft: boolBits 77..=77 (byte 0x09, bit 2).
organ_vox_vibrato_mode: Selector<2>Bits 89..=90 (byte 0x0b, bits 6..5).
organ_vox_vibrato_on: boolBits 91..=91 (byte 0x0b, bit 4).
organ_farfisa_vibrato_mode: Selector<2>Bits 105..=106 (byte 0x0d, bits 6..5).
organ_farfisa_vibrato_on: boolBits 107..=107 (byte 0x0d, bit 4).
piano_slot_detune: Selector<3>Bits 120..=122 (byte 0x0f, bits 7..5).
reverb_on: boolBits 136..=136 (byte 0x11, bit 7).
reverb_type: ReverbTypeBits 137..=139 (byte 0x11, bits 6..4).
reverb_amount: LevelBits 140..=146 (byte 0x11, bits 3..0; byte 0x12, bits 7..5).
compressor_on: boolBits 147..=147 (byte 0x12, bit 4).
compressor_amount: LevelBits 148..=154 (byte 0x12, bits 3..0; byte 0x13, bits 7..5).
rotary_speaker_on: boolBits 155..=155 (byte 0x13, bit 4).
rotary_speaker_source: Selector<2>Bits 156..=157 (byte 0x13, bits 3..2).
rotary_speaker_drive: LevelBits 158..=164 (byte 0x13, bits 1..0; byte 0x14, bits 7..3).
rotary_speaker_stop_mode: boolBits 165..=165 (byte 0x14, bit 2).
rotary_speaker_speed: RotorSpeedBits 166..=166 (byte 0x14, bit 1).
rotary_speaker_speed_wheel: MorphOf<1>Bits 167..=167 (byte 0x14, bit 0).
rotary_speaker_speed_aftertouch: MorphOf<1>Bits 168..=168 (byte 0x15, bit 7).
rotary_speaker_speed_ctrl_pedal: MorphOf<1>Bits 169..=169 (byte 0x15, bit 6).
slot_a: SlotSlot A — the first of the program’s two complete setups.
Bytes 0x17..0x110.
slot_b: SlotSlot B. Same type: the two are the same layout, and neither is
a copy of the other — slot_selection says which sounds.
Bytes 0x110..0x209.
Implementations§
Source§impl Program
impl Program
Sourcepub fn field_values(&self) -> Vec<FieldValue>
pub fn field_values(&self) -> Vec<FieldValue>
Every registered field’s current value, under its full path, in
declaration order — nested bodies inline where their field sits.
Describes the same fields as Self::field_specs, so callers may
zip the two positionally.
pub fn field_specs() -> Vec<FieldSpec>
Trait Implementations§
Source§impl Body for Program
impl Body for Program
Source§fn read<R: Read + Seek>(
r: &mut BodyReader<'_, R>,
_: &Header,
) -> Result<Self, Error>
fn read<R: Read + Seek>( r: &mut BodyReader<'_, R>, _: &Header, ) -> Result<Self, Error>
r, which is scoped to the body: position 0 is the first body
byte and BodyReader::len is known. header is for version gating and
location/aux interpretation, not for layout — the container already
consumed the header bytes.