git.y1.nz

gbdk-2020

GameBoy Development Kit
download: https://git.y1.nz/archives/gbdk.tar.gz
README | Files | Log | Refs | LICENSE

commit 629647e0fd152ed8ae9a1d344459fec73c4eac0d
parent a4811f9fcedc93b0b2e23070642381860a530ab4
Author: bbbbbr <bbbbbr@users.noreply.github.com>
Date:   Mon, 14 Nov 2022 15:39:31 -0800

Merge pull request #450 from bbbbbr/Example_sound_megaduck

Examples: Sound test: Compat function naming
Diffstat:
Mgbdk-lib/examples/gb/sound/sound.c53++++++++++++++++++++++++++++++++---------------------
1 file changed, 32 insertions(+), 21 deletions(-)

diff --git a/gbdk-lib/examples/gb/sound/sound.c b/gbdk-lib/examples/gb/sound/sound.c @@ -4,17 +4,28 @@ #include <stdio.h> -inline uint8_t nybble_swap_if_megaduck(uint8_t value) { +inline uint8_t translate_envelope(uint8_t value) { #ifdef MEGADUCK + // Mega Duck has nybbles swapped for NR12, NR22, NR42 audio envelope registers return ((uint8_t)(value << 4) | (uint8_t)(value >> 4)); #else return value; #endif } -inline uint8_t NR32_swap_volume_if_megaduck(uint8_t value) { +inline uint8_t translate_frequency(uint8_t value) { #ifdef MEGADUCK - // Translate NR32 volume. New Volume = ((0x00 - Volume) & 0x60) + // Mega Duck has nybbles swapped for NR43 frequency & randomness audio register + return ((uint8_t)(value << 4) | (uint8_t)(value >> 4)); + #else + return value; + #endif +} + +inline uint8_t translate_volume(uint8_t value) { + #ifdef MEGADUCK + // Mega Duck has bit values changed for NR32 volume register + // To translate the volume: New Volume = ((0x00 - Volume) & 0x60) // GB: Bits:6..5 : 00 = mute, 01 = 100%, 10 = 50%, 11 = 25% // MD: Bits:6..5 : 00 = mute, 11 = 100%, 10 = 50%, 01 = 25% return ((~(uint8_t)value) + 1u) & (uint8_t)0x60u; @@ -632,15 +643,15 @@ void update_value(uint8_t mode, uint8_t line, uint16_t value) break; case 5: // envInitialValue soundReg->mode1.envInitialValue = value; - NR12_REG = nybble_swap_if_megaduck( NR12() ); + NR12_REG = translate_envelope( NR12() ); break; case 6: // envMode soundReg->mode1.envMode = value; - NR12_REG = nybble_swap_if_megaduck( NR12() ); + NR12_REG = translate_envelope( NR12() ); break; case 7: // envNbSweep soundReg->mode1.envNbSweep = value; - NR12_REG = nybble_swap_if_megaduck( NR12() ); + NR12_REG = translate_envelope( NR12() ); break; case 8: // frequency case FREQUENCY: @@ -685,15 +696,15 @@ void update_value(uint8_t mode, uint8_t line, uint16_t value) break; case 2: // envInitialValue soundReg->mode2.envInitialValue = value; - NR22_REG = nybble_swap_if_megaduck( NR22() ); + NR22_REG = translate_envelope( NR22() ); break; case 3: // envMode soundReg->mode2.envMode = value; - NR22_REG = nybble_swap_if_megaduck( NR22() ); + NR22_REG = translate_envelope( NR22() ); break; case 4: // envNbStep soundReg->mode2.envNbStep = value; - NR22_REG = nybble_swap_if_megaduck( NR22() ); + NR22_REG = translate_envelope( NR22() ); break; case 5: // frequency case FREQUENCY: @@ -738,7 +749,7 @@ void update_value(uint8_t mode, uint8_t line, uint16_t value) break; case 2: // selOutputLevel soundReg->mode3.selOutputLevel = value; - NR32_REG = NR32_swap_volume_if_megaduck( NR32() ); + NR32_REG = translate_volume( NR32() ); break; case 3: // frequency case FREQUENCY: @@ -779,27 +790,27 @@ void update_value(uint8_t mode, uint8_t line, uint16_t value) break; case 1: // envInitialValue soundReg->mode4.envInitialValue = value; - NR42_REG = nybble_swap_if_megaduck( NR42() ); + NR42_REG = translate_envelope( NR42() ); break; case 2: // envMode soundReg->mode4.envMode = value; - NR42_REG = nybble_swap_if_megaduck( NR42() ); + NR42_REG = translate_envelope( NR42() ); break; case 3: // envNbStep soundReg->mode4.envNbStep = value; - NR42_REG = nybble_swap_if_megaduck( NR42() ); + NR42_REG = translate_envelope( NR42() ); break; case 4: // polyCounterFreq soundReg->mode4.polyCounterFreq = value; - NR43_REG = nybble_swap_if_megaduck( NR43() ); + NR43_REG = translate_frequency( NR43() ); break; case 5: // polyCounterStep soundReg->mode4.polyCounterStep = value; - NR43_REG = nybble_swap_if_megaduck( NR43() ); + NR43_REG = translate_frequency( NR43() ); break; case 6: // polyCounterDiv soundReg->mode4.polyCounterDiv = value; - NR43_REG = nybble_swap_if_megaduck( NR43() ); + NR43_REG = translate_frequency( NR43() ); break; case 7: // counter_ConsSel soundReg->mode4.counter_ConsSel = value; @@ -1067,24 +1078,24 @@ void main() soundReg = &s; NR10_REG = NR10(); NR11_REG = NR11(); - NR12_REG = nybble_swap_if_megaduck( NR12() ); + NR12_REG = translate_envelope( NR12() ); NR13_REG = NR13(); NR14_REG = NR14(); NR21_REG = NR21(); - NR22_REG = nybble_swap_if_megaduck( NR22() ); + NR22_REG = translate_envelope( NR22() ); NR23_REG = NR23(); NR24_REG = NR24(); NR30_REG = NR30(); NR31_REG = NR31(); - NR32_REG = NR32_swap_volume_if_megaduck( NR32() ); + NR32_REG = translate_volume( NR32() ); NR33_REG = NR33(); NR34_REG = NR34(); NR41_REG = NR41(); - NR42_REG = nybble_swap_if_megaduck( NR42() ); - NR43_REG = nybble_swap_if_megaduck( NR43() ); + NR42_REG = translate_envelope( NR42() ); + NR43_REG = translate_frequency( NR43() ); NR44_REG = NR44(); NR50_REG = NR50();

This webpage is intended to be an accessible preview of this repository. To get a fuller picture, clone it and use the git CLI.