diff --git a/src/engine/engine.cpp b/src/engine/engine.cpp index 655b7f5ed..c16392772 100644 --- a/src/engine/engine.cpp +++ b/src/engine/engine.cpp @@ -72,7 +72,7 @@ const char* DivEngine::getEffectDesc(unsigned char effect, int chan) { case 0x0f: return "0Fxx: Set speed 2"; case 0xc0: case 0xc1: case 0xc2: case 0xc3: - return "Cxxx: Set tick rate"; + return "Cxxx: Set tick rate (hz)"; case 0xe0: return "E0xx: Set arp speed"; case 0xe1: @@ -97,14 +97,16 @@ const char* DivEngine::getEffectDesc(unsigned char effect, int chan) { return "EExx: Send external command"; case 0xef: return "EFxx: Set global tuning (quirky!)"; + case 0xf0: + return "F0xx: Set tick rate (bpm)"; case 0xf1: - return "F1xx: Single note slide up"; + return "F1xx: Single tick note slide up"; case 0xf2: - return "F2xx: Single note slide down"; + return "F2xx: Single tick note slide down"; case 0xf8: - return "F8xx: Single volume slide up"; + return "F8xx: Single tick volume slide up"; case 0xf9: - return "F9xx: Single volume slide down"; + return "F9xx: Single tick volume slide down"; case 0xfa: return "FAxx: Fast volume slide (0y: down; x0: up)"; case 0xff: diff --git a/src/engine/fileOps.cpp b/src/engine/fileOps.cpp index 5c4154cb8..0d1780458 100644 --- a/src/engine/fileOps.cpp +++ b/src/engine/fileOps.cpp @@ -1285,8 +1285,7 @@ bool DivEngine::loadMod(unsigned char* file, size_t len) { if(loopEndloopStart=loopStart; } - sample->samples=slen; - sample->data8=new signed char[slen]; + sample->init(slen); ds.sample.push_back(sample); } // orders @@ -1456,7 +1455,7 @@ bool DivEngine::loadMod(unsigned char* file, size_t len) { case 15: // set speed // TODO somehow handle VBlank tunes if (fxVal>=0x20) { - writeFxCol(0xc0,(fxVal*2+2)/5); + writeFxCol(0xf0,fxVal); } else { writeFxCol(0x09,fxVal); writeFxCol(0x0f,fxVal); diff --git a/src/engine/playback.cpp b/src/engine/playback.cpp index d94c18085..b92339d79 100644 --- a/src/engine/playback.cpp +++ b/src/engine/playback.cpp @@ -62,6 +62,7 @@ const char* cmdName[DIV_CMD_MAX]={ "SAMPLE_MODE", "SAMPLE_FREQ", "SAMPLE_BANK", + "SAMPLE_POS", "FM_LFO", "FM_LFO_WAVE", @@ -872,9 +873,6 @@ void DivEngine::processRow(int i, bool afterDelay) { cycles=((int)(got.rate)<0) { song.arpLen=effectVal; @@ -947,6 +945,12 @@ void DivEngine::processRow(int i, bool afterDelay) { case 0xef: // global pitch globalPitch+=(signed char)(effectVal-0x80); break; + case 0xf0: // set Hz by tempo + divider=(effectVal*2+2)/5; + if (divider<10) divider=10; + cycles=((int)(got.rate)<