]> git.sur5r.net Git - cc65/blobdiff - samples/nachtm.c
Made the code that logs indirect-goto referals be a little more efficient.
[cc65] / samples / nachtm.c
index 8c4d6ea0c228b4b78096005a80f7d42df9e085e1..0b962fa5df93ea5e67994deea4df0d20342c9f77 100644 (file)
@@ -1,14 +1,14 @@
 /*
- * "Eine kleine Nachtmusik" by Wolfgang Amadeus Mozart, KV 525
- *
- * First version in 1987 by
- *   Joachim von Bassewitz (joachim@von-bassewitz.de) and
- *   Ullrich von Bassewitz (ullrich@von-bassewitz.de).
- *
- * C conversion in 1998 by
- *   Ullrich von Bassewitz (ullrich@von-bassewitz.de)
- *
- */
+** "Eine kleine Nachtmusik" by Wolfgang Amadeus Mozart, KV 525
+**
+** First version in 1987 by
+**   Joachim von Bassewitz (joachim@von-bassewitz.de) and
+**   Ullrich von Bassewitz (ullrich@von-bassewitz.de).
+**
+** C conversion in 1998 by
+**   Ullrich von Bassewitz (ullrich@von-bassewitz.de)
+**
+*/
 
 
 
 
 
 /*****************************************************************************/
-/*                                          Data                                    */
+/*                                   Data                                    */
 /*****************************************************************************/
 
 
 
 /* Tables with voice data.
- *
- *  Bit            Description
- * -------------------------------------------
- *  15     Pause bit.
- *  12-14   Octave
- *  8-11    Tone (index into frequency table)
- *  7       Unused. Was thought as a control bit in the original version to
- *          change SID parameters, but this was never implemented.
- *  0-6     Length of the tone in ticks.
- *
- */
+**
+**  Bit     Description
+** -------------------------------------------
+**  15      Pause bit.
+**  12-14   Octave
+**  8-11    Tone (index into frequency table)
+**  7       Unused. Was thought as a control bit in the original version to
+**          change SID parameters, but this was never implemented.
+**  0-6     Length of the tone in ticks.
+**
+*/
 
 
 
@@ -885,12 +885,12 @@ static unsigned long FreqTab [12] = {
 
 
 typedef struct {
-    unsigned char              DoneMask;       /* Set this if we're done */
-    unsigned char      Trigger;        /* Trigger value */
-    unsigned char      Ticks;          /* Ticks for this tone */
-    unsigned           Freq;           /* Actual frequency value */
-    unsigned*                  Data;           /* Pointer to data */
-    struct __sid_voice*        Voice;          /* Pointer to sid registers */
+    unsigned char       DoneMask;       /* Set this if we're done */
+    unsigned char       Trigger;        /* Trigger value */
+    unsigned char       Ticks;          /* Ticks for this tone */
+    unsigned            Freq;           /* Actual frequency value */
+    unsigned*           Data;           /* Pointer to data */
+    struct __sid_voice* Voice;          /* Pointer to sid registers */
 } VoiceCtrl;
 
 /* Control structs for all three voices */
@@ -919,17 +919,17 @@ static unsigned char NextClock;
 static clock_t StartTime;
 
 /* Number of ticks for each tone */
-#define        TICKS_PER_TONE  4
+#define TICKS_PER_TONE  4
 
 /* Done flag. Contains one bit for each voice. Will contain 0x07 if all
- * voices have finished playing.
- */
+** voices have finished playing.
+*/
 static unsigned char Done;
 
 
 
 /*****************************************************************************/
-/*                                  Code                                    */
+/*                                   Code                                    */
 /*****************************************************************************/
 
 
@@ -948,22 +948,22 @@ static void MakeNiceScreen (void)
 /* Make a nice screen */
 {
     typedef struct {
-       unsigned char   Y;
-       char*           Msg;
+        unsigned char   Y;
+        char*           Msg;
     } TextDesc;
     static TextDesc Text [] = {
-               {   2, "Wolfgang Amadeus Mozart"        },
-        {   4, "\"Eine kleine Nachtmusik\""    },
-               {   5, "(KV 525)"                       },
+        {   2, "Wolfgang Amadeus Mozart"        },
+        {   4, "\"Eine kleine Nachtmusik\""     },
+        {   5, "(KV 525)"                       },
         {   9, "Ported to the SID in 1987 by" },
-               {  11, "Joachim von Bassewitz"          },
-               {  12, "(joachim@von-bassewitz.de)"     },
-               {  13, "and"                            },
-               {  14, "Ullrich von Bassewitz"          },
-        {  15, "(ullrich@von-bassewitz.de)"    },
-               {  18, "C Implementation by"            },
-               {  19, "Ullrich von Bassewitz"          },
-        {  23, "Press any key to quit..."      },
+        {  11, "Joachim von Bassewitz"          },
+        {  12, "(joachim@von-bassewitz.de)"     },
+        {  13, "and"                            },
+        {  14, "Ullrich von Bassewitz"          },
+        {  15, "(ullrich@von-bassewitz.de)"     },
+        {  18, "C Implementation by"            },
+        {  19, "Ullrich von Bassewitz"          },
+        {  23, "Press any key to quit..."       },
     };
 
     register const TextDesc* T;
@@ -985,32 +985,27 @@ static void MakeNiceScreen (void)
     cputcxy (0, 0, CH_ULCORNER);
     chline (XSize - 2);
     cputc (CH_URCORNER);
-    cgetc ();
 
     /* Left line */
     cvlinexy (0, 1, 23);
-    cgetc ();
 
     /* Bottom line */
     cputc (CH_LLCORNER);
     chline (XSize - 2);
     cputc (CH_LRCORNER);
-    cgetc ();
 
     /* Right line */
     cvlinexy (XSize - 1, 1, 23);
-    cgetc ();
 
     /* Several divider lines */
     MakeTeeLine (7);
     MakeTeeLine (22);
-    cgetc ();
 
     /* Write something into the frame */
     for (I = 0, T = Text; I < sizeof (Text) / sizeof (Text [0]); ++I) {
         X = (XSize - strlen (T->Msg)) / 2;
-       cputsxy (X, T->Y, T->Msg);
-       ++T;
+        cputsxy (X, T->Y, T->Msg);
+        ++T;
     }
 }
 
@@ -1022,7 +1017,7 @@ static void TimeSync (void)
     static unsigned char Clock;
 
     do {
-               Clock = clock ();
+        Clock = clock ();
     } while (Clock != NextClock);
     NextClock = Clock + TICKS_PER_TONE;
 }
@@ -1043,14 +1038,14 @@ static void DisplayTime (void)
 
 
 /* On the 510/610, the SID is in another bank (the system bank), so we cannot
- * just write to the memory space.
- */
+** just write to the memory space.
+*/
 #if defined(__CBM510__) || defined(__CBM610__)
-#  define outb(addr,val)       pokebsys ((unsigned)(addr), val)
-#  define outw(addr,val)       pokewsys ((unsigned)(addr), val)
+#  define outb(addr,val)        pokebsys ((unsigned)(addr), val)
+#  define outw(addr,val)        pokewsys ((unsigned)(addr), val)
 #else
-#  define outb(addr,val)       (*(addr)) = (val)
-#  define outw(addr,val)       (*(addr)) = (val)
+#  define outb(addr,val)        (*(addr)) = (val)
+#  define outw(addr,val)        (*(addr)) = (val)
 #endif
 
 
@@ -1060,9 +1055,9 @@ int main (void)
     unsigned char       I;
     unsigned char       Tone;
     unsigned char       Octave;
-    unsigned           Val;
-    struct __sid_voice*        Voice;
-    VoiceCtrl*         VC;
+    unsigned            Val;
+    struct __sid_voice* Voice;
+    register VoiceCtrl* VC;
 
     /* Initialize the debugger */
     DbgInit (0);
@@ -1094,74 +1089,74 @@ int main (void)
     /* Play each voice until all three are done */
     while (Done != 0x07) {
 
-       /* Display the time in the lower left corner */
-               DisplayTime ();
-
-       /* Wait for the next run */
-       TimeSync ();
-
-       /* Check for a key */
-       if (kbhit ()) {
-           if (cgetc () == 'd') {
-               /* Start the debugger */
-               BREAK ();
-           } else {
-               /* Stop playing music */
-               break;
-           }
-       }
-
-       /* Play all three voices */
-       for (I = 0; I < 3; ++I) {
-
-           /* Get a pointer to this voice */
-           VC = V [I];
-           Voice = VC->Voice;
-
-           /* Is this voice done? */
-           if (Done & VC->DoneMask) {
-               /* Voice already done */
-               continue;
-           }
-
-           /* Do we have any more ticks to play? */
-           if (VC->Ticks == 0) {
-               /* We need new data */
-               if ((Val = *VC->Data) == 0) {
-                   /* End of data. Mark the voice as done */
-                   Done |= VC->DoneMask;
-                   continue;
-               }
-               ++VC->Data;
-
-               /* Get the ticks from the data */
-                       VC->Ticks = (Val & 0x7F) - 1;
-
-               /* Check if this is a tone or a pause */
-               if (Val & 0x8000) {
-                   /* This is a pause. Remember it and shut off the SID */
-                           outb (&Voice->ctrl, VC->Trigger & 0xFE);
-               } else {
-                   /* This is a tone. Extract the attributes. */
-                   Tone = (Val >> 8) & 0x0F;
-                   Octave = ((Val >> 12) & 0x07) ^ 0x07;
-                   /* Calculate the frequency */
-                   VC->Freq = FreqTab [Tone] >> Octave;
-                   /* Set the frequency */
-                   outw (&Voice->freq, VC->Freq);
-                   /* Start the tone */
-                   outb (&Voice->ctrl, VC->Trigger);
-               }
-           } else {
-               /* Decrement the ticks. If this is the last tick of a tone,
-                * reset bit 0 of the trigger value and write it back to the
-                * SID to start the release phase.
-                */
-                       if (--(VC->Ticks) == 0) {
-                   outb (&Voice->ctrl, VC->Trigger & 0xFE);
-               }
-           }
-       }
+        /* Display the time in the lower left corner */
+        DisplayTime ();
+
+        /* Wait for the next run */
+        TimeSync ();
+
+        /* Check for a key */
+        if (kbhit ()) {
+            if (cgetc () == 'd') {
+                /* Start the debugger */
+                BREAK ();
+            } else {
+                /* Stop playing music */
+                break;
+            }
+        }
+
+        /* Play all three voices */
+        for (I = 0; I < 3; ++I) {
+
+            /* Get a pointer to this voice */
+            VC = V [I];
+            Voice = VC->Voice;
+
+            /* Is this voice done? */
+            if (Done & VC->DoneMask) {
+                /* Voice already done */
+                continue;
+            }
+
+            /* Do we have any more ticks to play? */
+            if (VC->Ticks == 0) {
+                /* We need new data */
+                if ((Val = *VC->Data) == 0) {
+                    /* End of data. Mark the voice as done */
+                    Done |= VC->DoneMask;
+                    continue;
+                }
+                ++VC->Data;
+
+                /* Get the ticks from the data */
+                VC->Ticks = (Val & 0x7F) - 1;
+
+                /* Check if this is a tone or a pause */
+                if (Val & 0x8000) {
+                    /* This is a pause. Remember it and shut off the SID */
+                    outb (&Voice->ctrl, VC->Trigger & 0xFE);
+                } else {
+                    /* This is a tone. Extract the attributes. */
+                    Tone = (Val >> 8) & 0x0F;
+                    Octave = ((Val >> 12) & 0x07) ^ 0x07;
+                    /* Calculate the frequency */
+                    VC->Freq = FreqTab [Tone] >> Octave;
+                    /* Set the frequency */
+                    outw (&Voice->freq, VC->Freq);
+                    /* Start the tone */
+                    outb (&Voice->ctrl, VC->Trigger);
+                }
+            } else {
+                /* Decrement the ticks. If this is the last tick of a tone,
+                ** reset bit 0 of the trigger value and write it back to the
+                ** SID to start the release phase.
+                */
+                if (--(VC->Ticks) == 0) {
+                    outb (&Voice->ctrl, VC->Trigger & 0xFE);
+                }
+            }
+        }
     }
 
     /* Reset the SID */
@@ -1174,7 +1169,7 @@ int main (void)
 
     /* If we have a character, remove it from the buffer */
     if (kbhit ()) {
-               cgetc ();
+        cgetc ();
     }
 
     /* Done */