blob: 75679831afda7b0211402a78f3a7176803fa74da (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
|
//
// Generated by dtk
// Translation Unit: JASDSPBuf.cpp
//
#include "JSystem/JSystem.h" // IWYU pragma: keep
#include "JSystem/JAudio/JASDSPBuf.h"
#include "JSystem/JAudio/JASAudioThread.h"
#include "JSystem/JAudio/JASCallback.h"
#include "JSystem/JAudio/JASDSPChannel.h"
#include "JSystem/JAudio/JASDSPInterface.h"
#include "JSystem/JAudio/JASProbe.h"
#include "JSystem/JAudio/JASRate.h"
#include "JSystem/JAudio/JASSystemHeap.h"
#include "JSystem/JAudio/osdsp_task.h"
#include "JSystem/JKernel/JKRSolidHeap.h"
#include "dolphin/os/OS.h"
#include "global.h"
u8 JASystem::TDSP_DACBuffer::numDSPBuf = 3;
int JASystem::TDSP_DACBuffer::isInit;
s16** JASystem::TDSP_DACBuffer::dsp_buf;
u8 JASystem::TDSP_DACBuffer::writeBuffer;
u8 JASystem::TDSP_DACBuffer::readBuffer;
u8 JASystem::TDSP_DACBuffer::dspStatus;
static void dummy() {
OSReport("----- JASDSPBuf : DSP-DAC バッファの数を %d にしました\n");
}
/* 802892E0-802893E4 .text init__Q28JASystem14TDSP_DACBufferFv */
void JASystem::TDSP_DACBuffer::init() {
if (!isInit) {
u32 frameSamples = Kernel::getFrameSamples();
writeBuffer = numDSPBuf - 1;
readBuffer = 0;
dsp_buf = new (JASDram, 0x20) s16*[numDSPBuf];
for (int i = 0; i < numDSPBuf; i++) {
dsp_buf[i] = new (JASDram, 0x20) s16[frameSamples * 2];
for (u32 j = 0; j < frameSamples * 2; j++) {
dsp_buf[i][j] = 0;
}
DCStoreRange(dsp_buf[i], frameSamples * 4);
}
OSReport("DSP_DAC buffer size : %d\n", frameSamples * 2);
dspStatus = 0;
isInit = 1;
}
}
int JASystem::TDSP_DACBuffer::dacSyncCounter;
/* 802893E4-80289438 .text updateDSP__Q28JASystem14TDSP_DACBufferFv */
void JASystem::TDSP_DACBuffer::updateDSP() {
dacSyncCounter++;
Kernel::probeStart(3, "SFR-UPDATE");
DSPInterface::invalChannelAll();
Kernel::subframeCallback();
TDSPChannel::updateAll();
Kernel::aiCallback();
Kernel::probeFinish(3);
}
/* 80289438-80289568 .text mixDSP__Q28JASystem14TDSP_DACBufferFl */
s16* JASystem::TDSP_DACBuffer::mixDSP(s32) {
u8 var4 = readBuffer + 1;
u32 frameSamples = Kernel::getFrameSamples();
if (var4 == numDSPBuf) {
var4 = 0;
}
if (var4 == writeBuffer && numDSPBuf >= 3) {
s16 var1 = dsp_buf[readBuffer][frameSamples / 2 - 1];
s16 var2 = dsp_buf[readBuffer][frameSamples - 1];
for (u32 i = 0; i < frameSamples; i++) {
dsp_buf[readBuffer][i] = var1;
}
for (u32 i = frameSamples; i < frameSamples * 2; i++) {
dsp_buf[readBuffer][i] = var2;
}
if (dspStatus == 0) {
OSReport("----- JASDSPBuf::process DACSYNC -- DSP Wait\n");
finishDSPFrame();
}
} else {
readBuffer = var4;
DCInvalidateRange(dsp_buf[readBuffer], frameSamples * 4);
if (dspStatus == 0) {
finishDSPFrame();
}
}
return dsp_buf[readBuffer];
}
void (*JASystem::TDSP_DACBuffer::callback)(s16*, u32);
/* 80289568-8028963C .text finishDSPFrame__Q28JASystem14TDSP_DACBufferFv */
void JASystem::TDSP_DACBuffer::finishDSPFrame() {
u8 var2 = writeBuffer + 1;
u32 frameSamples = Kernel::getFrameSamples();
if (var2 == numDSPBuf) {
var2 = 0;
}
if (var2 == readBuffer) {
dspStatus = 0;
return;
}
writeBuffer = var2;
TAudioThread::snIntCount = Kernel::getSubFrames();
Kernel::probeStart(7, "DSP-MAIN");
DsyncFrame2(Kernel::getSubFrames(), u32(dsp_buf[writeBuffer]), u32(&dsp_buf[writeBuffer][frameSamples]));
dspStatus = 1;
updateDSP();
if (callback) {
callback(dsp_buf[writeBuffer], frameSamples);
}
}
|