PDA

Просмотр полной версии : Помогите начинающему с кодами.



Black1980
10.03.2006, 07: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
10.03.2006, 09:22
Имею вот такой код, назовем его 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
10.03.2006, 10:33
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
10.03.2006, 11:38
кста, судя по адресу проигрывания (START+6) это PT2.
имхо лучше компилить музоны под 49152 (#C000)
а саму прогу под 32768 (#8000)

Black1980
10.03.2006, 12:11
кста, судя по адресу проигрывания (START+6) это PT2.
имхо лучше компилить музоны под 49152 (#C000)
а саму прогу под 32768 (#8000)
У PT2, ST и PT3 адресса одинаковые... Не скажешь чем лучше, чтобы уж делать, так на верника...

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

Будет играть.
Не работает... :((

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

newart
10.03.2006, 14:29
Не работает...
А так?

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

Sinus
10.03.2006, 16:49
У PT2, ST и PT3 адресса одинаковые... Не скажешь чем лучше, чтобы уж делать, так на верника...
у PT2 играть - START+6
у PT3 - START+5
у ST зависит от компилятора, точно не помню, но вроде START+5
где START - куда компилировался музон (обычно #C000 или 49152)

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

Black1980
10.03.2006, 19:46
и ещё, приаттачь свой музон сюда, а то телепаты в отпуске.
Бес проблем, музон PT2... В архиве оба музоны, компиленный и нет.

Black1980
10.03.2006, 19:50
А так?

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

Неа, в эмуле пишет CPU HALTED, на реальном просто в подвисшем состоянии, если строку JR Z,LOOP менять на JR NZ,LOOP эффект остается такой же. :o

SAM style
10.03.2006, 20:16
Бес проблем, музон PT2... В архиве оба музоны, компиленный и нет.
Погоди, ты ж говорил что он с плейером... В упор плейера не вижу. Сама по себе музака играться не будет.

Sinus
10.03.2006, 20:34
Black1980
там нет компилированного музона.
если взять ProTracker v.2.101 с сайта Virtual TR-DOS (http://zx.da.ru)
загрузить туда музон AGATA.M (SONG: LOAD) и откомпилировать его (COMPILE SONG) с плеером (на вопрос "Include Player" надо ответить "Y") под адрес (ENTER START CODE: ) 49152. далее ответить Y (IS THIS CORRECT Y/N?) и сохранить под именем AGATA (тогда он сохранится как AGATA.C) то следующий код (для ассемблера ALASM)



ORG #C000
INCBIN "AGATA"

ORG #8000
CALL #C000

LOOP HALT
CALL #C006
XOR A
IN A,(#FE)
OR #E0
INC A
JP Z,LOOP

JP #C000


будет играть музон.

Vitamin
10.03.2006, 21:13
у ST зависит от компилятора, точно не помню, но вроде START+5
+6. Это начиная с pt3 адрес на +5 поменяли.
И еще. У плееров от этого самого pt3 замечена одна черта- они глюкаво работают на им2 в басике. Наткнулся на такое безобразие на заре своей кодерской деятельности. С pt2 & st все в порядке

Black1980
11.03.2006, 01:31
Black1980
там нет компилированного музона.
если взять ProTracker v.2.101 с сайта Virtual TR-DOS (http://zx.da.ru)
загрузить туда музон AGATA.M (SONG: LOAD) и откомпилировать его (COMPILE SONG) с плеером (на вопрос "Include Player" надо ответить "Y") под адрес (ENTER START CODE: ) 49152. далее ответить Y (IS THIS CORRECT Y/N?) и сохранить под именем AGATA (тогда он сохранится как AGATA.C) то следующий код (для ассемблера ALASM)



ORG #C000
INCBIN "AGATA"

ORG #8000
CALL #C000

LOOP HALT
CALL #C006
XOR A
IN A,(#FE)
OR #E0
INC A
JP Z,LOOP

JP #C000


будет играть музон.
Объясни чайнику пожалуйсто в чем мой трабл.
Вобщем делаю следующее: Откомпилил музон, в Alasm набираю код который ты привел, асемблирую, запускаю, играет :) Захожу в дебагер, нажимаю S (для сохранения), ввожу имя, адресс он выставляет сам #8000, длин #0001, отписываю, пытаюсь запустить через бейсик загрузчик по адрессу 32768, сбрасывает комп... Что я не так делаю???

P.S. Не руугайтесь сильно, я только учусь! И так этого хочется... :)

bpm
11.03.2006, 01:53
Вобщем делаю следующее: Откомпилил музон, в Alasm набираю код который ты привел, асемблирую, запускаю, играет Захожу в дебагер, нажимаю S (для сохранения), ввожу имя, адресс он выставляет сам #8000, длин #0001, отписываю, пытаюсь запустить через бейсик загрузчик по адрессу 32768, сбрасывает комп... Что я не так делаю???
Нафига же ты из дебагера сохраняешь? Тем более 1 байт. В 1 байте, конечно, пользы больше, чем в 0, но меньше, чем в (хотя бы) двух ;-) Из ассемблера надо сохранять.

Black1980
11.03.2006, 02:00
Нафига же ты из дебагера сохраняешь? Тем более 1 байт. В 1 байте, конечно, пользы больше, чем в 0, но меньше, чем в (хотя бы) двух ;-) Из ассемблера надо сохранять.
Подскажи какием образом, все облазил, по S сохраняет только исходный текст, но ни код. Всю документацию в долль и поперек прошол, ничего не на рыл... :(

Black1980
11.03.2006, 06:06
Вобщем смог я его сохранить через дебагер с нормально длинной (156 байт), теперь проигрывается через бейсик загрузчик.... :) Но мне очень бы хотелось узнать, если возможно из самого ассемблера ( ALASM ) сохранять откомпилированный код, то подскажите пожалуйсто. :) ВСе БОЛЬШОЕ СПАСИБО! И все таки сообщество спектрумистов замое дружное... ;)

Sinus
11.03.2006, 12:49
из ALASM-а код можно сохранить только в последних версиях с AlCo-вскими извратами, и то вроде как-то хитро через макросы.

но в большинстве случаев это не надо.
я допустим делаю так



ORG #8000
START
.... your programm ....
LAST

DISPLAY "START=",START
DISPLAY "LENGTH=",LAST-START


и в конце он выведет данные для сохранения.

Black1980
11.03.2006, 16:27
из ALASM-а код можно сохранить только в последних версиях с AlCo-вскими извратами, и то вроде как-то хитро через макросы.
Значит все таки так и получается, что из дебугера сохранять надо ( Alasm 5.03)... Кстати, на сколько я понял, то длину можно и в Real Commander посмотреть...

newart
11.03.2006, 19:19
Значит все таки так и получается, что из дебугера сохранять надо ( Alasm 5.03)... Кстати, на сколько я понял, то длину можно и в Real Commander посмотреть...
Alasm имхо для начинающих не лучший вариант, лучше попробуй Zasm (более нагляден) или Storm (relez forever!! =)

Black1980
11.03.2006, 20:37
Alasm имхо для начинающих не лучший вариант, лучше попробуй Zasm (более нагляден) или Storm (relez forever!! =)
Я начел с Zasm, но он не поддерживает команду INCBIN для загрузки файла, а это как нельзя удобно. Если как то можно в нем подгружать файл, то был бы благодарен за подсказку...

rasmer
11.03.2006, 23:08
+6. Это начиная с pt3 адрес на +5 поменяли.Ага, а Асм музон тама помойму инициализация была + 11, а проигрывание + 14 - но он подлец(плейер) тактов жрал туеву хучу....

newart
11.03.2006, 23:42
Я начел с Zasm, но он не поддерживает команду INCBIN для загрузки файла, а это как нельзя удобно. Если как то можно в нем подгружать файл, то был бы благодарен за подсказку...
Наверное там сокрашение INCB?
Глянь в дизасме тело асма, там должны быть видны все директивы.

bpm
12.03.2006, 01:13
Подскажи какием образом, все облазил, по S сохраняет только исходный текст, но ни код. Всю документацию в долль и поперек прошол, ничего не на рыл...
Аласмом никогда не пользовался, не знаю. Я привык в ксасе - assemble, потом save code.

Black1980
12.03.2006, 02:01
Вот сижу определяюсь в каком ассемблере оставаться (достатки и недостатки ищу). В аласме вроде удобно, да и ни так пугает сохранение в дебагере, в засме намного все наглядней и проще+сохранение из самого ассемблера. В другие если честно не очень то хочется лезть, голову забивать. Если с засмом разберусь (подгрузка файлов), то в нем и останусь, нет так в аласме и продолжу свою писанину... :)

Wlodek
12.03.2006, 02:28
А я привык к GENS4. Это вовсе не означает совет :) . Просто в 1993 году я сделал 128К-версию GENS с поддержкой RAM-диска со всеми (абсолютно!) функциями компилятора и пользуюсь им, так и не переучившись на что-то более новое ;) .
http://wlodeks.narod.ru/zxnet/soft/soft.htm

mishutka
12.03.2006, 03:37
Я начел с Zasm, но он не поддерживает команду INCBIN для загрузки файла, а это как нельзя удобно. Если как то можно в нем подгружать файл, то был бы благодарен за подсказку...
а почитайте внимательно приложенную к zasm инструкцию - там описаны директивы include и insert

Vovoi
17.03.2006, 18:39
А я привык к GENS4. Это вовсе не означает совет :) .
В оригинале вешчь крутая, а с добавками и тем более Wlodek не зря старался. GENS4 очень прост в освоении, четко известно в каких адресах он сам сидит, где находится набираемый текст, куда компилится код и многое другое, обязательно скачай один из "букварей синклериста":
http://trd.speccy.cz/ раздел [book] "Как написать игру на ассемблере"
С ALASM очень удобно работать в плане текста, практически полноценный текстовый редактор, но с сохранением кода и адресами куда он компилит прогу (текст не обязательно начинать с директивы ORG)я долго разбирался, не говоря уже о сохранении объектного кода.
:)
А вообще, каждому свое. Каждая прога по-своему ценна и интересна (зря чтоли делали?), так что полезно уметь работать во всех асмах (имхо).

