Subversion Repositories Kolibri OS

Rev

Rev 5264 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 5264 Rev 5274
Line 1... Line 1...
1
;------------------------------------------------------------------------------
1
;------------------------------------------------------------------------------
2
; init.obj 
-
 
3
;	_InitSound@4		Èíèò,
-
 
4
;	_CreateBuffer@12	ñîçäàòü áóôåð,
-
 
5
;	_DestroyBuffer@4	óäàëèòü áóôåð
-
 
6
;
-
 
7
; sndgetsize.obj
-
 
8
;	_GetBufferSize@8	âçÿòü ðàçìåð áóôåðà,
-
 
9
;	_GetBufferFree@8	WTF???
-
 
10
;
-
 
11
; setbuf.obj
-
 
12
;	_SetBuffer@16		óñòàíîâèòü áóôåð,
-
 
13
;	_PlayBuffer@8		èãðàòü áóôåð,
-
 
14
;
-
 
15
; stopbuf.obj
2
test_wav_file:
16
;	_StopBuffer@4		îñòàíîâèòü áóôåð,
-
 
17
;------------------------------------------------------------------------------
-
 
18
initialize_sound_system:
-
 
19
	mov	[sound_flag],1
3
	mov	[sound_flag],1
20
 
-
 
21
	stdcall	_InitSound@4,version
-
 
22
	cmp	eax,-1
-
 
23
	je	snd_init_fail
-
 
24
	
-
 
25
;	DEBUGF	1, "Sound init successful %x\n",eax
-
 
26
	mov	eax,[version]
-
 
27
	and	eax,0xffff
-
 
28
	cmp	eax,SOUND_VERSION
-
 
29
	jne	snd_version_fail
-
 
30
 
-
 
31
;	DEBUGF	1, "Sound version successful %x\n",eax
-
 
32
 
-
 
33
	stdcall	_test_wav@4,dword [wav_for_test]	;letter_1a
4
	stdcall	_test_wav@4,dword [wav_for_test]	;letter_1a
34
	test	eax,eax
5
	test	eax,eax
35
	jz	snd_test_wav_fail
6
	jz	snd_test_wav_fail
Line 36... Line 7...
36
	
7
	
-
 
8
;	or	eax,PCM_OUT
37
	or	eax,PCM_OUT
9
	or	eax,PCM_RING
Line 38... Line 10...
38
	mov	[snd_format],eax
10
	mov	[snd_format],eax
Line 39... Line 11...
39
 
11
 
Line 40... Line 12...
40
;	DEBUGF	1, "Test wav successful %x\n",eax
12
;	DEBUGF	1, "Test wav successful %x\n",eax
41
 
13
 
42
	call	find_data_offset
14
	call	find_data_offset
Line 43... Line 15...
43
	
15
	
-
 
16
	mov	al,[sound_flag]
44
	mov	al,[sound_flag]
17
	test	al,al
-
 
18
	jnz	.exit
-
 
19
	
-
 
20
	mov	[sound_flag],2	; close thread
45
	test	al,al
21
;--------------------------------------	
-
 
22
.exit:
Line -... Line 23...
-
 
23
	ret
-
 
24
;------------------------------------------------------------------------------
-
 
25
check_init_sound_busy:
-
 
26
	cmp	[init_sound_busy_flag],1
-
 
27
	jne	@f
46
	jz	.exit
28
	
-
 
29
	mcall	5,1
-
 
30
	mcall	68,1
-
 
31
	jmp	check_init_sound_busy
-
 
32
;--------------------------------------		
-
 
33
@@:
-
 
34
	mov	[init_sound_busy_flag],1
-
 
35
	ret
-
 
36
;------------------------------------------------------------------------------
-
 
37
initialize_sound_system:
Line 47... Line 38...
47
	
38
	cmp	[sound_flag],1
48
	stdcall	_CreateBuffer@12,[snd_format],0,hBuff1
-
 
