а как можно в gemsplay номер трека указать?
В консольной стрелки вверх и вниз.
Исправил остановку. В ASM было правильно, а здесь в CLIPLOOP() сначала снимались флаги VTblPtr[VTBLFLAGS], а уже после проверялось на "fm - digital mode? [BIT #5]". В ASM в регистр сохранялось оригинальное значение флагов.
Заметил баг, который был в оригинале. Если играет сэмпл (который мы тестировали здесь) в полном треке The Jester, то остановка не останавливает счётчик времени, но звука нет. Это уже баг GEMSPlay, а не драйвера GEMS. В CheckForSongEnd():
for (CurChn = 0; CurChn < 4; CurChn ++)
{
if (pdata.psgenv[CurChn])
ChnMask ++;
}Здесь проверяется регистр UINT8 psgenv[4]; ([0021] 24 envelope mode 0 = off, 1 = attack, 2 = decay, 3 = sustain, 4) и он почему-то равен 2 в последнем канале, что не даёт остановку (ChnMask должен быть = 0).
В CLIPLOOP() psgcom устанавливается в 4 ([0009] 0 command 1 = key on, 2 = key off, 4 = stop snd), как я понял, это значит что канал отключен(
?). Если дополнить проверку - if (pdata.psgenv[CurChn] && pdata.psgcom[CurChn] != 4), то будет останавливаться, потому что после ручной остановки у каналов стоит 4 благодаря CLIPLOOP().
Я только предполагаю, что это не должно что-то испортить (автоматическое переключение трека, например). Пожалуй оставлю.
Протестируйте остановку и я, наконец, сделаю коммит.