kolibrios/programs/develop/libraries/ufmod/Fasm/mini.asm

110 lines
2.7 KiB
NASM
Raw Normal View History

; MINI.ASM
; --------
; Minimalistic uFMOD usage example.
; Shows how to play an XM track in memory,
; including proper error handling.
; A precompiled version (not packed or whatever) is
; available in bin\
use32
org 0
db 'MENUET01'
dd 1
dd START ; Entry point
dd uFMOD_IMG_END ; End of code and initialized data
dd MEMORY_END ; End of uninitialized (BSS) data
dd STACK_B ; Bottom of the stack
dd 0 ; Args
dd 0 ; Reserved
; uFMOD setup:
UF_FREQ equ 48000 ; Set sampling rate to 48KHz (22050, 44100, 48000)
UF_RAMP equ STRONG ; Select STRONG interpolation (NONE, WEAK, STRONG)
UD_MODE equ UNSAFE ; Select UNSAFE mode (NORMAL, UNSAFE)
DEBUG equ 0 ; Skip debug-board messages
NOLINKER equ 1 ; Select "no linker" mode
; uFMOD constants:
XM_MEMORY = 1
XM_FILE = 2
XM_NOLOOP = 8
XM_SUSPENDED = 16
uFMOD_MIN_VOL = 0
uFMOD_MAX_VOL = 25
uFMOD_DEFAULT_VOL = 25
; The XM track.
xm file '..\ufmodlib\media\mini.xm'
xm_length = $ - xm
; Optimization:
; This header file is suitable for mini.xm track only!
; If you change the track, update the optimization header.
; (Use the standart eff.inc file for a general purpose player app.)
include '..\ufmodlib\media\mini.eff.inc'
; Include the GUI framework.
FRMWRK_CALLBACK_ON equ 1 ; Enable callback
include 'frmwrk.asm'
; UI text messages.
msg_txt db "uFMOD ruleZ!"
msg_txt_l = $ - msg_txt
msg_cap db "FASM",0
err_txt db "Error"
err_txt_l = $ - err_txt
err_cap db ":-(",0
START:
; Start playback.
push XM_MEMORY
push xm_length
push xm
call _uFMOD_LoadSong
; Stack fixing is required here, but in this simple
; example leaving ESP as it is won't harm. In a real
; application you should uncomment the following line:
; add esp,12
test eax,eax
jz error
; Wait for user input.
push _uFMOD_WaveOut ; cbProc <- continue fetching data!
push msg_txt_l ; cbString
push msg_txt ; lpString
push msg_cap ; szCap
call _MessageBoxCB
; add esp,16
; Stop playback.
call _uFMOD_StopSong
r: ; Exit.
xor eax,eax
dec eax
int 40h
error:
push 0 ; cbProc <- no callback
push err_txt_l ; cbString
push err_txt ; lpString
push err_cap ; szCap
call _MessageBoxCB
; add esp,16
jmp r
; Include the whole uFMOD sources here. (Right after
; your main code to avoid naming conflicts, but still
; inside your code section.)
macro PUBLIC symbol {} ; hide all publics
include '..\ufmodlib\src\fasm.asm'
align 4
rb 1020
STACK_B dd ? ; Stack bottom
MEMORY_END: ; End of uninitialized (BSS) data