не соберётся - другой смысл у прагмы pack с 2-мя параметрами
pack(push, 1) на MSVC будет ждать парный pack(pop, 1), т.е. 1 тут - просто идентификатор

самое странное - замена
Код:
union SNDSAMPLE
{
   DWORD sample; // left/right channels in low/high WORDs
   struct { WORD left, right; }; // or left/right separately
};
на
Код:
union SNDSAMPLE
{
   DWORD sample; // left/right channels in low/high WORDs
   struct rl { WORD left, right; }; // or left/right separately
};
как оно скомпилировалось? ведь 2-й вариант определяет описание класса rl внутри пространства имён SNDSAMPLE, но не объявляет внутри SNDSAMPLE экземпляр rl. т.е. код sample.left - ошибочный (не компилируется MSVC)
предлагаю
Код:
struct SNDCHANNELS
{
   WORD left, right;
};

union SNDSAMPLE
{
   DWORD sample; // left/right channels in low/high WORDs
   SNDCHANNELS ch; // or left/right separately
};
- должно везде собираться
странно, почему const не работает. на самом деле те константы типа unsigned, они передаются в unsigned-параметры функций (хотя msvc не выдаёт warning'ов и при int), но они могут вдруг использоваться и в сравнениях
вариант
Код:
const unsigned TICK_FF=6;
компилируется gcc?

я -- желающий
ну попробуй LHA-депакер портировать..

Кстати, AY_Emul прекрасно пашет под Wine.
а, значит, не особо нужно

По поводу быстродействия кстати поясни - как может эмуляция AY и CPU (я правильно понял?) быть быстрее только эмуляции AY?
так сделать медленнее - не проблема ;-) особенно когда надо сделать чтобы быстрее заработало