49
	cmp	eax,-1
-
 
Line -... Line 39...
-
 
39
	jne	sound_exit
-
 
40
 
-
 
41
	stdcall	_InitSound@4,version
-
 
42
	test	eax,eax
-
 
43
	jnz	snd_init_fail
50
	je	snd_create_buffer_fail
44
	
51
	
45
;	DEBUGF	1, "Sound init successful %x\n",eax
-
 
46
 
-
 
47
	mov	eax,[version]
-
 
48
	and	eax,0xffff
-
 
49
	cmp	eax,SOUND_VERSION
-
 
50
	jne	snd_version_fail
-
 
51
 
-
 
52
;	DEBUGF	1, "Sound version successful %x\n",eax
-
 
53
;--------------------------------------	
-
 
54
	stdcall	_CreateBuffer@12,[snd_format],0,[hBuff_pointer]
-
 
55
	test	eax,eax
-
 
56
	jnz	snd_create_buffer_fail
-
 
57
	
-
 
58
;	DEBUGF	1, "Create Buffer successful %x\n",eax
-
 
59
	mov	eax,[hBuff_pointer]
-
 
60
	mov	ebx,[hBuff_buffer_size_pointer]
52
;	DEBUGF	1, "Create Buffer 1 successful %x\n",eax
61
	stdcall	_GetBufferSize@8,[eax],ebx	;hBuff1_buffer_size
-
 
62
	
-
 
63
	test	eax,eax
-
 
64
	jnz	snd_get_buffer_size_fail
53
 
65
	
54
	stdcall	_CreateBuffer@12,[snd_format],0,hBuff2
66
	mov	ebx,[hBuff_buffer_size_pointer]
-
 
67
	mov	eax,[ebx]
-
 
68
;	DEBUGF	1, "Get Buffer size successful size: %x\n",eax
-
 
69
	shr	eax,1
55
	cmp	eax,-1
70
	mov	[ebx],eax
56
	je	snd_create_buffer_fail
71
	
57
 
72
	mov	[init_sound_busy_flag],0
58
;	DEBUGF	1, "Create Buffer 1 successful %x\n",eax
73
	ret
59
;--------------------------------------
74
;------------------------------------------------------------------------------
60
.exit:
75
sound_exit:
Line 61... Line 76...
61
	ret
76
	mcall	-1
62
;------------------------------------------------------------------------------
77
;------------------------------------------------------------------------------
63
find_data_offset:
78
find_data_offset:
Line 64... Line 79...
64
	mov	esi,[wav_for_test]	;letter_1a
79
	mov	esi,[wav_for_test]
65
;--------------------------------------
80
;--------------------------------------
66
@@:
81
@@:
67
	cmp	[esi],dword 'data'
82
	cmp	[esi],dword 'data'
68
	je	@f
83
	je	@f
69
 
84
 
70
	inc	esi
85
	inc	esi
71
	cmp	esi,[wav_for_test_end]	;letter_1a + letter_2b
86
	cmp	esi,[wav_for_test_end]
72
	jne	@b
87
	jne	@b
73
	
88
	
74
;	DEBUGF	1, "find data offset fail\n"
-
 
75
	mov	[sound_flag],0
-
 
76
	ret
89
;	DEBUGF	1, "find data offset fail\n"
77
;--------------------------------------
-
 
78
@@:
-
 
79
	sub	esi,[wav_for_test]	;letter_1a
90
	mov	[sound_flag],0
80
	add	esi,4
-
 
81
	mov	[data_offset],esi
-
 
82
	ret
-
 
83
;------------------------------------------------------------------------------
-
 
84
wave_out:
-
 
85
; in:
-
 
86
; eax - adress of wav sample
-
 
87
; ebp - hBuff	; hardware buffer
-
 
88
	pusha
-
 
89
;	DEBUGF	1, "Wave out\n"
-
 
90
; check for correct data_offset
-
 
91
	push	eax
