Rev 1845 | Details | Compare with Previous | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
1845 | yogev_ezra | 1 | ; MINI.ASM |
2 | ; -------- |
||
3 | ; Minimalistic uFMOD usage example. |
||
4 | |||
5 | ; Shows how to play an XM track in memory, |
||
6 | ; including proper error handling. |
||
7 | |||
8 | ; A precompiled version (not packed or whatever) is |
||
9 | ; available in bin\ |
||
10 | |||
11 | use32 |
||
12 | org 0 |
||
13 | db 'MENUET01' |
||
14 | dd 1 |
||
15 | dd START ; Entry point |
||
16 | dd uFMOD_IMG_END ; End of code and initialized data |
||
17 | dd MEMORY_END ; End of uninitialized (BSS) data |
||
18 | dd STACK_B ; Bottom of the stack |
||
19 | dd 0 ; Args |
||
20 | dd 0 ; Reserved |
||
21 | |||
22 | ; uFMOD setup: |
||
23 | UF_FREQ equ 48000 ; Set sampling rate to 48KHz (22050, 44100, 48000) |
||
24 | UF_RAMP equ STRONG ; Select STRONG interpolation (NONE, WEAK, STRONG) |
||
25 | UD_MODE equ UNSAFE ; Select UNSAFE mode (NORMAL, UNSAFE) |
||
26 | DEBUG equ 0 ; Skip debug-board messages |
||
27 | NOLINKER equ 1 ; Select "no linker" mode |
||
28 | |||
29 | ; uFMOD constants: |
||
30 | XM_MEMORY = 1 |
||
31 | XM_FILE = 2 |
||
32 | XM_NOLOOP = 8 |
||
33 | XM_SUSPENDED = 16 |
||
34 | uFMOD_MIN_VOL = 0 |
||
35 | uFMOD_MAX_VOL = 25 |
||
36 | uFMOD_DEFAULT_VOL = 25 |
||
37 | |||
38 | ; The XM track. |
||
5093 | clevermous | 39 | xm file '..\media\mini.xm' |
1845 | yogev_ezra | 40 | xm_length = $ - xm |
41 | |||
42 | ; Optimization: |
||
43 | ; This header file is suitable for mini.xm track only! |
||
44 | ; If you change the track, update the optimization header. |
||
45 | ; (Use the standart eff.inc file for a general purpose player app.) |
||
5093 | clevermous | 46 | include '..\media\mini.eff.inc' |
1845 | yogev_ezra | 47 | |
48 | ; Include the GUI framework. |
||
49 | FRMWRK_CALLBACK_ON equ 1 ; Enable callback |
||
50 | include 'frmwrk.asm' |
||
51 | |||
52 | ; UI text messages. |
||
53 | msg_txt db "uFMOD ruleZ!" |
||
54 | msg_txt_l = $ - msg_txt |
||
55 | msg_cap db "FASM",0 |
||
56 | err_txt db "Error" |
||
57 | err_txt_l = $ - err_txt |
||
58 | err_cap db ":-(",0 |
||
59 | |||
60 | START: |
||
61 | ; Start playback. |
||
62 | push XM_MEMORY |
||
63 | push xm_length |
||
64 | push xm |
||
65 | call _uFMOD_LoadSong |
||
66 | |||
67 | ; Stack fixing is required here, but in this simple |
||
68 | ; example leaving ESP as it is won't harm. In a real |
||
69 | ; application you should uncomment the following line: |
||
70 | ; add esp,12 |
||
71 | |||
72 | test eax,eax |
||
73 | jz error |
||
74 | |||
75 | ; Wait for user input. |
||
76 | push _uFMOD_WaveOut ; cbProc <- continue fetching data! |
||
77 | push msg_txt_l ; cbString |
||
78 | push msg_txt ; lpString |
||
79 | push msg_cap ; szCap |
||
80 | call _MessageBoxCB |
||
81 | ; add esp,16 |
||
82 | |||
83 | ; Stop playback. |
||
84 | call _uFMOD_StopSong |
||
85 | |||
86 | r: ; Exit. |
||
87 | xor eax,eax |
||
88 | dec eax |
||
89 | int 40h |
||
90 | |||
91 | error: |
||
92 | push 0 ; cbProc <- no callback |
||
93 | push err_txt_l ; cbString |
||
94 | push err_txt ; lpString |
||
95 | push err_cap ; szCap |
||
96 | call _MessageBoxCB |
||
97 | ; add esp,16 |
||
98 | jmp r |
||
99 | |||
100 | ; Include the whole uFMOD sources here. (Right after |
||
101 | ; your main code to avoid naming conflicts, but still |
||
102 | ; inside your code section.) |
||
103 | macro PUBLIC symbol {} ; hide all publics |
||
5093 | clevermous | 104 | include '..\fasm.asm' |
1845 | yogev_ezra | 105 | |
106 | align 4 |
||
107 | rb 1020 |
||
108 | STACK_B dd ? ; Stack bottom |
||
109 | MEMORY_END: ; End of uninitialized (BSS) data->-> |