Mercurial > hg > index.fcgi > lj > lj046-2players
view src/pin8gba_sound.h @ 0:c84446dfb3f5
initial add
author | paulo@localhost |
---|---|
date | Fri, 13 Mar 2009 00:39:12 -0700 |
parents | |
children |
line source
1 /*
2 * pin8gba_sound.h
3 * Header file for GBA sound registers
4 */
7 /* Copyright 2001-2006 Damian Yerrick
9 (insert zlib license here)
11 */
14 /* Why the funny register names?
16 The register names do not match the names in the official GBA
17 documentation. I choose the names that seem most logical to me.
18 In addition, I do slick macro tricks with the VRAM addresses for
19 maps and the like and with registers that control timers, DMA,
20 and backgrounds. The gba.h that comes with wintermute's libgba
21 incorporates some but not all of these tricks. In addition,
22 the names in gba.h for the sound registers aren't descriptive
23 at all.
25 */
27 #ifndef PIN8GBA_SOUND_H
28 #ifdef __cplusplus
29 extern "C" {
30 #endif
31 #define PIN8GBA_SOUND_H
34 #define DMGSNDCTRL (*(volatile u16 *)0x04000080)
35 #define DMGSNDCTRL_LVOL(x) (x)
36 #define DMGSNDCTRL_RVOL(x) ((x) << 4)
37 #define DMGSNDCTRL_LSQR1 0x0100
38 #define DMGSNDCTRL_LSQR2 0x0200
39 #define DMGSNDCTRL_LTRI 0x0400
40 #define DMGSNDCTRL_LNOISE 0x0800
41 #define DMGSNDCTRL_RSQR1 0x1000
42 #define DMGSNDCTRL_RSQR2 0x2000
43 #define DMGSNDCTRL_RTRI 0x4000
44 #define DMGSNDCTRL_RNOISE 0x8000
46 #define DSOUNDCTRL (*(volatile u16 *)0x04000082)
47 #define DSOUNDCTRL_DMG25 0x0000
48 #define DSOUNDCTRL_DMG50 0x0001
49 #define DSOUNDCTRL_DMG100 0x0002
50 #define DSOUNDCTRL_A50 0x0000
51 #define DSOUNDCTRL_A100 0x0004
52 #define DSOUNDCTRL_B50 0x0000
53 #define DSOUNDCTRL_B100 0x0008
54 #define DSOUNDCTRL_AR 0x0100
55 #define DSOUNDCTRL_AL 0x0200
56 #define DSOUNDCTRL_ATIMER(x) ((x) << 10)
57 #define DSOUNDCTRL_ARESET 0x0400
58 #define DSOUNDCTRL_BR 0x1000
59 #define DSOUNDCTRL_BL 0x2000
60 #define DSOUNDCTRL_BTIMER(x) ((x) << 14)
61 #define DSOUNDCTRL_BRESET 0x8000
63 #define SNDSTAT (*(volatile u16*)0x04000084)
64 #define SNDSTAT_SQR1 0x0001
65 #define SNDSTAT_SQR2 0x0002
66 #define SNDSTAT_TRI 0x0004
67 #define SNDSTAT_NOISE 0x0008
68 #define SNDSTAT_ENABLE 0x0080
70 #define SNDBIAS (*(volatile u16 *)0x04000088)
71 #define SETSNDRES(x) SNDBIAS = (SNDBIAS & 0x3fff) | (x << 14)
73 #define DSOUND_FIFOA (*(volatile u32 *)0x040000a0)
74 #define DSOUND_FIFOB (*(volatile u32 *)0x040000a4)
77 #define SQR1SWEEP (*(volatile u16 *)0x04000060)
78 #define SQR1SWEEP_OFF 0x0008
80 #define SQR1CTRL (*(volatile u16 *)0x04000062)
81 #define SQR2CTRL (*(volatile u16 *)0x04000068)
82 #define NOISECTRL (*(volatile u16 *)0x04000078)
83 #define SQR_DUTY(n) ((n) << 6)
84 #define SQR_VOL(n) ((n) << 12)
86 #define SQR1FREQ (*(volatile u16 *)0x04000064)
87 #define SQR2FREQ (*(volatile u16 *)0x0400006c)
88 #define TRIFREQ (*(volatile u16 *)0x04000074)
89 #define FREQ_HOLD 0x0000
90 #define FREQ_TIMED 0x4000
91 #define FREQ_RESET 0x8000
93 #define NOISEFREQ (*(volatile u16 *)0x0400007c)
94 #define NOISEFREQ_127 0x0008
95 #define NOISEFREQ_OCT(x) ((x) << 4)
97 #define TRICTRL (*(volatile u16 *)0x04000070)
98 #define TRICTRL_2X32 0x0000
99 #define TRICTRL_1X64 0x0020
100 #define TRICTRL_BANK(x) ((x) << 6)
101 #define TRICTRL_ENABLE 0x0080
103 #define TRILENVOL (*(volatile u16 *)0x04000072)
104 #define TRILENVOL_LEN(x) (256 - (x))
105 #define TRILENVOL_MUTE 0x0000
106 #define TRILENVOL_25 0x6000
107 #define TRILENVOL_50 0x4000
108 #define TRILENVOL_75 0x8000
109 #define TRILENVOL_100 0x2000
111 #define TRIWAVERAM ((volatile u32 *)0x04000090)
114 #ifdef __cplusplus
115 }
116 #endif
117 #endif