Wait_Next_Frame: POP DE LD A, $saved_rom_bank LD ($mem_sound_effect_pc), A LD A, D LD ($mem_sound_effect_pc+1), A LD A, E LD ($mem_sound_effect_pc+2), A RET .MACRODEF RET_WAIT_NEXT_FRAME CALL =Wait_Next_Frame .END .MACRODEF RET_WAIT_NEXT_FRAME_SAVE_HL LD A, H LD ($mem_sound_effect_hl), A LD A, L LD ($mem_sound_effect_hl+1), A CALL =Wait_Next_Frame LD A, ($mem_sound_effect_hl) LD H, A LD A, ($mem_sound_effect_hl+1) LD L, A .END .MACRODEF CHANNEL_2_SOUND_EFFECT_LOOP =start =end LD HL, =start $loop: LD A, (HL+) LD ($18), A LD A, (HL+) LD ($19), A .RET_WAIT_NEXT_FRAME_SAVE_HL LD A, H CP high(=end) JR NZ, =$loop LD A, L CP low(=end) JR NZ, =$loop $end: .END Play_Sound_Effect: LD A, ($mem_sound_effect_pc) CP $ff RET Z .CHANGE_BANK_TO_A LD A, ($mem_sound_effect_pc+1) LD D, A LD A, ($mem_sound_effect_pc+2) LD E, A PUSH DE RET .MACRODEF SET_SOUND_EFFECT =addr PUSH AF LD A, $mem_sound_flags AND 0b00111110 JR NZ =$end LD A, bank(=addr) LD ($mem_sound_effect_pc), A LD A, high(ptr(=addr)) LD ($mem_sound_effect_pc+1), A LD A, low(ptr(=addr)) LD ($mem_sound_effect_pc+2), A $end: POP AF .END