mirror of https://github.com/nmlgc/ReC98.git
114 lines
2.1 KiB
NASM
114 lines
2.1 KiB
NASM
; Loads a song ([func] = SND_LOAD_SONG) or a sound effect bank ([func] =
|
|
; SND_LOAD_SE) into the respective work buffer of the sound driver. [fn] must
|
|
; not have any extension. Depending on snd_bgm_mode and snd_se_mode, the
|
|
; following file is loaded:
|
|
; • '[fn].m26' if SND_BGM_FM26
|
|
; • '[fn].m86' if SND_BGM_FM86
|
|
; • '[fn].mmd' if SND_BGM_MIDI
|
|
; • '[fn].efc' if SND_SE_FM
|
|
; • '[fn].efs' if SND_SE_BEEP (using master.lib's BGM driver)
|
|
|
|
; void __stdcall snd_load(int func, const char *fn)
|
|
snd_load proc
|
|
@@func = word ptr (cPtrSize + 2)
|
|
@@fn = dword ptr (cPtrSize + 2 + 2)
|
|
|
|
push bp
|
|
mov bp, sp
|
|
push si
|
|
xor si, si
|
|
jmp short @@memcpy_cond
|
|
|
|
@@memcpy_loop:
|
|
les bx, [bp+@@fn]
|
|
add bx, si
|
|
mov al, es:[bx]
|
|
mov _snd_load_fn[si], al
|
|
inc si
|
|
|
|
@@memcpy_cond:
|
|
cmp si, SND_LOAD_FN_LEN
|
|
jl short @@memcpy_loop
|
|
xor si, si
|
|
|
|
@@strlen:
|
|
inc si
|
|
cmp _snd_load_fn[si], 0
|
|
jnz short @@strlen
|
|
mov (_snd_load_fn+4)[si], 0
|
|
mov _snd_load_fn[si], '.'
|
|
inc si
|
|
cmp [bp+@@func], SND_LOAD_SE
|
|
jnz short @@song
|
|
mov _snd_load_fn[si], 'e'
|
|
mov (_snd_load_fn+1)[si], 'f'
|
|
cmp _snd_se_mode, SND_SE_OFF
|
|
jz @@ret
|
|
cmp _snd_se_mode, SND_SE_BEEP
|
|
jnz short @@FM_SE
|
|
mov (_snd_load_fn+2)[si], 's'
|
|
call bgm_read_sdata pascal, ds, offset _snd_load_fn
|
|
jmp @@ret
|
|
|
|
@@FM_SE:
|
|
mov (_snd_load_fn+2)[si], 'c'
|
|
jmp short @@open
|
|
|
|
@@song:
|
|
cmp _snd_bgm_mode, SND_BGM_OFF
|
|
jz short @@ret
|
|
push (KAJA_SONG_STOP shl 8)
|
|
nopcall snd_kaja_interrupt
|
|
mov al, _snd_bgm_mode
|
|
mov ah, 0
|
|
shl ax, 2
|
|
mov bx, ax
|
|
les bx, SND_LOAD_EXT[bx]
|
|
mov al, es:[bx]
|
|
mov _snd_load_fn[si], al
|
|
mov al, _snd_bgm_mode
|
|
mov ah, 0
|
|
shl ax, 2
|
|
mov bx, ax
|
|
les bx, SND_LOAD_EXT[bx]
|
|
mov al, es:[bx+1]
|
|
mov (_snd_load_fn+1)[si], al
|
|
mov al, _snd_bgm_mode
|
|
mov ah, 0
|
|
shl ax, 2
|
|
mov bx, ax
|
|
les bx, SND_LOAD_EXT[bx]
|
|
mov al, es:[bx+2]
|
|
mov (_snd_load_fn+2)[si], al
|
|
|
|
@@open:
|
|
push ds
|
|
mov dx, offset _snd_load_fn
|
|
mov ax, 3D00h
|
|
int 21h
|
|
mov bx, ax
|
|
mov ax, [bp+@@func]
|
|
cmp ah, KAJA_GET_SONG_ADDRESS
|
|
jnz short @@PMD
|
|
cmp _snd_bgm_mode, SND_BGM_MIDI
|
|
jnz 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
|
|
|
|
@@ret:
|
|
pop si
|
|
pop bp
|
|
ret 6
|
|
snd_load endp
|