don't unsigned char up yet... first get rid of octave
This commit is contained in:
parent
5dd9b98daf
commit
7d7d95a97d
3 changed files with 29 additions and 31 deletions
|
|
@ -35,22 +35,14 @@
|
|||
#define DIV_PAT_NOTE 0
|
||||
#define DIV_PAT_INS 1
|
||||
#define DIV_PAT_VOL 2
|
||||
#define DIV_PAT_BITS 3
|
||||
#define DIV_PAT_FXBITS 4
|
||||
#define DIV_PAT_VALBITS 5
|
||||
#define DIV_PAT_EFFECTS 16
|
||||
#define DIV_PAT_EFFECT_VALS 17
|
||||
#define DIV_PAT_FX(_x) (3+((_x)<<1))
|
||||
#define DIV_PAT_FXVAL(_x) (4+((_x)<<1))
|
||||
|
||||
#define DIV_NOTE_NULL_PAT 252
|
||||
#define DIV_NOTE_OFF 253
|
||||
#define DIV_NOTE_REL 254
|
||||
#define DIV_MACRO_REL 255
|
||||
|
||||
#define DIV_NOTE_BIT 1
|
||||
#define DIV_INS_BIT 2
|
||||
#define DIV_VOL_BIT 4
|
||||
#define DIV_EFFECT_BIT(x) (1<<(x));
|
||||
|
||||
// sample related
|
||||
#define DIV_MAX_SAMPLE_TYPE 4
|
||||
|
||||
|
|
|
|||
|
|
@ -820,54 +820,60 @@ bool DivEngine::loadDMF(unsigned char* file, size_t len) {
|
|||
} else if (note==0 && octave!=0) {
|
||||
// "BUG" note!
|
||||
pat->newData[k][DIV_PAT_NOTE]=DIV_NOTE_NULL_PAT;
|
||||
} else
|
||||
int seek=(note+(signed char)octave*12)+60;
|
||||
if (seek<0 || seek>=180) {
|
||||
return "???";
|
||||
} else if (note==0 && octave==0) {
|
||||
pat->newData[k][DIV_PAT_NOTE]=-1;
|
||||
} else {
|
||||
int seek=(note+(signed char)octave*12)+60;
|
||||
if (seek<0 || seek>=180) {
|
||||
pat->newData[k][DIV_PAT_NOTE]=DIV_NOTE_NULL_PAT;
|
||||
} else {
|
||||
pat->newData[k][DIV_PAT_NOTE]=seek;
|
||||
}
|
||||
}
|
||||
|
||||
// volume
|
||||
pat->data[k][3]=reader.readS();
|
||||
pat->newData[k][DIV_PAT_VOL]=reader.readS();
|
||||
if (ds.version<0x0a) {
|
||||
// back then volume was stored as 00-ff instead of 00-7f/0-f
|
||||
if (i>5) {
|
||||
pat->data[k][3]>>=4;
|
||||
pat->newData[k][DIV_PAT_VOL]>>=4;
|
||||
} else {
|
||||
pat->data[k][3]>>=1;
|
||||
pat->newData[k][DIV_PAT_VOL]>>=1;
|
||||
}
|
||||
}
|
||||
if (ds.version<0x12) {
|
||||
if (ds.system[0]==DIV_SYSTEM_GB && i==2 && pat->data[k][3]>0) {
|
||||
if (ds.system[0]==DIV_SYSTEM_GB && i==2 && pat->newData[k][DIV_PAT_VOL]>0) {
|
||||
// volume range of GB wave channel was 0-3 rather than 0-F
|
||||
pat->data[k][3]=(pat->data[k][3]&3)*5;
|
||||
pat->newData[k][DIV_PAT_VOL]=(pat->data[k][DIV_PAT_VOL]&3)*5;
|
||||
}
|
||||
}
|
||||
for (int l=0; l<chan.effectCols; l++) {
|
||||
// effect
|
||||
pat->data[k][4+(l<<1)]=reader.readS();
|
||||
pat->data[k][5+(l<<1)]=reader.readS();
|
||||
pat->newData[k][DIV_PAT_FX(l)]=reader.readS();
|
||||
pat->newData[k][DIV_PAT_FXVAL(l)]=reader.readS();
|
||||
|
||||
if (ds.version<0x14) {
|
||||
if (pat->data[k][4+(l<<1)]==0xe5 && pat->data[k][5+(l<<1)]!=-1) {
|
||||
pat->data[k][5+(l<<1)]=128+((pat->data[k][5+(l<<1)]-128)/4);
|
||||
// the range of E5xx was different back then
|
||||
if (pat->newData[k][DIV_PAT_FX(l)]==0xe5 && pat->newData[k][DIV_PAT_FXVAL(l)]!=-1) {
|
||||
pat->newData[k][DIV_PAT_FXVAL(l)]=128+((pat->newData[k][DIV_PAT_FXVAL(l)]-128)/4);
|
||||
}
|
||||
}
|
||||
}
|
||||
// instrument
|
||||
pat->data[k][2]=reader.readS();
|
||||
pat->newData[k][DIV_PAT_INS]=reader.readS();
|
||||
|
||||
// this is sad
|
||||
if (ds.system[0]==DIV_SYSTEM_NES_FDS) {
|
||||
if (i==5 && pat->data[k][2]!=-1) {
|
||||
if (pat->data[k][2]>=0 && pat->data[k][2]<ds.insLen) {
|
||||
ds.ins[pat->data[k][2]]->type=DIV_INS_FDS;
|
||||
if (i==5 && pat->newData[k][DIV_PAT_INS]!=-1) {
|
||||
if (pat->newData[k][DIV_PAT_INS]>=0 && pat->newData[k][DIV_PAT_INS]<ds.insLen) {
|
||||
ds.ins[pat->newData[k][DIV_PAT_INS]]->type=DIV_INS_FDS;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (ds.system[0]==DIV_SYSTEM_MSX2) {
|
||||
if (i>=3 && pat->data[k][2]!=-1) {
|
||||
if (pat->data[k][2]>=0 && pat->data[k][2]<ds.insLen) {
|
||||
ds.ins[pat->data[k][2]]->type=DIV_INS_SCC;
|
||||
if (i>=3 && pat->newData[k][DIV_PAT_INS]!=-1) {
|
||||
if (pat->newData[k][DIV_PAT_INS]>=0 && pat->newData[k][DIV_PAT_INS]<ds.insLen) {
|
||||
ds.ins[pat->newData[k][DIV_PAT_INS]]->type=DIV_INS_SCC;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -22,7 +22,7 @@
|
|||
|
||||
struct DivPattern {
|
||||
String name;
|
||||
unsigned char newData[DIV_MAX_ROWS][DIV_MAX_COLS];
|
||||
short newData[DIV_MAX_ROWS][DIV_MAX_COLS];
|
||||
|
||||
/**
|
||||
* clear the pattern.
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue