mirror of
https://github.com/ACreTeam/ac-decomp
synced 2026-08-08 18:13:05 -04:00
Implement & link jaudio_NES/[dspbuf.c, cpubuf.c]
This commit is contained in:
@@ -98,8 +98,8 @@ static void* audioproc(void* param) {
|
||||
Jac_Init();
|
||||
Jac_InitSinTable();
|
||||
ResetPlayerCallback();
|
||||
DspbufProcess(DSPBUF_EVENTS_0);
|
||||
CpubufProcess(DSPBUF_EVENTS_0);
|
||||
DspbufProcess(DSPBUF_EVENT_INIT);
|
||||
CpubufProcess(DSPBUF_EVENT_INIT);
|
||||
DspBoot();
|
||||
DSP_InitBuffer();
|
||||
__DspReg();
|
||||
|
||||
@@ -0,0 +1,93 @@
|
||||
#include "jaudio_NES/cpubuf.h"
|
||||
|
||||
#include "jaudio_NES/aictrl.h"
|
||||
#include "jaudio_NES/audiothread.h"
|
||||
#include "jaudio_NES/neosthread.h"
|
||||
#include "jaudio_NES/playercall.h"
|
||||
#include "jaudio_NES/dummyprobe.h"
|
||||
|
||||
#define DSPBUF_NUM 3
|
||||
|
||||
static u8 write_buffer = 0;
|
||||
static u8 read_buffer = 0;
|
||||
static u8 dspstatus = 0;
|
||||
static s16* dsp_buf[DSPBUF_NUM];
|
||||
static u32 dac_sync_counter = 0;
|
||||
|
||||
extern s16* CpubufProcess(DSPBUF_EVENTS event) {
|
||||
u32 i;
|
||||
u32 j;
|
||||
|
||||
switch (event) {
|
||||
case DSPBUF_EVENT_INIT:
|
||||
write_buffer = 2;
|
||||
read_buffer = 0;
|
||||
for (i = 0; i < DSPBUF_NUM; i++) {
|
||||
dsp_buf[i] = (s16*)OSAlloc2(JAC_FRAMESAMPLES << 2);
|
||||
for (j = 0; j < (JAC_FRAMESAMPLES << 1); j++) {
|
||||
dsp_buf[i][j] = 0;
|
||||
}
|
||||
|
||||
DCStoreRange(dsp_buf[i], JAC_FRAMESAMPLES << 2);
|
||||
}
|
||||
|
||||
dspstatus = 0;
|
||||
break;
|
||||
case DSPBUF_EVENT_FRAME_END:
|
||||
u8 write = write_buffer + 1;
|
||||
|
||||
if (write == DSPBUF_NUM) {
|
||||
write = 0;
|
||||
}
|
||||
|
||||
if (write == read_buffer) {
|
||||
dspstatus = 0;
|
||||
} else {
|
||||
write_buffer = write;
|
||||
if (Neos_Update(dsp_buf[write_buffer]) == TRUE) {
|
||||
dspstatus = 1;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case DSPBUF_EVENT_MIX:
|
||||
u8 read = read_buffer + 1;
|
||||
if (read == DSPBUF_NUM) {
|
||||
read = 0;
|
||||
}
|
||||
|
||||
if (read == write_buffer) {
|
||||
s16 left = dsp_buf[read_buffer][(JAC_FRAMESAMPLES / 2) - 1];
|
||||
s16 right = dsp_buf[read_buffer][JAC_FRAMESAMPLES - 1];
|
||||
|
||||
for (i = 0; i < JAC_FRAMESAMPLES; i++) {
|
||||
dsp_buf[read_buffer][i] = right;
|
||||
}
|
||||
|
||||
for (i = JAC_FRAMESAMPLES; i < (JAC_FRAMESAMPLES << 1); i++) {
|
||||
dsp_buf[read_buffer][i] = left;
|
||||
}
|
||||
|
||||
if (dspstatus == 0) {
|
||||
CpubufProcess(DSPBUF_EVENT_FRAME_END);
|
||||
}
|
||||
} else {
|
||||
read_buffer = read;
|
||||
if (dspstatus == 0) {
|
||||
CpubufProcess(DSPBUF_EVENT_FRAME_END);
|
||||
}
|
||||
}
|
||||
|
||||
return dsp_buf[read_buffer];
|
||||
}
|
||||
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
extern s16* MixCpu(s32 n_samples) {
|
||||
static s32 cur = 0;
|
||||
return CpubufProcess(DSPBUF_EVENT_MIX);
|
||||
}
|
||||
|
||||
extern void CpuFrameEnd(void) {
|
||||
CpubufProcess(DSPBUF_EVENT_FRAME_END);
|
||||
}
|
||||
@@ -0,0 +1,111 @@
|
||||
#include "jaudio_NES/dspbuf.h"
|
||||
|
||||
#include "jaudio_NES/aictrl.h"
|
||||
#include "jaudio_NES/ipldec.h"
|
||||
#include "jaudio_NES/audiothread.h"
|
||||
#include "jaudio_NES/dspproc.h"
|
||||
#include "jaudio_NES/dspdriver.h"
|
||||
#include "jaudio_NES/dspinterface.h"
|
||||
#include "jaudio_NES/playercall.h"
|
||||
#include "jaudio_NES/dummyprobe.h"
|
||||
|
||||
#define DSPBUF_NUM 3
|
||||
|
||||
static u8 write_buffer = 0;
|
||||
static u8 read_buffer = 0;
|
||||
static u8 dspstatus = 0;
|
||||
static s16* dsp_buf[DSPBUF_NUM];
|
||||
static u32 dac_sync_counter = 0;
|
||||
|
||||
extern s16* DspbufProcess(DSPBUF_EVENTS event) {
|
||||
u32 i;
|
||||
u32 j;
|
||||
|
||||
switch (event) {
|
||||
case DSPBUF_EVENT_INIT:
|
||||
write_buffer = 2;
|
||||
read_buffer = 0;
|
||||
for (i = 0; i < DSPBUF_NUM; i++) {
|
||||
dsp_buf[i] = (s16*)OSAlloc2(JAC_FRAMESAMPLES << 2);
|
||||
for (j = 0; j < (JAC_FRAMESAMPLES << 1); j++) {
|
||||
dsp_buf[i][j] = 0;
|
||||
}
|
||||
|
||||
DCStoreRange(dsp_buf[i], JAC_FRAMESAMPLES << 2);
|
||||
}
|
||||
|
||||
dspstatus = 0;
|
||||
break;
|
||||
case DSPBUF_EVENT_FRAME_END:
|
||||
DspExtraTaskCheck();
|
||||
u8 write = write_buffer + 1;
|
||||
|
||||
if (write == DSPBUF_NUM) {
|
||||
write = 0;
|
||||
}
|
||||
|
||||
if (write == read_buffer) {
|
||||
dspstatus = 0;
|
||||
} else {
|
||||
write_buffer = write;
|
||||
DspSyncCountClear(JAC_SUBFRAMES);
|
||||
Probe_Start(7, "DSP-MAIN");
|
||||
DsyncFrame(JAC_SUBFRAMES, (u32)dsp_buf[write_buffer], (u32)&dsp_buf[write_buffer][JAC_FRAMESAMPLES]);
|
||||
dspstatus = 1;
|
||||
UpdateDSP();
|
||||
}
|
||||
break;
|
||||
case DSPBUF_EVENT_MIX:
|
||||
u8 read = read_buffer + 1;
|
||||
if (read == DSPBUF_NUM) {
|
||||
read = 0;
|
||||
}
|
||||
|
||||
if (read == write_buffer) {
|
||||
s16 left = dsp_buf[read_buffer][(JAC_FRAMESAMPLES / 2) - 1];
|
||||
s16 right = dsp_buf[read_buffer][JAC_FRAMESAMPLES - 1];
|
||||
|
||||
for (i = 0; i < JAC_FRAMESAMPLES; i++) {
|
||||
dsp_buf[read_buffer][i] = left;
|
||||
}
|
||||
|
||||
for (i = JAC_FRAMESAMPLES; i < (JAC_FRAMESAMPLES << 1); i++) {
|
||||
dsp_buf[read_buffer][i] = right;
|
||||
}
|
||||
|
||||
if (dspstatus == 0) {
|
||||
DspbufProcess(DSPBUF_EVENT_FRAME_END);
|
||||
}
|
||||
} else {
|
||||
read_buffer = read;
|
||||
DCInvalidateRange(dsp_buf[read_buffer], JAC_FRAMESAMPLES << 2);
|
||||
if (dspstatus == 0) {
|
||||
DspbufProcess(DSPBUF_EVENT_FRAME_END);
|
||||
}
|
||||
}
|
||||
|
||||
return dsp_buf[read_buffer];
|
||||
}
|
||||
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
extern void UpdateDSP(void) {
|
||||
dac_sync_counter++;
|
||||
Probe_Start(3, "SFR-UPDATE");
|
||||
DSP_InvalChannelAll();
|
||||
DspPlayerCallback();
|
||||
UpdateDSPchannelAll();
|
||||
DSPReleaseHalt();
|
||||
PlayerCallback();
|
||||
Probe_Finish(3);
|
||||
}
|
||||
|
||||
extern s16* MixDsp(s32 n_samples) {
|
||||
static s32 cur = 0;
|
||||
return DspbufProcess(DSPBUF_EVENT_MIX);
|
||||
}
|
||||
|
||||
extern void DspFrameEnd(void) {
|
||||
DspbufProcess(DSPBUF_EVENT_FRAME_END);
|
||||
}
|
||||
@@ -22,7 +22,7 @@ static u32 neosproc_mq_init = FALSE;
|
||||
static s16* tmp_buf = nullptr;
|
||||
static BOOL neos_ready = FALSE;
|
||||
|
||||
extern BOOL Neos_Update(s16* dst) {
|
||||
extern u32 Neos_Update(s16* dst) {
|
||||
if (neosproc_mq_init) {
|
||||
if (OSSendMessage(&neosproc_mq, (OSMessage)dst, OS_MESSAGE_NOBLOCK) == TRUE) {
|
||||
return TRUE;
|
||||
|
||||
@@ -3,29 +3,29 @@
|
||||
|
||||
static PLAYER_CALL PLAYER_CALLLIST[16];
|
||||
|
||||
extern void ResetPlayerCallback(){
|
||||
extern void ResetPlayerCallback() {
|
||||
int i;
|
||||
|
||||
for(i = 0; i < 16; i++){
|
||||
for (i = 0; i < 16; i++) {
|
||||
PLAYER_CALLLIST[i].callback = nullptr;
|
||||
}
|
||||
}
|
||||
|
||||
static s32 Jac_CheckPlayerCallback(PlayerCallBack callback, void* arg){
|
||||
int i;
|
||||
static s32 Jac_CheckPlayerCallback(PlayerCallBack callback, void* arg) {
|
||||
int i;
|
||||
|
||||
for(i = 0; i < 16; i++){
|
||||
if(PLAYER_CALLLIST[i].callback == callback && PLAYER_CALLLIST[i].arg == arg){
|
||||
for (i = 0; i < 16; i++) {
|
||||
if (PLAYER_CALLLIST[i].callback == callback && PLAYER_CALLLIST[i].arg == arg) {
|
||||
return i;
|
||||
}
|
||||
}
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
extern s32 Jac_RegisterDspPlayerCallback(PlayerCallBack callback, void* arg){
|
||||
s32 idx = Jac_RegisterPlayerCallback(callback,arg);
|
||||
extern s32 Jac_RegisterDspPlayerCallback(PlayerCallBack callback, void* arg) {
|
||||
s32 idx = Jac_RegisterPlayerCallback(callback, arg);
|
||||
|
||||
if(idx == -1){
|
||||
if (idx == -1) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
@@ -34,23 +34,22 @@ extern s32 Jac_RegisterDspPlayerCallback(PlayerCallBack callback, void* arg){
|
||||
return idx;
|
||||
}
|
||||
|
||||
extern s32 Jac_RegisterPlayerCallback(PlayerCallBack callback, void* arg){
|
||||
u32 i;
|
||||
extern s32 Jac_RegisterPlayerCallback(PlayerCallBack callback, void* arg) {
|
||||
u32 i;
|
||||
|
||||
for(i = 0; i < 16; i++){
|
||||
if(PLAYER_CALLLIST[i].callback == nullptr){
|
||||
for (i = 0; i < 16; i++) {
|
||||
if (PLAYER_CALLLIST[i].callback == nullptr) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if(i == 16){
|
||||
if (i == 16) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
if(Jac_CheckPlayerCallback(callback,arg) != -1){
|
||||
|
||||
if (Jac_CheckPlayerCallback(callback, arg) != -1) {
|
||||
return -1;
|
||||
}
|
||||
else{
|
||||
} else {
|
||||
PLAYER_CALLLIST[i].callback = callback;
|
||||
PLAYER_CALLLIST[i].arg = arg;
|
||||
PLAYER_CALLLIST[i].DSP_mode = false;
|
||||
@@ -60,24 +59,24 @@ extern s32 Jac_RegisterPlayerCallback(PlayerCallBack callback, void* arg){
|
||||
return -1;
|
||||
}
|
||||
|
||||
extern void PlayerCallback(){
|
||||
u32 i;
|
||||
extern void PlayerCallback() {
|
||||
u32 i;
|
||||
|
||||
for(i = 0; i < 16; i++){
|
||||
for (i = 0; i < 16; i++) {
|
||||
PlayerCallBack callback = PLAYER_CALLLIST[i].callback;
|
||||
if(callback != nullptr && PLAYER_CALLLIST[i].DSP_mode == false && callback(PLAYER_CALLLIST[i].arg) == -1){
|
||||
PLAYER_CALLLIST[i].callback = nullptr;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
extern void DspPlayerCallback(){
|
||||
u32 i;
|
||||
|
||||
for(i = 0; i < 16; i++){
|
||||
PlayerCallBack callback = PLAYER_CALLLIST[i].callback;
|
||||
if(callback != nullptr && PLAYER_CALLLIST[i].DSP_mode == true && callback(PLAYER_CALLLIST[i].arg) == -1){
|
||||
if (callback != nullptr && PLAYER_CALLLIST[i].DSP_mode == false && callback(PLAYER_CALLLIST[i].arg) == -1) {
|
||||
PLAYER_CALLLIST[i].callback = nullptr;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
extern void DspPlayerCallback() {
|
||||
u32 i;
|
||||
|
||||
for (i = 0; i < 16; i++) {
|
||||
PlayerCallBack callback = PLAYER_CALLLIST[i].callback;
|
||||
if (callback != nullptr && PLAYER_CALLLIST[i].DSP_mode == true && callback(PLAYER_CALLLIST[i].arg) == -1) {
|
||||
PLAYER_CALLLIST[i].callback = nullptr;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user