Просмотр полной версии : Вставка AY музыки в программу
molodcov_alex
26.07.2006, 19:31
Подскажите, please, какой формат поэкономичнее (занимает меньше памяти и сам проигрыватель был бы попроще), ну и соответственно как с ним работать, желательно с примерами кода.
upd.
Итого: в Dizzy 1 из Dizzy S.A.C.K. (и во все прочие свои поделки) было всунуто примерно следующее: http://zx.pk.ru/showthread.php?p=301154#post301154
pt3, другие все вымерли.
если компилишь под #c000, то инициализация в самом начале call #c000, потом по таймеру 50гц делаешь call #c005, при этом мусорятся почти все регистры Z80
Я помню, что SOUND TRACKER в несколько раз быстрей чем ASM. Когда вешаешь музон ASM ваабще все тормозиться.
molodcov_alex
27.07.2006, 10:47
Спасибо! Уже пользуюсь "Vortex Tracker II v1.0 PT3 player for ZX Spectrum". Действительно экономично!
Подскажите, please, какой формат поэкономичнее (занимает меньше памяти и сам проигрыватель был бы попроще)
В каком формате тебе музыкант музыку предоставил - тот и используй :wink:
shuran33
18.12.2010, 23:07
желательно с примерами кода.
А может кто-нибудь напишет пример кода?
Допустим у меня в образе записана РТ3-музыка. Я ее подгружаю в своей программе, и далее как мне ее заставить играть?:v2_confu:
null_device
18.12.2010, 23:14
Например, "воткнуть" в прерывания вызов плейера.. по-моему, так!
----
Обычно в проигрывателе существуют три точки: инициализации, проигрывания одного "такта" мелодии и остановки. Зная адреса этих точек пишется программа работающая в прерываниях, перед каждым вызовом проигрывателя сохраняющая "жизненно важные" регистры МП (например в стек), а после вызова их восстанавливающая.
shuran33
18.12.2010, 23:16
Значит чтобы играла музыка нужно каждый раз плеер "втыкать"? Тогда где посмотреть код простого плеера? Чтоб вставить его в программу.
Значит чтобы играла музыка нужно каждый раз плеер "втыкать"? Тогда где посмотреть код простого плеера? Чтоб вставить его в программу.
В исходниках от АААБАНД, тема в программировании, называеться исходники Мегадем. Во всех частях есть плеер, причем универсальный.
shuran33
18.12.2010, 23:19
AAA, понял. Сейчас посмотрю там.
null_device
18.12.2010, 23:23
Тогда где посмотреть код простого плеера? Чтоб вставить его в программу.
А, чем плох "родной", получающийся после компиляции? Или вам нужен "универсальный", для нескольких мелодий??
shuran33
18.12.2010, 23:25
Я даже не знаю. Но я так понимаю что если проигрывать несколько мелодий то лучше универсальный. А если одну то и "родной" отлично работает.
Я даже не знаю. Но я так понимаю что если проигрывать несколько мелодий то лучше универсальный. А если одну то и "родной" отлично работает.
Лучше родным если одну. Особенно АСМ. Но если нужна скорость и проигрывание разных мелодий pt2 pt3 asm st, то есть универсальный плеер. Хотя обязательно надо проверять после сборки. VNN на этом собаку уже съел, спроси его в личку или почту, он тебе все объяснит и пришлет.
3 мегадемы все таки написал и в каждой части по 5-10 мелодий разных сувал. Глюков было немеряно. Мелодия играет, а орнаменты сбиты и не сразу, а где нить в конце что то не так играет. Если такое не заметить музакер может обидеться что его шедевр не так звучит.
null_device
18.12.2010, 23:38
Вот тут (http://zx.pk.ru/showpost.php?p=257422&postcount=28) пример программы обработки прерываний в режиме IM2. Там же где-то образ с "наглядным" примером, как это должно работать на основе мелодии STP.
Enigmatic
29.12.2011, 15:15
Замучался уже.
Подскажите на конкретном примере как проиграть мелодию в im2?
мелодия с плеером pt3.
Т.е такой цикл
10 call 49152
20 n1 call 49157
30 halt
40 jp n1
50 ret
Замучался уже.
Подскажите на конкретном примере как проиграть мелодию в im2?
мелодия с плеером pt3.
Т.е такой цикл
10 call 49152
20 n1 call 49157
30 halt
40 jp n1
50 ret
org #6000
call #c000
ei
loop halt
call #c005
jp loop
org #c000
incbin "music.m"
Enigmatic
29.12.2011, 15:38
А вместе с прерываниями im2 как это будет выглядеть?
Хочу отдельно повесть музон на прерывания.
null_device
29.12.2011, 15:40
Enigmatic, в 14 посте, была дана ссылка на обработчик прерываний, в котором можно играть музыку (а также, листинги для "подготовки" и запуска скомпилированной мелодии и вторых прерываний их последующей "остановки").
Мелодию с проигрывателем - "в студию"! (или адреса инициализации, проигрывателя и остановки).
----
Простейшая "мулька" (http://zx.pk.ru/attachment.php?attachmentid=16070&d=1266023242) для создания im2-обработчика..
Компиляция из кусков:
CALL 49152
CALL SETIM2
LOOP:
LD A,191
IN A,(254)
RRA
JR NC,EXIT
HALT
JR LOOP
EXIT:
JP SETIM1
SETIM2 LD HL,INTTAB
LD DE,INTTAB+1
LD (HL),PLAYER
LD BC,256
LDIR
DI
LD A,'INTTAB
LD I,A
IM 2
EI
RET
SETIM1 DI
LD A,63
LD I,A
IM 1
EI
RET
ORG '$*257
PLAYER PUSH AF,BC,DE,HL
EXX
EX AF,AF'
PUSH AF,BC,DE,HL
PUSH IX,IY
CALL MUSIC+5 ;MUSIC+6 for old players
POP IY,IX
POP HL,DE,BC,AF
EXX
EX AF,AF'
POP HL,DE,BC,AF
EI
RET
INTTAB EQU #B000 ;257 bytes at #xx00
MUSIC INCBIN "music.C"
Enigmatic
29.12.2011, 15:43
Спасибо!!
А вместе с прерываниями im2 как это будет выглядеть?
Хочу отдельно повесть музон на прерывания.
Возьми любую демку без частей или гифт и посмотри как там сделано!!!
Для прерываний юзаю IM1, намного удобней и проще.
DimkaM, а ты всегда в прерывание укладываешься?
Enigmatic
30.12.2011, 12:59
Возьми любую демку без частей или гифт и посмотри как там сделано!!!
Я уже разобрался.
Вот кому мож пригодится:
org 46000
call 30000 ;ин.музыки
jp start
start ld hl,inter
ld (#66ff),hl
ld a,#66
ld i,a
im 2
ei
ret
inter push hl
push de
push bc
push af
push ix
call 30005 ;воспроизведение музыки,можно
всунуть +еще индикатор или цикл.бег.строку
pop ix
pop af
pop bc
pop de
pop hl
jp #38
imoff di
ld a,63
ld i,a
im 1
ei
ret
по адресу 30000 или люб.другой должна лежать музыка.В цикл можно вставить еще и анализатор музыки,бег строку...
Использовать можно в бейсике:
10 загрузил музыку
20 загрузил саму прогу code 46000
30 randomize usr 46000
DimkaM, а ты всегда в прерывание укладываешься?разве есть разница IM2 vs IM1 ?
Наверно имеется ввиду Халт с юзаньем Бейсиковского обработчика. Я обычно в 0-3ффф ОЗУ держу.
start ld hl,inter
ld (#66ff),hl
ld a,#66
ld i,a
im 2
ei
ret
А разве таблица не нужна?
DimkaM, Это на каком клоне озу держишь?
---------- Post added at 17:27 ---------- Previous post was at 17:26 ----------
Enigmatic, таблица нужна для нормальной обработки им2
DimkaM, Это на каком клоне озу держишь?пентева,незнаю правда потянет ли оно на клон спека.
таблица нужна для нормальной обработки им2
Это только на клонах. В оригинальных спеках так и делается. В некоторых клонах прерывания по IM2 не правильно отрабатываются, для этого нужна таблица ( лишняя трата 256 байт)
В некоторых клонах прерывания по IM2 не правильно отрабатываются, для этого нужна таблица ( лишняя трата 256 байт)
Вот только не надо. Сделай простейшее - в вектор вставь #3f. Получится адрес #FFFF. В #FFFF запиши #18. Получится JR #FFF4. В #FFF4 запиши JP куда нада. И никаких таблиц, занимающих 257 байт.
Правда для проги, не переключающей странички. Хотя и там можно сделать соотв. изменения.
Сделай простейшее - в вектор вставь #3f. Получится адрес #FFFF у меня в пзу из (#3fff) совсем другие числа читаются.
Вот только не надо. Сделай простейшее - в вектор вставь #3f. Получится адрес #FFFF. В #FFFF запиши #18. Получится JR #FFF4. В #FFF4 запиши JP куда нада. И никаких таблиц, занимающих 257 байт.
Правда для проги, не переключающей странички. Хотя и там можно сделать соотв. изменения.
Не во всех ПЗУ по адресу #3fff считывается #ffff. Было много самописных прошивок.
у меня в пзу из (#3fff) совсем другие числа читаются.
Тады - "ОЙ" ). Щас стоко всяких прошивок...
Это только на клонах. В оригинальных спеках так и делается. В некоторых клонах прерывания по IM2 не правильно отрабатываются, для этого нужна таблица ( лишняя трата 256 байт)
Это вообще-то из правил хорошего тона
не ставить I в slowram
делать для IM2 табличку
и именно про фирменные машины ;)
ты поручишься что какойнить interface1 не будет сыпать мусор на шину оригинального спека?
ты поручишься что какойнить interface1 не будет сыпать мусор на шину оригинального спека?
Хмм, сильно сомневаюсь что при подключенной перифирии мусора на шине не будет.
2VNN> Ай ай ай, такой большой, а табличку для прерываний упрощённую используешь... :)
---------- Post added at 15:02 ---------- Previous post was at 15:01 ----------
не ставить I в slowram
делать для IM2 табличку
Залог надёжного ИМ2. Сокращайте, убирайте, делайте по-своему. А потом будете удивляться, что даже в эмуле через раз работает.
2VNN> Ай ай ай, такой большой, а табличку для прерываний упрощённую используешь...
просто он для нормальных компов делает;)
есть разные куски, тут и там - может есть один но полный кусок кода для проигрывания на AY?
неважно насколько много циклов занимает, но важно исходники, что бы себе подключить проще и собрать прогу.
Shadow Maker
15.03.2012, 09:43
Ну вот например. Это я кусок кода cj покромсал, который он мне когда-то давал. Если такую кучу не надо сохранять на прерываниях - убери. Можно вообще сразу поместить куда надо обработчик и обойтись без ldir. Код для sjasmplus.
Это если я правильно понял, что ты хочешь проигрывать с прерываний. Если просто проигрывать - сделай тупо loop call music+5: jr loop и всё.
imtab equ #be00 //таблица вектора прерываний (257 байт)
int_jump equ #bdbd //обработчик
start
di:ld sp,#6000
xor a:out (#fe),a
// прерывания
ld hl,imtab:ld a,h,i,a
ld a,low int_jump
ld (hl),a:inc l:jr nz,$-2
inc h:ld (hl),a
ld hl,obrab,e,a,d,a,bc,obrab_len:ldir
im 2
call music // init music
ei
loop
halt
jr loop
obrab //обработчик прерываний (работает с адреса #bdbd)
push af,hl,bc,de,ix,iy
exx
push hl,de,bc
ex af,af'
push af
call music+5
pop af
ex af,af'
pop bc,de,hl
exx
pop iy,ix,de,bc,hl,af
ei
ret
obrab_len equ $-obrab
music incbin "music.cod" //пт3-модуль с плеером
2 Shadow Maker
спасибо, нашел исходники
//пт3-модуль с плеером
щас переделаю для IAR или другого , но на PC ...
Добрый день. Есть такая проблема - ну никак не получается проиграть музыку, экспортированную из Vortex Tracker II. Экспортирую в формате hobeta with player, на адрес #C000. Из Бейсика загружаю на адрес 49152. Длина музыки с плеером из VT немногим меньше 6 КБ. Кодовый кусочек загружаю по адресу 45000, длина... да вот он, собственно, весь (как рекомендует и VT, и в этой теме был такой же кусочек кода):
CALL #C000
EI
LOOP CALL #C005
HALT
JP LOOP
RET
Результат - эмулятор сбрасывается.
Собственно, вопрос: что я делаю не так? Понятно, что причина ошибки на моей стороне, но в чем она заключается - никак не могу понять.
Экспортирую в формате hobeta with player
А в образе диска он в формате хобеты лежит или просто кодовым блоком?
Если вызов из бейсика, то перез загрузкой кода модуля или управляющего кода надо сделать CLEAR.
А в образе диска он в формате хобеты лежит или просто кодовым блоком?
Если вызов из бейсика, то перез загрузкой кода модуля или управляющего кода надо сделать CLEAR.
Я делал сохранение и в формате AY - это же и есть кодовый блок, если я правильно понимаю?
Делаю CLEAR 44999, потому как кодовый блок запускаю с 45000 (а я, кажется, об этом писал).
Я делал сохранение и в формате AY - это же и есть кодовый блок, если я правильно понимаю?
Нет. Это более сложный формат.
Можно TRD со всеми необходимыми файлами? (загрузчик, код инициализации, модуль)
denpopov
07.02.2015, 13:26
Собственно, вопрос: что я делаю не так? Понятно, что причина ошибки на моей стороне, но в чем она заключается - никак не могу понять.
Я не дохожу до такого изврата с хобетой, но по идее перед использованием проигрывателя, его нужно проинициализировать:
ld hl,song: call INIT
здесь song - адрес музона.
и на экспортируемый файл хотелось бы взглянуть вообще-то.
Vitamin, denpopov: спасибо большое. Разобрался. Ошибка была в том, что не понимал, что же именно сохраняет мне Vortex Tracker. Нашел нужный формат - и все заработало, как в цикле, так и на прерываниях.
romancha
26.03.2019, 11:52
Всем привет! Может кто поможет, перечитал всю тему и все равно не получилось, вставить в свой код музыку (tune.$c) с плеером сохраненную из VORTEX трекера II(((( В sjasme добавляю ...
ORG #C000
MUSIC INCBIN "tune.$c"
после вызываю CALL #C000, и вижу просто черный экран внизу A>K
и все...:v2_dizzy_facepalm:
покажи полученный кодовый блок
romancha
26.03.2019, 13:29
покажи полученный кодовый блок
MODULE MainCode
entry LD A,71
LD (23693),A
XOR A ; border 0
CALL 8859 ; ========
CALL 3435
LD A,2
CALL 5633
MUSIC EQU #C000
LD A,1
LD (MUSIC+10),A
CALL MUSIC
EI
LPM
HALT
CALL MUSIC+5
LD A,(MUSIC+10)
RLA
JR NC,LPM
RET
;============================================
...... код игры
;============================================
ORG #C000
INCBIN "tune.$c"
ENDMODULE
tune.$c, сохранял как Hobeta with player.
tune.$c, сохранял как Hobeta with player.
у файлов в формате hobeta вначале присутствует заголовок (17байт), при incbin его надо пропускать
(вроде можно явно указывать смещение)
romancha
26.03.2019, 13:43
у файлов в формате hobeta вначале присутствует заголовок (17байт), при incbin его надо пропускать
(вроде можно явно указывать смещение)
мда, а сколько нужно пропустить?
- - - Добавлено - - -
мда, а сколько нужно пропустить?
туплююю)))
- - - Добавлено - - -
у файлов в формате hobeta вначале присутствует заголовок (17байт), при incbin его надо пропускать
(вроде можно явно указывать смещение)
сейчас попробую!
- - - Добавлено - - -
БРАВО! ЗАИГРАЛО;))) СПАСИБИЩЕ, неделю голову ломал, откуда стартовать!
как вариант смотри после компиляции что получилось в отладчике.
ну а так, да
incbin test.bin,7 ; include boe.bin but skip the first 7 bytes
romancha
26.03.2019, 13:51
Насколько я понимаю, только после того как доиграет музыка, будет выполнен остальной код программы?
Нужно вставлять , ну например заставку к игре в цикл музыки ? или нет перед циклом
если нужна постоянно задействуй im2
romancha
26.03.2019, 14:01
если нужна постоянно задействуй im2
мдя, до прерываний еще не добрался) с этим делом нужно еще вникать, но все равно спасибо за СОВЕТ!
Enigmatic
26.03.2019, 15:21
Если очень хочется, то можно воспользоваться простенькой программкой из Zx-ревю помоему)
Тут мелодия откомпилирована по адресу 30000, можно что-то еще в цикл добавить
https://pp.userapi.com/c853628/v853628533/e91e/MAgTyAlpL80.jpg
romancha
26.03.2019, 15:35
Благодарю, я воспользовался именно этой программкой, музыка играет и при заставке и в самой игре, а отключить? CALL IMOFF? не так ли...
только плейер заглуши (call init) после этого
mastermind
26.03.2019, 18:48
у файлов в формате hobeta вначале присутствует заголовок (17байт), при incbin его надо пропускать
(вроде можно явно указывать смещение)
В ужасме же есть для этого директива INCHOB: https://github.com/sjasmplus/sjasmplus/wiki#inchob-filenameoffsetlength
- - - Добавлено - - -
MUSIC INCBIN "tune.$c"
См. https://github.com/sjasmplus/sjasmplus/wiki#inchob-filenameoffsetlength
Dart Alver
26.03.2019, 23:11
LD A,#66
LD I,A
IM 2
Только I=#66 пожалуй не лучший выбор, если планируется работоспособность проги на оригинале.
Какие вы молодцы. Не удивлюсь, что программа работает на разных компьютерах.
romancha
27.03.2019, 08:23
Только I=#66 пожалуй не лучший выбор, если планируется работоспособность проги на оригинале.
А почему так? наверное есть альтернатива
- - - Добавлено - - -
Если очень хочется, то можно воспользоваться простенькой программкой из Zx-ревю помоему)
Тут мелодия откомпилирована по адресу 30000, можно что-то еще в цикл добавить
https://pp.userapi.com/c853628/v853628533/e91e/MAgTyAlpL80.jpg
Кстати, вот в этом куске " LD (#66FF),HL ", почему задействован именно адрес #66FF ?
Кстати, вот в этом куске " LD (#66FF),HL ", почему задействован именно адрес #66FF ?
изучи, как работает IM2
изучи, как работает IM2
Да сказал бы просто: При приходе перывания старший байт адреса перехода берётся из рег.I а младший с шины данных.
Там должно быть #FF на оригинале, но кучи клонов спека не оставляют выбора - всё-таки надо юзать табличку в 257 байт... :(
Да сказал бы просто: При приходе перывания старший байт адреса перехода берётся из рег.I а младший с шины данных.
Там должно быть #FF на оригинале, но кучи клонов спека не оставляют выбора - всё-таки надо юзать табличку в 257 байт... :(
спасибочки! не знал
Скачал с zxart музыку в формате pt3. Проиграть её не могу. В pt3 есть же встроенный плеер или pt3 по другому адресу скомпилированы?
DEVICE ZXSPECTRUM128
org #9000
StartProg:
call #c000
ei
loops halt
call #c005
jr loops
org #c000
INCBIN "KUVO - Jester Molecule's revenge theme (2021).pt3" ;17
;INCBIN "KUVO - Jester Molecule's revenge theme (2021).$c",17 ;После VT экспорта
SAVESNA "test.sna",StartProg
В VT играет, и скомпилированная с плеером воспроизводит. Это получилось.
П.С.: Походу нет плеера строенного в фалах pt3 на zxart (по крайней мере, которые скачал).
Black Cat / Era CG
01.07.2021, 15:50
Насколько помню, pt3 - это как раз музло БЕЗ плеера.
Powered by vBulletin® Version 4.2.5 Copyright © 2024 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot