view sidlib.h @ 85:4c0ecb078591

Rename various variables and functions and change relevant places to use the new th_ctx API.
author Matti Hamalainen <ccr@tnsp.org>
date Thu, 11 Feb 2016 23:18:58 +0200
parents 5d61d8dbc77f
children e1ff9cd27a84
line wrap: on
line source

/*
 * SIDInfoLib - Way too simplistic PSID/RSID file library
 * Written by Matti 'ccr' Hämäläinen <ccr@tnsp.org>
 * (C) Copyright 2014-2016 Tecnic Software productions (TNSP)
 */
#ifndef SIDLIB_H
#define SIDLIB_H 1

#include "th_util.h"
#include "th_ioctx.h"
#include "th_crypto.h"


#ifdef __cplusplus
extern "C" {
#endif


// Some constants
#define PSID_MAGIC_LEN    4
#define PSID_STR_LEN      32
#define PSID_BUFFER_SIZE  (1024 * 16)


typedef struct
{
    char magic[PSID_MAGIC_LEN + 1]; // "PSID" / "RSID" magic identifier
    uint16_t
        version,         // Version number
        dataOffset,      // Start of actual c64 data in file
        loadAddress,     // Loading address
        initAddress,     // Initialization address
        playAddress,     // Play one frame
        nSongs,          // Number of subsongs
        startSong;       // Default starting song
    uint32_t speed;      // Speed
    char sidName[PSID_STR_LEN + 1];    // Descriptive text-fields, ASCIIZ
    char sidAuthor[PSID_STR_LEN + 1];
    char sidCopyright[PSID_STR_LEN + 1];

    // PSIDv2 data
    uint16_t flags;      // Flags
    uint8_t  startPage, pageLength;
    uint16_t reserved;

    // Extra data
    BOOL isRSID;
    size_t dataSize;     // Total size of data - header
    th_md5hash_t hash;   // Songlength database hash

} 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,
};


//
// Functions
//
int             si_read_sid_file(th_ioctx *ctx, PSIDHeader *psid);

const char *    si_get_sid_clock_str(const int flags);
const char *    si_get_sid_model_str(const int flags);


#ifdef __cplusplus
}
#endif
#endif // SIDLIB_H