Index: apps/plugins/SOURCES
===================================================================
RCS file: /cvsroot/rockbox/apps/plugins/SOURCES,v
retrieving revision 1.116
diff -u -B -b -r1.116 SOURCES
--- apps/plugins/SOURCES	7 Apr 2006 00:17:34 -0000	1.116
+++ apps/plugins/SOURCES	11 Apr 2006 18:12:43 -0000
@@ -102,6 +102,7 @@
 #if CONFIG_CODEC == SWCODEC        /* software codec platforms */
 mp3_encoder.c
 midi2wav.c
+midiplay.c
 wav2wv.c
 #else                              /* hardware codec platforms */
 #ifndef HAVE_MMC                   /* not for Ondio, has no remote control pin */
Index: apps/plugins/midi/midiutil.c
===================================================================
RCS file: /cvsroot/rockbox/apps/plugins/midi/midiutil.c,v
retrieving revision 1.4
diff -u -B -b -r1.4 midiutil.c
--- apps/plugins/midi/midiutil.c	20 Apr 2005 21:07:13 -0000	1.4
+++ apps/plugins/midi/midiutil.c	11 Apr 2006 18:12:44 -0000
@@ -63,11 +63,11 @@
 extern struct plugin_api * rb;
 
 
-int chVol[16] IDATA_ATTR;       /* Channel volume                */
-int chPanLeft[16] IDATA_ATTR;   /* Channel panning               */
-int chPanRight[16] IDATA_ATTR;
-int chPat[16];                  /* Channel patch                 */
-int chPW[16];                   /* Channel pitch wheel, MSB only */
+int chVol[16] IBSS_ATTR;       /* Channel volume                */
+int chPanLeft[16] IBSS_ATTR;   /* Channel panning               */
+int chPanRight[16] IBSS_ATTR;
+int chPat[16] IBSS_ATTR;                  /* Channel patch                 */
+int chPW[16] IBSS_ATTR;                   /* Channel pitch wheel, MSB only */
 
 
 struct GPatch * gusload(char *);
@@ -128,7 +128,7 @@
     int curPoint;
 };
 
-struct SynthObject voices[MAX_VOICES] IDATA_ATTR;
+struct SynthObject voices[MAX_VOICES] IBSS_ATTR;
 
 
 
@@ -226,7 +226,29 @@
     return size+1 == rb->lseek(fd, 0, SEEK_CUR);
 }
 
-void printf(char *fmt, ...) {fmt=fmt; }
+// Here is a hacked up printf command to get the output from the game.
+int printf(const char *fmt, ...)
+{
+   static int p_xtpt;
+   char p_buf[50];
+   bool ok;
+   va_list ap;
+
+   va_start(ap, fmt);
+   ok = rb->vsnprintf(p_buf,sizeof(p_buf), fmt, ap);
+   va_end(ap);
+
+   rb->lcd_putsxy(1,p_xtpt, (unsigned char *)p_buf);
+   rb->lcd_update();
+
+   p_xtpt+=8;
+   if(p_xtpt>LCD_HEIGHT-8)
+   {
+      p_xtpt=0;
+      rb->lcd_clear_display();
+   }
+   return 1;
+}
 
 void exit(int code)
 {
Index: apps/plugins/midi/sequencer.c
===================================================================
RCS file: /cvsroot/rockbox/apps/plugins/midi/sequencer.c,v
retrieving revision 1.6
diff -u -B -b -r1.6 sequencer.c
--- apps/plugins/midi/sequencer.c	7 Aug 2005 23:39:23 -0000	1.6
+++ apps/plugins/midi/sequencer.c	11 Apr 2006 18:12:44 -0000
@@ -22,22 +22,22 @@
 long tempo=375000;
 
 
-void setVol(int ch, int vol)
+inline void setVol(int ch, int vol)
 {
-    printf("\nvolume[%d]  %d ==> %d", ch, chVol[ch], vol);
+//    printf("\nvolume[%d]  %d ==> %d", ch, chVol[ch], vol);
     chVol[ch]=vol;
 }
 
-void setPan(int ch, int pan)
+inline void setPan(int ch, int pan)
 {
-    printf("\npanning[%d]  %d ==> %d", ch, chPanRight[ch], pan);
+//    printf("\npanning[%d]  %d ==> %d", ch, chPanRight[ch], pan);
 
     chPanLeft[ch]=128-pan;
     chPanRight[ch]=pan;
 }
 
 
-void setPatch(int ch, int pat)
+inline void setPatch(int ch, int pat)
 {
     chPat[ch]=pat;
 }
@@ -62,7 +62,7 @@
     73297,73429
 };
 */