-
 
92
	add	eax,[data_offset]	
-
 
93
	sub	eax,4
91
	ret
94
	cmp	[eax],dword 'data'
-
 
95
	pop	eax
-
 
96
	je	@f
-
 
97
 
-
 
98
	mov	[wav_for_test],eax
-
 
99
	mov	ebx,eax
-
 
100
	add	ebx,1024
-
 
101
	mov	[wav_for_test_end],ebx
-
 
102
	call	find_data_offset
-
 
103
	cmp	[sound_flag],0
-
 
104
	jz	.exit
-
 
105
;--------------------------------------
-
 
106
@@:
-
 
107
	add	eax,[data_offset]
-
 
108
	mov	ebx,[eax]
-
 
109
	add	eax,4
-
 
110
;	DEBUGF	1, "src EAX: %x size EBX: %x\n",eax,ebx
-
 
111
;	stdcall	_WaveOut@12,[hBuff],eax,ebx
-
 
112
	stdcall	_WaveOut@12,ebp,eax,ebx
92
;--------------------------------------
113
;	DEBUGF	1, "return EAX: %x\n",eax
93
@@:
114
	cmp	eax,-1
94
	sub	esi,[wav_for_test]
115
	popa
95
	add	esi,4
116
	je	snd_wave_out_fail
96
	mov	[data_offset],esi
117
	
-
 
118
	ret
97
	ret
119
;--------------------------------------
98
;------------------------------------------------------------------------------
120
.exit:
99
snd_test_wav_fail:
121
	popa
-
 
122
	ret
-
 
123
;------------------------------------------------------------------------------
-
 
124
snd_init_fail:
-
 
125
;	DEBUGF	1, "Sound init fail %x\n",eax
-
 
126
	mov	[sound_flag],0
100
;	DEBUGF	1, "Test wav fail %x\n",eax
127
	ret
-
 
128
;------------------------------------------------------------------------------
101
	mov	[sound_flag],0
129
snd_version_fail:
102
	ret
130
;	DEBUGF	1, "Sound version fail %x\n",eax
103
;------------------------------------------------------------------------------
-
 
104
snd_init_fail:
-
 
105
;	DEBUGF	1, "Sound init fail %x\n",eax
-
 
106
	jmp	disable_sound
-
 
107
;------------------------------------------------------------------------------
131
	mov	[sound_flag],0
108
snd_version_fail:
-
 
109
;	DEBUGF	1, "Sound version fail %x\n",eax
-
 
110
	jmp	disable_sound
-
 
111
;------------------------------------------------------------------------------
-
 
112
snd_create_buffer_fail:
-
 
113
;	DEBUGF	1, "Create Buffer fail %x\n",eax
-
 
114
	jmp	disable_sound
-
 
115
;------------------------------------------------------------------------------
132
	ret
116
snd_get_buffer_size_fail:
133
;------------------------------------------------------------------------------
117
;	DEBUGF	1, "Get Buffer size fail %x\n",eax
134
snd_test_wav_fail:
118
	jmp	disable_sound
135
;	DEBUGF	1, "Test wav fail %x\n",eax
-
 
136
	mov	[sound_flag],0
119
;------------------------------------------------------------------------------
137
	ret
120
snd_play_buffer_fail:
138
;------------------------------------------------------------------------------
121
;	DEBUGF	1, "Play Buffer fail\n"
139
snd_create_buffer_fail:
122
	jmp	disable_sound
-
 
123
;------------------------------------------------------------------------------
-
 
124
snd_set_buffer_fail:
-
 
125
;	DEBUGF	1, "Set Buffer fail\n"
-
 
126
	jmp	disable_sound
-
 
127
;------------------------------------------------------------------------------
-
 
128
disable_sound:
-
 
129
	mov	[sound_flag],0
-
 
130
	jmp	sound_exit
-
 
131
;------------------------------------------------------------------------------
-
 
