Пока сграбить что-то отличное от d00 не получается! - похоже, что это единственный формат при проигрывании которого, плееры за прерывание таймера один(!) раз меняют группу регистров OPL (9 инструментов).

Обработчик прерывания(она же процедура по FAR CALL) вызывался в программе в цикле. А на таймер навешал свой обработчик (сканер регистров) и разогнал таймер (делитель до 1024). При сканировании регистров возможна следующая ситуация:

В Port[$388] уже занеслось значение регистра OPL, а в Port[$389] - данные - не занеслись. Тут вызывается обработчик прерывания(сканер) - и читает все регистры. НО! Для того чтоб прочитать какой-то регистр - надо его указать(читай-записать!) в Port[$388] далее из Port[$389] читается значение того самого регистра. Получайтся что при выходе из прерывания нужно восстанавливать регистр и его значение, которые были ДО входа в прерывание!!! Порт $389 - доступен по чтению и записи, а порт $388 при записи обращается к индексу регистра, а при чтении(!) - возвращается СТАТУСНЫЙ РЕГИСТР!!!

Вопрос - что делать??? Как программно сохранять регистр и его значение ДО СКАНИРОВАНИЯ?

Если решения нет - то прийдётся довольствоваться граблением только d00-файлов...