Speccy - наш выбор!

Speccy - наш выбор! (http://zx-pk.ru/index.php)
-   Программирование (http://zx-pk.ru/forumdisplay.php?f=14)
-   -   Помогите начинающему с кодами. (http://zx-pk.ru/showthread.php?t=2695)

Black1980 10th March 2006 08:38

Помогите начинающему с кодами.
 
Имею вот такой код, назовем его 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

Помогите, в чем подвох??? Не хочет играть не под эмулятор, не на реальном спектруме. Заранее спасибо!

bob5024 10th March 2006 10:22

Quote:

Originally Posted by 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. Очень рекомендую, как и другие книги Инфоркома.

newart 10th March 2006 11:33

Quote:

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

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

Будет играть.

Sinus 10th March 2006 12:38

кста, судя по адресу проигрывания (START+6) это PT2.
имхо лучше компилить музоны под 49152 (#C000)
а саму прогу под 32768 (#8000)

Black1980 10th March 2006 13:11

Quote:

Originally Posted by Sinus
кста, судя по адресу проигрывания (START+6) это PT2.
имхо лучше компилить музоны под 49152 (#C000)
а саму прогу под 32768 (#8000)

У PT2, ST и PT3 адресса одинаковые... Не скажешь чем лучше, чтобы уж делать, так на верника...

Black1980 10th March 2006 13:39

Quote:

Originally Posted by newart
ORG 30000
CALL 40000
EI
LOOP HALT
CALL 40006
XOR A
IN A,(#FE)
CPL
AND #1F
JR Z,LOOP
JP 40000

Будет играть.

Не работает... :((

mishutka 10th March 2006 15:14

Quote:

Originally Posted by Black1980
Не работает... :((

а так
ORG 30000
CALL 40000
LOOP
EI
HALT
CALL 40006
XOR A
IN A,(#FE)
CPL
AND #1F
JR Z,LOOP (здесь может быть nz - не помню)
JP 40000

newart 10th March 2006 15:29

Quote:

Originally Posted by Black1980
Не работает...

А так?

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

Sinus 10th March 2006 17:49

Quote:

Originally Posted by Black1980
У PT2, ST и PT3 адресса одинаковые... Не скажешь чем лучше, чтобы уж делать, так на верника...

у PT2 играть - START+6
у PT3 - START+5
у ST зависит от компилятора, точно не помню, но вроде START+5
где START - куда компилировался музон (обычно #C000 или 49152)

и ещё, приаттачь свой музон сюда, а то телепаты в отпуске.

Black1980 10th March 2006 20:46

1 Attachment(s)
Quote:

Originally Posted by Sinus
и ещё, приаттачь свой музон сюда, а то телепаты в отпуске.

Бес проблем, музон PT2... В архиве оба музоны, компиленный и нет.


All times are GMT +4. The time now is 21:17.

Powered by vBulletin® Version 3.8.3
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.