Files
libxmp/test-dev/test_loader_arch.c
AliceLR 542f21ed15 Fix Digital Symphony effects and pattern loading issues.
* Digital Symphony stores patterns in blocks of 2000.
  libxmp previously did not handle this quirk.

* Implemented !Tracker effect 16 Line Jump, which is also used
  by Digital Symphony. This effect acts like Pattern Break, except
  it jumps into the current pattern instead of the next pattern.
  It can also be used in conjunction with Position Jump and Pattern
  Break to change their target row. This effect required minor flow
  hacks to work without clobbering running time.

* Fixed a scan bug related to FX_S3M_TEMPO where tempo values under
  32 would be ignored despite them being higher than the minimum
  allowed tempo.

* Fixed a memory leak in the Digital Symphony loader.

* Digital Symphony effects added:
  - Implemented 1F Invert Loop. This required a new quirk as invert
    loop is implemented in a way that assumes QUIRK_PROTRACK may be
    changed by xmp_set_player.
  - Implemented 2A Volume Slide + Fine Slide Down.
  - Implemented 2B Line Jump (same as !Tracker Line Jump).
  - Implemented 30 Set Stereo.
  - Implemented 32 Unset Sample Repeat. This required switching
    Digital Symphony modules to IT sustain loops instead of regular
    loops. This also required adding support for sustain loops to
    invert loop.

* Digital Symphony effects fixed:
  - Portamento effects 01 02 21 and 22 were incorrectly using
    effect memory.
  - Fine portamento effects 11 12 1a and 1b were being converted
    to Exx instead of their equivalent full byte parameter effects.
  - Vibrato and tremolo effects 04 06 07 now update on tick 0.
  - The highest 3 bits of 09 Set Sample Offset are now translated
    to FX_HIOFFSET instead of being ignored.
  - 0B Position Jump uses a hex parameter in Digital Symphony, but
    libxmp was treating it as decimal.
  - 0F Set Speed now ignores parameter 0 and clamps values >255.
  - 2F Set Tempo now only ignores parameter 0, and clamps other
    valid tempos instead of ignoring them.
  - Extended effects 16 1c 1d and 1e (which libxmp currently does
    not have dedicated effects for) are now bounded with a clamp
    instead of a modulo, which makes them slightly less wrong.
2022-02-23 07:53:52 -07:00

25 lines
487 B
C

#include "test.h"
TEST(test_loader_arch)
{
xmp_context opaque;
struct xmp_module_info info;
FILE *f;
int ret;
f = fopen("data/format_arch.data", "r");
opaque = xmp_create_context();
ret = xmp_load_module(opaque, "data/m/AOM-Mind.Tracker");
fail_unless(ret == 0, "module load");
xmp_get_module_info(opaque, &info);
ret = compare_module(info.mod, f);
fail_unless(ret == 0, "format not correctly loaded");
xmp_release_module(opaque);
xmp_free_context(opaque);
}
END_TEST