Fix crash, enum-ise reverse mode

This commit is contained in:
cam900 2022-09-30 19:54:13 +09:00
parent 8b934aa4a1
commit fdd53c1587
3 changed files with 37 additions and 30 deletions

View file

@ -339,11 +339,17 @@ struct DivInstrumentC64 {
};
struct DivInstrumentAmiga {
enum DivReverseMode: unsigned char {
DIV_REVERSE_DISABLE=0,
DIV_REVERSE_ENABLE,
DIV_REVERSE_DEFAULT
};
struct SampleMap {
int freq;
short map;
unsigned char reversed;
SampleMap(int f=0, short m=-1, unsigned char r=0):
DivInstrumentAmiga::DivReverseMode reversed;
SampleMap(int f=0, short m=-1, DivInstrumentAmiga::DivReverseMode r=DivInstrumentAmiga::DivReverseMode::DIV_REVERSE_DEFAULT):
freq(f),
map(m),
reversed(r) {}
@ -395,21 +401,21 @@ struct DivInstrumentAmiga {
struct TransWaveMap: TransWaveSlice {
short ind;
unsigned char reversed;
DivReverseMode reversed;
int loopStart, loopEnd;
DivSampleLoopMode loopMode;
TransWaveMap():
TransWaveSlice(),
ind(-1),
reversed(0),
reversed(DivInstrumentAmiga::DivReverseMode::DIV_REVERSE_DEFAULT),
loopStart(-1),
loopEnd(-1),
loopMode(DIV_SAMPLE_LOOP_MAX) {}
};
short initSample;
bool reversed;
DivInstrumentAmiga::DivReverseMode reversed;
bool useNoteMap;
bool useSample;
bool useWave;
@ -448,7 +454,7 @@ struct DivInstrumentAmiga {
* get the sample reversed flag at specified note.
* @return the reversed flag.
*/
inline bool getReversed(int note) {
inline DivInstrumentAmiga::DivReverseMode getReversed(int note) {
if (useNoteMap) {
if (note<0) note=0;
if (note>119) note=119;
@ -459,7 +465,7 @@ struct DivInstrumentAmiga {
DivInstrumentAmiga():
initSample(0),
reversed(false),
reversed(DivInstrumentAmiga::DivReverseMode::DIV_REVERSE_DISABLE),
useNoteMap(false),
useSample(false),
useWave(false),

View file

@ -249,7 +249,7 @@ void DivPlatformES5506::e_pin(bool state) {
}
// get reversed
bool reversed=ins->amiga.reversed;
if (transWaveInd.reversed!=2) {
if (transWaveInd.reversed!=DivInstrumentAmiga::DivReverseMode::DIV_REVERSE_DEFAULT) {
reversed=transWaveInd.reversed;
}
const unsigned int start=offES5506<<10;
@ -601,7 +601,7 @@ void DivPlatformES5506::tick(bool sysTick) {
}
// get reversed
bool reversed=ins->amiga.reversed;
if (transWaveInd.reversed!=2) {
if (transWaveInd.reversed!=DivInstrumentAmiga::DivReverseMode::DIV_REVERSE_DEFAULT) {
reversed=transWaveInd.reversed;
}
chan[i].pcmChanged.slice=1;
@ -672,9 +672,9 @@ void DivPlatformES5506::tick(bool sysTick) {
}
// get reversed
bool reversed=ins->amiga.reversed;
if (ins->amiga.transWave.enable&&transWaveInd.reversed!=2) {
if (ins->amiga.transWave.enable&&transWaveInd.reversed!=DivInstrumentAmiga::DivReverseMode::DIV_REVERSE_DEFAULT) {
reversed=transWaveInd.reversed;
} else if (ins->amiga.useNoteMap&&noteMapind.reversed!=2) {
} else if (ins->amiga.useNoteMap&&noteMapind.reversed!=DivInstrumentAmiga::DivReverseMode::DIV_REVERSE_DEFAULT) {
reversed=noteMapind.reversed;
}
const unsigned int start=offES5506<<10;
@ -984,9 +984,9 @@ int DivPlatformES5506::dispatch(DivCommand c) {
}
// get reversed
bool reversed=ins->amiga.reversed;
if (ins->amiga.transWave.enable&&transWaveInd.reversed!=2) {
if (ins->amiga.transWave.enable&&transWaveInd.reversed!=DivInstrumentAmiga::DivReverseMode::DIV_REVERSE_DEFAULT) {
reversed=transWaveInd.reversed;
} else if (ins->amiga.useNoteMap&&noteMapind.reversed!=2) {
} else if (ins->amiga.useNoteMap&&noteMapind.reversed!=DivInstrumentAmiga::DivReverseMode::DIV_REVERSE_DEFAULT) {
reversed=noteMapind.reversed;
}
const unsigned int start=offES5506<<10;