132
snd_background_music_thread_start:
140
;	DEBUGF	1, "Create Buffer fail %x\n",eax
133
	call	check_init_sound_busy
141
	mov	[sound_flag],0
134
;	DEBUGF	1, "snd_background_music_thread_start\n"
142
	ret
135
	mov	[hBuff_pointer], dword hBuff1
143
;------------------------------------------------------------------------------
136
	mov	[hBuff_buffer_size_pointer], dword hBuff1_buffer_size
144
snd_wave_out_fail:
137
	call	initialize_sound_system
145
;	DEBUGF	1, "Wave Out fail\n"
138
;--------------------------------------	
146
	mov	[sound_flag],0
139
.1:
147
	ret
140
	cmp	[music_flag],2
-
 
141
	je	sound_exit
-
 
142
 
-
 
143
	cmp	[music_flag],1
-
 
144
	je	.start
-
 
145
.2:	
-
 
146
	mcall	5,1
-
 
147
	mcall	68,1
-
 
148
	jmp	.1
-
 
149
;--------------------------------------		
-
 
150
.start:
-
 
151
	cmp	[init_sound_busy_flag],1
148
;------------------------------------------------------------------------------
152
	je	.2
149
snd_background_music_thread_start:
-
 
150
	cmp	[music_flag],1
-
 
151
	je	.start
-
 
152
	
153
 
153
	mcall	5,50
154
;	DEBUGF	1, "background_music Play Buffer start\n",eax
154
	mcall	68,1
155
	stdcall _PlayBuffer@8, [hBuff1], 0
155
	jmp	snd_background_music_thread_start
156
	test	eax,eax
156
;--------------------------------------		
157
	jnz	snd_play_buffer_fail
Line 171... Line 172...
171
	mov	ebx,eax
172
	mov	ebx,eax
172
	add	ebx,1024
173
	add	ebx,1024
173
	mov	[wav_for_test_end],ebx
174
	mov	[wav_for_test_end],ebx
174
	call	find_data_offset
175
	call	find_data_offset
175
	cmp	[sound_flag],0
176
	cmp	[sound_flag],0
176
	jz	snd_background_music_thread_start	;.exit
177
	jz	.1
177
;--------------------------------------
178
;--------------------------------------
178
@@:
179
@@:
179
	add	eax,[data_offset]
180
	add	eax,[data_offset]
180
	mov	ebx,[eax]
181
	mov	ebx,[eax]
181
	add	eax,4
182
	add	eax,4
182
	mov	ebp,eax
183
	mov	ebp,eax
183
	add	ebx,eax
184
	add	ebx,eax
184
;	DEBUGF	1, "start EAX: %x\n",eax
185
;	DEBUGF	1, "start EAX: %x\n",eax
185
;--------------------------------------
186
;--------------------------------------
186
.loop:	
187
.loop:	
187
	cmp	[music_flag],0
188
	cmp	[music_flag],1
-
 
189
	je	@f
-
 
190
 
-
 
191
	stdcall _StopBuffer@4, [hBuff1]
-
 
192
;	DEBUGF	1, "Stop Buffer EAX: %x\n",eax
-
 
193
	jmp	.1
-
 
194
;--------------------------------------
-
 
195
@@:
-
 
196
; get event data from the driver
-
 
197
;	DEBUGF	1, "Get driver_notify_struct \n"
-
 
198
	push	ebx
188
	je	snd_background_music_thread_start
199
	mcall	68,14,hBuff1_driver_notify_struct
-
 
200
	pop	ebx
-
 
201
;	DEBUGF	1, "Check to code \n"	
-
 
202
; check to code
-
 
203
	cmp	[hBuff1_driver_notify_struct], dword 0xFF000001
-
 
204
	jne 	@b
-
 
205
;	DEBUGF	1, "Check to stream \n"	
-
 
206
; check to stream
-
 
207
	mov	eax,[hBuff1_driver_notify_struct+8]
-
 
208
	cmp	eax,[hBuff1]
-
 
209
	jne	@b
-
 
210
;	DEBUGF	1, "Get buffer_offset \n"
-
 
211
; get buffer_offset
-
 
212
	mov	eax,[hBuff1_driver_notify_struct+12]
-
 
213
	mov	[hBuff1_buffer_offset],eax
189
;	DEBUGF	1, "src EBP: %x size EBX: %x\n",ebp,ebx
214
;	DEBUGF	1, "src EBP: %x size EBX: %x\n",ebp,ebx
190
;	stdcall	_WaveOut@12,[hBuff],eax,ebx
-
 
191
	stdcall	_WaveOut@12,[hBuff1],ebp,8192
215
	stdcall _SetBuffer@16, [hBuff1], ebp, [hBuff1_buffer_offset], [hBuff1_buffer_size]	
192
;	DEBUGF	1, "return EAX: %x\n",eax
-
 
193
	cmp	eax,-1
216
	test	eax,eax
194
;	popa
-
 
195
	je	snd_wave_out_fail
217
	jnz	snd_set_buffer_fail
Line -... Line 218...
-
 
218
	
-
 
219
;	DEBUGF	1, "Set Buffer successful EAX: %x\n",eax
196
	
220
	add	ebp,[hBuff1_buffer_size]
197
	add	ebp,8192*2
221
	add	ebp,[hBuff1_buffer_size]
198
	cmp	ebx,ebp
222
	cmp	ebx,ebp
Line 199... Line 223...
199
	jbe	.start
223
	jbe	.start_1
200
	
224
	
201
	sub	ebp,8192
-
 
202
	jmp	.loop
-
 
203
;--------------------------------------
-
 
204
;.exit:
-
 
205
;	popa
-
 
206
;	jmp	snd_background_music_thread_start
225
	sub	ebp,[hBuff1_buffer_size]
207
;	mcall	-1
226
	jmp	.loop
208
;------------------------------------------------------------------------------
227
;------------------------------------------------------------------------------
209
snd_kick_action:
228
snd_kick_action:
Line 210... Line 229...
210
	cmp	[sounds_flag],1
229
	cmp	[sounds_flag],1
211
	jne	@f
230
	jne	@f
Line 212... Line 231...
212
 
231
 
213
	cmp	[snd_kick_flag],1
232
	cmp	[snd_kick_flag],1
214
	je	@f
233
	je	@f
215
 
234
 
216
	mcall	51,1,snd_kick_action_thread_start,snd_kick_action_thread_stack
235
	mov	[snd_kick_flag],1
217
;--------------------------------------	
236
;--------------------------------------	
-
 
237
@@:
-
 
238
	ret
-
 
239
;------------------------------------------------------------------------------
-
 
240
snd_kick_action_thread_start:
-
 
241
	call	check_init_sound_busy
-
 
242
;	DEBUGF	1, "snd_kick_action_thread_start\n"
-
 
243
	mov	[hBuff_pointer], dword hBuff2
-
 
244
	mov	[hBuff_buffer_size_pointer], dword hBuff2_buffer_size
-
 
245
	call	initialize_sound_system
-
 
246
;--------------------------------------	
-
 
247
.1:
-
 
248
	cmp	[sounds_flag],2
-
 
249
	je	sound_exit
218
@@:
250
 
-
 
251
	cmp	[sounds_flag],0
-
 
252
	je	@f
-
 
253
	
-
 
254
	cmp	[snd_kick_flag],1
-
 
255
	je	.start
-
 
256
;--------------------------------------
-
 
257
@@:
-
 
258
	mcall	5,1
-
 
259
	mcall	68,1
-
 
260
	jmp	.1
-
 
261
;--------------------------------------
-
 
262
.start:
-
 
263
;	DEBUGF	1, "kick_action Play Buffer start\n"
-
 
264
	stdcall _PlayBuffer@8, [hBuff2], 0
