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


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



от: Борис Красноперов
кому: 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е скажешь чем лучше, чтобы уж делать, так на верника...

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

от: Вячеслав Калинин
кому: 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 все в порядке

от: Дмитрий Кузьмин
кому: All
дата: 11 Mar 2006
Hello, bpm bpm> Hафига же ты из дебагера сохраняешь? Тем более 1 байт. В 1 байте, bpm> конечно, пользы больше, чем в 0, но меньше, чем в (хотя бы) двух ;-) bpm> Из ассемблера надо сохранять. Подскажи какием образом, все облазил, по S сохраняет только исходный текст, но ни код. Всю документацию в долль и поперек прошол, ничего не на рыл... :(

от: 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, 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 для загрузки файла, а это как нельзя удобно. Если как то можно в нем подгружать файл, то был бы благодарен за подсказку...

от: Вячеслав Калинин
кому: All
дата: 12 Mar 2006
Hello, Black1980 Bla> Я начел с Zasm, но он не поддерживает команду INCBIN для загрузки Bla> файла, а это как нельзя удобно. Если как то можно в нем подгружать Bla> файл, то был бы благодарен за подсказку... Hаверное там сокрашение INCB? Глянь в дизасме тело асма, там должны быть видны все директивы.

от: rasmer
кому: All
дата: 12 Mar 2006
Hello, Vitamin Vit> +6. Это начиная с pt3 адрес на +5 поменяли. Ага, а Асм музон тама помойму инициализация была + 11, а проигрывание + 14 - но он подлец(плейер) тактов жрал туеву хучу....

от: 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. При компиляции в память, файл просто считывается в адрес расположения кода.




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

Похожие статьи:
Part 6 - The Dizzy story.
Игротека - SNAKE Презентация написанной в Харькове недетерминированной игры.
Архивчик - Mikie, Sabre Wulf.
Тема - О перспективной и просто TECHNO музыке.
Part 1 - Editorial and news.

В этот день...   8 мая