NES: puNES acquireDirect(), part 2
per-chan osc
This commit is contained in:
parent
5df3e1f030
commit
29849972dd
|
@ -112,6 +112,11 @@ void DivPlatformNES::acquire_puNES(blip_buffer_t** bb, size_t len) {
|
||||||
|
|
||||||
nes->timestamp=0;
|
nes->timestamp=0;
|
||||||
nes->bb=bb[0];
|
nes->bb=bb[0];
|
||||||
|
nes->S1.oscBuf=oscBuf[0];
|
||||||
|
nes->S2.oscBuf=oscBuf[1];
|
||||||
|
nes->TR.oscBuf=oscBuf[2];
|
||||||
|
nes->NS.oscBuf=oscBuf[3];
|
||||||
|
nes->DMC.oscBuf=oscBuf[4];
|
||||||
|
|
||||||
for (size_t i=0; i<len; i++) {
|
for (size_t i=0; i<len; i++) {
|
||||||
// heuristic
|
// heuristic
|
||||||
|
@ -140,16 +145,6 @@ void DivPlatformNES::acquire_puNES(blip_buffer_t** bb, size_t len) {
|
||||||
i+=pcmAdvance-1;
|
i+=pcmAdvance-1;
|
||||||
|
|
||||||
doPCM;
|
doPCM;
|
||||||
|
|
||||||
/*
|
|
||||||
if (++writeOscBuf>=32) {
|
|
||||||
writeOscBuf=0;
|
|
||||||
oscBuf[0]->putSample(i,isMuted[0]?0:(nes->S1.output<<11));
|
|
||||||
oscBuf[1]->putSample(i,isMuted[1]?0:(nes->S2.output<<11));
|
|
||||||
oscBuf[2]->putSample(i,isMuted[2]?0:(nes->TR.output<<11));
|
|
||||||
oscBuf[3]->putSample(i,isMuted[3]?0:(nes->NS.output<<11));
|
|
||||||
oscBuf[4]->putSample(i,isMuted[4]?0:(nes->DMC.output<<8));
|
|
||||||
}*/
|
|
||||||
}
|
}
|
||||||
apu_tick(nes,len);
|
apu_tick(nes,len);
|
||||||
|
|
||||||
|
|
|
@ -324,6 +324,12 @@ void apu_tick(struct NESAPU* a, int len) {
|
||||||
blip_add_delta(a->bb,a->timestamp,sample-a->lastSample);
|
blip_add_delta(a->bb,a->timestamp,sample-a->lastSample);
|
||||||
a->lastSample=sample;
|
a->lastSample=sample;
|
||||||
}
|
}
|
||||||
|
// output chan osc
|
||||||
|
a->S1.oscBuf->putSample(a->timestamp,a->muted[0]?0:(a->S1.output<<11));
|
||||||
|
a->S2.oscBuf->putSample(a->timestamp,a->muted[1]?0:(a->S2.output<<11));
|
||||||
|
a->TR.oscBuf->putSample(a->timestamp,a->muted[2]?0:(a->TR.output<<11));
|
||||||
|
a->NS.oscBuf->putSample(a->timestamp,a->muted[3]?0:(a->NS.output<<11));
|
||||||
|
a->DMC.oscBuf->putSample(a->timestamp,a->muted[4]?0:(a->DMC.output<<8));
|
||||||
|
|
||||||
rem-=advance;
|
rem-=advance;
|
||||||
a->timestamp++;
|
a->timestamp++;
|
||||||
|
|
|
@ -23,6 +23,7 @@
|
||||||
|
|
||||||
#include "common.h"
|
#include "common.h"
|
||||||
#include "blip_buf.h"
|
#include "blip_buf.h"
|
||||||
|
#include "../../../dispatch.h"
|
||||||
|
|
||||||
enum dmc_types_of_dma { DMC_NORMAL, DMC_CPU_WRITE, DMC_R4014, DMC_NNL_DMA };
|
enum dmc_types_of_dma { DMC_NORMAL, DMC_CPU_WRITE, DMC_R4014, DMC_NNL_DMA };
|
||||||
enum apu_channels { APU_S1, APU_S2, APU_TR, APU_NS, APU_DMC, APU_EXTRA, APU_MASTER };
|
enum apu_channels { APU_S1, APU_S2, APU_TR, APU_NS, APU_DMC, APU_EXTRA, APU_MASTER };
|
||||||
|
@ -341,6 +342,8 @@ typedef struct _apuSquare {
|
||||||
_length_counter length;
|
_length_counter length;
|
||||||
/* output */
|
/* output */
|
||||||
SWORD output;
|
SWORD output;
|
||||||
|
/* Furnace: chan osc buffer */
|
||||||
|
DivDispatchOscBuffer* oscBuf;
|
||||||
} _apuSquare;
|
} _apuSquare;
|
||||||
typedef struct _apuTriangle {
|
typedef struct _apuTriangle {
|
||||||
/* timer */
|
/* timer */
|
||||||
|
@ -355,6 +358,8 @@ typedef struct _apuTriangle {
|
||||||
BYTE sequencer;
|
BYTE sequencer;
|
||||||
/* output */
|
/* output */
|
||||||
SWORD output;
|
SWORD output;
|
||||||
|
/* Furnace: chan osc buffer */
|
||||||
|
DivDispatchOscBuffer* oscBuf;
|
||||||
} _apuTriangle;
|
} _apuTriangle;
|
||||||
typedef struct _apuNoise {
|
typedef struct _apuNoise {
|
||||||
/* timer */
|
/* timer */
|
||||||
|
@ -375,6 +380,8 @@ typedef struct _apuNoise {
|
||||||
BYTE sequencer;
|
BYTE sequencer;
|
||||||
/* output */
|
/* output */
|
||||||
SWORD output;
|
SWORD output;
|
||||||
|
/* Furnace: chan osc buffer */
|
||||||
|
DivDispatchOscBuffer* oscBuf;
|
||||||
} _apuNoise;
|
} _apuNoise;
|
||||||
typedef struct _apuDMC {
|
typedef struct _apuDMC {
|
||||||
/* ogni quanti cicli devo generare un output */
|
/* ogni quanti cicli devo generare un output */
|
||||||
|
@ -404,6 +411,9 @@ typedef struct _apuDMC {
|
||||||
|
|
||||||
/* misc */
|
/* misc */
|
||||||
BYTE tick_type;
|
BYTE tick_type;
|
||||||
|
|
||||||
|
/* Furnace: chan osc buffer */
|
||||||
|
DivDispatchOscBuffer* oscBuf;
|
||||||
} _apuDMC;
|
} _apuDMC;
|
||||||
|
|
||||||
struct _nla_table {
|
struct _nla_table {
|
||||||
|
|
Loading…
Reference in a new issue