changeset 134:b9a3f93f69d1

Implement support for showing second and third SID chip addresses and models for PSID/RSID v3/v4 files.
author Matti Hamalainen <ccr@tnsp.org>
date Fri, 02 Jun 2017 02:45:00 +0300
parents 9cfa0553e7f9
children b4b1aac8761c
files sidinfo.c
diffstat 1 files changed, 39 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- a/sidinfo.c	Fri Jun 02 02:39:15 2017 +0300
+++ b/sidinfo.c	Fri Jun 02 02:45:00 2017 +0300
@@ -65,6 +65,11 @@
     { "Songs"        , "Songs"                , OTYPE_INT },
     { "StartSong"    , "Start song"           , OTYPE_INT },
 
+    { "SID2Model"    , "2nd SID model"        , OTYPE_INT },
+    { "SID3Model"    , "3rd SID model"        , OTYPE_INT },
+    { "SID2Addr"     , "2nd SID address"      , OTYPE_INT },
+    { "SID3Addr"     , "3rd SID address"      , OTYPE_INT },
+
     { "Name"         , NULL                   , OTYPE_STR },
     { "Author"       , NULL                   , OTYPE_STR },
     { "Copyright"    , NULL                   , OTYPE_STR },
@@ -481,17 +486,47 @@
         case 11: PR("%d", "$%04x", psid->playAddress); break;
         case 12: PR("%d", "$%04x", psid->nSongs); break;
         case 13: PR("%d", "$%04x", psid->startSong); break;
-        case 14: PR("%s", NULL, psid->sidName); break;
-        case 15: PR("%s", NULL, psid->sidAuthor); break;
-        case 16: PR("%s", NULL, psid->sidCopyright); break;
+
+        case 14:
+            if (psid->version >= 3)
+            {
+                int flags = (psid->flags >> 6) & PSF_MODEL_MASK;
+                if (flags == PSF_MODEL_UNKNOWN)
+                    flags = (psid->flags >> 4) & PSF_MODEL_MASK;
+
+                PR("%s", NULL, si_get_sid_model_str(flags));
+            }
+            break;
+        case 15:
+            if (psid->version >= 4)
+            {
+                int flags = (psid->flags >> 8) & PSF_MODEL_MASK;
+                if (flags == PSF_MODEL_UNKNOWN)
+                    flags = (psid->flags >> 4) & PSF_MODEL_MASK;
 
+                PR("%s", NULL, si_get_sid_model_str(flags));
+            }
+            break;
+        case 16:
+            if (psid->version >= 3)
+                PR("%d", "$%04x", 0xD000 | (psid->sid2Addr << 4));
+            break;
         case 17:
+            if (psid->version >= 4)
+                PR("%d", "$%04x", 0xD000 | (psid->sid3Addr << 4));
+            break;
+
+        case 18: PR("%s", NULL, psid->sidName); break;
+        case 19: PR("%s", NULL, psid->sidAuthor); break;
+        case 20: PR("%s", NULL, psid->sidCopyright); break;
+
+        case 21:
             siPrintFieldPrefix(outFile, opt);
             th_md5_print(outFile, psid->hash);
             siPrintFieldSeparator(outFile);
             break;
 
-        case 18:
+        case 22:
             siPrintFieldPrefix(outFile, opt);
             if (psid->lengths != NULL)
             {