-
 
265
	test	eax,eax
219
	ret
266
	jnz	snd_play_buffer_fail
-
 
267
	
-
 
268
;	DEBUGF	1, "kick_action Play Buffer successful EAX: %x\n",eax
-
 
269
 
-
 
270
	mov	eax,[sounds_sample]	;[stone_kick_sound]
-
 
271
; check for correct data_offset
-
 
272
	push	eax
-
 
273
	add	eax,[data_offset]	
-
 
274
	sub	eax,4
-
 
275
	cmp	[eax],dword 'data'
-
 
276
	pop	eax
-
 
277
	je	@f
-
 
278
 
-
 
279
	mov	[wav_for_test],eax
-
 
280
	mov	ebx,eax
-
 
281
	add	ebx,1024
-
 
282
	mov	[wav_for_test_end],ebx
-
 
283
	call	find_data_offset
-
 
284
	cmp	[sound_flag],0
-
 
285
	jz	.1
-
 
286
;--------------------------------------
-
 
287
@@:
-
 
288
	add	eax,[data_offset]
-
 
289
	mov	ebx,[eax]
-
 
290
	add	eax,4
-
 
291
	mov	ebp,eax
-
 
292
	add	ebx,eax
-
 
293
;	DEBUGF	1, "start EAX: %x\n",eax
-
 
294
;--------------------------------------
-
 
295
.loop:	
-
 
296
	cmp	[sounds_flag],1
-
 
297
	je	@f
-
 
298
 
-
 
299
	stdcall _StopBuffer@4, [hBuff2]
-
 
300
;	DEBUGF	1, "Stop Buffer EAX: %x\n",eax
-
 
301
	jmp	.1
-
 
302
;--------------------------------------
-
 
303
@@:
-
 
304
; get event data from the driver
-
 
305
;	DEBUGF	1, "Get driver_notify_struct \n"
-
 
306
	push	ebx
-
 
307
	mcall	68,14,hBuff2_driver_notify_struct
-
 
308
	pop	ebx
-
 
309
;	DEBUGF	1, "Check to code \n"	
-
 
310
; check to code
-
 
311
	cmp	[hBuff2_driver_notify_struct], dword 0xFF000001
220
;------------------------------------------------------------------------------
312
	jne 	@b
-
 
313
;	DEBUGF	1, "Check to stream \n"	
-
 
314
; check to stream
-
 
315
	mov	eax,[hBuff2_driver_notify_struct+8]
-
 
316
	cmp	eax,[hBuff2]
-
 
317
	jne	@b
-
 
318
;	DEBUGF	1, "Get buffer_offset \n"
-
 
319
; get buffer_offset
221
snd_kick_action_thread_start:
320
	mov	eax,[hBuff2_driver_notify_struct+12]
-
 
321
	mov	[hBuff2_buffer_offset],eax
-
 
322
;	DEBUGF	1, "src EBP: %x size EBX: %x\n",ebp,ebx
-
 
323
	stdcall _SetBuffer@16, [hBuff2], ebp, [hBuff2_buffer_offset], [hBuff2_buffer_size]	
-
 
324
	test	eax,eax
-
 
325
	jnz	snd_set_buffer_fail
-
 
326
	
-
 
327
;	DEBUGF	1, "Set Buffer successful EAX: %x\n",eax
-
 
328
	add	ebp,[hBuff2_buffer_size]
-
 
329
	add	ebp,[hBuff2_buffer_size]
-
 
330
	cmp	ebx,ebp
-
 
331
	jbe	.exit
-
 
332
	
-
 
333
	sub	ebp,[hBuff2_buffer_size]
222
	mov	[snd_kick_flag],1
334
	jmp	.loop
223
	mov	eax,[stone_kick_sound]
335
;--------------------------------------	
224
	mov	ebp,[hBuff2]
336
.exit:
225
	call	wave_out
337
	stdcall _StopBuffer@4, [hBuff2]