aboutsummaryrefslogtreecommitdiff
path: root/libpsn00b/include/psxspu.h
diff options
context:
space:
mode:
authorspicyjpeg <thatspicyjpeg@gmail.com>2022-10-23 15:03:16 +0200
committerspicyjpeg <thatspicyjpeg@gmail.com>2022-10-23 15:03:16 +0200
commit5f25c0bf306d316c87fca9d3fe160d6661be230d (patch)
tree399317390f789c0a9f4a9f5a342ca8233cb1b313 /libpsn00b/include/psxspu.h
parentb1632d7df0e840692612461a80d0e05d6a3228ed (diff)
downloadpsn00bsdk-5f25c0bf306d316c87fca9d3fe160d6661be230d.tar.gz
Library bugfixes and additions, _sdk_log_inner() removal
Diffstat (limited to 'libpsn00b/include/psxspu.h')
-rw-r--r--libpsn00b/include/psxspu.h22
1 files changed, 18 insertions, 4 deletions
diff --git a/libpsn00b/include/psxspu.h b/libpsn00b/include/psxspu.h
index cf78e3d..7858e88 100644
--- a/libpsn00b/include/psxspu.h
+++ b/libpsn00b/include/psxspu.h
@@ -73,6 +73,20 @@ typedef struct _SpuCommonAttr {
SpuExtAttr cd, ext;
} SpuCommonAttr;
+/* Macros */
+
+#define getSPUAddr(addr) ((uint16_t) (((addr) + 7) / 8))
+#define getSPUSampleRate(rate) ((uint16_t) (((rate) * (1 << 12)) / 44100))
+
+#define getSPUADSR(ar, dr, sr, rr, sl) ( \
+ (sl) | \
+ ((dr) << 4) | \
+ ((ar) << 8) | \
+ ((rr) << 16) | \
+ ((sr) << 22) | \
+ (1 << 30) \
+)
+
/* "Useless" macros for official SDK compatibility */
#define SpuSetCommonMasterVolume(left, right) \
@@ -87,18 +101,18 @@ typedef struct _SpuCommonAttr {
((enable) ? (SPU_CTRL |= 0x0002) : (SPU_CTRL &= 0xfffd))
#define SpuSetReverbAddr(addr) \
- (SPU_REVERB_ADDR = ((addr) + 7) / 8)
+ (SPU_REVERB_ADDR = getSPUAddr(addr))
#define SpuSetIRQAddr(addr) \
- (SPU_IRQ_ADDR = ((addr) + 7) / 8)
+ (SPU_IRQ_ADDR = getSPUAddr(addr))
#define SpuSetVoiceVolume(ch, left, right) \
(SPU_CH_VOL_L(ch) = (left), SPU_CH_VOL_R(ch) = (right))
#define SpuSetVoicePitch(ch, pitch) \
(SPU_CH_FREQ(ch) = (pitch))
#define SpuSetVoiceStartAddr(ch, addr) \
- (SPU_CH_ADDR(ch) = ((addr) + 7) / 8)
+ (SPU_CH_ADDR(ch) = getSPUAddr(addr))
#define SpuSetVoiceADSR(ch, ar, dr, sr, rr, sl) \
- (SPU_CH_ADSR(ch) = ((sl)) | ((dr) << 4) | ((ar) << 8) | ((rr) << 16) | ((sr) << 22) | (1 << 30))
+ (SPU_CH_ADSR(ch) = getSPUADSR(ar, dr, sr, rr, sl))
#define SpuSetKey(enable, voice_bit) \
((enable) ? (SPU_KEY_ON = (voice_bit)) : (SPU_KEY_OFF = (voice_bit)))