-long pitchTbl[]={
+long pitchTbl[] ICONST_ATTR={
 58386,58412,58439,58465,58491,58518,58544,58571,58597,58624,58650,58676,58703,58729,58756,58782,58809,58836,58862,58889,58915,58942,58968,58995,59022,59048,59075,59102,59128,59155,59182,59208,59235,59262,59289,59315,59342,59369,59396,59423,59449,59476,59503,59530,59557,59584,59611,59638,59664,59691,59718,59745,59772,59799,59826,59853,59880,59907,59934,59961,59988,60015,60043,60070,60097,60124,60151,60178,60205,60233,60260,60287,60314,60341,60369,60396,60423,60450,60478,60505,60532,60560,60587,60614,60642,60669,60696,60724,60751,60779,60806,60833,60861,60888,60916,60943,60971,60998,61026,61054,61081,61109,61136,61164,61191,61219,61247,61274,61302,61330,61357,61385,61413,61440,61468,61496,61524,61551,61579,61607,61635,61663,61690,61718,61746,61774,61802,61830,61858,61886,61914,61942,61970,61997,62025,62053,62081,62109,62138,62166,62194,62222,62250,62278,62306,62334,62362,62390,62419,62447,62475,62503,62531,62560,62588,62616,62644,62673,62701,62729,62757,62786,62814,62843,62871,62899,62928,62956,62984,63013,63041,63070,63098,63127,63155,63184,63212,63241,63269,63298,63326,63355,63384,63412,63441,63470,63498,63527,63555,63584,63613,63642,63670,63699,63728,63757,63785,63814,63843,63872,63901,63929,63958,63987,64016,64045,64074,64103,64132,64161,64190,64219,64248,64277,64306,64335,64364,64393,64422,64451,64480,64509,64538,64567,64596,64626,64655,64684,64713,64742,64772,64801,64830,64859,64889,64918,64947,64976,65006,65035,65065,65094,65123,65153,65182,65211,65241,65270,65300,65329,65359,65388,65418,65447,65477,65506,65536,65566,65595,65625,65654,65684,65714,65743,65773,65803,65832,65862,65892,65922,65951,65981,66011,66041,66071,66100,66130,66160,66190,66220,66250,66280,66309,66339,66369,66399,66429,66459,66489,66519,66549,66579,66609,66639,66670,66700,66730,66760,66790,66820,66850,66880,66911,66941,66971,67001,67032,67062,67092,67122,67153,67183,67213,67244,67274,67304,67335,67365,67395,67426,67456,67487,67517,67548,67578,67609,67639,67670,67700,67731,67761,67792,67823,67853,67884,67915,67945,67976,68007,68037,68068,68099,68129,68160,68191,68222,68252,68283,68314,68345,68376,68407,68438,68468,68499,68530,68561,68592,68623,68654,68685,68716,68747,68778,68809,68840,68871,68902,68933,68965,68996,69027,69058,69089,69120,69152,69183,69214,69245,69276,69308,69339,69370,69402,69433,69464,69496,69527,69558,69590,69621,69653,69684,69716,69747,69778,69810,69841,69873,69905,69936,69968,69999,70031,70062,70094,70126,70157,70189,70221,70252,70284,70316,70348,70379,70411,70443,70475,70507,70538,70570,70602,70634,70666,70698,70730,70762,70793,70825,70857,70889,70921,70953,70985,71017,71049,71082,71114,71146,71178,71210,71242,71274,71306,71339,71371,71403,71435,71468,71500,71532,71564,71597,71629,71661,71694,71726,71758,71791,71823,71856,71888,71920,71953,71985,72018,72050,72083,72115,72148,72181,72213,72246,72278,72311,72344,72376,72409,72442,72474,72507,72540,72573,72605,72638,72671,72704,72736,72769,72802,72835,72868,72901,72934,72967,72999,73032,73065,73098,73131,73164,73197,73230,73264,73297,73330,73363,73396,73429,73462,73495,73528
 };
 
@@ -75,9 +75,9 @@
     so->delta = (so->delta * pitchTbl[chPW[ch]])>> 16;
 }
 
-void setPW(int ch, int msb, int lsb)
+inline void setPW(int ch, int msb, int lsb)
 {
-    printf("\npitchw[%d]  %d ==> %d", ch, chPW[ch], msb);
+//    printf("\npitchw[%d]  %d ==> %d", ch, chPW[ch], msb);
     chPW[ch] = msb<<2|lsb>>5;
 
     int a=0;
@@ -163,7 +163,7 @@
             voices[a].wf=wf;
             voices[a].delta = (((gustable[note]<<10) / wf->rootFreq) * wf->sampRate / SAMPLE_RATE);
             if(wf->mode & 28)
-                printf("\nWoah, a drum patch has a loop. Stripping the loop...");
+//                printf("\nWoah, a drum patch has a loop. Stripping the loop...");
             wf->mode = wf->mode & (255-28);
 
             /* Turn it on */
Index: apps/plugins/midi/synth.c
===================================================================
RCS file: /cvsroot/rockbox/apps/plugins/midi/synth.c,v
retrieving revision 1.7
diff -u -B -b -r1.7 synth.c
--- apps/plugins/midi/synth.c	7 Aug 2005 22:20:40 -0000	1.7
+++ apps/plugins/midi/synth.c	11 Apr 2006 18:12:44 -0000
@@ -180,32 +180,26 @@
     return 0;
 }
 
+int currentVoice IBSS_ATTR;
+struct SynthObject * so;
+struct GWaveform * wf;
+int s IBSS_ATTR;
+short s1 IBSS_ATTR;
+short s2 IBSS_ATTR;
+unsigned int cpShifted IBSS_ATTR;
 
+unsigned char b1 IBSS_ATTR;
+unsigned char b2 IBSS_ATTR;
 
-int currentVoice IDATA_ATTR;
-struct SynthObject * so IDATA_ATTR;
-struct GWaveform * wf IDATA_ATTR;
-int s IDATA_ATTR;
-short s1 IDATA_ATTR;
-short s2 IDATA_ATTR;
-short sample IDATA_ATTR;    /* For synthSample */
-unsigned int cpShifted IDATA_ATTR;
 
-unsigned char b1 IDATA_ATTR;
-unsigned char b2 IDATA_ATTR;
-
-
-inline int getSample(int s)
+inline short getSample(int s)
 {
     /* Sign conversion moved to guspat.c */
     /* 8bit conversion NOT YET IMPLEMENTED in guspat.c */
     return ((short *) wf->data)[s];
 }
 
-
-
-
-inline void setPoint(struct SynthObject * so, int pt)
+void setPoint(struct SynthObject * so, int pt)
 {
     if(so->ch==9) /* Drums, no ADSR */
     {
@@ -270,7 +264,7 @@
 }
 
 
-inline signed short int synthVoice(void)
+signed short int synthVoice(void)
 {
     so = &voices[currentVoice];
     wf = so->wf;
@@ -381,18 +375,24 @@
 
 inline void synthSample(int * mixL, int * mixR)
 {
-    *mixL = 0;
-    *mixR = 0;
+
+   register int dL=0;
+   register int dR=0;
+   register short sample=0;
+
     for(currentVoice=0; currentVoice<MAX_VOICES; currentVoice++)
     {
         if(voices[currentVoice].isUsed==1)
         {
             sample = synthVoice();
-            *mixL += (sample*chPanLeft[voices[currentVoice].ch])>>7;
-            *mixR += (sample*chPanRight[voices[currentVoice].ch])>>7;
+            dL += (sample*chPanLeft[voices[currentVoice].ch])>>7;
+            dR += (sample*chPanRight[voices[currentVoice].ch])>>7;
         }
     }
 
+   *mixL=dL;
+   *mixR=dR;
+
     /* TODO: Automatic Gain Control, anyone? */
     /* Or, should this be implemented on the DSP's output volume instead? */
 
