diff options
author | Bad Diode <bd@badd10de.dev> | 2021-05-10 16:15:56 +0200 |
---|---|---|
committer | Bad Diode <bd@badd10de.dev> | 2021-05-10 16:15:56 +0200 |
commit | c3bf09e440a479e027d06a062379a5c57ce69656 (patch) | |
tree | 8c7fbace6b2f04381b04029a3e580060c4db4904 | |
parent | 269f2326171982912f50c2b6ef0cd272ec3c0108 (diff) | |
download | gba-experiments-c3bf09e440a479e027d06a062379a5c57ce69656.tar.gz gba-experiments-c3bf09e440a479e027d06a062379a5c57ce69656.zip |
Handle odd even nibbles on channel 2 wave adjustment
-rw-r--r-- | src/sequencer.c | 59 |
1 files 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) { | |||
1256 | } | 1256 | } |
1257 | } | 1257 | } |
1258 | } else if (channel_selection_loc == 2) { | 1258 | } else if (channel_selection_loc == 2) { |
1259 | // TODO:... | ||
1260 | if (key_pressed(KEY_LEFT)) { | 1259 | if (key_pressed(KEY_LEFT)) { |
1261 | param_selection_loc -= 1; | 1260 | param_selection_loc = MAX(param_selection_loc - 1, 0); |
1262 | // int max_param = 6; | ||
1263 | // if (channel_selection_loc == 1) { | ||
1264 | // max_param = 3; | ||
1265 | // } | ||
1266 | // if (param_selection_loc == 0) { | ||
1267 | // param_selection_loc = max_param; | ||
1268 | // } else { | ||
1269 | // param_selection_loc = MAX(param_selection_loc - 1, 0); | ||
1270 | // } | ||
1271 | } | 1261 | } |
1272 | if (key_pressed(KEY_RIGHT)) { | 1262 | if (key_pressed(KEY_RIGHT)) { |
1273 | param_selection_loc += 1; | 1263 | param_selection_loc = MIN(param_selection_loc + 1, 64); |
1274 | // int max_param = 6; | ||
1275 | // if (channel_selection_loc == 1) { | ||
1276 | // max_param = 3; | ||
1277 | // } | ||
1278 | // if (param_selection_loc == max_param) { | ||
1279 | // param_selection_loc = 0; | ||
1280 | // } else { | ||
1281 | // param_selection_loc = MIN(param_selection_loc + 1, max_param); | ||
1282 | // } | ||
1283 | } | 1264 | } |
1284 | if (key_pressed(KEY_R)) { | 1265 | if (key_pressed(KEY_R) || key_pressed(KEY_L)) { |
1285 | sequences[2][trig_selection_loc].wave_a[param_selection_loc] += 1; | 1266 | int odd = param_selection_loc & 0x1; |
1286 | } | 1267 | int increment; |
1287 | if (key_pressed(KEY_L)) { | 1268 | if (key_pressed(KEY_R)) { |
1288 | sequences[2][trig_selection_loc].wave_a[param_selection_loc] -= 1; | 1269 | increment = 1; |
1270 | } else { | ||
1271 | increment = -1; | ||
1272 | } | ||
1273 | // Wave: AA BB CC DD ... | ||
1274 | // ^^ | ||
1275 | // |`- odd | ||
1276 | // `-- even | ||
1277 | if (param_selection_loc < 32) { | ||
1278 | u8 byte_number = param_selection_loc >> 1; | ||
1279 | u8 byte = sequences[2][trig_selection_loc].wave_a[byte_number]; | ||
1280 | if (odd) { | ||
1281 | byte = (~0xF & byte) | (byte + increment) & 0xF; | ||
1282 | } else { | ||
1283 | byte = (0xF & byte) | (((byte >> 4) + increment) & 0xF) << 4; | ||
1284 | } | ||
1285 | sequences[2][trig_selection_loc].wave_a[byte_number] = byte; | ||
1286 | } else { | ||
1287 | u8 byte_number = (param_selection_loc - 32) >> 1; | ||
1288 | u8 byte = sequences[2][trig_selection_loc].wave_b[byte_number]; | ||
1289 | if (odd) { | ||
1290 | byte = (~0xF & byte) | (byte + increment); | ||
1291 | } else { | ||
1292 | byte = (0xF & byte) | ((byte >> 4) + increment) << 4; | ||
1293 | } | ||
1294 | sequences[2][trig_selection_loc].wave_b[byte_number] = byte; | ||
1295 | } | ||
1289 | } | 1296 | } |
1290 | } | 1297 | } |
1291 | 1298 | ||