Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 9 additions & 3 deletions src/SID.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -142,6 +142,7 @@ SID::SID() :
filter6581(new Filter6581()),
filter8580(new Filter8580()),
resampler(nullptr),
offset_6581(OFFSET_6581),
cws(AVERAGE),
dacLeakage(1.0),
p(new Params)
Expand Down Expand Up @@ -269,8 +270,7 @@ void SID::setChipModel(ChipModel new_model)
Dac dacBuilder(OSC_DAC_BITS);
dacBuilder.kinkedDac(model, dacLeakage);

//const double offset = dacBuilder.getOutput(is6581 ? OFFSET_6581 : OFFSET_8580);
const double offset = dacBuilder.getOutput(is6581 ? OFFSET_6581 : 0x7ff, is6581);
const double offset = dacBuilder.getOutput(is6581 ? offset_6581 : 0x800, is6581);

for (unsigned int i = 0; i < (1 << OSC_DAC_BITS); i++)
{
Expand Down Expand Up @@ -616,7 +616,6 @@ void SID::setPaddle(uint8_t x, uint8_t y)
paddleY = y;
}


void SID::setDacLeakage(double level)
{
#ifdef HAVE_CXX17
Expand All @@ -627,4 +626,11 @@ void SID::setDacLeakage(double level)
setChipModel(model);
}

void SID::setOffset6581(double offset)
{
// TODO determine a reasonable range
offset_6581 = 0x380 + static_cast<unsigned int>((1. - offset) * 0x200);
setChipModel(model);
}

} // namespace reSIDfp
7 changes: 7 additions & 0 deletions src/SID.h
Original file line number Diff line number Diff line change
Expand Up @@ -98,6 +98,8 @@ class SID
/// Time until #voiceSync must be run.
unsigned int nextVoiceSync;

unsigned int offset_6581;

/// Currently active chip model.
ChipModel model;

Expand Down Expand Up @@ -366,6 +368,11 @@ class SID
* Set the DAC leakage level.
*/
void setDacLeakage(double level);

/*
* Set the 6581 wave offset.
*/
void setOffset6581(double offset);
};

} // namespace reSIDfp
Expand Down
2 changes: 2 additions & 0 deletions src/State.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -88,6 +88,7 @@ int State::saveState(SID &s, char* buffer, int size)
state.bus_value = s.busValue;
state.bus_value_ttl = s.busValueTtl;
state.nextVoiceSync = s.nextVoiceSync;
state.offset_6581 = s.offset_6581;
state.paddle_x = s.paddleX;
state.paddle_y = s.paddleY;
state.model = s.model;
Expand Down Expand Up @@ -199,6 +200,7 @@ void State::restoreState(SID &s, char* buffer, int size)
s.busValue = state.bus_value;
s.busValueTtl = state.bus_value_ttl;
s.nextVoiceSync = state.nextVoiceSync;
s.offset_6581 = state.offset_6581;
s.paddleX = state.paddle_x;
s.paddleY = state.paddle_y;
s.model = state.model;
Expand Down
1 change: 1 addition & 0 deletions src/State.h
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,7 @@ struct State
// SID
int bus_value_ttl;
unsigned int nextVoiceSync;
unsigned int offset_6581;
ChipModel model;
CombinedWaveforms cws;
double dacLeakage;
Expand Down
5 changes: 5 additions & 0 deletions src/residfp/residfp.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -155,6 +155,11 @@ void residfp::enableOld6581caps(bool enable)
sid.enableOld6581caps(enable);
}

void residfp::setOffset6581(double offset)
{
sid.setOffset6581(offset);
}

void residfp::setPaddle(unsigned char x, unsigned char y)
{
sid.setPaddle(x, y);
Expand Down
10 changes: 10 additions & 0 deletions src/residfp/residfp.h
Original file line number Diff line number Diff line change
Expand Up @@ -290,6 +290,16 @@ class RESIDFP_EXTERN residfp
* @since 1.2
*/
void setDacLeakage(double level);

/**
* Set the 6581 wave offset.
* Affects the volume of digi samples.
*
* @param offset the waveform offset, between 0 (faint digis) and 1 (loud digis)
*
* @since 1.2
*/
void setOffset6581(double offset);
};

}
Expand Down
Loading