# HG changeset patch # User Matti Hamalainen # Date 1496360700 -10800 # Node ID b9a3f93f69d156883fadc66602ed71307e2c8e01 # Parent 9cfa0553e7f9128c58d55d0f12627dda76b78b2c Implement support for showing second and third SID chip addresses and models for PSID/RSID v3/v4 files. diff -r 9cfa0553e7f9 -r b9a3f93f69d1 sidinfo.c --- 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) {