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