diff --git a/papers/format.md b/papers/format.md index 7bf06da13..54c2c0275 100644 --- a/papers/format.md +++ b/papers/format.md @@ -1127,9 +1127,9 @@ size | description ## C64 compatibility note (>=187) in Furnace dev187 the volume and cutoff macros have been separated, as noted above. -however, there's another change as well: a new, improved Special macro. +however, there are two other changes as well: **inverted relative (non-absolute) cutoff macro**; and a new, improved Special macro. -if version is less than 187, you must convert these: +if version is less than 187, you must convert the Special macro: 1. do not continue if ex4 is not a Sequence type macro! 2. move bit 0 of ex4 macro data into bit 3. 3. set bit 0 on all steps of ex4 macro to 1. @@ -1138,6 +1138,7 @@ if version is less than 187, you must convert these: 6. merge the ex3 macro (former Special) into ex4 (former Test). - use the largest size (between ex3 and ex4). - if the ex3 macro is shorter than the ex4 one, use the last value of ex3, and vice-versa. + - if the ex4 macro length is 0, expand it to the largest size, and set all steps to 1. don't worry about loop or release... diff --git a/papers/newIns.md b/papers/newIns.md index 79a8fdba2..8111ac4a4 100644 --- a/papers/newIns.md +++ b/papers/newIns.md @@ -327,9 +327,9 @@ size | description ## C64 compatibility note (>=187) in Furnace dev187 the volume and cutoff macros have been separated, as noted above. -however, there's another change as well: a new, improved Special macro. +however, there are two other changes as well: **inverted relative (non-absolute) cutoff macro**; and a new, improved Special macro. -if version is less than 187, you must convert these: +if version is less than 187, you must convert the Special macro: 1. do not continue if ex4 is not a Sequence type macro! 2. move bit 0 of ex4 macro data into bit 3. 3. set bit 0 on all steps of ex4 macro to 1. @@ -338,6 +338,7 @@ if version is less than 187, you must convert these: 6. merge the ex3 macro (former Special) into ex4 (former Test). - use the largest size (between ex3 and ex4). - if the ex3 macro is shorter than the ex4 one, use the last value of ex3, and vice-versa. + - if the ex4 macro length is 0, expand it to the largest size, and set all steps to 1. don't worry about loop or release... diff --git a/src/engine/instrument.cpp b/src/engine/instrument.cpp index 51c2422c1..25c829ca8 100644 --- a/src/engine/instrument.cpp +++ b/src/engine/instrument.cpp @@ -2683,6 +2683,12 @@ DivDataErrors DivInstrument::readInsDataNew(SafeReader& reader, short version, b memcpy(&std.algMacro,&std.volMacro,sizeof(DivInstrumentMacro)); std.algMacro.macroType=DIV_MACRO_ALG; std.volMacro=DivInstrumentMacro(DIV_MACRO_VOL,true); + + if (!c64.filterIsAbs) { + for (int i=0; i=std.ex3Macro.len) {