From c3bf09e440a479e027d06a062379a5c57ce69656 Mon Sep 17 00:00:00 2001 From: Bad Diode Date: Mon, 10 May 2021 16:15:56 +0200 Subject: Handle odd even nibbles on channel 2 wave adjustment --- src/sequencer.c | 59 ++++++++++++++++++++++++++++++++------------------------- 1 file changed, 33 insertions(+), 26 deletions(-) diff --git a/src/sequencer.c b/src/sequencer.c index c09fb01..3f52963 100644 --- a/src/sequencer.c +++ b/src/sequencer.c @@ -1256,36 +1256,43 @@ handle_sequencer_input(void) { } } } else if (channel_selection_loc == 2) { - // TODO:... if (key_pressed(KEY_LEFT)) { - param_selection_loc -= 1; - // int max_param = 6; - // if (channel_selection_loc == 1) { - // max_param = 3; - // } - // if (param_selection_loc == 0) { - // param_selection_loc = max_param; - // } else { - // param_selection_loc = MAX(param_selection_loc - 1, 0); - // } + param_selection_loc = MAX(param_selection_loc - 1, 0); } if (key_pressed(KEY_RIGHT)) { - param_selection_loc += 1; - // int max_param = 6; - // if (channel_selection_loc == 1) { - // max_param = 3; - // } - // if (param_selection_loc == max_param) { - // param_selection_loc = 0; - // } else { - // param_selection_loc = MIN(param_selection_loc + 1, max_param); - // } + param_selection_loc = MIN(param_selection_loc + 1, 64); } - if (key_pressed(KEY_R)) { - sequences[2][trig_selection_loc].wave_a[param_selection_loc] += 1; - } - if (key_pressed(KEY_L)) { - sequences[2][trig_selection_loc].wave_a[param_selection_loc] -= 1; + if (key_pressed(KEY_R) || key_pressed(KEY_L)) { + int odd = param_selection_loc & 0x1; + int increment; + if (key_pressed(KEY_R)) { + increment = 1; + } else { + increment = -1; + } + // Wave: AA BB CC DD ... + // ^^ + // |`- odd + // `-- even + if (param_selection_loc < 32) { + u8 byte_number = param_selection_loc >> 1; + u8 byte = sequences[2][trig_selection_loc].wave_a[byte_number]; + if (odd) { + byte = (~0xF & byte) | (byte + increment) & 0xF; + } else { + byte = (0xF & byte) | (((byte >> 4) + increment) & 0xF) << 4; + } + sequences[2][trig_selection_loc].wave_a[byte_number] = byte; + } else { + u8 byte_number = (param_selection_loc - 32) >> 1; + u8 byte = sequences[2][trig_selection_loc].wave_b[byte_number]; + if (odd) { + byte = (~0xF & byte) | (byte + increment); + } else { + byte = (0xF & byte) | ((byte >> 4) + increment) << 4; + } + sequences[2][trig_selection_loc].wave_b[byte_number] = byte; + } } } -- cgit v1.2.1