[Scummvm-cvs-logs] CVS: scummvm/sound imuse.cpp,1.23,1.24 mididrv.cpp,1.4,1.5

Ruediger Hanke tomjoad at users.sourceforge.net
Thu Apr 18 14:44:27 CEST 2002


Update of /cvsroot/scummvm/scummvm/sound
In directory usw-pr-cvs1:/tmp/cvs-serv18943/sound

Modified Files:
	imuse.cpp mididrv.cpp 
Log Message:
Reenable MorphOS Midi driver, small updates to CD open code (only when CD audio is requested) and start options

Index: imuse.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/sound/imuse.cpp,v
retrieving revision 1.23
retrieving revision 1.24
diff -C2 -d -r1.23 -r1.24
*** imuse.cpp	18 Apr 2002 06:22:18 -0000	1.23
--- imuse.cpp	18 Apr 2002 21:40:24 -0000	1.24
***************
*** 4220,4223 ****
--- 4220,4224 ----
  }
  
+ #if !defined(__MORPHOS__)
  int IMuseGM::midi_driver_thread(void *param) {
  	IMuseGM *mid = (IMuseGM*) param;
***************
*** 4236,4239 ****
--- 4237,4287 ----
  	}
  }
+ #else
+ #include <exec/semaphores.h>
+ #include <proto/exec.h>
+ #include <proto/dos.h>
+ #include "../morphos/morphos.h"
+ int IMuseGM::midi_driver_thread( void *param )
+ {
+ 	IMuseGM *mid = (IMuseGM*) param;
+ 	int old_time, cur_time;
+ 	bool initialized;
+ 
+ 	ObtainSemaphore( &ScummMusicThreadRunning );
+ 
+ 	initialized = init_morphos_music( 0 );
+ 
+ 	old_time = mid->_system->get_msecs();
+ 
+ 	if( !initialized )
+ 		Wait( SIGBREAKF_CTRL_C );
+ 	else
+ 	{
+ 		for(;;)
+ 		{
+ 			MusicTimerIORequest->tr_time.tv_micro = 10000;
+ 			MusicTimerIORequest->tr_node.io_Command  = TR_ADDREQUEST;
+ 			MusicTimerIORequest->tr_time.tv_secs  = 0;
+ 			DoIO( (struct IORequest *)MusicTimerIORequest );
+ 
+ 			if( CheckSignal( SIGBREAKF_CTRL_C ) )
+ 				break;
+ 
+ 			cur_time = mid->_system->get_msecs();
+ 			while (old_time < cur_time)
+ 			{
+ 				old_time += 10;
+ 				mid->_se->on_timer();
+ 			}
+ 		}
+ 	}
+ 
+ 	exit_morphos_music();
+ 
+ 	ReleaseSemaphore( &ScummMusicThreadRunning );
+ 	RemTask( NULL );
+ 	return 0;
+ }
+ #endif
  
  void IMuseGM::init(IMuse *eng, OSystem *syst)

Index: mididrv.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/sound/mididrv.cpp,v
retrieving revision 1.4
retrieving revision 1.5
diff -C2 -d -r1.4 -r1.5
*** mididrv.cpp	17 Apr 2002 20:21:40 -0000	1.4
--- mididrv.cpp	18 Apr 2002 21:40:24 -0000	1.5
***************
*** 27,34 ****
   */
  
- #ifdef __MORPHOS__
- #include <devices/timer.h>
- #endif
- 
  #include "stdafx.h"
  #include "scumm.h"
--- 27,30 ----
***************
*** 269,272 ****
--- 265,350 ----
  
  #endif // WIN32
+ 
+ #ifdef __MORPHOS__
+ #include <exec/types.h>
+ #include <devices/amidi.h>
+ 
+ #include <clib/alib_protos.h>
+ #include <proto/exec.h>
+ 
+ extern struct IOMidiRequest *ScummMidiRequest;
+ 
+ /* MorphOS MIDI driver */
+ class MidiDriver_AMIDI : public MidiDriver {
+ public:
+ 	void destroy();
+ 	int open(int mode);
+ 	void close();
+ 	void send(uint32 b);
+ 	void pause(bool pause);
+ 	void set_stream_callback(void *param, StreamCallback *sc);
+ 
+ private:
+ 	StreamCallback *_stream_proc;
+ 	void  *_stream_param;
+ 	int 	 _mode;
+ 	uint16 _time_div;
+ 
+ 	uint32 property(int prop, uint32 param);
+ };
+ 
+ void MidiDriver_AMIDI::set_stream_callback(void *param, StreamCallback *sc) {
+ 	_stream_param = param;
+ 	_stream_proc = sc;
+ }
+ 
+ void MidiDriver_AMIDI::destroy() {
+ 	close();
+ 	delete this;
+ }
+ 
+ int MidiDriver_AMIDI::open(int mode) {
+ 	_mode = mode;
+ 	return 0;
+ }
+ 
+ void MidiDriver_AMIDI::close() {
+ 	_mode = 0;
+ }
+ 
+ void MidiDriver_AMIDI::send(uint32 b) {
+ 	if (_mode != MO_SIMPLE)
+ 		error("MidiDriver_AMIDI:send called but driver is not in simple mode");
+ 
+ 	if (ScummMidiRequest) {
+ 		ULONG midi_data = b;				// you never know about an int's size ;-)
+ 		ScummMidiRequest->amr_Std.io_Command = CMD_WRITE;
+ 		ScummMidiRequest->amr_Std.io_Data = &midi_data;
+ 		ScummMidiRequest->amr_Std.io_Length = 4;
+ 		DoIO((struct IORequest *)ScummMidiRequest);
+ 	}
+ }
+ 
+ void MidiDriver_AMIDI::pause(bool pause) {
+ 	if (_mode == MO_STREAMING) {
+ 	}
+ }
+ 
+ uint32 MidiDriver_AMIDI::property(int prop, uint32 param) {
+ 	switch(prop) {
+ 	/* 16-bit time division according to standard midi specification */
+ 	case PROP_TIMEDIV:
+ 		_time_div = (uint16)param;
+ 		return 1;
+ 	}
+ 
+ 	return 0;
+ }
+ 
+ MidiDriver *MidiDriver_AMIDI_create() {
+ 	return new MidiDriver_AMIDI();
+ }
+ 
+ #endif // __MORPHOS__
  
  





More information about the Scummvm-git-logs mailing list