Цитата Сообщение от Black1980
Имею вот такой код, назовем его cod для проигрывания компилированного AY музона:

ORG 30000
CALL 40000
LOOP CALL 40006
HALT
XOR A
IN A,(#FE)
CPL
AND #1F
JR Z,LOOP
CALL 40000
RET

Музон откомпилирован в ProTracker с плеером, назовем его muz.
Бейсик загрузчик всего этого добра следующий:


5 CLEAR 29999
10 RANDOMIZE USR 15619: REM: LOAD "cod" CODE 30000
20 RANDOMIZE USR 15619: REM: LOAD "muz" CODE 40000
30 RANDOMIZE USR 30000

Помогите, в чем подвох??? Не хочет играть не под эмулятор, не на реальном спектруме. Заранее спасибо!
Дело в том, что плееры обычно играют не сами по себе, а вызываются из цикла, чаще всего из цикла обработки прерывания.
У Вас же CALL 40000 - насколько я помню, инициализация плеера? Затем начинается цикл, и в нем команда HALT. Процессор останавливается и ждет прерывания. При этом он в режиме обработки прерываний 1го типа. По этому по приходу прерывания он переходит по адресу 38Н. Т.е. командой CALL 40006 Вы один раз вызвали плеер, и всё - больше процессор туда не попадает. Ради прикола попробуйте убрать HALT .
Вам нужно:
1) записать некоторое число в рег-р I (это число будет старшим байтом адреса, откуда возьмется адрес перехода по прерыванию. Младший байт - всегда ff)
Например при I=EEH адрес, по которому передастся управление по прерыванию будет взят с адресов EEFFh и EF00h
2) перевести процессор в режим обработки прерываний 2 (IM 2)
3) программа должна быть расположена по определенному адресу в памяти, который определяется в соответствии с числом из п1.

Очень хорошо и подробно описано использование прерываний в книге "Программирование в машинных кодах и на языке ассемблера", которая есть на trd.speccy.cz. Очень рекомендую, как и другие книги Инфоркома.