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