ES5506: Amiga pitch option......

This commit is contained in:
tildearrow 2024-06-24 02:44:17 -05:00
parent de935c3aac
commit 6d8a343ead
7 changed files with 233 additions and 77 deletions

View file

@ -39,17 +39,11 @@ bool DivEngine::loadIT(unsigned char* file, size_t len) {
try {
DivSong ds;
ds.version=DIV_VERSION_XM;
//ds.linearPitch=0;
//ds.pitchMacroIsLinear=false;
ds.noSlidesOnFirstTick=true;
ds.rowResetsArpPos=true;
ds.ignoreJumpAtEnd=false;
ds.pitchSlideSpeed=4;
ds.system[0]=DIV_SYSTEM_ES5506;
ds.systemFlags[0].set("amigaVol",true);
ds.systemLen=1;
logV("Impulse Tracker module");
// load here
@ -81,6 +75,12 @@ bool DivEngine::loadIT(unsigned char* file, size_t len) {
unsigned short flags=reader.readS();
unsigned short special=reader.readS();
if (flags&8) {
ds.linearPitch=2;
} else {
ds.linearPitch=0;
}
unsigned char globalVol=reader.readC();
unsigned char masterVol=reader.readC();
unsigned char initSpeed=reader.readC();
@ -399,6 +399,7 @@ bool DivEngine::loadIT(unsigned char* file, size_t len) {
}
// read patterns
int maxChan=0;
for (int i=0; i<patCount; i++) {
unsigned char mask[64];
unsigned char note[64];
@ -449,6 +450,8 @@ bool DivEngine::loadIT(unsigned char* file, size_t len) {
}
chan&=63;
if (chan>maxChan) maxChan=chan;
if (mask[chan]&1) {
note[chan]=reader.readC();
hasNote=true;
@ -510,8 +513,14 @@ bool DivEngine::loadIT(unsigned char* file, size_t len) {
}
}
logV("DAMN IT: %x",insPtr[0]);
logV("DAMN IT: %x",samplePtr[0]);
for (int i=0; i<(maxChan+32)>>5; i++) {
ds.system[i]=DIV_SYSTEM_ES5506;
ds.systemFlags[i].set("amigaVol",true);
if (ds.linearPitch!=2) {
ds.systemFlags[i].set("amigaPitch",true);
}
}
ds.systemLen=(maxChan+32)>>5;
if (active) quitDispatch();
BUSY_BEGIN_SOFT;