comparison sidinfo.c @ 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 b3e034b8c4b9
children b4b1aac8761c
comparison
equal deleted inserted replaced
133:9cfa0553e7f9 134:b9a3f93f69d1
62 { "LoadAddr" , "Load address" , OTYPE_INT }, 62 { "LoadAddr" , "Load address" , OTYPE_INT },
63 { "InitAddr" , "Init address" , OTYPE_INT }, 63 { "InitAddr" , "Init address" , OTYPE_INT },
64 { "PlayAddr" , "Play address" , OTYPE_INT }, 64 { "PlayAddr" , "Play address" , OTYPE_INT },
65 { "Songs" , "Songs" , OTYPE_INT }, 65 { "Songs" , "Songs" , OTYPE_INT },
66 { "StartSong" , "Start song" , OTYPE_INT }, 66 { "StartSong" , "Start song" , OTYPE_INT },
67
68 { "SID2Model" , "2nd SID model" , OTYPE_INT },
69 { "SID3Model" , "3rd SID model" , OTYPE_INT },
70 { "SID2Addr" , "2nd SID address" , OTYPE_INT },
71 { "SID3Addr" , "3rd SID address" , OTYPE_INT },
67 72
68 { "Name" , NULL , OTYPE_STR }, 73 { "Name" , NULL , OTYPE_STR },
69 { "Author" , NULL , OTYPE_STR }, 74 { "Author" , NULL , OTYPE_STR },
70 { "Copyright" , NULL , OTYPE_STR }, 75 { "Copyright" , NULL , OTYPE_STR },
71 { "Hash" , NULL , OTYPE_OTHER }, 76 { "Hash" , NULL , OTYPE_OTHER },
479 case 9: PR("%d", "$%04x", psid->loadAddress); break; 484 case 9: PR("%d", "$%04x", psid->loadAddress); break;
480 case 10: PR("%d", "$%04x", psid->initAddress); break; 485 case 10: PR("%d", "$%04x", psid->initAddress); break;
481 case 11: PR("%d", "$%04x", psid->playAddress); break; 486 case 11: PR("%d", "$%04x", psid->playAddress); break;
482 case 12: PR("%d", "$%04x", psid->nSongs); break; 487 case 12: PR("%d", "$%04x", psid->nSongs); break;
483 case 13: PR("%d", "$%04x", psid->startSong); break; 488 case 13: PR("%d", "$%04x", psid->startSong); break;
484 case 14: PR("%s", NULL, psid->sidName); break; 489
485 case 15: PR("%s", NULL, psid->sidAuthor); break; 490 case 14:
486 case 16: PR("%s", NULL, psid->sidCopyright); break; 491 if (psid->version >= 3)
487 492 {
493 int flags = (psid->flags >> 6) & PSF_MODEL_MASK;
494 if (flags == PSF_MODEL_UNKNOWN)
495 flags = (psid->flags >> 4) & PSF_MODEL_MASK;
496
497 PR("%s", NULL, si_get_sid_model_str(flags));
498 }
499 break;
500 case 15:
501 if (psid->version >= 4)
502 {
503 int flags = (psid->flags >> 8) & PSF_MODEL_MASK;
504 if (flags == PSF_MODEL_UNKNOWN)
505 flags = (psid->flags >> 4) & PSF_MODEL_MASK;
506
507 PR("%s", NULL, si_get_sid_model_str(flags));
508 }
509 break;
510 case 16:
511 if (psid->version >= 3)
512 PR("%d", "$%04x", 0xD000 | (psid->sid2Addr << 4));
513 break;
488 case 17: 514 case 17:
515 if (psid->version >= 4)
516 PR("%d", "$%04x", 0xD000 | (psid->sid3Addr << 4));
517 break;
518
519 case 18: PR("%s", NULL, psid->sidName); break;
520 case 19: PR("%s", NULL, psid->sidAuthor); break;
521 case 20: PR("%s", NULL, psid->sidCopyright); break;
522
523 case 21:
489 siPrintFieldPrefix(outFile, opt); 524 siPrintFieldPrefix(outFile, opt);
490 th_md5_print(outFile, psid->hash); 525 th_md5_print(outFile, psid->hash);
491 siPrintFieldSeparator(outFile); 526 siPrintFieldSeparator(outFile);
492 break; 527 break;
493 528
494 case 18: 529 case 22:
495 siPrintFieldPrefix(outFile, opt); 530 siPrintFieldPrefix(outFile, opt);
496 if (psid->lengths != NULL) 531 if (psid->lengths != NULL)
497 { 532 {
498 int i; 533 int i;
499 for (i = 0; i < psid->lengths->nlengths; i++) 534 for (i = 0; i < psid->lengths->nlengths; i++)