была недавно какая то польская демка там играла музыка бипера и эффекты летали. Название запамятовал год 2011-12
была недавно какая то польская демка там играла музыка бипера и эффекты летали. Название запамятовал год 2011-12
Может, мы обидели кого-то зря,
Сбросив пару лишних мегатонн,
И горит зелёным пламенем земля,
Там, где был когда-то Пентагон!..
Profi-576 v3.2/AY-3-8912A GI/FDD-5.25'
вот например.исходник где?
Только это не конкретно тот музон , который мне нужно (ибо не доделал ещё).
Но исходник движка везде одинаков, разница в инициализации музыки и таблицах нот.
это проще, так как там сам движок адаптирован под проигрывание совместно с внешними подпрограммами.
Это ж не сэвэйдж, а обычний монофонический бикающий, встроенной в ПЗУ, процедурой последовательно двумя тонами.(в играх подобное было, например jet set willy, three weeks in paradise , или nosferatu)
Последний раз редактировалось ALKO; 02.04.2013 в 23:36.
ALKO,
ну да все правильно
FUNC_82_PATTERN_END:
здесь сохраняешь регистры и делаешь то что тебе нужно
С уважением,
Jerri / Red Triangle.
С любовью к вам, Yandex.Direct
Размещение рекламы на форуме способствует его дальнейшему развитию
NEXTQUANT_CHK:
Эта функция для воспроизведения каждой ноты?
---------- Post added at 16:10 ---------- Previous post was at 15:42 ----------
NEXTQUANT_CHK:
CALL CHECK_KEY
push AF
push hl
push de
push bc
call shlyapa
pop bc
pop de
pop hl
pop afделаю такshlyapa:
ld hl,16384
ld (hl),10
ret
Но после вызова процедуры shlyapa происходит выход в бейсик.(процедура срабатывает, но почему ret возращает в бейсик , а не в цикл движка, не пойму)
---------- Post added at 16:44 ---------- Previous post was at 16:10 ----------
Вроде всё прояснилось.
Нужно было процедуру после вызова прописывать, а я метку влепил наобум, до фразы "call shlyapa" .
Вот вызываю процедуру, затем шаманю там, а как состояние текущих регистров сохранить? В стеке ведь на тот момент состояние регистров движка.
Это что, для сохранения каждого значения делать так:
?ld hl,30000 ; адрес второго стека
ld (hl), af ; сохранение регистра
inc hl;
.... ; и тд.
Последний раз редактировалось ALKO; 03.04.2013 в 16:50.
ALKO, сначала определись какие регистры тебе надо сохранять и можно ли их сохранить в переменных
напрмер
call old_proc
old_proc
ld a,$
dec a
ld (nn),a
jr z, process completed
ld hl,$
ld de,$
dup 32
ldi
edup
ld (nn),hl
ld (nn),de
ret
process completed
ld hl, new_proc
ld (nn),hl
ret
new_proc
ret
С уважением,
Jerri / Red Triangle.
не могу нащупать, где же всё таки проигрывается нота по отдельности.
В начало каждой процедуры пробовал пихать ЭТО
работает только в NEXTQUANT_CHK:push AF
push hl
push de
push bc
call shlyapa
pop bc
pop de
pop hl
pop af
в остальных случаях зависает. Почему так?
все же необходимые регистры сохранил. инстракшн поинтер вроде должен сам сохраняться при команде call.
та я так абстрактно представил, что нужен один байт для порядкового номера выводимых картинок, и один для отсчёта количества нот (точнее квантов музыки, так как там и по две ноты за раз проигрываются) , через которое отображать эти самые картинки. С этим проблем не должно возникнуть. Просто поинтересовался какой подход используют с этими самыми вызовами внешних процедур.
Надо анализировать код плеера. ЕМНИП, он использует стек для выбора данных мелодии из таблиц. Если так, то сохранение регистров на стеке убивает мелодию. Самый простой способ - сохранять регистры так:
Код:ld (old_sp),sp ld sp,free_mem_block push af push bc push de push hl call Shlyapa pop hl pop de pop bc pop af ld sp,(old_sp)
---------- Post added at 10:32 ---------- Previous post was at 10:31 ----------
Да, смотрим на направление роста стека и не забываем, что free_mem_block - это конец 8-байтного буфера.
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)