mirror of
https://github.com/tildearrow/furnace.git
synced 2024-11-15 17:25:06 +00:00
Merge remote-tracking branch 'upstream/master' into macro
This commit is contained in:
commit
b167034e06
4 changed files with 91 additions and 0 deletions
|
@ -369,7 +369,24 @@ void DivPlatformArcade::tick() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (chan[i].keyOn || chan[i].keyOff) {
|
if (chan[i].keyOn || chan[i].keyOff) {
|
||||||
|
if (chan[i].hardReset && chan[i].keyOn) {
|
||||||
|
for (int j=0; j<4; j++) {
|
||||||
|
unsigned short baseAddr=chanOffs[i]|opOffs[j];
|
||||||
|
immWrite(baseAddr+ADDR_SL_RR,0x0f);
|
||||||
|
immWrite(baseAddr+ADDR_TL,0x7f);
|
||||||
|
oldWrites[baseAddr+ADDR_SL_RR]=-1;
|
||||||
|
oldWrites[baseAddr+ADDR_TL]=-1;
|
||||||
|
}
|
||||||
|
}
|
||||||
immWrite(0x08,i);
|
immWrite(0x08,i);
|
||||||
|
if (chan[i].hardReset && chan[i].keyOn) {
|
||||||
|
for (int j=0; j<4; j++) {
|
||||||
|
unsigned short baseAddr=chanOffs[i]|opOffs[j];
|
||||||
|
for (int k=0; k<9; k++) {
|
||||||
|
immWrite(baseAddr+ADDR_SL_RR,0x0f);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
chan[i].keyOff=false;
|
chan[i].keyOff=false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -605,6 +622,9 @@ int DivPlatformArcade::dispatch(DivCommand c) {
|
||||||
immWrite(0x19,0x80|pmDepth);
|
immWrite(0x19,0x80|pmDepth);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
case DIV_CMD_FM_HARD_RESET:
|
||||||
|
chan[c.chan].hardReset=c.value;
|
||||||
|
break;
|
||||||
case DIV_CMD_STD_NOISE_FREQ: {
|
case DIV_CMD_STD_NOISE_FREQ: {
|
||||||
if (c.chan!=7) break;
|
if (c.chan!=7) break;
|
||||||
if (c.value) {
|
if (c.value) {
|
||||||
|
|
|
@ -137,6 +137,9 @@ const char* DivPlatformTX81Z::getEffectName(unsigned char effect) {
|
||||||
case 0x1f:
|
case 0x1f:
|
||||||
return "1Fxx: Set PM depth (0 to 7F)";
|
return "1Fxx: Set PM depth (0 to 7F)";
|
||||||
break;
|
break;
|
||||||
|
case 0x30:
|
||||||
|
return "30xx: Toggle hard envelope reset on new notes";
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
@ -338,12 +341,29 @@ void DivPlatformTX81Z::tick() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (chan[i].keyOn || chan[i].keyOff) {
|
if (chan[i].keyOn || chan[i].keyOff) {
|
||||||
|
if (chan[i].hardReset && chan[i].keyOn) {
|
||||||
|
for (int j=0; j<4; j++) {
|
||||||
|
unsigned short baseAddr=chanOffs[i]|opOffs[j];
|
||||||
|
immWrite(baseAddr+ADDR_SL_RR,0x0f);
|
||||||
|
immWrite(baseAddr+ADDR_TL,0x7f);
|
||||||
|
oldWrites[baseAddr+ADDR_SL_RR]=-1;
|
||||||
|
oldWrites[baseAddr+ADDR_TL]=-1;
|
||||||
|
}
|
||||||
|
}
|
||||||
if (isMuted[i]) {
|
if (isMuted[i]) {
|
||||||
immWrite(chanOffs[i]+ADDR_LR_FB_ALG,(chan[i].state.alg&7)|(chan[i].state.fb<<3)|0x00);
|
immWrite(chanOffs[i]+ADDR_LR_FB_ALG,(chan[i].state.alg&7)|(chan[i].state.fb<<3)|0x00);
|
||||||
} else {
|
} else {
|
||||||
//if (chan[i].keyOn) immWrite(0x08,i);
|
//if (chan[i].keyOn) immWrite(0x08,i);
|
||||||
immWrite(chanOffs[i]+ADDR_LR_FB_ALG,(chan[i].state.alg&7)|(chan[i].state.fb<<3)|0x00|(chan[i].chVolR<<7));
|
immWrite(chanOffs[i]+ADDR_LR_FB_ALG,(chan[i].state.alg&7)|(chan[i].state.fb<<3)|0x00|(chan[i].chVolR<<7));
|
||||||
}
|
}
|
||||||
|
if (chan[i].hardReset && chan[i].keyOn) {
|
||||||
|
for (int j=0; j<4; j++) {
|
||||||
|
unsigned short baseAddr=chanOffs[i]|opOffs[j];
|
||||||
|
for (int k=0; k<9; k++) {
|
||||||
|
immWrite(baseAddr+ADDR_SL_RR,0x0f);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
chan[i].keyOff=false;
|
chan[i].keyOff=false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -605,6 +625,9 @@ int DivPlatformTX81Z::dispatch(DivCommand c) {
|
||||||
immWrite(0x19,0x80|pmDepth);
|
immWrite(0x19,0x80|pmDepth);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
case DIV_CMD_FM_HARD_RESET:
|
||||||
|
chan[c.chan].hardReset=c.value;
|
||||||
|
break;
|
||||||
case DIV_CMD_STD_NOISE_FREQ: {
|
case DIV_CMD_STD_NOISE_FREQ: {
|
||||||
if (c.chan!=7) break;
|
if (c.chan!=7) break;
|
||||||
if (c.value) {
|
if (c.value) {
|
||||||
|
|
|
@ -309,6 +309,9 @@ const char* DivPlatformYM2610::getEffectName(unsigned char effect) {
|
||||||
case 0x29:
|
case 0x29:
|
||||||
return "29xy: Set SSG auto-envelope (x: numerator; y: denominator)";
|
return "29xy: Set SSG auto-envelope (x: numerator; y: denominator)";
|
||||||
break;
|
break;
|
||||||
|
case 0x30:
|
||||||
|
return "30xx: Toggle hard envelope reset on new notes";
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
@ -489,7 +492,25 @@ void DivPlatformYM2610::tick() {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (chan[i].keyOn || chan[i].keyOff) {
|
if (chan[i].keyOn || chan[i].keyOff) {
|
||||||
|
if (chan[i].hardReset && chan[i].keyOn) {
|
||||||
|
for (int j=0; j<4; j++) {
|
||||||
|
unsigned short baseAddr=chanOffs[i]|opOffs[j];
|
||||||
|
immWrite(baseAddr+ADDR_SL_RR,0x0f);
|
||||||
|
immWrite(baseAddr+ADDR_TL,0x7f);
|
||||||
|
oldWrites[baseAddr+ADDR_SL_RR]=-1;
|
||||||
|
oldWrites[baseAddr+ADDR_TL]=-1;
|
||||||
|
//rWrite(baseAddr+ADDR_SL_RR,(op.rr&15)|(op.sl<<4));
|
||||||
|
}
|
||||||
|
}
|
||||||
immWrite(0x28,0x00|konOffs[i]);
|
immWrite(0x28,0x00|konOffs[i]);
|
||||||
|
if (chan[i].hardReset && chan[i].keyOn) {
|
||||||
|
for (int j=0; j<4; j++) {
|
||||||
|
unsigned short baseAddr=chanOffs[i]|opOffs[j];
|
||||||
|
for (int k=0; k<100; k++) {
|
||||||
|
immWrite(baseAddr+ADDR_SL_RR,0x0f);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
chan[i].keyOff=false;
|
chan[i].keyOff=false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -930,6 +951,9 @@ int DivPlatformYM2610::dispatch(DivCommand c) {
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
case DIV_CMD_FM_HARD_RESET:
|
||||||
|
chan[c.chan].hardReset=c.value;
|
||||||
|
break;
|
||||||
case DIV_ALWAYS_SET_VOLUME:
|
case DIV_ALWAYS_SET_VOLUME:
|
||||||
return 0;
|
return 0;
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -373,6 +373,9 @@ const char* DivPlatformYM2610B::getEffectName(unsigned char effect) {
|
||||||
case 0x29:
|
case 0x29:
|
||||||
return "29xy: Set SSG auto-envelope (x: numerator; y: denominator)";
|
return "29xy: Set SSG auto-envelope (x: numerator; y: denominator)";
|
||||||
break;
|
break;
|
||||||
|
case 0x30:
|
||||||
|
return "30xx: Toggle hard envelope reset on new notes";
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
@ -553,7 +556,25 @@ void DivPlatformYM2610B::tick() {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (chan[i].keyOn || chan[i].keyOff) {
|
if (chan[i].keyOn || chan[i].keyOff) {
|
||||||
|
if (chan[i].hardReset && chan[i].keyOn) {
|
||||||
|
for (int j=0; j<4; j++) {
|
||||||
|
unsigned short baseAddr=chanOffs[i]|opOffs[j];
|
||||||
|
immWrite(baseAddr+ADDR_SL_RR,0x0f);
|
||||||
|
immWrite(baseAddr+ADDR_TL,0x7f);
|
||||||
|
oldWrites[baseAddr+ADDR_SL_RR]=-1;
|
||||||
|
oldWrites[baseAddr+ADDR_TL]=-1;
|
||||||
|
//rWrite(baseAddr+ADDR_SL_RR,(op.rr&15)|(op.sl<<4));
|
||||||
|
}
|
||||||
|
}
|
||||||
immWrite(0x28,0x00|konOffs[i]);
|
immWrite(0x28,0x00|konOffs[i]);
|
||||||
|
if (chan[i].hardReset && chan[i].keyOn) {
|
||||||
|
for (int j=0; j<4; j++) {
|
||||||
|
unsigned short baseAddr=chanOffs[i]|opOffs[j];
|
||||||
|
for (int k=0; k<100; k++) {
|
||||||
|
immWrite(baseAddr+ADDR_SL_RR,0x0f);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
chan[i].keyOff=false;
|
chan[i].keyOff=false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -993,6 +1014,9 @@ int DivPlatformYM2610B::dispatch(DivCommand c) {
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
case DIV_CMD_FM_HARD_RESET:
|
||||||
|
chan[c.chan].hardReset=c.value;
|
||||||
|
break;
|
||||||
case DIV_ALWAYS_SET_VOLUME:
|
case DIV_ALWAYS_SET_VOLUME:
|
||||||
return 0;
|
return 0;
|
||||||
break;
|
break;
|
||||||
|
|
Loading…
Reference in a new issue