Subversion Repositories Kolibri OS

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
1845 yogev_ezra 1
; NASM.ASM
2
; --------
3
; uFMOD public source code release. Provided as-is.
4
 
5
; *** This stub allows compiling uFMOD sources using NASM.
6
; Everything documented in fasm stub!
7
 
8
; %error directive in NASM causes multiple prompts to appear due to
9
; multiple passes :( So, we'd better avoid using %error.
10
 
11
ifdef f44100
12
	FSOUND_MixRate equ 44100
13
	FREQ_40HZ_p    equ 1DB8Bh
14
	FREQ_40HZ_f    equ 3B7160h
15
	PCM_format     equ 3
16
else
17
	ifdef f22050
18
		FSOUND_MixRate equ 22050
19
		FREQ_40HZ_p    equ 3B716h
20
		FREQ_40HZ_f    equ 76E2C0h
21
		PCM_format     equ 9
22
	else
23
		FSOUND_MixRate equ 48000
24
		FREQ_40HZ_p    equ 1B4E8h
25
		FREQ_40HZ_f    equ 369D00h
26
		PCM_format     equ 1
27
	endif
28
endif
29
 
30
ifdef NONE
31
	RAMP_NONE   equ 1
32
	RAMP_WEAK   equ 0
33
	RAMP_STRONG equ 0
34
else
35
	ifdef WEAK
36
		RAMP_NONE   equ 0
37
		RAMP_WEAK   equ 1
38
		RAMP_STRONG equ 0
39
	else
40
		RAMP_NONE   equ 0
41
		RAMP_WEAK   equ 0
42
		RAMP_STRONG equ 1
43
	endif
44
endif
45
 
46
UCODE equ 0
47
 
48
ifdef NODEBUG
49
	DEBUG equ 0
50
else
51
	DEBUG equ 1
52
endif
53
 
54
ifdef UNSAFE
55
	CHK4VALIDITY equ 0
56
	AC97SND_ON   equ 0
57
else
58
	CHK4VALIDITY equ 1
59
	ifdef AC97SND
60
		AC97SND_ON equ 1
61
	else
62
		AC97SND_ON equ 0
63
	endif
64
endif
65
 
66
ifndef NOLINKER
67
	%include "eff.inc"
68
 
69
	[segment .text align=4]
70
endif
71
 
72
STRUC FSOUND_SAMPLE
73
	FSOUND_SAMPLE._length   resd 1
74
	FSOUND_SAMPLE.loopstart resd 1
75
	FSOUND_SAMPLE.looplen   resd 1
76
	FSOUND_SAMPLE.defvol    resb 1
77
	FSOUND_SAMPLE.finetune  resb 1
78
	FSOUND_SAMPLE.bytes     resb 1
79
	FSOUND_SAMPLE.defpan    resb 1
80
	FSOUND_SAMPLE.relative  resb 1
81
	FSOUND_SAMPLE.Resved    resb 1
82
	FSOUND_SAMPLE.loopmode  resb 1
83
	FSOUND_SAMPLE._align    resb 1
84
	FSOUND_SAMPLE.buff      resb 2
85
ENDSTRUC
86
 
87
STRUC FSOUND_CHANNEL
88
	FSOUND_CHANNEL.actualvolume     resd 1
89
	FSOUND_CHANNEL.actualpan        resd 1
90
	FSOUND_CHANNEL.fsampleoffset    resd 1
91
	FSOUND_CHANNEL.leftvolume       resd 1
92
	FSOUND_CHANNEL.rightvolume      resd 1
93
	FSOUND_CHANNEL.mixpos           resd 1
94
	FSOUND_CHANNEL.speedlo          resd 1
95
	FSOUND_CHANNEL.speedhi          resd 1
96
	FSOUND_CHANNEL.ramp_lefttarget  resw 1
97
	FSOUND_CHANNEL.ramp_righttarget resw 1
98
	FSOUND_CHANNEL.ramp_leftspeed   resd 1
99
	FSOUND_CHANNEL.ramp_rightspeed  resd 1
100
	FSOUND_CHANNEL.fsptr            resd 1
101
	FSOUND_CHANNEL.mixposlo         resd 1
102
	FSOUND_CHANNEL.ramp_leftvolume  resd 1
103
	FSOUND_CHANNEL.ramp_rightvolume resd 1
104
	FSOUND_CHANNEL.ramp_count       resw 1
105
	FSOUND_CHANNEL.speeddir         resb 2
106
ENDSTRUC
107
 
108
STRUC FMUSIC_NOTE
109
	FMUSIC_NOTE.unote   resb 1
110
	FMUSIC_NOTE.number  resb 1
111
	FMUSIC_NOTE.uvolume resb 1
112
	FMUSIC_NOTE.effect  resb 1
113
	FMUSIC_NOTE.eparam  resb 1
114
ENDSTRUC
115
 
116
STRUC FMUSIC_PATTERN
117
	FMUSIC_PATTERN.rows        resw 1
118
	FMUSIC_PATTERN.patternsize resw 1
119
	FMUSIC_PATTERN.data        resd 1
120
ENDSTRUC
121
 
122
STRUC FMUSIC_INSTRUMENT
123
	FMUSIC_INSTRUMENT.sample       resd 16
124
	FMUSIC_INSTRUMENT.keymap       resb 96
125
	FMUSIC_INSTRUMENT.VOLPoints    resw 24
126
	FMUSIC_INSTRUMENT.PANPoints    resw 24
127
	FMUSIC_INSTRUMENT.VOLnumpoints resb 1
128
	FMUSIC_INSTRUMENT.PANnumpoints resb 1
129
	FMUSIC_INSTRUMENT.VOLsustain   resb 1
130
	FMUSIC_INSTRUMENT.VOLLoopStart resb 1
131
	FMUSIC_INSTRUMENT.VOLLoopEnd   resb 1
132
	FMUSIC_INSTRUMENT.PANsustain   resb 1
133
	FMUSIC_INSTRUMENT.PANLoopStart resb 1
134
	FMUSIC_INSTRUMENT.PANLoopEnd   resb 1
135
	FMUSIC_INSTRUMENT.VOLtype      resb 1
136
	FMUSIC_INSTRUMENT.PANtype      resb 1
137
	FMUSIC_INSTRUMENT.VIBtype      resb 1
138
	FMUSIC_INSTRUMENT.VIBsweep     resb 1
139
	FMUSIC_INSTRUMENT.iVIBdepth    resb 1
140
	FMUSIC_INSTRUMENT.VIBrate      resb 1
141
	FMUSIC_INSTRUMENT.VOLfade      resw 1
142
ENDSTRUC
143
 
144
STRUC FMUSIC_CHANNEL
145
	FMUSIC_CHANNEL.note          resb 1
146
	FMUSIC_CHANNEL.samp          resb 1
147
	FMUSIC_CHANNEL.notectrl      resb 1
148
	FMUSIC_CHANNEL.inst          resb 1
149
	FMUSIC_CHANNEL.cptr          resd 1
150
	FMUSIC_CHANNEL.freq          resd 1
151
	FMUSIC_CHANNEL.volume        resd 1
152
	FMUSIC_CHANNEL.voldelta      resd 1
153
	FMUSIC_CHANNEL.freqdelta     resd 1
154
	FMUSIC_CHANNEL.pan           resd 1
155
	FMUSIC_CHANNEL.envvoltick    resd 1
156
	FMUSIC_CHANNEL.envvolpos     resd 1
157
	FMUSIC_CHANNEL.envvoldelta   resd 1
158
	FMUSIC_CHANNEL.envpantick    resd 1
159
	FMUSIC_CHANNEL.envpanpos     resd 1
160
	FMUSIC_CHANNEL.envpandelta   resd 1
161
	FMUSIC_CHANNEL.ivibsweeppos  resd 1
162
	FMUSIC_CHANNEL.ivibpos       resd 1
163
	FMUSIC_CHANNEL.keyoff        resb 2
164
	FMUSIC_CHANNEL.envvolstopped resb 1
165
	FMUSIC_CHANNEL.envpanstopped resb 1
166
	FMUSIC_CHANNEL.envvolfrac    resd 1
167
	FMUSIC_CHANNEL.envvol        resd 1
168
	FMUSIC_CHANNEL.fadeoutvol    resd 1
169
	FMUSIC_CHANNEL.envpanfrac    resd 1
170
	FMUSIC_CHANNEL.envpan        resd 1
171
	FMUSIC_CHANNEL.period        resd 1
172
	FMUSIC_CHANNEL.sampleoffset  resd 1
173
	FMUSIC_CHANNEL.portatarget   resd 1
174
	FMUSIC_CHANNEL.patloopno     resb 4
175
	FMUSIC_CHANNEL.patlooprow    resd 1
176
	FMUSIC_CHANNEL.realnote      resb 1
177
	FMUSIC_CHANNEL.recenteffect  resb 1
178
	FMUSIC_CHANNEL.portaupdown   resb 2
179
	FMUSIC_CHANNEL.xtraportadown resb 1
180
	FMUSIC_CHANNEL.xtraportaup   resb 1
181
	FMUSIC_CHANNEL.volslide      resb 1
182
	FMUSIC_CHANNEL.panslide      resb 1
183
	FMUSIC_CHANNEL.retrigx       resb 1
184
	FMUSIC_CHANNEL.retrigy       resb 1
185
	FMUSIC_CHANNEL.portaspeed    resb 1
186
	FMUSIC_CHANNEL.vibpos        resb 1
187
	FMUSIC_CHANNEL.vibspeed      resb 1
188
	FMUSIC_CHANNEL.vibdepth      resb 1
189
	FMUSIC_CHANNEL.tremolopos    resb 1
190
	FMUSIC_CHANNEL.tremolospeed  resb 1
191
	FMUSIC_CHANNEL.tremolodepth  resb 1
192
	FMUSIC_CHANNEL.tremorpos     resb 1
193
	FMUSIC_CHANNEL.tremoron      resb 1
194
	FMUSIC_CHANNEL.tremoroff     resb 1
195
	FMUSIC_CHANNEL.wavecontrol   resb 1
196
	FMUSIC_CHANNEL.finevslup     resb 1
197
	FMUSIC_CHANNEL.fineportaup   resb 1
198
	FMUSIC_CHANNEL.fineportadown resb 1
199
ENDSTRUC
200
 
201
STRUC FMUSIC_MODULE
202
	FMUSIC_MODULE.pattern              resd 1
203
	FMUSIC_MODULE.instrument           resd 1
204
	FMUSIC_MODULE.mixer_samplesleft    resd 1
205
	FMUSIC_MODULE.globalvolume         resd 1
206
	FMUSIC_MODULE.tick                 resd 1
207
	FMUSIC_MODULE.speed                resd 1
208
	FMUSIC_MODULE.order                resd 1
209
	FMUSIC_MODULE.row                  resd 1
210
	FMUSIC_MODULE.patterndelay         resd 1
211
	FMUSIC_MODULE.nextorder            resd 1
212
	FMUSIC_MODULE.nextrow              resd 1
213
	FMUSIC_MODULE.unused1              resd 1
214
	FMUSIC_MODULE.numchannels          resd 1
215
	FMUSIC_MODULE.Channels             resd 1
216
	FMUSIC_MODULE.uFMOD_Ch             resd 1
217
	FMUSIC_MODULE.mixer_samplespertick resd 1
218
	FMUSIC_MODULE.numorders            resw 1
219
	FMUSIC_MODULE.restart              resw 1
220
	FMUSIC_MODULE.numchannels_xm       resb 1
221
	FMUSIC_MODULE.globalvsl            resb 1
222
	FMUSIC_MODULE.numpatternsmem       resw 1
223
	FMUSIC_MODULE.numinsts             resw 1
224
	FMUSIC_MODULE.flags                resw 1
225
	FMUSIC_MODULE.defaultspeed         resw 1
226
	FMUSIC_MODULE.defaultbpm           resw 1
227
	FMUSIC_MODULE.orderlist            resb 256
228
ENDSTRUC
229
 
230
%macro PUBLIC 1
231
	ifndef NOLINKER
232
		GLOBAL %1
233
	endif
234
%endmacro
235
%define OFFSET
236
%define PTR
237
 
238
include "ufmod.asm"
239
include "core.asm"
240
 
241
ifdef NOLINKER
242
	uFMOD_IMG_END: ; End of uFMOD's code. BSS follows.
243
	align 16
244
	[segment .bss]
245
else
246
	[segment .bss align=16]
247
endif
248
 
249
_mod          resb FMUSIC_MODULE_size
250
mmt           resd 3
251
ufmod_heap    resd 2
252
if AC97SND_ON
253
	extern hSound
254
	      resd 1
255
else
256
	hSound resd 1
257
endif
258
hBuff         resd 1
259
SW_Exit       resd 1
260
MixBuf        resb FSOUND_BlockSize*8
261
ufmod_noloop  resb 1
262
ufmod_pause_  resb 1
263
mix_endflag   resb 2
264
mmf           resd 4
265
ufmod_vol     resd 1
266
uFMOD_fopen   resd 1
267
uFMOD_fread   resd 1
268
file_struct   resd 7
269
cache_offset  resd 1
270
if INFO_API_ON
271
	time_ms   resd 1
272
	L_vol     resw 1
273
	R_vol     resw 1
274
	s_row     resw 1
275
	s_order   resw 1
276
	szTtl     resb 24
277
endif
278
DummySamp resb FSOUND_SAMPLE_size