func snd_se_reset mov _snd_se_frame, 0 mov _snd_se_playing, -1 ret endfunc func SND_SE_PLAY mov bx, sp mov dx, ss:[bx+4] cmp _snd_se_mode, SND_SE_OFF jz short @@ret cmp _snd_se_playing, -1 jnz short @@priority? mov _snd_se_playing, dl ret 2 @@priority?: mov bl, _snd_se_playing xor bh, bh mov al, _snd_se_priorities[bx] mov bx, dx cmp al, _snd_se_priorities[bx] ja short @@ret mov _snd_se_playing, dl mov _snd_se_frame, 0 @@ret: ret 2 endfunc func snd_se_update cmp _snd_se_mode, SND_SE_OFF jz short @@ret cmp _snd_se_playing, -1 jz short @@ret cmp _snd_se_frame, 0 jnz short @@unlock? mov al, _snd_se_playing cmp _snd_se_mode, SND_SE_BEEP jz short @@beep mov ah, PMD_SE_PLAY int 60h jmp short @@unlock? @@beep: xor ah, ah push ax call bgm_sound @@unlock?: inc _snd_se_frame mov bl, _snd_se_playing xor bh, bh mov al, _snd_se_priority_frames[bx] cmp al, _snd_se_frame jnb short @@ret mov _snd_se_frame, 0 mov _snd_se_playing, -1 @@ret: ret endfunc