Merge branch 'tildearrow:master' into master
This commit is contained in:
commit
f1399aab84
17 changed files with 173 additions and 178 deletions
|
|
@ -22,7 +22,6 @@
|
|||
#include "../../ta-log.h"
|
||||
#include <math.h>
|
||||
|
||||
#define rRead(a,v) n163.addr_w(a); n163.data_r(v);
|
||||
#define rWrite(a,v) if (!skipRegisterWrites) {writes.push(QueuedWrite(a,v)); if (dumpWrites) {addWrite(a,v);} }
|
||||
#define rWriteMask(a,v,m) if (!skipRegisterWrites) {writes.push(QueuedWrite(a,v,m)); if (dumpWrites) {addWrite(a,v);} }
|
||||
#define chWrite(c,a,v) \
|
||||
|
|
@ -198,8 +197,8 @@ void DivPlatformN163::tick(bool sysTick) {
|
|||
chan[i].freqChanged=true;
|
||||
}
|
||||
if (chan[i].std.duty.had) {
|
||||
if (chan[i].wavePos!=chan[i].std.duty.val) {
|
||||
chan[i].wavePos=chan[i].std.duty.val;
|
||||
if (chan[i].curWavePos!=chan[i].std.duty.val) {
|
||||
chan[i].curWavePos=chan[i].std.duty.val;
|
||||
if (chan[i].waveMode&0x2) {
|
||||
chan[i].waveUpdated=true;
|
||||
}
|
||||
|
|
@ -225,8 +224,8 @@ void DivPlatformN163::tick(bool sysTick) {
|
|||
chan[i].freqChanged=true;
|
||||
}
|
||||
if (chan[i].std.ex1.had) {
|
||||
if (chan[i].waveLen!=(chan[i].std.ex1.val&0xfc)) {
|
||||
chan[i].waveLen=chan[i].std.ex1.val&0xfc;
|
||||
if (chan[i].curWaveLen!=(chan[i].std.ex1.val&0xfc)) {
|
||||
chan[i].curWaveLen=chan[i].std.ex1.val&0xfc;
|
||||
chan[i].ws.setWidth(chan[i].waveLen);
|
||||
if (chan[i].waveMode&0x2) {
|
||||
chan[i].waveUpdated=true;
|
||||
|
|
@ -250,35 +249,6 @@ void DivPlatformN163::tick(bool sysTick) {
|
|||
}
|
||||
}
|
||||
}
|
||||
if (chan[i].std.ex3.had) {
|
||||
if (chan[i].loadWave!=chan[i].std.ex3.val) {
|
||||
chan[i].loadWave=chan[i].std.ex3.val;
|
||||
if (chan[i].loadMode&0x2) {
|
||||
updateWave(i,chan[i].loadWave,chan[i].loadPos,chan[i].loadLen&0xfc);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (chan[i].std.alg.had) {
|
||||
if (chan[i].loadPos!=chan[i].std.alg.val) {
|
||||
chan[i].loadPos=chan[i].std.alg.val;
|
||||
}
|
||||
}
|
||||
if (chan[i].std.fb.had) {
|
||||
if (chan[i].loadLen!=(chan[i].std.fb.val&0xfc)) {
|
||||
chan[i].loadLen=chan[i].std.fb.val&0xfc;
|
||||
}
|
||||
}
|
||||
if (chan[i].std.fms.had) {
|
||||
if ((chan[i].loadMode&0x2)!=(chan[i].std.fms.val&0x2)) { // load when every waveform changes
|
||||
chan[i].loadMode=(chan[i].loadMode&~0x2)|(chan[i].std.fms.val&0x2);
|
||||
}
|
||||
if ((chan[i].loadMode&0x1)!=(chan[i].std.fms.val&0x1)) { // load now
|
||||
chan[i].loadMode=(chan[i].loadMode&~0x1)|(chan[i].std.fms.val&0x1);
|
||||
if (chan[i].loadMode&0x1) { // rising edge
|
||||
updateWave(i,chan[i].loadWave,chan[i].loadPos,chan[i].loadLen&0xfc);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (chan[i].volumeChanged) {
|
||||
if (chan[i].active && !isMuted[i]) {
|
||||
chWriteMask(i,0x7,chan[i].resVol&0xf,0xf);
|
||||
|
|
@ -288,7 +258,7 @@ void DivPlatformN163::tick(bool sysTick) {
|
|||
chan[i].volumeChanged=false;
|
||||
}
|
||||
if (chan[i].waveChanged) {
|
||||
chWrite(i,0x6,chan[i].wavePos);
|
||||
chWrite(i,0x6,chan[i].curWavePos);
|
||||
if (chan[i].active) {
|
||||
chan[i].freqChanged=true;
|
||||
}
|
||||
|
|
@ -309,7 +279,7 @@ void DivPlatformN163::tick(bool sysTick) {
|
|||
if (chan[i].freqChanged || chan[i].keyOn || chan[i].keyOff) {
|
||||
// TODO: what is this mess?
|
||||
chan[i].freq=parent->calcFreq(chan[i].baseFreq,chan[i].pitch,chan[i].fixedArp?chan[i].baseNoteOverride:chan[i].arpOff,chan[i].fixedArp,false,2,chan[i].pitch2,chipClock,CHIP_FREQBASE);
|
||||
chan[i].freq=(((chan[i].freq*chan[i].waveLen)*(chanMax+1))/16);
|
||||
chan[i].freq=(((chan[i].freq*chan[i].curWaveLen)*(chanMax+1))/16);
|
||||
if (chan[i].freq<0) chan[i].freq=0;
|
||||
if (chan[i].freq>0x3ffff) chan[i].freq=0x3ffff;
|
||||
if (chan[i].keyOn) {
|
||||
|
|
@ -325,7 +295,7 @@ void DivPlatformN163::tick(bool sysTick) {
|
|||
}
|
||||
chWrite(i,0x0,chan[i].freq&0xff);
|
||||
chWrite(i,0x2,chan[i].freq>>8);
|
||||
chWrite(i,0x4,((256-chan[i].waveLen)&0xfc)|((chan[i].freq>>16)&3));
|
||||
chWrite(i,0x4,((256-chan[i].curWaveLen)&0xfc)|((chan[i].freq>>16)&3));
|
||||
if (chan[i].keyOn) chan[i].keyOn=false;
|
||||
if (chan[i].keyOff) chan[i].keyOff=false;
|
||||
chan[i].freqChanged=false;
|
||||
|
|
@ -342,7 +312,9 @@ int DivPlatformN163::dispatch(DivCommand c) {
|
|||
chan[c.chan].wavePos=ins->n163.wavePos;
|
||||
chan[c.chan].waveLen=ins->n163.waveLen;
|
||||
chan[c.chan].waveMode=ins->n163.waveMode;
|
||||
chan[c.chan].ws.init(NULL,chan[c.chan].waveLen,15,false);
|
||||
chan[c.chan].curWavePos=chan[c.chan].wavePos;
|
||||
chan[c.chan].curWaveLen=chan[c.chan].waveLen;
|
||||
chan[c.chan].ws.init(NULL,chan[c.chan].waveLen,15,true);
|
||||
chan[c.chan].ws.changeWave1(chan[c.chan].wave);
|
||||
chan[c.chan].waveChanged=true;
|
||||
if (chan[c.chan].waveMode&0x3 || ins->ws.enabled) {
|
||||
|
|
@ -438,14 +410,14 @@ int DivPlatformN163::dispatch(DivCommand c) {
|
|||
chan[c.chan].keyOn=true;
|
||||
break;
|
||||
case DIV_CMD_N163_WAVE_POSITION:
|
||||
chan[c.chan].wavePos=c.value;
|
||||
chan[c.chan].curWavePos=c.value;
|
||||
if (chan[c.chan].waveMode&0x2) {
|
||||
chan[c.chan].waveUpdated=true;
|
||||
}
|
||||
chan[c.chan].waveChanged=true;
|
||||
break;
|
||||
case DIV_CMD_N163_WAVE_LENGTH:
|
||||
chan[c.chan].waveLen=c.value&0xfc;
|
||||
chan[c.chan].curWaveLen=c.value&0xfc;
|
||||
if (chan[c.chan].waveMode&0x2) {
|
||||
chan[c.chan].waveUpdated=true;
|
||||
}
|
||||
|
|
@ -458,42 +430,13 @@ int DivPlatformN163::dispatch(DivCommand c) {
|
|||
chan[c.chan].waveChanged=true;
|
||||
}
|
||||
break;
|
||||
case DIV_CMD_N163_WAVE_LOAD:
|
||||
chan[c.chan].loadWave=c.value;
|
||||
if (chan[c.chan].loadMode&0x2) { // load when every waveform changes
|
||||
updateWave(c.chan,chan[c.chan].loadWave,chan[c.chan].loadPos,chan[c.chan].loadLen);
|
||||
}
|
||||
break;
|
||||
case DIV_CMD_N163_WAVE_LOADPOS:
|
||||
chan[c.chan].loadPos=c.value;
|
||||
break;
|
||||
case DIV_CMD_N163_WAVE_LOADLEN:
|
||||
chan[c.chan].loadLen=c.value&0xfc;
|
||||
break;
|
||||
case DIV_CMD_N163_WAVE_LOADMODE:
|
||||
chan[c.chan].loadMode=c.value&0x3;
|
||||
if (chan[c.chan].loadMode&0x1) { // load now
|
||||
updateWave(c.chan,chan[c.chan].loadWave,chan[c.chan].loadPos,chan[c.chan].loadLen);
|
||||
}
|
||||
break;
|
||||
case DIV_CMD_N163_GLOBAL_WAVE_LOAD:
|
||||
loadWave=c.value;
|
||||
if (loadMode&0x2) { // load when every waveform changes
|
||||
updateWave(c.chan,loadWave,loadPos,loadLen);
|
||||
}
|
||||
// TODO: load wave here
|
||||
break;
|
||||
case DIV_CMD_N163_GLOBAL_WAVE_LOADPOS:
|
||||
loadPos=c.value;
|
||||
break;
|
||||
case DIV_CMD_N163_GLOBAL_WAVE_LOADLEN:
|
||||
loadLen=c.value&0xfc;
|
||||
break;
|
||||
case DIV_CMD_N163_GLOBAL_WAVE_LOADMODE:
|
||||
loadMode=c.value&0x3;
|
||||
if (loadMode&0x3) { // load now
|
||||
updateWave(c.chan,loadWave,loadPos,loadLen);
|
||||
}
|
||||
break;
|
||||
case DIV_CMD_N163_CHANNEL_LIMIT:
|
||||
if (chanMax!=(c.value&0x7)) {
|
||||
chanMax=c.value&0x7;
|
||||
|
|
@ -619,8 +562,6 @@ void DivPlatformN163::reset() {
|
|||
chanMax=initChanMax;
|
||||
loadWave=-1;
|
||||
loadPos=0;
|
||||
loadLen=0;
|
||||
loadMode=0;
|
||||
rWrite(0x7f,initChanMax<<4);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -29,9 +29,8 @@ class DivPlatformN163: public DivDispatch {
|
|||
struct Channel: public SharedChannel<signed char> {
|
||||
signed char resVol;
|
||||
short wave, wavePos, waveLen;
|
||||
short curWavePos, curWaveLen;
|
||||
unsigned char waveMode;
|
||||
short loadWave, loadPos, loadLen;
|
||||
unsigned char loadMode;
|
||||
bool volumeChanged;
|
||||
bool waveChanged, waveUpdated;
|
||||
DivWaveSynth ws;
|
||||
|
|
@ -41,11 +40,9 @@ class DivPlatformN163: public DivDispatch {
|
|||
wave(-1),
|
||||
wavePos(0),
|
||||
waveLen(0),
|
||||
curWavePos(0),
|
||||
curWaveLen(0),
|
||||
waveMode(0),
|
||||
loadWave(-1),
|
||||
loadPos(0),
|
||||
loadLen(0),
|
||||
loadMode(0),
|
||||
volumeChanged(false),
|
||||
waveChanged(false),
|
||||
waveUpdated(false) {}
|
||||
|
|
@ -63,8 +60,7 @@ class DivPlatformN163: public DivDispatch {
|
|||
FixedQueue<QueuedWrite,2048> writes;
|
||||
unsigned char initChanMax;
|
||||
unsigned char chanMax;
|
||||
short loadWave, loadPos, loadLen;
|
||||
unsigned char loadMode;
|
||||
short loadWave, loadPos;
|
||||
bool multiplex;
|
||||
|
||||
n163_core n163;
|
||||
|
|
|
|||
|
|
@ -1005,20 +1005,16 @@ void DivEngine::registerSystems() {
|
|||
{DIV_CH_WAVE, DIV_CH_WAVE, DIV_CH_WAVE, DIV_CH_WAVE, DIV_CH_WAVE, DIV_CH_WAVE, DIV_CH_WAVE, DIV_CH_WAVE},
|
||||
{DIV_INS_N163, DIV_INS_N163, DIV_INS_N163, DIV_INS_N163, DIV_INS_N163, DIV_INS_N163, DIV_INS_N163, DIV_INS_N163},
|
||||
{},
|
||||
{
|
||||
{0x18, {DIV_CMD_N163_CHANNEL_LIMIT, "180x: Change channel limits (0 to 7, x + 1)"}}
|
||||
},
|
||||
{
|
||||
{0x10, {DIV_CMD_WAVE, "10xx: Select waveform"}},
|
||||
{0x11, {DIV_CMD_N163_WAVE_POSITION, "11xx: Set waveform position in RAM (single nibble unit)"}},
|
||||
{0x12, {DIV_CMD_N163_WAVE_LENGTH, "12xx: Set waveform length in RAM (04 to FC, 4 nibble unit)"}},
|
||||
{0x13, {DIV_CMD_N163_WAVE_MODE, "130x: Change waveform update mode (0: off; bit 0: update now; bit 1: update when every waveform changes)"}},
|
||||
{0x14, {DIV_CMD_N163_WAVE_LOAD, "14xx: Select waveform for load to RAM"}},
|
||||
{0x15, {DIV_CMD_N163_WAVE_LOADPOS, "15xx: Set waveform position for load to RAM (single nibble unit)"}},
|
||||
{0x16, {DIV_CMD_N163_WAVE_LOADLEN, "16xx: Set waveform length for load to RAM (04 to FC, 4 nibble unit)"}},
|
||||
{0x17, {DIV_CMD_N163_WAVE_LOADMODE, "170x: Change waveform load mode (0: off; bit 0: load now; bit 1: load when every waveform changes)"}},
|
||||
{0x18, {DIV_CMD_N163_CHANNEL_LIMIT, "180x: Change channel limits (0 to 7, x + 1)"}},
|
||||
{0x20, {DIV_CMD_N163_GLOBAL_WAVE_LOAD, "20xx: (Global) Select waveform for load to RAM"}},
|
||||
{0x21, {DIV_CMD_N163_GLOBAL_WAVE_LOADPOS, "21xx: (Global) Set waveform position for load to RAM (single nibble unit)"}},
|
||||
{0x22, {DIV_CMD_N163_GLOBAL_WAVE_LOADLEN, "22xx: (Global) Set waveform length for load to RAM (04 to FC, 4 nibble unit)"}},
|
||||
{0x23, {DIV_CMD_N163_GLOBAL_WAVE_LOADMODE, "230x: (Global) Change waveform load mode (0: off; bit 0: load now; bit 1: load when every waveform changes)"}},
|
||||
{0x20, {DIV_CMD_N163_GLOBAL_WAVE_LOAD, "20xx: Load a waveform into memory"}},
|
||||
{0x21, {DIV_CMD_N163_GLOBAL_WAVE_LOADPOS, "21xx: Set position for wave load"}},
|
||||
}
|
||||
);
|
||||
|
||||
|
|
|
|||
|
|
@ -462,8 +462,6 @@ void putDispatchChip(void* data, int type) {
|
|||
ImGui::Text("- chanMax: %d",ch->chanMax);
|
||||
ImGui::Text("- loadWave: %d",ch->loadWave);
|
||||
ImGui::Text("- loadPos: %d",ch->loadPos);
|
||||
ImGui::Text("- loadLen: %d",ch->loadLen);
|
||||
ImGui::Text("- loadMode: %d",ch->loadMode);
|
||||
COMMON_CHIP_DEBUG_BOOL;
|
||||
ImGui::TextColored(ch->multiplex?colorOn:colorOff,">> Multiplex");
|
||||
break;
|
||||
|
|
@ -876,10 +874,6 @@ void putDispatchChan(void* data, int chanNum, int type) {
|
|||
ImGui::Text("- wavepos: %d",ch->wavePos);
|
||||
ImGui::Text("- wavelen: %d",ch->waveLen);
|
||||
ImGui::Text("- wavemode: %d",ch->waveMode);
|
||||
ImGui::Text("- loadwave: %d",ch->loadWave);
|
||||
ImGui::Text("- loadpos: %d",ch->loadPos);
|
||||
ImGui::Text("- loadlen: %d",ch->loadLen);
|
||||
ImGui::Text("- loadmode: %d",ch->loadMode);
|
||||
ImGui::Text("- resVol: %.2x",ch->resVol);
|
||||
COMMON_CHAN_DEBUG_BOOL;
|
||||
ImGui::TextColored(ch->volumeChanged?colorOn:colorOff,">> VolumeChanged");
|
||||
|
|
|
|||
|
|
@ -5442,10 +5442,10 @@ void FurnaceGUI::drawInsEdit() {
|
|||
dutyLabel="Duty";
|
||||
dutyMax=63;
|
||||
}
|
||||
/*if (ins->type==DIV_INS_N163) {
|
||||
dutyLabel="Waveform pos.";
|
||||
if (ins->type==DIV_INS_N163) {
|
||||
dutyLabel="Wave Pos";
|
||||
dutyMax=255;
|
||||
}*/
|
||||
}
|
||||
if (ins->type==DIV_INS_VRC6) {
|
||||
dutyLabel="Duty";
|
||||
dutyMax=ins->amiga.useSample?0:7;
|
||||
|
|
@ -5755,8 +5755,6 @@ void FurnaceGUI::drawInsEdit() {
|
|||
if (ex2Max>0) {
|
||||
if (ins->type==DIV_INS_C64) {
|
||||
macroList.push_back(FurnaceGUIMacroDesc("Resonance",&ins->std.ex2Macro,0,ex2Max,64,uiColors[GUI_COLOR_MACRO_OTHER]));
|
||||
/*} else if (ins->type==DIV_INS_N163) {
|
||||
macroList.push_back(FurnaceGUIMacroDesc("Wave Update",&ins->std.ex2Macro,0,ex2Max,64,uiColors[GUI_COLOR_MACRO_OTHER],false,NULL,NULL,true,n163UpdateBits));*/
|
||||
} else if (ins->type==DIV_INS_FDS) {
|
||||
macroList.push_back(FurnaceGUIMacroDesc("Mod Speed",&ins->std.ex2Macro,0,ex2Max,160,uiColors[GUI_COLOR_MACRO_OTHER]));
|
||||
} else if (ins->type==DIV_INS_SU) {
|
||||
|
|
@ -5786,12 +5784,6 @@ void FurnaceGUI::drawInsEdit() {
|
|||
macroList.push_back(FurnaceGUIMacroDesc("Noise AND Mask",&ins->std.fbMacro,0,8,96,uiColors[GUI_COLOR_MACRO_OTHER],false,NULL,NULL,true));
|
||||
macroList.push_back(FurnaceGUIMacroDesc("Noise OR Mask",&ins->std.fmsMacro,0,8,96,uiColors[GUI_COLOR_MACRO_OTHER],false,NULL,NULL,true));
|
||||
}
|
||||
if (ins->type==DIV_INS_N163) {
|
||||
/*macroList.push_back(FurnaceGUIMacroDesc("WaveLoad Wave",&ins->std.ex3Macro,0,255,160,uiColors[GUI_COLOR_MACRO_OTHER]));
|
||||
macroList.push_back(FurnaceGUIMacroDesc("WaveLoad Pos",&ins->std.algMacro,0,255,160,uiColors[GUI_COLOR_MACRO_OTHER]));
|
||||
macroList.push_back(FurnaceGUIMacroDesc("WaveLoad Len",&ins->std.fbMacro,0,252,160,uiColors[GUI_COLOR_MACRO_OTHER]));
|
||||
macroList.push_back(FurnaceGUIMacroDesc("WaveLoad Trigger",&ins->std.fmsMacro,0,2,160,uiColors[GUI_COLOR_MACRO_OTHER],false,NULL,NULL,true,n163UpdateBits));*/
|
||||
}
|
||||
if (ins->type==DIV_INS_FDS) {
|
||||
macroList.push_back(FurnaceGUIMacroDesc("Mod Position",&ins->std.ex3Macro,0,127,160,uiColors[GUI_COLOR_MACRO_OTHER]));
|
||||
}
|
||||
|
|
|
|||
|
|
@ -128,8 +128,10 @@ void FurnaceGUI::drawNewSong() {
|
|||
for (size_t chipIndex=0; chipIndex<chips.size(); chipIndex++) {
|
||||
DivSystem chip=chips[chipIndex];
|
||||
const DivSysDef* sysDef=e->getSystemDef(chip);
|
||||
ImGui::PushTextWrapPos(MIN(scrW*dpiScale,400.0f*dpiScale));
|
||||
ImGui::Text("%s (x%d): ",sysDef->name,chipCounts[chip]);
|
||||
ImGui::TextWrapped("%s",sysDef->description);
|
||||
ImGui::Text("%s",sysDef->description);
|
||||
ImGui::PopTextWrapPos();
|
||||
if (chipIndex+1<chips.size()) {
|
||||
ImGui::Separator();
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue