10 |
|
|
11 |
#include "au88x0_a3d.h" |
#include "au88x0_a3d.h" |
12 |
#include "au88x0_a3ddata.c" |
#include "au88x0_a3ddata.c" |
13 |
|
#include "au88x0_xtalk.h" |
14 |
#include "au88x0.h" |
#include "au88x0.h" |
15 |
|
|
16 |
void a3dsrc_SetTimeConsts(a3dsrc_t *a, short HrtfTrack, short ItdTrack, short GTrack, short CTrack) { |
void a3dsrc_SetTimeConsts(a3dsrc_t *a, short HrtfTrack, short ItdTrack, short GTrack, short CTrack) { |
17 |
vortex_t *vortex = (vortex_t*)a->vortex; |
vortex_t *vortex = (vortex_t*)(a->vortex); |
18 |
hwwrite(vortex->mmio, a3d_addr(a->slice, a->source, A3D_A_HrtfTrackTC), HrtfTrack); |
hwwrite(vortex->mmio, a3d_addr(a->slice, a->source, A3D_A_HrtfTrackTC), HrtfTrack); |
19 |
hwwrite(vortex->mmio, a3d_addr(a->slice, a->source, A3D_A_ITDTrackTC), ItdTrack); |
hwwrite(vortex->mmio, a3d_addr(a->slice, a->source, A3D_A_ITDTrackTC), ItdTrack); |
20 |
hwwrite(vortex->mmio, a3d_addr(a->slice, a->source, A3D_A_GainTrackTC), GTrack); |
hwwrite(vortex->mmio, a3d_addr(a->slice, a->source, A3D_A_GainTrackTC), GTrack); |
28 |
/* Atmospheric absorbtion. */ |
/* Atmospheric absorbtion. */ |
29 |
|
|
30 |
void a3dsrc_SetAtmosTarget(a3dsrc_t *a, short aa,short b,short c,short d,short e) { |
void a3dsrc_SetAtmosTarget(a3dsrc_t *a, short aa,short b,short c,short d,short e) { |
31 |
vortex_t *vortex = (vortex_t*)a->vortex; |
vortex_t *vortex = (vortex_t*)(a->vortex); |
|
//hwwrite(vortex->mmio, addr(0x190Ec, this04, this08), (e << 0x10) | d); |
|
32 |
hwwrite(vortex->mmio,a3d_addr(a->slice,a->source,A3D_B_A21Target),(e << 0x10) | d); |
hwwrite(vortex->mmio,a3d_addr(a->slice,a->source,A3D_B_A21Target),(e << 0x10) | d); |
|
//hwwrite(vortex->mmio, addr(0x190F4, this04, this08), (b << 0x10) | a); |
|
33 |
hwwrite(vortex->mmio,a3d_addr(a->slice,a->source,A3D_B_B10Target),(b << 0x10) | aa); |
hwwrite(vortex->mmio,a3d_addr(a->slice,a->source,A3D_B_B10Target),(b << 0x10) | aa); |
|
//hwwrite(vortex->mmio, addr(0x190FC, this04, this08), c); |
|
34 |
hwwrite(vortex->mmio,a3d_addr(a->slice,a->source,A3D_B_B2Target), c); |
hwwrite(vortex->mmio,a3d_addr(a->slice,a->source,A3D_B_B2Target), c); |
35 |
} |
} |
36 |
|
|
38 |
} |
} |
39 |
|
|
40 |
void a3dsrc_SetAtmosCurrent(a3dsrc_t *a, short aa,short b,short c,short d,short e) { |
void a3dsrc_SetAtmosCurrent(a3dsrc_t *a, short aa,short b,short c,short d,short e) { |
41 |
vortex_t *vortex = (vortex_t*)a->vortex; |
vortex_t *vortex = (vortex_t*)(a->vortex); |
42 |
hwwrite(vortex->mmio, a3d_addr(a->slice, a->source, A3D_B_A12Current), (e << 0x10) | d); |
hwwrite(vortex->mmio, a3d_addr(a->slice, a->source, A3D_B_A12Current), (e << 0x10) | d); |
43 |
hwwrite(vortex->mmio, a3d_addr(a->slice, a->source, A3D_B_B01Current), (b << 0x10) | aa); |
hwwrite(vortex->mmio, a3d_addr(a->slice, a->source, A3D_B_B01Current), (b << 0x10) | aa); |
44 |
hwwrite(vortex->mmio, a3d_addr(a->slice, a->source, A3D_B_B2Current), c); |
hwwrite(vortex->mmio, a3d_addr(a->slice, a->source, A3D_B_B2Current), c); |
45 |
} |
} |
46 |
|
|
47 |
void a3dsrc_GetAtmosCurrent(a3dsrc_t *a, short *aa, short *b, short *c, short *d, short *e) { |
void a3dsrc_GetAtmosCurrent(a3dsrc_t *a, short *bb01, short *ab01, short *b2, short *aa12, short *ba12) { |
48 |
vortex_t *vortex = (vortex_t*)a->vortex; |
vortex_t *vortex = (vortex_t*)(a->vortex); |
49 |
*d = hwread(vortex->mmio, a3d_addr(a->slice, a->source, A3D_A_A12Current)); |
*aa12 = hwread(vortex->mmio, a3d_addr(a->slice, a->source, A3D_A_A12Current)); |
50 |
*e = hwread(vortex->mmio, a3d_addr(a->slice, a->source, A3D_B_A12Current)); |
*ba12 = hwread(vortex->mmio, a3d_addr(a->slice, a->source, A3D_B_A12Current)); |
51 |
*b = hwread(vortex->mmio, a3d_addr(a->slice, a->source, A3D_A_B01Current)); |
*ab01 = hwread(vortex->mmio, a3d_addr(a->slice, a->source, A3D_A_B01Current)); |
52 |
*aa = hwread(vortex->mmio, a3d_addr(a->slice, a->source, A3D_B_B01Current)); |
*bb01 = hwread(vortex->mmio, a3d_addr(a->slice, a->source, A3D_B_B01Current)); |
53 |
*c = hwread(vortex->mmio, a3d_addr(a->slice, a->source, A3D_A_B2Current)); |
*b2 = hwread(vortex->mmio, a3d_addr(a->slice, a->source, A3D_A_B2Current)); |
54 |
} |
} |
55 |
|
|
56 |
void a3dsrc_SetAtmosState(a3dsrc_t *a, short aa,short b,short c,short d) { |
void a3dsrc_SetAtmosState(a3dsrc_t *a, short x1,short x2,short y1,short y2) { |
57 |
vortex_t *vortex = (vortex_t*)a->vortex; |
vortex_t *vortex = (vortex_t*)(a->vortex); |
58 |
hwwrite(vortex->mmio, a3d_addr(a->slice, a->source, A3D_A_x1), aa); |
hwwrite(vortex->mmio, a3d_addr(a->slice, a->source, A3D_A_x1), x1); |
59 |
hwwrite(vortex->mmio, a3d_addr(a->slice, a->source, A3D_A_x2), b); |
hwwrite(vortex->mmio, a3d_addr(a->slice, a->source, A3D_A_x2), x2); |
60 |
hwwrite(vortex->mmio, a3d_addr(a->slice, a->source, A3D_A_y1), c); |
hwwrite(vortex->mmio, a3d_addr(a->slice, a->source, A3D_A_y1), y1); |
61 |
hwwrite(vortex->mmio, a3d_addr(a->slice, a->source, A3D_A_y2), d); |
hwwrite(vortex->mmio, a3d_addr(a->slice, a->source, A3D_A_y2), y2); |
62 |
} |
} |
63 |
|
|
64 |
void a3dsrc_GetAtmosState(a3dsrc_t *a, short aa,short b,short c,short d) { |
void a3dsrc_GetAtmosState(a3dsrc_t *a, short *x1,short *x2,short *y1,short *y2) { |
65 |
|
|
66 |
} |
} |
67 |
|
|
68 |
|
|
69 |
/* HRTF */ |
/* HRTF */ |
70 |
|
|
71 |
void a3dsrc_SetHrtfTarget(a3dsrc_t *a, short const *aa, short const *b) { |
void a3dsrc_SetHrtfTarget(a3dsrc_t *a, a3d_Hrtf_t const aa, a3d_Hrtf_t const b) { |
72 |
vortex_t *vortex = (vortex_t*)a->vortex; |
vortex_t *vortex = (vortex_t*)(a->vortex); |
73 |
int i; |
int i; |
74 |
|
|
75 |
for (i=0; i<HRTF_SZ; i++) |
for (i=0; i<HRTF_SZ; i++) |
76 |
hwwrite(vortex->mmio, a3d_addr(a->slice, a->source, A3D_B_HrtfTarget + (i<<2)), (b[i]<<0x10) | aa[i]); |
hwwrite(vortex->mmio, a3d_addr(a->slice, a->source, A3D_B_HrtfTarget) + (i<<2), (b[i]<<0x10) | aa[i]); |
77 |
} |
} |
78 |
|
|
79 |
void a3dsrc_GetHrtfTarget(a3dsrc_t *a, short *aa, short *b) { |
void a3dsrc_GetHrtfTarget(a3dsrc_t *a, a3d_Hrtf_t aa, a3d_Hrtf_t b) { |
80 |
vortex_t *vortex = (vortex_t*)a->vortex; |
vortex_t *vortex = (vortex_t*)(a->vortex); |
81 |
int i; |
int i; |
82 |
|
|
83 |
for (i=0; i<HRTF_SZ; i++) |
for (i=0; i<HRTF_SZ; i++) |
86 |
b[i] = hwread(vortex->mmio, a3d_addr(a->slice, a->source, A3D_B_HrtfTarget + (i<<2))); |
b[i] = hwread(vortex->mmio, a3d_addr(a->slice, a->source, A3D_B_HrtfTarget + (i<<2))); |
87 |
} |
} |
88 |
|
|
89 |
void a3dsrc_SetHrtfCurrent(a3dsrc_t *a, short const *aa, short const *b) { |
void a3dsrc_SetHrtfCurrent(a3dsrc_t *a, a3d_Hrtf_t const aa, a3d_Hrtf_t const b) { |
90 |
vortex_t *vortex = (vortex_t*)a->vortex; |
vortex_t *vortex = (vortex_t*)(a->vortex); |
91 |
int i; |
int i; |
92 |
|
|
93 |
for (i=0; i<HRTF_SZ; i++) |
for (i=0; i<HRTF_SZ; i++) |
94 |
hwwrite(vortex->mmio, a3d_addr(a->slice, a->source, A3D_B_HrtfCurrent + (i<<2)), (b[i]<<0x10) | aa[i]); |
hwwrite(vortex->mmio, a3d_addr(a->slice, a->source, A3D_B_HrtfCurrent) + (i<<2), (b[i]<<0x10) | aa[i]); |
95 |
} |
} |
96 |
|
|
97 |
void a3dsrc_GetHrtfCurrent(a3dsrc_t *a, short *aa, short *b) { |
void a3dsrc_GetHrtfCurrent(a3dsrc_t *a, a3d_Hrtf_t aa, a3d_Hrtf_t b) { |
98 |
vortex_t *vortex = (vortex_t*)a->vortex; |
vortex_t *vortex = (vortex_t*)(a->vortex); |
99 |
int i; |
int i; |
100 |
|
|
101 |
for (i=0; i<HRTF_SZ; i++) |
for (i=0; i<HRTF_SZ; i++) |
104 |
b[i] = hwread(vortex->mmio, a3d_addr(a->slice, a->source, A3D_B_HrtfCurrent + (i<<2))); |
b[i] = hwread(vortex->mmio, a3d_addr(a->slice, a->source, A3D_B_HrtfCurrent + (i<<2))); |
105 |
} |
} |
106 |
|
|
107 |
void a3dsrc_SetHrtfState(a3dsrc_t *a, short const *aa, short const *b) { |
void a3dsrc_SetHrtfState(a3dsrc_t *a, a3d_Hrtf_t const aa, a3d_Hrtf_t const b) { |
108 |
vortex_t *vortex = (vortex_t*)a->vortex; |
vortex_t *vortex = (vortex_t*)(a->vortex); |
109 |
int i; |
int i; |
110 |
|
|
111 |
for (i=0; i<HRTF_SZ; i++) |
for (i=0; i<HRTF_SZ; i++) |
112 |
hwwrite(vortex->mmio, a3d_addr(a->slice, a->source, A3D_B_HrtfDelayLine + (i<<2)), (b[i]<<0x10) | aa[i]); |
hwwrite(vortex->mmio, a3d_addr(a->slice, a->source, A3D_B_HrtfDelayLine) + (i<<2), (b[i]<<0x10) | aa[i]); |
113 |
} |
} |
114 |
|
|
115 |
void a3dsrc_GetHrtfState(a3dsrc_t *a, short *aa, short *b) { |
void a3dsrc_GetHrtfState(a3dsrc_t *a, a3d_Hrtf_t aa, a3d_Hrtf_t b) { |
116 |
vortex_t *vortex = (vortex_t*)a->vortex; |
vortex_t *vortex = (vortex_t*)(a->vortex); |
117 |
int i; |
int i; |
118 |
// FIXME: verify this! |
// FIXME: verify this! |
119 |
for (i=0; i<HRTF_SZ; i++) |
for (i=0; i<HRTF_SZ; i++) |
122 |
b[i] = hwread(vortex->mmio, a3d_addr(a->slice, a->source, A3D_B_HrtfDelayLine + (i<<2))); |
b[i] = hwread(vortex->mmio, a3d_addr(a->slice, a->source, A3D_B_HrtfDelayLine + (i<<2))); |
123 |
} |
} |
124 |
|
|
|
void a3dsrc_GetHrtfOutput(a3dsrc_t *a, short *left, short *right) { |
|
|
vortex_t *vortex = (vortex_t*)a->vortex; |
|
|
*left = hwread(vortex->mmio, a3d_addr(a->slice, a->source, A3D_A_HrtfOutL)); |
|
|
*right = hwread(vortex->mmio, a3d_addr(a->slice, a->source, A3D_A_HrtfOutR)); |
|
|
} |
|
|
|
|
125 |
void a3dsrc_SetHrtfOutput(a3dsrc_t *a, short left,short right) { |
void a3dsrc_SetHrtfOutput(a3dsrc_t *a, short left,short right) { |
126 |
vortex_t *vortex = (vortex_t*)a->vortex; |
vortex_t *vortex = (vortex_t*)(a->vortex); |
127 |
hwwrite(vortex->mmio, a3d_addr(a->slice, a->source, A3D_A_HrtfOutL), left); |
hwwrite(vortex->mmio, a3d_addr(a->slice, a->source, A3D_A_HrtfOutL), left); |
128 |
hwwrite(vortex->mmio, a3d_addr(a->slice, a->source, A3D_A_HrtfOutR), right); |
hwwrite(vortex->mmio, a3d_addr(a->slice, a->source, A3D_A_HrtfOutR), right); |
129 |
} |
} |
130 |
|
|
131 |
|
void a3dsrc_GetHrtfOutput(a3dsrc_t *a, short *left, short *right) { |
132 |
|
vortex_t *vortex = (vortex_t*)(a->vortex); |
133 |
|
*left = hwread(vortex->mmio, a3d_addr(a->slice, a->source, A3D_A_HrtfOutL)); |
134 |
|
*right = hwread(vortex->mmio, a3d_addr(a->slice, a->source, A3D_A_HrtfOutR)); |
135 |
|
} |
136 |
|
|
137 |
/* Interaural Time Difference. |
/* Interaural Time Difference. |
138 |
* "The other main clue that humans use to locate sounds, is called |
* "The other main clue that humans use to locate sounds, is called |
139 |
* Interaural Time Difference (ITD). The differences in distance from |
* Interaural Time Difference (ITD). The differences in distance from |
140 |
* the sound source to a listeners ears means that the sound will |
* the sound source to a listeners ears means that the sound will |
141 |
* reach one ear slightly before the other....", found somewhere with google.*/ |
* reach one ear slightly before the other....", found somewhere with google.*/ |
142 |
void a3dsrc_SetItdTarget(a3dsrc_t *a, short litd,short ritd) { |
void a3dsrc_SetItdTarget(a3dsrc_t *a, short litd,short ritd) { |
143 |
vortex_t *vortex = (vortex_t*)a->vortex; |
vortex_t *vortex = (vortex_t*)(a->vortex); |
144 |
|
|
145 |
if (litd < 0) |
if (litd < 0) |
146 |
litd = 0; |
litd = 0; |
155 |
} |
} |
156 |
|
|
157 |
void a3dsrc_GetItdTarget(a3dsrc_t *a, short *litd, short *ritd) { |
void a3dsrc_GetItdTarget(a3dsrc_t *a, short *litd, short *ritd) { |
158 |
vortex_t *vortex = (vortex_t*)a->vortex; |
vortex_t *vortex = (vortex_t*)(a->vortex); |
159 |
*ritd = hwread(vortex->mmio, a3d_addr(a->slice, a->source, A3D_A_ITDTarget)); |
*ritd = hwread(vortex->mmio, a3d_addr(a->slice, a->source, A3D_A_ITDTarget)); |
160 |
*litd = hwread(vortex->mmio, a3d_addr(a->slice, a->source, A3D_B_ITDTarget)); |
*litd = hwread(vortex->mmio, a3d_addr(a->slice, a->source, A3D_B_ITDTarget)); |
161 |
} |
} |
162 |
|
|
163 |
void a3dsrc_SetItdCurrent(a3dsrc_t *a, short litd, short ritd) { |
void a3dsrc_SetItdCurrent(a3dsrc_t *a, short litd, short ritd) { |
164 |
vortex_t *vortex = (vortex_t*)a->vortex; |
vortex_t *vortex = (vortex_t*)(a->vortex); |
165 |
|
|
166 |
if (litd < 0) |
if (litd < 0) |
167 |
litd = 0; |
litd = 0; |
176 |
} |
} |
177 |
|
|
178 |
void a3dsrc_GetItdCurrent(a3dsrc_t *a, short *litd,short *ritd) { |
void a3dsrc_GetItdCurrent(a3dsrc_t *a, short *litd,short *ritd) { |
179 |
vortex_t *vortex = (vortex_t*)a->vortex; |
vortex_t *vortex = (vortex_t*)(a->vortex); |
180 |
|
|
181 |
*ritd = hwread(vortex->mmio, a3d_addr(a->slice, a->source, A3D_A_ITDCurrent)); |
*ritd = hwread(vortex->mmio, a3d_addr(a->slice, a->source, A3D_A_ITDCurrent)); |
182 |
*litd = hwread(vortex->mmio, a3d_addr(a->slice, a->source, A3D_B_ITDCurrent)); |
*litd = hwread(vortex->mmio, a3d_addr(a->slice, a->source, A3D_B_ITDCurrent)); |
183 |
} |
} |
184 |
|
|
185 |
void a3dsrc_SetItdDline(a3dsrc_t *a, short const *dline) { |
void a3dsrc_SetItdDline(a3dsrc_t *a, a3d_ItdDline_t const dline) { |
186 |
vortex_t *vortex = (vortex_t*)a->vortex; |
vortex_t *vortex = (vortex_t*)(a->vortex); |
187 |
int i; |
int i; |
188 |
/* 45 != 40 -> Check this ! */ |
/* 45 != 40 -> Check this ! */ |
189 |
for (i=0; i<DLINE_SZ; i++) |
for (i=0; i<DLINE_SZ; i++) |
190 |
hwwrite(vortex->mmio, a3d_addr(a->slice, a->source, A3D_A_ITDDelayLine + (i<<2)), dline[i]); |
hwwrite(vortex->mmio, a3d_addr(a->slice, a->source, A3D_A_ITDDelayLine) + (i<<2), dline[i]); |
191 |
} |
} |
192 |
|
|
193 |
void a3dsrc_GetItdDline(a3dsrc_t *a, short *dline) { |
void a3dsrc_GetItdDline(a3dsrc_t *a, a3d_ItdDline_t dline) { |
194 |
vortex_t *vortex = (vortex_t*)a->vortex; |
vortex_t *vortex = (vortex_t*)(a->vortex); |
195 |
int i; |
int i; |
196 |
|
|
197 |
for (i=0; i<DLINE_SZ; i++) |
for (i=0; i<DLINE_SZ; i++) |
198 |
dline[i] = hwread(vortex->mmio, a3d_addr(a->slice, a->source, A3D_A_ITDDelayLine + (i<<2))); |
dline[i] = hwread(vortex->mmio, a3d_addr(a->slice, a->source, A3D_A_ITDDelayLine + (i<<2))); |
199 |
} |
} |
200 |
|
|
201 |
/* This is may be used for IID Interaural Intensity Difference. */ |
/* This is may be used for ILD Interaural Level Difference. */ |
202 |
|
|
203 |
void a3dsrc_SetGainTarget(a3dsrc_t *a, short aa, short b) { |
void a3dsrc_SetGainTarget(a3dsrc_t *a, short left, short right) { |
204 |
vortex_t *vortex = (vortex_t*)a->vortex; |
vortex_t *vortex = (vortex_t*)(a->vortex); |
205 |
hwwrite(vortex->mmio, a3d_addr(a->slice, a->source, A3D_B_GainTarget), (b<<0x10)|aa); |
hwwrite(vortex->mmio, a3d_addr(a->slice, a->source, A3D_B_GainTarget), (right<<0x10)|left); |
206 |
} |
} |
207 |
|
|
208 |
void a3dsrc_GetGainTarget(a3dsrc_t *a, short *aa, short *b) { |
void a3dsrc_GetGainTarget(a3dsrc_t *a, short *left, short *right) { |
209 |
vortex_t *vortex = (vortex_t*)a->vortex; |
vortex_t *vortex = (vortex_t*)(a->vortex); |
210 |
*b = hwread(vortex->mmio, a3d_addr(a->slice, a->source, A3D_A_GainTarget)); |
*right = hwread(vortex->mmio, a3d_addr(a->slice, a->source, A3D_A_GainTarget)); |
211 |
*aa = hwread(vortex->mmio, a3d_addr(a->slice, a->source, A3D_B_GainTarget)); |
*left = hwread(vortex->mmio, a3d_addr(a->slice, a->source, A3D_B_GainTarget)); |
212 |
} |
} |
213 |
|
|
214 |
void a3dsrc_SetGainCurrent(a3dsrc_t *a, short aa, short b) { |
void a3dsrc_SetGainCurrent(a3dsrc_t *a, short left, short right) { |
215 |
vortex_t *vortex = (vortex_t*)a->vortex; |
vortex_t *vortex = (vortex_t*)(a->vortex); |
216 |
hwwrite(vortex->mmio, a3d_addr(a->slice, a->source, A3D_B_GainCurrent), (b<<0x10)|aa); |
hwwrite(vortex->mmio, a3d_addr(a->slice, a->source, A3D_B_GainCurrent), (right<<0x10)|left); |
|
//hwwrite(vortex->mmio, addr(0x190DC+4, this04, this08), (b<<0x10)|a); |
|
217 |
} |
} |
218 |
|
|
219 |
void a3dsrc_GetGainCurrent(a3dsrc_t *a, short *aa, short *b) { |
void a3dsrc_GetGainCurrent(a3dsrc_t *a, short *left, short *right) { |
220 |
vortex_t *vortex = (vortex_t*)a->vortex; |
vortex_t *vortex = (vortex_t*)(a->vortex); |
221 |
*b = hwread(vortex->mmio, a3d_addr(a->slice, a->source, A3D_A_GainCurrent)); |
*right = hwread(vortex->mmio, a3d_addr(a->slice, a->source, A3D_A_GainCurrent)); |
222 |
*aa = hwread(vortex->mmio, a3d_addr(a->slice, a->source, A3D_B_GainCurrent)); |
*left = hwread(vortex->mmio, a3d_addr(a->slice, a->source, A3D_B_GainCurrent)); |
223 |
} |
} |
224 |
|
|
225 |
/* CA3dIO this func seems to be inlined all over this place. */ |
/* CA3dIO this func seems to be inlined all over this place. */ |
226 |
void CA3dIO_WriteReg(a3dsrc_t *a, unsigned long addr, short aa, short b) { |
void CA3dIO_WriteReg(a3dsrc_t *a, unsigned long addr, short aa, short b) { |
227 |
vortex_t *vortex = (vortex_t*)a->vortex; |
vortex_t *vortex = (vortex_t*)(a->vortex); |
228 |
hwwrite(vortex->mmio, addr, (aa<<0x10)|b); |
hwwrite(vortex->mmio, addr, (aa<<0x10)|b); |
229 |
} |
} |
230 |
|
|
231 |
/* Generic A3D stuff */ |
/* Generic A3D stuff */ |
232 |
|
|
233 |
void a3dsrc_SetA3DSampleRate(a3dsrc_t *a, int sr) { |
void a3dsrc_SetA3DSampleRate(a3dsrc_t *a, int sr) { |
234 |
vortex_t *vortex = (vortex_t*)a->vortex; |
vortex_t *vortex = (vortex_t*)(a->vortex); |
235 |
int esp0 = 0; |
int esp0 = 0; |
236 |
|
|
237 |
esp0 = (((esp0 & 0x7fffffff)|0xB8000000)&0x7) | ((sr&0x1f)<<3); |
esp0 = (((esp0 & 0x7fffffff)|0xB8000000)&0x7) | ((sr&0x1f)<<3); |
240 |
} |
} |
241 |
|
|
242 |
void a3dsrc_GetA3DSampleRate(a3dsrc_t *a, int *sr) { |
void a3dsrc_GetA3DSampleRate(a3dsrc_t *a, int *sr) { |
243 |
vortex_t *vortex = (vortex_t*)a->vortex; |
vortex_t *vortex = (vortex_t*)(a->vortex); |
244 |
*sr = ((hwread(vortex->mmio, A3D_SLICE_Control + (a->slice << 0xd))>>3)&0x1f); |
*sr = ((hwread(vortex->mmio, A3D_SLICE_Control + (a->slice << 0xd))>>3)&0x1f); |
245 |
//*sr = ((hwread(vortex->mmio, 0x19C38 + (this08<<0xd))>>3)&0x1f); |
//*sr = ((hwread(vortex->mmio, 0x19C38 + (this08<<0xd))>>3)&0x1f); |
246 |
} |
} |
247 |
|
|
248 |
void a3dsrc_EnableA3D(a3dsrc_t *a) { |
void a3dsrc_EnableA3D(a3dsrc_t *a) { |
249 |
vortex_t *vortex = (vortex_t*)a->vortex; |
vortex_t *vortex = (vortex_t*)(a->vortex); |
250 |
hwwrite(vortex->mmio, A3D_SLICE_Control + (a->slice << 0xd), 0xF0000001); |
hwwrite(vortex->mmio, A3D_SLICE_Control + (a->slice << 0xd), 0xF0000001); |
251 |
//hwwrite(vortex->mmio, 0x19C38 + (this08<<0xd), 0xF0000001); |
//hwwrite(vortex->mmio, 0x19C38 + (this08<<0xd), 0xF0000001); |
252 |
} |
} |
253 |
|
|
254 |
void a3dsrc_DisableA3D(a3dsrc_t *a) { |
void a3dsrc_DisableA3D(a3dsrc_t *a) { |
255 |
vortex_t *vortex = (vortex_t*)a->vortex; |
vortex_t *vortex = (vortex_t*)(a->vortex); |
256 |
hwwrite(vortex->mmio, A3D_SLICE_Control + (a->slice << 0xd), 0xF0000000); |
hwwrite(vortex->mmio, A3D_SLICE_Control + (a->slice << 0xd), 0xF0000000); |
257 |
} |
} |
258 |
|
|
259 |
void a3dsrc_SetA3DControlReg(a3dsrc_t *a, unsigned long ctrl) { |
void a3dsrc_SetA3DControlReg(a3dsrc_t *a, unsigned long ctrl) { |
260 |
vortex_t *vortex = (vortex_t*)a->vortex; |
vortex_t *vortex = (vortex_t*)(a->vortex); |
261 |
hwwrite(vortex->mmio, A3D_SLICE_Control + (a->slice << 0xd), ctrl); |
hwwrite(vortex->mmio, A3D_SLICE_Control + (a->slice << 0xd), ctrl); |
262 |
} |
} |
263 |
|
|
264 |
void a3dsrc_GetA3DControlReg(a3dsrc_t *a, unsigned long *ctrl) { |
void a3dsrc_GetA3DControlReg(a3dsrc_t *a, unsigned long *ctrl) { |
265 |
vortex_t *vortex = (vortex_t*)a->vortex; |
vortex_t *vortex = (vortex_t*)(a->vortex); |
266 |
*ctrl = hwread(vortex->mmio, A3D_SLICE_Control + (a->slice << 0xd)); |
*ctrl = hwread(vortex->mmio, A3D_SLICE_Control + (a->slice << 0xd)); |
267 |
} |
} |
268 |
|
|
269 |
void a3dsrc_SetA3DPointerReg(a3dsrc_t *a, unsigned long ptr) { |
void a3dsrc_SetA3DPointerReg(a3dsrc_t *a, unsigned long ptr) { |
270 |
vortex_t *vortex = (vortex_t*)a->vortex; |
vortex_t *vortex = (vortex_t*)(a->vortex); |
271 |
hwwrite(vortex->mmio, A3D_SLICE_Pointers + (a->slice << 0xd), ptr); |
hwwrite(vortex->mmio, A3D_SLICE_Pointers + (a->slice << 0xd), ptr); |
272 |
} |
} |
273 |
|
|
274 |
void a3dsrc_GetA3DPointerReg(a3dsrc_t *a, unsigned long *ptr) { |
void a3dsrc_GetA3DPointerReg(a3dsrc_t *a, unsigned long *ptr) { |
275 |
vortex_t *vortex = (vortex_t*)a->vortex; |
vortex_t *vortex = (vortex_t*)(a->vortex); |
276 |
*ptr = hwread(vortex->mmio, A3D_SLICE_Pointers + (a->slice << 0xd)); |
*ptr = hwread(vortex->mmio, A3D_SLICE_Pointers + (a->slice << 0xd)); |
277 |
} |
} |
278 |
|
|
279 |
void a3dsrc_ZeroSliceIO(a3dsrc_t *a) { |
void a3dsrc_ZeroSliceIO(a3dsrc_t *a) { |
280 |
vortex_t *vortex = (vortex_t*)a->vortex; |
vortex_t *vortex = (vortex_t*)(a->vortex); |
281 |
int i; |
int i; |
282 |
|
|
283 |
for (i=0; i<8; i++) |
for (i=0; i<8; i++) |
289 |
/* Reset Single A3D source. */ |
/* Reset Single A3D source. */ |
290 |
void a3dsrc_ZeroState(a3dsrc_t *a) { |
void a3dsrc_ZeroState(a3dsrc_t *a) { |
291 |
|
|
292 |
|
//printk("vortex: ZeroState slice: %d, source %d\n", a->slice, a->source); |
293 |
|
|
294 |
a3dsrc_SetAtmosState(a, 0,0,0,0); |
a3dsrc_SetAtmosState(a, 0,0,0,0); |
295 |
a3dsrc_SetHrtfState(a, A3dHrirZeros, A3dHrirZeros); |
a3dsrc_SetHrtfState(a, A3dHrirZeros, A3dHrirZeros); |
296 |
a3dsrc_SetItdDline(a, A3dItdDlineZeros); |
a3dsrc_SetItdDline(a, A3dItdDlineZeros); //crash |
297 |
a3dsrc_SetHrtfOutput(a, 0, 0); |
a3dsrc_SetHrtfOutput(a, 0,0); |
298 |
a3dsrc_SetTimeConsts(a, 0,0,0,0); |
a3dsrc_SetTimeConsts(a, 0,0,0,0); |
299 |
|
|
300 |
a3dsrc_SetAtmosCurrent(a, 0,0,0,0,0); |
a3dsrc_SetAtmosCurrent(a, 0,0,0,0,0); |
301 |
a3dsrc_SetAtmosTarget(a, 0,0,0,0,0); |
a3dsrc_SetAtmosTarget(a, 0,0,0,0,0); |
302 |
a3dsrc_SetItdCurrent(a, 0,0); |
a3dsrc_SetItdCurrent(a, 0,0); |
303 |
a3dsrc_SetItdTarget(a, 0,0); |
a3dsrc_SetItdTarget(a, 0,0); |
304 |
a3dsrc_SetGainCurrent(a, 0,0); |
a3dsrc_SetGainCurrent(a, 0,0); |
305 |
/* The person who originally wrote this surely was smoking crack ...*/ |
a3dsrc_SetGainTarget(a, 0,0); |
|
/* (or his/her compiler) */ |
|
|
//CA3dIO_WriteReg(a->vortex, A3D_B_GainTarget + (a->slice << 0xd) + (a->source *5*9*2 - a->source)*8,0,0); |
|
|
CA3dIO_WriteReg(a, a3d_addr(a->slice, a->source, A3D_B_GainTarget),0,0); |
|
306 |
|
|
307 |
a3dsrc_SetHrtfCurrent(a, A3dHrirZeros, A3dHrirZeros); |
a3dsrc_SetHrtfCurrent(a, A3dHrirZeros, A3dHrirZeros); |
308 |
a3dsrc_SetHrtfTarget(a, A3dHrirZeros, A3dHrirZeros); |
a3dsrc_SetHrtfTarget(a, A3dHrirZeros, A3dHrirZeros); |
310 |
|
|
311 |
/* Reset entire A3D engine */ |
/* Reset entire A3D engine */ |
312 |
void a3dsrc_ZeroStateA3D(a3dsrc_t *a) { |
void a3dsrc_ZeroStateA3D(a3dsrc_t *a) { |
313 |
int i, ii, var, var2; |
int i, var, var2; |
314 |
|
|
315 |
|
if ((a->vortex) == NULL) { |
316 |
|
printk("vortex: ZeroStateA3D: ERROR: a->vortex is NULL\n"); |
317 |
|
return; |
318 |
|
} |
319 |
|
|
320 |
a3dsrc_SetA3DControlReg(a, 0); |
a3dsrc_SetA3DControlReg(a, 0); |
321 |
a3dsrc_SetA3DPointerReg(a, 0); |
a3dsrc_SetA3DPointerReg(a, 0); |
322 |
|
|
323 |
var = a->slice; |
var = a->slice; |
324 |
var2 = a->source; |
var2 = a->source; |
325 |
for (i=0; i<4; i++) { |
for (i=0; i<4; i++) { |
326 |
a->slice = i; |
a->slice = i; |
327 |
a3dsrc_ZeroSliceIO(a); |
a3dsrc_ZeroSliceIO(a); |
328 |
for (ii=0; ii<4; ii++) { |
//a3dsrc_ZeroState(a); |
|
a->source = ii; |
|
|
a3dsrc_ZeroState(a); |
|
|
} |
|
329 |
} |
} |
330 |
a->source = var2; |
a->source = var2; |
331 |
a->slice = var; |
a->slice = var; |
345 |
} |
} |
346 |
/* VDB = Vortex audio Dataflow Bus */ |
/* VDB = Vortex audio Dataflow Bus */ |
347 |
void a3dsrc_ClearVDBData(a3dsrc_t *a, unsigned long aa) { |
void a3dsrc_ClearVDBData(a3dsrc_t *a, unsigned long aa) { |
348 |
vortex_t *vortex = (vortex_t*)a->vortex; |
vortex_t *vortex = (vortex_t*)(a->vortex); |
349 |
hwwrite(vortex->mmio, a3d_addr(a->slice, a->source, A3D_SLICE_VDBDest), 0); |
hwwrite(vortex->mmio, a3d_addr(a->slice, a->source, A3D_SLICE_VDBDest), 0); |
350 |
hwwrite(vortex->mmio, a3d_addr(a->slice, a->source, A3D_SLICE_VDBDest + 4), 0); |
hwwrite(vortex->mmio, a3d_addr(a->slice, a->source, A3D_SLICE_VDBDest + 4), 0); |
351 |
/* |
/* |
479 |
v->xt_mode = mode; /* this_14 */ |
v->xt_mode = mode; /* this_14 */ |
480 |
|
|
481 |
//vortex_XtalkHw_CXtalkHw(v, this04); |
//vortex_XtalkHw_CXtalkHw(v, this04); |
|
|
|
482 |
vortex_XtalkHw_SetGains(v, asXtalkGainsAllChan); |
vortex_XtalkHw_SetGains(v, asXtalkGainsAllChan); |
483 |
if (v->xt_mode) { |
if (v->xt_mode) { |
484 |
//if (this08==0xffff) { |
//if (this08==0xffff) { |
487 |
vortex_XtalkHw_ProgramXtalkNarrow(v); |
vortex_XtalkHw_ProgramXtalkNarrow(v); |
488 |
} else{ |
} else{ |
489 |
/* Speaker type 2 ? */ |
/* Speaker type 2 ? */ |
490 |
vortex_XtalkHw_ProgramXtalkWide(v) |
vortex_XtalkHw_ProgramXtalkWide(v); |
491 |
} |
} |
492 |
} else { |
} else { |
493 |
/* Headphones ? */ |
/* Headphones ? */ |
495 |
} |
} |
496 |
vortex_XtalkHw_SetSampleRate(v, 0x11); |
vortex_XtalkHw_SetSampleRate(v, 0x11); |
497 |
vortex_XtalkHw_Enable(v); |
vortex_XtalkHw_Enable(v); |
498 |
|
return 0; |
499 |
} |
} |
500 |
|
|
501 |
int Vort3DRend_SetGlobalControl(vortex_t *v) { |
int Vort3DRend_SetGlobalControl(vortex_t *v) { |
514 |
vortex_XtalkHw_ProgramXtalkNarrow(v); |
vortex_XtalkHw_ProgramXtalkNarrow(v); |
515 |
} else { |
} else { |
516 |
/* Speaker type 2 */ |
/* Speaker type 2 */ |
517 |
vortex_XtalkHw_ProgramXtalkWide(v) |
vortex_XtalkHw_ProgramXtalkWide(v); |
518 |
} |
} |
519 |
} else { |
} else { |
520 |
/* Headphones */ |
/* Headphones */ |
521 |
vortex_XtalkHw_ProgramPipe(v); |
vortex_XtalkHw_ProgramPipe(v); |
522 |
} |
} |
523 |
|
return 0; |
524 |
} |
} |
525 |
|
|
526 |
int Vort3DRend_GetGlobalControl(struct _XTALKctrl *xtctrl) { |
int Vort3DRend_GetGlobalControl(vortex_t *v) { |
527 |
|
return 0; |
528 |
} |
} |
529 |
#if 0 |
#if 0 |
530 |
int Vort3DRend_AddBuffer(class CVort3dWave *a) { |
int Vort3DRend_AddBuffer(class CVort3dWave *a) { |
694 |
int AuWt_ReadReg(unsigned long addr) { |
int AuWt_ReadReg(unsigned long addr) { |
695 |
return hwread(vortex->mmio, (this_04 << 0xf) + addr); |
return hwread(vortex->mmio, (this_04 << 0xf) + addr); |
696 |
} |
} |
697 |
|
|
698 |
|
int Asp4Topology::IncrementA3DRefCount(unsigned long *arg_0) { |
699 |
|
int var_0, var_4, var_8, var_C, edi, ebx; |
700 |
|
/* this_10: A3DRef count */ |
701 |
|
|
702 |
|
//CAsp4Core: this_78 |
703 |
|
CAsp4Core::GetProperty(COREPROPERTY3,(void *)&var4,ulong 4); |
704 |
|
if (var_4 == 1 || var_4 == 2) |
705 |
|
edi = 1; |
706 |
|
else |
707 |
|
edi = 0; |
708 |
|
|
709 |
|
Asp4Topology::ConfigureWT(0,edi,0) |
710 |
|
Asp4Topology::ConfigureWT(1, (var_4>>1)&1 ,1) |
711 |
|
|
712 |
|
if (this_10) { |
713 |
|
if (arg_0 == NULL) |
714 |
|
return 1; |
715 |
|
this_10++; |
716 |
|
*arg_0 = this_10; |
717 |
|
return 1; |
718 |
|
} |
719 |
|
/* RefCount is zero */ |
720 |
|
CResource::SetDsMode((DSMODE)2); |
721 |
|
/* Connect A3D -> XTALK */ |
722 |
|
for (ebx=0; ebx<4; ebx++) { |
723 |
|
vortex_route(1, 0x11, ADB_A3DOUT(ebx*2), ADB_XTALKIN(ebx); |
724 |
|
vortex_route(1, 0x11, ADB_A3DOUT(ebx*2)+1, ADB_XTALKIN(8-(ebx*2))); |
725 |
|
} |
726 |
|
vortex_route(1, 0x11, ADB_XTALKOUT(0), vortex->mixxtlk[0]); |
727 |
|
vortex_route(1, 0x11, ADB_XTALKOUT(1), vortex->mixxtlk[1]); |
728 |
|
vortex_connection_mixin_mix(vortex, en, vortex->mixxtlk[0], vortex->mixplayb[0], 0); |
729 |
|
vortex_connection_mixin_mix(vortex, en, vortex->mixxtlk[1], vortex->mixplayb[1], 0); |
730 |
|
vortex_mix_setinputvolumebyte(vortex, vortex->mixplayb[0], vortex->mixxtlk[0], MIX_DEFIGAIN); |
731 |
|
vortex_mix_setinputvolumebyte(vortex, vortex->mixplayb[1], vortex->mixxtlk[1], MIX_DEFIGAIN); |
732 |
|
if (VORTEX_IS_QUAD { |
733 |
|
vortex_connection_mixin_mix(vortex, en, vortex->mixxtlk[0], vortex->mixplayb[2], 0); |
734 |
|
vortex_connection_mixin_mix(vortex, en, vortex->mixxtlk[1], vortex->mixplayb[3], 0); |
735 |
|
vortex_mix_setinputvolumebyte(vortex, vortex->mixplayb[2], vortex->mixxtlk[0], MIX_DEFIGAIN); |
736 |
|
vortex_mix_setinputvolumebyte(vortex, vortex->mixplayb[3], vortex->mixxtlk[1], MIX_DEFIGAIN); |
737 |
|
} |
738 |
|
/* Connect SPDIF: not needed to due different topology. */ |
739 |
|
|
740 |
|
/* Increment ref count. */ |
741 |
|
this_10++; |
742 |
|
if (arg_0 == NULL) |
743 |
|
return 1; |
744 |
|
*arg_0 = this_10; |
745 |
|
return 1; |
746 |
|
} |
747 |
#endif |
#endif |
748 |
/* 3D Sound renderer. creeepy... */ |
/* 3D Sound renderer. creeepy... */ |
749 |
|
|
750 |
|
|
751 |
/* A3D base support (de)allocator */ |
/* A3D base support init/shudown */ |
752 |
void vortex_Vort3D(vortex_t *v, int en) { |
void vortex_Vort3D(vortex_t *v, int en) { |
753 |
int i; |
int i; |
754 |
|
|
|
/* Alloc mixer resources */ |
|
|
v->mixa3d[0] = vortex_adb_checkinout(v, v->fixed_res, en, VORTEX_RESOURCE_MIXOUT); |
|
|
v->mixa3d[1] = vortex_adb_checkinout(v, v->fixed_res, en, VORTEX_RESOURCE_MIXOUT); |
|
|
v->mixxtlk[0] = vortex_adb_checkinout(v, v->fixed_res, en, VORTEX_RESOURCE_MIXIN); |
|
|
v->mixxtlk[1] = vortex_adb_checkinout(v, v->fixed_res, en, VORTEX_RESOURCE_MIXIN); |
|
|
|
|
|
/* Connect Crosstalk canceler to audio outputs. */ |
|
|
#if 1 |
|
|
vortex_route(v, en, 0x11, v->mixa3d[0], ADB_XTALKIN(0)); |
|
|
vortex_route(v, en, 0x11, v->mixa3d[1], ADB_XTALKIN(1)); |
|
|
vortex_route(v, en, 0x11, ADB_XTALKOUT(0), v->mixxtlk[0]); |
|
|
vortex_route(v, en, 0x11, ADB_XTALKOUT(1), v->mixxtlk[1]); |
|
|
|
|
|
vortex_connection_mixin_mix(v, en, v->mixxtlk[0], v->mixplayb[0], 0); |
|
|
vortex_connection_mixin_mix(v, en, v->mixxtlk[1], v->mixplayb[1], 0); |
|
|
if (VORTEX_IS_QUAD(v)) { |
|
|
vortex_connection_mixin_mix(v, en, v->mixxtlk[0], v->mixplayb[2], 0); |
|
|
vortex_connection_mixin_mix(v, en, v->mixxtlk[1], v->mixplayb[3], 0); |
|
|
} |
|
|
#ifndef CHIP_AU8820 |
|
|
vortex_connection_mixin_mix(v, en, v->mixxtlk[0], v->mixspdif[0], 0); |
|
|
vortex_connection_mixin_mix(v, en, v->mixxtlk[1], v->mixspdif[1], 0); |
|
|
#endif |
|
|
#endif |
|
|
/* |
|
755 |
Vort3DRend_Initialize(v, 0); |
Vort3DRend_Initialize(v, 0); |
756 |
for (i=0; i<NR_A3D; i++) |
for (i=0; i<NR_A3D; i++) |
757 |
vortex_A3dSourceHw_Initialize(v, i % 4, i / 4); |
vortex_A3dSourceHw_Initialize(v, i % 4, i >> 2); |
758 |
a3dsrc_ZeroStateA3D(&(v->a3d[0])); |
a3dsrc_ZeroStateA3D(&(v->a3d[0])); |
|
*/ |
|
759 |
} |
} |
760 |
|
/* Make A3D subsystem connections. */ |
761 |
|
void vortex_Vort3D_connect(vortex_t *v, int en) { |
762 |
|
|
763 |
|
/* Allow Xtalk mixin resources */ |
764 |
|
v->mixxtlk[0] = vortex_adb_checkinout(v, v->fixed_res, en, VORTEX_RESOURCE_MIXIN); |
765 |
|
if (v->mixxtlk[0]<0) { |
766 |
|
printk("vortex: vortex_Vort3D: ERROR: not enough free mixer resources.\n"); |
767 |
|
return; |
768 |
|
} |
769 |
|
v->mixxtlk[1] = vortex_adb_checkinout(v, v->fixed_res, en, VORTEX_RESOURCE_MIXIN); |
770 |
|
if (v->mixxtlk[1]<0) { |
771 |
|
printk("vortex: vortex_Vort3D: ERROR: not enough free mixer resources.\n"); |
772 |
|
return; |
773 |
|
} |
774 |
|
|
775 |
|
/* Connect A3D -> XTALK */ |
776 |
|
for (i=0; i<4; i++) { |
777 |
|
/* 2 outputs per each A3D slice. */ |
778 |
|
vortex_route(en, 0x11, ADB_A3DOUT(ebx*2), ADB_XTALKIN(ebx); |
779 |
|
vortex_route(en, 0x11, ADB_A3DOUT(ebx*2)+1, ADB_XTALKIN(5+ebx)); |
780 |
|
} |
781 |
|
vortex_route(en, 0x11, ADB_XTALKOUT(0), vortex->mixxtlk[0]); |
782 |
|
vortex_route(en, 0x11, ADB_XTALKOUT(1), vortex->mixxtlk[1]); |
783 |
|
vortex_connection_mixin_mix(vortex, en, vortex->mixxtlk[0], vortex->mixplayb[0], 0); |
784 |
|
vortex_connection_mixin_mix(vortex, en, vortex->mixxtlk[1], vortex->mixplayb[1], 0); |
785 |
|
vortex_mix_setinputvolumebyte(vortex, vortex->mixplayb[0], vortex->mixxtlk[0], MIX_DEFIGAIN); |
786 |
|
vortex_mix_setinputvolumebyte(vortex, vortex->mixplayb[1], vortex->mixxtlk[1], MIX_DEFIGAIN); |
787 |
|
if (VORTEX_IS_QUAD { |
788 |
|
vortex_connection_mixin_mix(vortex, en, vortex->mixxtlk[0], vortex->mixplayb[2], 0); |
789 |
|
vortex_connection_mixin_mix(vortex, en, vortex->mixxtlk[1], vortex->mixplayb[3], 0); |
790 |
|
vortex_mix_setinputvolumebyte(vortex, vortex->mixplayb[2], vortex->mixxtlk[0], MIX_DEFIGAIN); |
791 |
|
vortex_mix_setinputvolumebyte(vortex, vortex->mixplayb[3], vortex->mixxtlk[1], MIX_DEFIGAIN); |
792 |
|
} |
793 |
|
} |
794 |
/* Initialize one single A3D source. */ |
/* Initialize one single A3D source. */ |
795 |
void vortex_Vort3D_InitializeSource(a3dsrc_t *a, int en) { |
void vortex_Vort3D_InitializeSource(a3dsrc_t *a, int en) { |
796 |
|
if (a->vortex == NULL) { |
797 |
|
printk("vortex: Vort3D_InitializeSource: A3D source not initialized\n"); |
798 |
|
return; |
799 |
|
} |
800 |
|
|
801 |
if (en) { |
if (en) { |
802 |
a3dsrc_ZeroState(a); |
a3dsrc_ProgramPipe(a); |
803 |
|
a3dsrc_SetA3DSampleRate(a, 0x11); |
804 |
a3dsrc_SetTimeConsts(a, HrtfTCDefault, ItdTCDefault, GainTCDefault ,CoefTCDefault); |
a3dsrc_SetTimeConsts(a, HrtfTCDefault, ItdTCDefault, GainTCDefault ,CoefTCDefault); |
805 |
a3dsrc_SetGainTarget(a,0,0); |
a3dsrc_SetGainTarget(a,0,0); |
806 |
a3dsrc_SetGainCurrent(a,0,0); |
a3dsrc_SetGainCurrent(a,0,0); |
807 |
a3dsrc_EnableA3D(a); |
a3dsrc_EnableA3D(a); |
808 |
/* Set as pipe for now for testing. */ |
} else { |
|
a3dsrc_ProgramPipe(a); |
|
|
} else |
|
809 |
a3dsrc_DisableA3D(a); |
a3dsrc_DisableA3D(a); |
810 |
|
a3dsrc_ZeroState(a); |
811 |
|
} |
812 |
} |
} |
813 |
|
|
814 |
/* |
/* |
842 |
a3dsrc_SetItdTarget(a, p->itd_current[0], p->itd_current[1]); |
a3dsrc_SetItdTarget(a, p->itd_current[0], p->itd_current[1]); |
843 |
a3dsrc_SetItdDline(a, p->dline); |
a3dsrc_SetItdDline(a, p->dline); |
844 |
} |
} |
845 |
|
|
846 |
|
/* End of File*/ |