Namco 163 refinements

This commit is contained in:
tildearrow 2022-03-27 22:04:01 -05:00
parent c4fc797578
commit 075f758e4d
6 changed files with 30 additions and 12 deletions

View file

@ -29,6 +29,7 @@ furthermore, an `or reserved` indicates this field is always present, but is res
the format versions are:
- 73: Furnace dev73
- 72: Furnace dev72
- 71: Furnace dev71
- 70: Furnace dev70
@ -515,6 +516,14 @@ size | description
| - 480 bytes
2?? | note sample × 120
| - 240 bytes
--- | **Namco 163 data** (>=73)
4 | initial waveform
1 | wave position
1 | wave length
1 | wave mode:
| - bit 1: update on change
| - bit 0: load on playback
1 | reserved
```
# wavetable

View file

@ -42,8 +42,8 @@
#define BUSY_BEGIN_SOFT softLocked=true; isBusy.lock();
#define BUSY_END isBusy.unlock(); softLocked=false;
#define DIV_VERSION "dev72"
#define DIV_ENGINE_VERSION 72
#define DIV_VERSION "dev73"
#define DIV_ENGINE_VERSION 73
// for imports
#define DIV_VERSION_MOD 0xff01

View file

@ -387,6 +387,11 @@ void DivInstrument::putInsData(SafeWriter* w) {
}
// N163
w->writeI(n163.wave);
w->writeC(n163.wavePos);
w->writeC(n163.waveLen);
w->writeC(n163.waveMode);
w->writeC(0); // reserved
}
DivDataErrors DivInstrument::readInsData(SafeReader& reader, short version) {
@ -743,6 +748,13 @@ DivDataErrors DivInstrument::readInsData(SafeReader& reader, short version) {
}
// N163
if (version>=73) {
n163.wave=reader.readI();
n163.wavePos=(unsigned char)reader.readC();
n163.waveLen=(unsigned char)reader.readC();
n163.waveMode=(unsigned char)reader.readC();
reader.readC(); // reserved
}
return DIV_DATA_SUCCESS;
}

View file

@ -392,8 +392,8 @@ struct DivInstrumentN163 {
DivInstrumentN163():
wave(-1),
wavePos(0),
waveLen(0),
waveMode(0) {}
waveLen(32),
waveMode(3) {}
};
struct DivInstrument {

View file

@ -34,7 +34,7 @@
rWriteMask(0x78-(c<<3)+(a&7),v,m) \
}
#define CHIP_FREQBASE (15*65536)
#define CHIP_FREQBASE (15*32768)
const char* regCheatSheetN163[]={
"FreqL7", "40",

View file

@ -2043,19 +2043,16 @@ void FurnaceGUI::drawInsEdit() {
}
ImGui::EndTabItem();
}
if (ins->type==DIV_INS_N163) if (ImGui::BeginTabItem("N163")) {
ImGui::Text("Initial waveform");
if (ImGui::InputInt("##WAVE",&ins->n163.wave,1,10)) { PARAMETER
if (ins->type==DIV_INS_N163) if (ImGui::BeginTabItem("Namco 163")) {
if (ImGui::InputInt("Waveform##WAVE",&ins->n163.wave,1,10)) { PARAMETER
if (ins->n163.wave<0) ins->n163.wave=0;
if (ins->n163.wave>=e->song.waveLen) ins->n163.wave=e->song.waveLen-1;
}
ImGui::Text("Initial waveform position in RAM");
if (ImGui::InputInt("##WAVEPOS",&ins->n163.wavePos,1,16)) { PARAMETER
if (ImGui::InputInt("Offset##WAVEPOS",&ins->n163.wavePos,1,16)) { PARAMETER
if (ins->n163.wavePos<0) ins->n163.wavePos=0;
if (ins->n163.wavePos>255) ins->n163.wavePos=255;
}
ImGui::Text("Initial waveform length in RAM");
if (ImGui::InputInt("##WAVELEN",&ins->n163.waveLen,4,16)) { PARAMETER
if (ImGui::InputInt("Length##WAVELEN",&ins->n163.waveLen,4,16)) { PARAMETER
if (ins->n163.waveLen<0) ins->n163.waveLen=0;
if (ins->n163.waveLen>252) ins->n163.waveLen=252;
ins->n163.waveLen&=0xfc;