Alexander Bondarenko (500:3432/3)
27.03.2006, 00:15
*Здравствуй, Wladimir!*

Лови мои идеи по поводу сабжа "Помогите начинающему с кодами.", о котором трещала в 12 Mar 2006 твоя портянка к тов. All.


А я привык к GENS4. Это вовсе не означает совет :) . Просто в 1993
году я сделал 128К-версию GENS с поддержкой RAM-диска со всеми
(абсолютно!) функциями компилятора и пользуюсь им, так и не
переучившись на что-то более новое ;)

Вот это я понимаю - дань тpадиции... ;)

/Вот и всё, Wladimir, можешь листать дальше.../

... Все сценеры - газетчики!

Black1980
30.03.2006, 00:25
GENS4 очень прост в освоении
Я начинал с него, потом решил перейти на более продвинутые проги... :)
обязательно скачай один из "букварей синклериста":
Качать мне нет необходимость, он у меня живьем есть... :)

Rubts0FF
11.04.2006, 07:28
Если с засмом разберусь (подгрузка файлов), то в нем и останусь, нет так в аласме и продолжу свою писанину... :)
Блин! INCLUDE - text, INSERT - code block!. здесь (http://zasm.nm.ru) и руководство пользователя и все, все. все ... зеркало (http://zasm.hut1.ru)
Пользуйтесь.


--- Директива INSERT ---
~~~~~~~~~~~~~~~~
Директива insert "a:FileName.fnt" генерирует код, считываемый с дискового
файла с именем FileName, который может содержать произвольные данные ( к приме-
ру, подготовленный знакогенератор).
Буфер для INSERT открывается только при компиляции на диск и равен буферу
INCLUDE. При компиляции в память, файл просто считывается в адрес расположения кода.