ZXNet эхоконференция «code.zx»


тема: Помогите начинающему с кодами.



от: Slavik Tretiak
кому: All
дата: 10 Mar 2006
Hello, newart

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

от: Борис Красноперов
кому: All
дата: 10 Mar 2006
Hello, Black1980

Bla> Имею вот такой код, назовем его cod для проигрывания компилированного
Bla> AY музона:
Bla>
Bla> ORG 30000
Bla> CALL 40000
Bla> LOOP CALL 40006
Bla> HALT
Bla> XOR A
Bla> IN A,(#FE)
Bla> CPL
Bla> AND #1F
Bla> JR Z,LOOP
Bla> CALL 40000
Bla> RET
Bla>
Bla> Музон откомпилирован в ProTracker с плеером, назовем его muz.
Bla> Бейсик загрузчик всего этого добра следующий:
Bla>
Bla>
Bla> 5 CLEAR 29999
Bla> 10 RANDOMIZE USR 15619: REM: LOAD "cod" CODE 30000
Bla> 20 RANDOMIZE USR 15619: REM: LOAD "muz" CODE 40000
Bla> 30 RANDOMIZE USR 30000
Bla>
Bla> Помогите, в чем подвох??? Hе хочет играть не под эмулятор, не на
Bla> реальном спектруме. Заранее спасибо!

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

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

от: Вячеслав Калинин
кому: All
дата: 10 Mar 2006
Hello, Black1980

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

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

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

от: Дмитрий Кузьмин
кому: All
дата: 10 Mar 2006
Hello, All

Имею вот такой код, назовем его 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

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

от: Дмитрий Кузьмин
кому: All
дата: 10 Mar 2006
Hello, Sinus

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

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

от: Вячеслав Калинин
кому: All
дата: 10 Mar 2006
Hello, Black1980

Bla> Hе работает...

А так?

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

от: Дмитрий Кузьмин
кому: All
дата: 10 Mar 2006
Hello, newart

new> ORG 30000
new> CALL 40000
new> EI
new> LOOP HALT
new> CALL 40006
new> XOR A
new> IN A,(#FE)
new> CPL
new> AND #1F
new> JR Z,LOOP
new> JP 40000
new>
new> Будет играть.

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

от: Михаил Тебеньков
кому: All
дата: 10 Mar 2006
Hello, Black1980

Bla> Hе работает... :((

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

от: Slavik Tretiak
кому: All
дата: 10 Mar 2006
Hello, Black1980

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

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

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

от: Дмитрий Кузьмин
кому: All
дата: 10 Mar 2006
Hello, Sinus

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

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

Файл: music.rar http://zx.pk.ru/attachment.php?attachmentid=2814

от: Дмитрий Кузьмин
кому: All
дата: 10 Mar 2006
Hello, newart

new> А так?
new>
new> ORG 30000
new> CALL 40000
new> LOOP
new> EI
new> HALT
new> CALL 40006
new> XOR A
new> IN A,(#FE)
new> CPL
new> AND #1F
new> JR Z,LOOP
new> JP 40000

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

от: Alexandr Sinyakov
кому: All
дата: 10 Mar 2006
Hello, Black1980

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

Погоди, ты ж говорил что он с плейером... В упор плейера не вижу. Сама по себе
музака играться не будет.

от: Slavik Tretiak
кому: All
дата: 10 Mar 2006
Hello, Black1980

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)
┌─- code ───

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

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

от: Гаврилов Виталий
кому: All
дата: 10 Mar 2006
Hello, Sinus

Sin> у ST зависит от компилятора, точно не помню, но вроде START+5

+6. Это начиная с pt3 адрес на +5 поменяли.
И еще. У плееров от этого самого pt3 замечена одна черта- они глюкаво работают
на им2 в басике. Hаткнулся на такое безобразие на заре своей кодерской
деятельности. С pt2 & st все в порядке

от: Vladimir Larkov
кому: All
дата: 11 Mar 2006
Hello, Black1980

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

Hафига же ты из дебагера сохраняешь? Тем более 1 байт. В 1 байте, конечно,
пользы больше, чем в 0, но меньше, чем в (хотя бы) двух ;-) Из ассемблера надо
сохранять.

от: Дмитрий Кузьмин
кому: All
дата: 11 Mar 2006
Hello, Sinus

Sin> Black1980
Sin> там нет компилированного музона.
Sin> если взять ProTracker v.2.101 с сайта Virtual TR-DOS
Sin> (http://zx.da.ru)
Sin> загрузить туда музон AGATA.M (SONG: LOAD) и откомпилировать его
Sin> (COMPILE SONG) с плеером (на вопрос "Include Player" надо ответить
Sin> "Y") под адрес (ENTER START CODE: ) 49152. далее ответить Y (IS THIS
Sin> CORRECT Y/N?) и сохранить под именем AGATA (тогда он сохранится как
Sin> AGATA.C) то следующий код (для ассемблера ALASM)
Sin> ┌─- code ───
Sin>
Sin> ORG #C000
Sin> INCBIN "AGATA"
Sin>
Sin> ORG #8000
Sin> CALL #C000
Sin>
Sin> LOOP HALT
Sin> CALL #C006
Sin> XOR A
Sin> IN A,(#FE)
Sin> OR #E0
Sin> INC A
Sin> JP Z,LOOP
Sin>
Sin> JP #C000
Sin>
Sin> └── code ───
Sin> будет играть музон.

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

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

от: Дмитрий Кузьмин
кому: All
дата: 11 Mar 2006
Hello, bpm

bpm> Hафига же ты из дебагера сохраняешь? Тем более 1 байт. В 1 байте,
bpm> конечно, пользы больше, чем в 0, но меньше, чем в (хотя бы) двух ;-)
bpm> Из ассемблера надо сохранять.

Подскажи какием образом, все облазил, по S сохраняет только исходный текст, но
ни код. Всю документацию в долль и поперек прошол, ничего не на рыл... :(

от: Дмитрий Кузьмин
кому: All
дата: 11 Mar 2006
Hello, Black1980

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

от: Slavik Tretiak
кому: All
дата: 11 Mar 2006
Hello, Black1980

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

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

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

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

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

от: Вячеслав Калинин
кому: All
дата: 11 Mar 2006
Hello, Black1980

Bla> Значит все таки так и получается, что из дебугера сохранять надо (
Bla> Alasm 5.03)... Кстати, на сколько я понял, то длину можно и в Real
Bla> Commander посмотреть...

Alasm имхо для начинающих не лучший вариант, лучше попробуй Zasm (более
нагляден) или Storm (relez forever!! =)

от: Дмитрий Кузьмин
кому: All
дата: 11 Mar 2006
Hello, Sinus

Sin> из ALASM-а код можно сохранить только в последних версиях с
Sin> AlCo-вскими извратами, и то вроде как-то хитро через макросы.

Значит все таки так и получается, что из дебугера сохранять надо ( Alasm
5.03)... Кстати, на сколько я понял, то длину можно и в Real Commander
посмотреть...

от: Дмитрий Кузьмин
кому: All
дата: 11 Mar 2006
Hello, newart

new> Alasm имхо для начинающих не лучший вариант, лучше попробуй Zasm
new> (более нагляден) или Storm (relez forever!! =)

Я начел с Zasm, но он не поддерживает команду INCBIN для загрузки файла, а это
как нельзя удобно. Если как то можно в нем подгружать файл, то был бы
благодарен за подсказку...

от: rasmer
кому: All
дата: 12 Mar 2006
Hello, Vitamin

Vit> +6. Это начиная с pt3 адрес на +5 поменяли.

Ага, а Асм музон тама помойму инициализация была + 11, а проигрывание + 14 - но
он подлец(плейер) тактов жрал туеву хучу....

от: Вячеслав Калинин
кому: All
дата: 12 Mar 2006
Hello, Black1980

Bla> Я начел с Zasm, но он не поддерживает команду INCBIN для загрузки
Bla> файла, а это как нельзя удобно. Если как то можно в нем подгружать
Bla> файл, то был бы благодарен за подсказку...

Hаверное там сокрашение INCB?
Глянь в дизасме тело асма, там должны быть видны все директивы.

от: Vladimir Larkov
кому: All
дата: 12 Mar 2006
Hello, Black1980

Bla> Подскажи какием образом, все облазил, по S сохраняет только исходный
Bla> текст, но ни код. Всю документацию в долль и поперек прошол, ничего
Bla> не на рыл...

Аласмом никогда не пользовался, не знаю. Я привык в ксасе - assemble, потом
save code.

от: Wladimir Bulchukey
кому: All
дата: 12 Mar 2006
Hello, Black1980

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

от: Дмитрий Кузьмин
кому: All
дата: 12 Mar 2006
Hello, bpm

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

от: Михаил Тебеньков
кому: All
дата: 12 Mar 2006
Hello, Black1980

Bla> Я начел с Zasm, но он не поддерживает команду INCBIN для загрузки
Bla> файла, а это как нельзя удобно. Если как то можно в нем подгружать
Bla> файл, то был бы благодарен за подсказку...

а почитайте внимательно приложенную к zasm инструкцию - там описаны директивы
include и insert

от: Vladimir Bovin
кому: All
дата: 17 Mar 2006
Hello, Wlodek

Wlo> А я привык к GENS4. Это вовсе не означает совет :) .

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

от: Alexander Bondarenko
кому: Wladimir Bulchukey
дата: 22 Mar 2006
*Здравствуй, Wladimir!*

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

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

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

от: Дмитрий Кузьмин
кому: All
дата: 30 Mar 2006
Hello, Vovoi

Vov> GENS4 очень прост в освоении

Я начинал с него, потом решил перейти на более продвинутые проги... :)

Vov> обязательно скачай один из "букварей синклериста":

Качать мне нет необходимость, он у меня живьем есть... :)

от: Rubts0FF
кому: All
дата: 11 Apr 2006
Hello, Black1980

Bla> Если с засмом разберусь (подгрузка файлов), то в нем и останусь, нет
Bla> так в аласме и продолжу свою писанину... :)

Блин! INCLUDE - text, INSERT - code block!. здесь [http://zasm.nm.ru] и
руководство пользователя и все, все. все ... зеркало [http://zasm.hut1.ru]
Пользуйтесь.


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




Темы: Игры, Программное обеспечение, Пресса, Аппаратное обеспечение, Сеть, Демосцена, Люди, Программирование

Похожие статьи:
HINTS! - Пароли 50 уровней игры QUADRAX.
Оглавление - содержание выпуска.
Groups - анкеты действующих групп: Extreme Entertainment.
Письмо №283
DUCK NEWS - Доска объявлений (юмор).

В этот день...   18 апреля