summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBad Diode <bd@badd10de.dev>2021-05-10 16:15:56 +0200
committerBad Diode <bd@badd10de.dev>2021-05-10 16:15:56 +0200
commitc3bf09e440a479e027d06a062379a5c57ce69656 (patch)
tree8c7fbace6b2f04381b04029a3e580060c4db4904
parent269f2326171982912f50c2b6ef0cd272ec3c0108 (diff)
downloadgba-experiments-c3bf09e440a479e027d06a062379a5c57ce69656.tar.gz
gba-experiments-c3bf09e440a479e027d06a062379a5c57ce69656.zip
Handle odd even nibbles on channel 2 wave adjustment
-rw-r--r--src/sequencer.c59
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