[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