6 |
* mjander@users.sourceforge.net |
* mjander@users.sourceforge.net |
7 |
****************************************************************************/ |
****************************************************************************/ |
8 |
|
|
9 |
|
#ifndef _AU88X0_A3D_H |
10 |
|
#define _AU88X0_A3D_H |
11 |
|
|
12 |
|
|
13 |
|
#ifdef __cplusplus |
14 |
|
extern "C" |
15 |
|
{ |
16 |
|
#endif |
17 |
|
|
18 |
|
#define HRTF_SZ 0x38 |
19 |
|
#define DLINE_SZ 0x28 |
20 |
|
|
21 |
typedef struct { |
typedef struct { |
22 |
ulong this00; // CAsp4hwIO |
void *vortex; // Formerly CAsp4HwIO*, now vortex_t*. |
23 |
ulong this04; |
unsigned int source; /* this_04 */ |
24 |
ulong this08; // A3D module Index |
unsigned int slice; /* this_08 */ |
25 |
|
} a3dsrc_t; |
26 |
} CA3dSourceHw_t; |
|
27 |
|
|
28 |
|
|
29 |
|
/* 3D parameter structs */ |
30 |
|
typedef unsigned short int a3d_Hrtf_t[HRTF_SZ]; |
31 |
|
typedef unsigned short int a3d_ItdDline_t[DLINE_SZ]; |
32 |
|
typedef unsigned short int a3d_atmos_t[5]; |
33 |
|
typedef unsigned short int a3d_LRGains_t[2]; |
34 |
|
typedef unsigned short int a3d_Itd_t[2]; |
35 |
|
|
36 |
|
typedef struct { |
37 |
|
a3d_atmos_t atmos_target; |
38 |
|
a3d_atmos_t atmos_current; |
39 |
|
a3d_Hrtf_t hrtf_target[2]; |
40 |
|
a3d_Hrtf_t hrtf_current[2]; |
41 |
|
a3d_ItdDline_t dline; |
42 |
|
a3d_LRGains_t lrgains; |
43 |
|
a3d_Itd_t itd_target; |
44 |
|
a3d_Itd_t itd_current; |
45 |
|
unsigned short gainL; |
46 |
|
unsigned short gainR; |
47 |
|
} a3d_params_t; |
48 |
|
|
49 |
|
/* First Register bank */ |
50 |
|
#define A3D_A_HrtfCurrent 0x18000 /* 56 ULONG */ |
51 |
|
#define A3D_A_GainCurrent 0x180E0 |
52 |
|
#define A3D_A_GainTarget 0x180E4 |
53 |
|
#define A3D_A_A12Current 0x180E8 /* Atmospheric current. */ |
54 |
|
#define A3D_A_A21Target 0x180EC /* Atmospheric target */ |
55 |
|
#define A3D_A_B01Current 0x180F0 /* Atmospheric current */ |
56 |
|
#define A3D_A_B10Target 0x180F4 /* Atmospheric target */ |
57 |
|
#define A3D_A_B2Current 0x180F8 /* Atmospheric current */ |
58 |
|
#define A3D_A_B2Target 0x180FC /* Atmospheric target */ |
59 |
|
#define A3D_A_HrtfTarget 0x18100 /* 56 ULONG */ |
60 |
|
#define A3D_A_ITDCurrent 0x181E0 |
61 |
|
#define A3D_A_ITDTarget 0x181E4 |
62 |
|
#define A3D_A_HrtfDelayLine 0x181E8 /* 56 ULONG */ |
63 |
|
#define A3D_A_ITDDelayLine 0x182C8 /* 45 ULONG */ |
64 |
|
#define A3D_A_HrtfTrackTC 0x1837C /* Time Constants */ |
65 |
|
#define A3D_A_GainTrackTC 0x18380 |
66 |
|
#define A3D_A_CoeffTrackTC 0x18384 |
67 |
|
#define A3D_A_ITDTrackTC 0x18388 |
68 |
|
#define A3D_A_x1 0x1838C |
69 |
|
#define A3D_A_x2 0x18390 |
70 |
|
#define A3D_A_y1 0x18394 |
71 |
|
#define A3D_A_y2 0x18398 |
72 |
|
#define A3D_A_HrtfOutL 0x1839C |
73 |
|
#define A3D_A_HrtfOutR 0x183A0 |
74 |
|
#define A3D_A_TAIL 0x183A4 |
75 |
|
|
76 |
|
/* Second register bank */ |
77 |
|
#define A3D_B_HrtfCurrent 0x19000 /* 56 ULONG */ |
78 |
|
#define A3D_B_GainCurrent 0x190E0 |
79 |
|
#define A3D_B_GainTarget 0x190E4 |
80 |
|
#define A3D_B_A12Current 0x190E8 |
81 |
|
#define A3D_B_A21Target 0x190EC |
82 |
|
#define A3D_B_B01Current 0x190F0 |
83 |
|
#define A3D_B_B10Target 0x190F4 |
84 |
|
#define A3D_B_B2Current 0x190F8 |
85 |
|
#define A3D_B_B2Target 0x190FC |
86 |
|
#define A3D_B_HrtfTarget 0x19100 /* 56 ULONG */ |
87 |
|
#define A3D_B_ITDCurrent 0x191E0 |
88 |
|
#define A3D_B_ITDTarget 0x191E4 |
89 |
|
#define A3D_B_HrtfDelayLine 0x191E8 /* 56 ULONG */ |
90 |
|
#define A3D_B_TAIL 0x192C8 |
91 |
|
|
92 |
|
/* There are 4 slices, 4 a3d each = 16 a3d sources. */ |
93 |
|
#define A3D_SLICE_BANK_A 0x18000 /* 4 sources */ |
94 |
|
#define A3D_SLICE_BANK_B 0x19000 /* 4 sources */ |
95 |
|
#define A3D_SLICE_VDBDest 0x19C00 /* 8 ULONG */ |
96 |
|
#define A3D_SLICE_VDBSource 0x19C20 /* 4 ULONG */ |
97 |
|
#define A3D_SLICE_ABReg 0x19C30 |
98 |
|
#define A3D_SLICE_CReg 0x19C34 |
99 |
|
#define A3D_SLICE_Control 0x19C38 |
100 |
|
#define A3D_SLICE_DebugReserved 0x19C3c /* Dangerous! */ |
101 |
|
#define A3D_SLICE_Pointers 0x19C40 /* 4 ULONG */ |
102 |
|
#define A3D_SLICE_TAIL 0x1A000 |
103 |
|
|
104 |
|
|
105 |
|
/* Address generator macro. */ |
106 |
|
#define a3d_addr(slice,source,reg) ((slice<<0xf)+(source<<0xd)+reg) |
107 |
|
|
108 |
|
#ifdef __cplusplus |
109 |
|
} |
110 |
|
#endif |
111 |
|
|
112 |
short A3dHrirZeros[0x1C] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; |
#endif /* _AU88X0_A3D_H */ |
|
short A3dItdDlineZeros[0x16] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; |
|
|
short A3dHrirImpulse[0x1c] = {7FFFh,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; |
|