Mercurial > hg > sidinfo
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++) |