Merge branch 'master' of https://github.com/tildearrow/furnace into es5506_alt
* 'master' of https://github.com/tildearrow/furnace: (70 commits) whoops GUI: AY8930 credits GUI: fix inability to close subsongs BANK OPN: wire up ExtCh system fix build failure dev95 - multiple songs in a single file (READ) DO NOT USE - THIS FAILS - WORK IN PROGRESS enforce asset limits old .dmf loading improvements add AICA and YMZ ADPCM formats allocate ID for YMZ280B harden .fur file saver Fix AY VGM output, Fix presets preparations for UI improvements GUI: add more presets prepare for ExtCh OPN/OPNA GUI: clarify that lock layout doesn't work yet GUI: remember last state of order edit mode GUI: store edit/followOrders/followPattern state ... # Conflicts: # src/engine/fileOps.cpp # src/engine/platform/ym2610.cpp # src/engine/platform/ym2610b.cpp # src/engine/sample.cpp # src/engine/sample.h # src/engine/sysDef.cpp # src/gui/doAction.cpp # src/gui/sysConf.cpp
This commit is contained in:
commit
028adf2c8e
84 changed files with 7825 additions and 1146 deletions
|
|
@ -564,6 +564,11 @@ void DivEngine::performVGMWrite(SafeWriter* w, DivSystem sys, DivRegWrite& write
|
|||
break;
|
||||
}
|
||||
break;
|
||||
case DIV_SYSTEM_OPN:
|
||||
w->writeC(5|baseAddr1);
|
||||
w->writeC(write.addr&0xff);
|
||||
w->writeC(write.val);
|
||||
break;
|
||||
case DIV_SYSTEM_OPLL:
|
||||
case DIV_SYSTEM_OPLL_DRUMS:
|
||||
case DIV_SYSTEM_VRC7:
|
||||
|
|
@ -637,6 +642,71 @@ void DivEngine::performVGMWrite(SafeWriter* w, DivSystem sys, DivRegWrite& write
|
|||
break;
|
||||
}
|
||||
break;
|
||||
case DIV_SYSTEM_SCC:
|
||||
if (write.addr<0x80) {
|
||||
w->writeC(0xd2);
|
||||
w->writeC(baseAddr2|0);
|
||||
w->writeC(write.addr&0x7f);
|
||||
w->writeC(write.val&0xff);
|
||||
} else if (write.addr<0x8a) {
|
||||
w->writeC(0xd2);
|
||||
w->writeC(baseAddr2|1);
|
||||
w->writeC((write.addr-0x80)&0x7f);
|
||||
w->writeC(write.val&0xff);
|
||||
} else if (write.addr<0x8f) {
|
||||
w->writeC(0xd2);
|
||||
w->writeC(baseAddr2|2);
|
||||
w->writeC((write.addr-0x8a)&0x7f);
|
||||
w->writeC(write.val&0xff);
|
||||
} else if (write.addr<0x90) {
|
||||
w->writeC(0xd2);
|
||||
w->writeC(baseAddr2|3);
|
||||
w->writeC((write.addr-0x8f)&0x7f);
|
||||
w->writeC(write.val&0xff);
|
||||
} else if (write.addr>=0xe0) {
|
||||
w->writeC(0xd2);
|
||||
w->writeC(baseAddr2|5);
|
||||
w->writeC((write.addr-0xe0)&0x7f);
|
||||
w->writeC(write.val&0xff);
|
||||
} else {
|
||||
logW("SCC: writing to unmapped address %.2x!",write.addr);
|
||||
}
|
||||
break;
|
||||
case DIV_SYSTEM_SCC_PLUS:
|
||||
if (write.addr<0x80) {
|
||||
w->writeC(0xd2);
|
||||
w->writeC(baseAddr2|0);
|
||||
w->writeC(write.addr&0x7f);
|
||||
w->writeC(write.val&0xff);
|
||||
} else if (write.addr<0xa0) {
|
||||
w->writeC(0xd2);
|
||||
w->writeC(baseAddr2|4);
|
||||
w->writeC(write.addr);
|
||||
w->writeC(write.val&0xff);
|
||||
} else if (write.addr<0xaa) {
|
||||
w->writeC(0xd2);
|
||||
w->writeC(baseAddr2|1);
|
||||
w->writeC((write.addr-0xa0)&0x7f);
|
||||
w->writeC(write.val&0xff);
|
||||
} else if (write.addr<0xaf) {
|
||||
w->writeC(0xd2);
|
||||
w->writeC(baseAddr2|2);
|
||||
w->writeC((write.addr-0xaa)&0x7f);
|
||||
w->writeC(write.val&0xff);
|
||||
} else if (write.addr<0xb0) {
|
||||
w->writeC(0xd2);
|
||||
w->writeC(baseAddr2|3);
|
||||
w->writeC((write.addr-0xaf)&0x7f);
|
||||
w->writeC(write.val&0xff);
|
||||
} else if (write.addr>=0xe0) {
|
||||
w->writeC(0xd2);
|
||||
w->writeC(baseAddr2|5);
|
||||
w->writeC((write.addr-0xe0)&0x7f);
|
||||
w->writeC(write.val&0xff);
|
||||
} else {
|
||||
logW("SCC+: writing to unmapped address %.2x!",write.addr);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
logW("write not handled!");
|
||||
break;
|
||||
|
|
@ -876,11 +946,41 @@ SafeWriter* DivEngine::saveVGM(bool* sysToExport, bool loop, int version) {
|
|||
}
|
||||
break;
|
||||
case DIV_SYSTEM_AY8910:
|
||||
case DIV_SYSTEM_AY8930:
|
||||
case DIV_SYSTEM_AY8930: {
|
||||
if (!hasAY) {
|
||||
bool hasClockDivider=false; // Configurable clock divider
|
||||
bool hasStereo=true; // Stereo
|
||||
hasAY=disCont[i].dispatch->chipClock;
|
||||
ayConfig=(song.system[i]==DIV_SYSTEM_AY8930)?3:0;
|
||||
ayFlags=1;
|
||||
if (song.system[i]==DIV_SYSTEM_AY8930) { // AY8930
|
||||
ayConfig=0x03;
|
||||
hasClockDivider=true;
|
||||
} else {
|
||||
switch ((song.systemFlags[i]>>4)&3) {
|
||||
default:
|
||||
case 0: // AY8910
|
||||
ayConfig=0x00;
|
||||
break;
|
||||
case 1: // YM2149
|
||||
ayConfig=0x10;
|
||||
hasClockDivider=true;
|
||||
break;
|
||||
case 2: // Sunsoft 5B
|
||||
ayConfig=0x10;
|
||||
ayFlags|=0x12; // Clock internally divided, Single sound output
|
||||
hasStereo=false; // due to above, can't be per-channel stereo configurable
|
||||
break;
|
||||
case 3: // AY8914
|
||||
ayConfig=0x04;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (hasClockDivider && ((song.systemFlags[i]>>7)&1)) {
|
||||
ayFlags|=0x10;
|
||||
}
|
||||
if (hasStereo && ((song.systemFlags[i]>>6)&1)) {
|
||||
ayFlags|=0x80;
|
||||
}
|
||||
willExport[i]=true;
|
||||
} else if (!(hasAY&0x40000000)) {
|
||||
isSecond[i]=true;
|
||||
|
|
@ -889,6 +989,7 @@ SafeWriter* DivEngine::saveVGM(bool* sysToExport, bool loop, int version) {
|
|||
howManyChips++;
|
||||
}
|
||||
break;
|
||||
}
|
||||
case DIV_SYSTEM_SAA1099:
|
||||
if (!hasSAA) {
|
||||
hasSAA=disCont[i].dispatch->chipClock;
|
||||
|
|
@ -924,6 +1025,18 @@ SafeWriter* DivEngine::saveVGM(bool* sysToExport, bool loop, int version) {
|
|||
howManyChips++;
|
||||
}
|
||||
break;
|
||||
case DIV_SYSTEM_OPN:
|
||||
if (!hasOPN) {
|
||||
hasOPN=disCont[i].dispatch->chipClock;
|
||||
willExport[i]=true;
|
||||
writeDACSamples=true;
|
||||
} else if (!(hasOPN&0x40000000)) {
|
||||
isSecond[i]=true;
|
||||
willExport[i]=true;
|
||||
hasOPN|=0x40000000;
|
||||
howManyChips++;
|
||||
}
|
||||
break;
|
||||
case DIV_SYSTEM_OPLL:
|
||||
case DIV_SYSTEM_OPLL_DRUMS:
|
||||
case DIV_SYSTEM_VRC7:
|
||||
|
|
@ -1042,6 +1155,24 @@ SafeWriter* DivEngine::saveVGM(bool* sysToExport, bool loop, int version) {
|
|||
howManyChips++;
|
||||
}
|
||||
break;
|
||||
case DIV_SYSTEM_SCC:
|
||||
case DIV_SYSTEM_SCC_PLUS:
|
||||
if (!hasK051649) {
|
||||
hasK051649=disCont[i].dispatch->chipClock;
|
||||
if (song.system[i]==DIV_SYSTEM_SCC_PLUS) {
|
||||
hasK051649|=0x80000000;
|
||||
}
|
||||
willExport[i]=true;
|
||||
} else if (!(hasK051649&0x40000000)) {
|
||||
isSecond[i]=true;
|
||||
willExport[i]=true;
|
||||
hasK051649|=0x40000000;
|
||||
if (song.system[i]==DIV_SYSTEM_SCC_PLUS) {
|
||||
hasK051649|=0x80000000;
|
||||
}
|
||||
howManyChips++;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue