changeset 35:79e6d08b473f

Add more information fields, including SID model, video clock speed, etc.
author Matti Hamalainen <ccr@tnsp.org>
date Fri, 26 Sep 2014 02:26:43 +0300
parents 50fe65830c03
children ad6acc8144bd
files sidinfo.c
diffstat 1 files changed, 89 insertions(+), 35 deletions(-) [+]
line wrap: on
line diff
--- a/sidinfo.c	Fri Sep 26 01:54:34 2014 +0300
+++ b/sidinfo.c	Fri Sep 26 02:26:43 2014 +0300
@@ -17,26 +17,30 @@
 // Flags for various information fields
 enum
 {
-    PSF_NONE           = 0,
+    SIF_NONE           = 0,
 
-    PSF_TYPE           = 0x00000001,
-    PSF_VERSION        = 0x00000002,
-    PSF_DATA_OFFS      = 0x00000004,
-    PSF_LOAD_ADDR      = 0x00000008,
-    PSF_INIT_ADDR      = 0x00000010,
-    PSF_PLAY_ADDR      = 0x00000020,
-    PSF_SONGS          = 0x00000040,
-    PSF_START_SONG     = 0x00000080,
-    PSF_SPEEDS         = 0x00000100,
-    PSF_SID_NAME       = 0x00000200,
-    PSF_SID_AUTHOR     = 0x00000400,
-    PSF_SID_COPYRIGHT  = 0x00000800,
+    SIF_TYPE           = 0x00000001,
+    SIF_VERSION        = 0x00000002,
+    SIF_DATA_OFFS      = 0x00000004,
+    SIF_LOAD_ADDR      = 0x00000008,
+    SIF_INIT_ADDR      = 0x00000010,
+    SIF_PLAY_ADDR      = 0x00000020,
+    SIF_SONGS          = 0x00000040,
+    SIF_START_SONG     = 0x00000080,
+    SIF_SPEEDS         = 0x00000100,
+    SIF_SID_NAME       = 0x00000200,
+    SIF_SID_AUTHOR     = 0x00000400,
+    SIF_SID_COPYRIGHT  = 0x00000800,
+    SIF_PLAYER_TYPE    = 0x00001000,
+    SIF_PLAYSID_TUNE   = 0x00002000,
+    SIF_VIDEO_CLOCK    = 0x00004000,
+    SIF_SID_MODEL      = 0x00008000,
 
-    PSF_DATA_SIZE      = 0x00100000,
-    PSF_HASH           = 0x00200000,
-    PSF_FILENAME       = 0x10000000,
+    SIF_DATA_SIZE      = 0x00100000,
+    SIF_HASH           = 0x00200000,
+    SIF_FILENAME       = 0x10000000,
 
-    PSF_ALL            = 0xffffffff,
+    SIF_ALL            = 0xffffffff,
 };
 
 
@@ -50,23 +54,27 @@
 
 const PSFOption optPSFlags[] =
 {
-    { PSF_TYPE           , "Type"       , NULL },
-    { PSF_VERSION        , "Version"    , NULL },
-    { PSF_DATA_OFFS      , "DataOffs"   , "Data offset" },
-    { PSF_DATA_SIZE      , "DataSize"   , "Data size" },
-    { PSF_LOAD_ADDR      , "LoadAddr"   , "Load address" },
-    { PSF_INIT_ADDR      , "InitAddr"   , "Init address" },
-    { PSF_PLAY_ADDR      , "PlayAddr"   , "Play address" },
-    { PSF_SONGS          , "Songs"      , "Songs" },
-    { PSF_START_SONG     , "StartSong"  , "Start song" },
-    { PSF_SID_NAME       , "Name"       , NULL },
-    { PSF_SID_AUTHOR     , "Author"     , NULL },
-    { PSF_SID_COPYRIGHT  , "Copyright"  , NULL },
-    { PSF_HASH           , "Hash"       , NULL },
-    { PSF_FILENAME       , "Filename"   , NULL },
+    { SIF_TYPE           , "Type"       , NULL },
+    { SIF_VERSION        , "Version"    , NULL },
+    { SIF_DATA_OFFS      , "DataOffs"   , "Data offset" },
+    { SIF_DATA_SIZE      , "DataSize"   , "Data size" },
+    { SIF_LOAD_ADDR      , "LoadAddr"   , "Load address" },
+    { SIF_INIT_ADDR      , "InitAddr"   , "Init address" },
+    { SIF_PLAY_ADDR      , "PlayAddr"   , "Play address" },
+    { SIF_SONGS          , "Songs"      , "Songs" },
+    { SIF_START_SONG     , "StartSong"  , "Start song" },
+    { SIF_SID_NAME       , "Name"       , NULL },
+    { SIF_SID_AUTHOR     , "Author"     , NULL },
+    { SIF_SID_COPYRIGHT  , "Copyright"  , NULL },
+    { SIF_HASH           , "Hash"       , NULL },
+    { SIF_FILENAME       , "Filename"   , NULL },
 
+    { SIF_PLAYER_TYPE    , "PlayerType" , "Player type" },
+    { SIF_PLAYSID_TUNE   , "PlaySIDTune", "PlaySID tune" },
+    { SIF_VIDEO_CLOCK    , "VideoClock" , "Video clock speed" },
+    { SIF_SID_MODEL      , "SIDModel"   , "SID model" },
 
-    { PSF_ALL            , "All"        , NULL },
+    { SIF_ALL            , "All"        , NULL },
 };
 
 const int noptPSFlags = sizeof(optPSFlags) / sizeof(optPSFlags[0]);
@@ -78,7 +86,7 @@
         optHexadecimal = FALSE,
         optOneLine = FALSE;
 char *  optFieldSep = NULL;
-uint32_t optFields = PSF_ALL;
+uint32_t optFields = SIF_ALL;
 int     optNFiles = 0;
 
 
@@ -191,7 +199,7 @@
     case 3:
         {
             char *start = optArg;
-            optFields = PSF_NONE;
+            optFields = SIF_NONE;
 
             while (*start)
             {
@@ -261,6 +269,25 @@
 } PSIDHeader;
 
 
+enum
+{
+    PSF_PLAYER_TYPE   = 0x0001, // 0 = built-in, 1 = Compute! SIDPlayer MUS
+    PSF_PLAYSID_TUNE  = 0x0002, // 0 = Real C64-compatible, 1 = PlaySID specific (v2NG)
+
+    PSF_CLOCK_UNKNOWN = 0x0000, // Video standard used (v2NG)
+    PSF_CLOCK_PAL     = 0x0004,
+    PSF_CLOCK_NTSC    = 0x0008,
+    PSF_CLOCK_ANY     = 0x000c,
+    PSF_CLOCK_MASK    = 0x000c,
+    
+    PSF_MODEL_UNKNOWN = 0x0000, // SID model (v2NG)
+    PSF_MODEL_MOS6581 = 0x0010,
+    PSF_MODEL_MOS8580 = 0x0020,
+    PSF_MODEL_ANY     = 0x0030,
+    PSF_MODEL_MASK    = 0x0030,
+};
+
+
 static void siAppendHash16(th_md5state_t *state, uint16_t data)
 {
     uint8_t ib8[2];
@@ -459,6 +486,33 @@
 
     PR( 0, "%s", NULL, psid->magic);
     PR( 1, "%d.%d", NULL, (psid->version & 0xff), (psid->version >> 8));
+    PR(14, "%s", NULL, (psid->flags & PSF_PLAYER_TYPE) ? "Compute! SIDPlayer MUS" : "Normal built-in");
+    if (psid->version >= 2)
+    {
+        char *str;
+        PR(15, "%s", NULL, (psid->flags & PSF_PLAYSID_TUNE) ? "C64 compatible" : "PlaySID");
+
+        switch (psid->flags & PSF_CLOCK_MASK)
+        {
+            case PSF_CLOCK_UNKNOWN : str = "Unknown"; break;
+            case PSF_CLOCK_PAL     : str = "PAL 50Hz"; break;
+            case PSF_CLOCK_NTSC    : str = "NTSC 60Hz"; break;
+            case PSF_CLOCK_ANY     : str = "PAL / NTSC"; break;
+            default                : str = "?"; break;
+        }
+        PR(16, "%s", NULL, str);
+
+        switch (psid->flags & PSF_MODEL_MASK)
+        {
+            case PSF_MODEL_UNKNOWN : str = "Unknown"; break;
+            case PSF_MODEL_MOS6581 : str = "MOS6581"; break;
+            case PSF_MODEL_MOS8580 : str = "MOS8580"; break;
+            case PSF_MODEL_ANY     : str = "MOS6581 / MOS8580"; break;
+            default                : str = "?"; break;
+        }
+        PR(17, "%s", NULL, str);
+    }
+
     PR( 2, "%d", "$%08x", psid->dataOffset);
     PR( 3, "%d", "$%08x", psid->dataSize);
     PR( 4, "%d", "$%04x", psid->loadAddress);
@@ -471,7 +525,7 @@
     PR(10, "%s", NULL, psid->sidAuthor);
     PR(11, "%s", NULL, psid->sidCopyright);
 
-    if (optFields & PSF_HASH)
+    if (optFields & SIF_HASH)
     {
         siPrintFieldPrefix(outFile, "Hash");
         th_md5_print(outFile, psid->hash);