mirror of https://github.com/nmlgc/ReC98.git
66 lines
1.1 KiB
NASM
66 lines
1.1 KiB
NASM
; Loads a song in .M format ([func] = SND_LOAD_SONG) or a sound effect bank in
|
|
; .EFC format ([func] = SND_LOAD_SE) into the respective work buffer of the
|
|
; sound driver. If MIDI is used, 'md' is appended to the file name.
|
|
|
|
; void DEFCONV snd_load(const char *fn, int func)
|
|
proc_defconv snd_load
|
|
@@fn = dword ptr (cPtrSize + 2)
|
|
@@func = word ptr (cPtrSize + 2 + dPtrSize)
|
|
|
|
push bp
|
|
mov bp, sp
|
|
push si
|
|
push ds
|
|
mov cx, SND_LOAD_FN_LEN
|
|
xor si, si
|
|
|
|
@@memcpy:
|
|
les bx, [bp+@@fn]
|
|
add bx, si
|
|
mov al, es:[bx]
|
|
mov _snd_load_fn[si], al
|
|
inc si
|
|
loop @@memcpy
|
|
mov ax, [bp+@@func]
|
|
cmp ax, SND_LOAD_SONG
|
|
jnz short @@load
|
|
cmp _snd_midi_active, 0
|
|
jz short @@load
|
|
xor bx, bx
|
|
|
|
@@strlen:
|
|
inc bx
|
|
cmp _snd_load_fn[bx], 0
|
|
jnz short @@strlen
|
|
mov _snd_load_fn[bx], 'm'
|
|
mov (_snd_load_fn+1)[bx], 'd'
|
|
mov (_snd_load_fn+2)[bx], 0
|
|
|
|
@@load:
|
|
mov dx, offset _snd_load_fn
|
|
mov ax, 3D00h
|
|
int 21h
|
|
mov bx, ax
|
|
mov ax, [bp+@@func]
|
|
cmp ax, SND_LOAD_SONG
|
|
jnz short @@PMD
|
|
cmp _snd_midi_active, 0
|
|
jz short @@PMD
|
|
int 61h
|
|
jmp short @@read
|
|
|
|
@@PMD:
|
|
int 60h
|
|
|
|
@@read:
|
|
mov ax, 3F00h
|
|
mov cx, 5000h
|
|
int 21h
|
|
pop ds
|
|
mov ah, 3Eh
|
|
int 21h
|
|
pop si
|
|
pop bp
|
|
ret
|
|
endp_defconv
|