From 29849972dd7971105afbd717381da5115afc64c3 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Fri, 7 Mar 2025 02:02:04 -0500 Subject: [PATCH] NES: puNES acquireDirect(), part 2 per-chan osc --- src/engine/platform/nes.cpp | 15 +++++---------- src/engine/platform/sound/nes/apu.cpp | 6 ++++++ src/engine/platform/sound/nes/apu.h | 10 ++++++++++ 3 files changed, 21 insertions(+), 10 deletions(-) diff --git a/src/engine/platform/nes.cpp b/src/engine/platform/nes.cpp index aae2d4ff0..428556a95 100644 --- a/src/engine/platform/nes.cpp +++ b/src/engine/platform/nes.cpp @@ -112,6 +112,11 @@ void DivPlatformNES::acquire_puNES(blip_buffer_t** bb, size_t len) { nes->timestamp=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=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); diff --git a/src/engine/platform/sound/nes/apu.cpp b/src/engine/platform/sound/nes/apu.cpp index 757201eef..1a435632e 100644 --- a/src/engine/platform/sound/nes/apu.cpp +++ b/src/engine/platform/sound/nes/apu.cpp @@ -324,6 +324,12 @@ void apu_tick(struct NESAPU* a, int len) { blip_add_delta(a->bb,a->timestamp,sample-a->lastSample); 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; a->timestamp++; diff --git a/src/engine/platform/sound/nes/apu.h b/src/engine/platform/sound/nes/apu.h index 0714f03c4..d1f3d3e6f 100644 --- a/src/engine/platform/sound/nes/apu.h +++ b/src/engine/platform/sound/nes/apu.h @@ -23,6 +23,7 @@ #include "common.h" #include "blip_buf.h" +#include "../../../dispatch.h" 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 }; @@ -341,6 +342,8 @@ typedef struct _apuSquare { _length_counter length; /* output */ SWORD output; + /* Furnace: chan osc buffer */ + DivDispatchOscBuffer* oscBuf; } _apuSquare; typedef struct _apuTriangle { /* timer */ @@ -355,6 +358,8 @@ typedef struct _apuTriangle { BYTE sequencer; /* output */ SWORD output; + /* Furnace: chan osc buffer */ + DivDispatchOscBuffer* oscBuf; } _apuTriangle; typedef struct _apuNoise { /* timer */ @@ -375,6 +380,8 @@ typedef struct _apuNoise { BYTE sequencer; /* output */ SWORD output; + /* Furnace: chan osc buffer */ + DivDispatchOscBuffer* oscBuf; } _apuNoise; typedef struct _apuDMC { /* ogni quanti cicli devo generare un output */ @@ -404,6 +411,9 @@ typedef struct _apuDMC { /* misc */ BYTE tick_type; + + /* Furnace: chan osc buffer */ + DivDispatchOscBuffer* oscBuf; } _apuDMC; struct _nla_table {