Merge pull request #426 from negativeExponent/update_libchdr
[pcsx_rearmed.git] / deps / libchdr / cdrom.h
index 8a3341c..65aa182 100644 (file)
-// license:BSD-3-Clause\r
-// copyright-holders:Aaron Giles\r
-/***************************************************************************\r
-\r
-    cdrom.h\r
-\r
-    Generic MAME cd-rom implementation\r
-\r
-***************************************************************************/\r
-\r
-#pragma once\r
-\r
-#ifndef __CDROM_H__\r
-#define __CDROM_H__\r
-\r
-#include <stdint.h>\r
-\r
-\r
-/***************************************************************************\r
-    CONSTANTS\r
-***************************************************************************/\r
-\r
-// tracks are padded to a multiple of this many frames\r
-extern const uint32_t CD_TRACK_PADDING;\r
-\r
-#define CD_MAX_TRACKS           (99)    /* AFAIK the theoretical limit */\r
-#define CD_MAX_SECTOR_DATA      (2352)\r
-#define CD_MAX_SUBCODE_DATA     (96)\r
-\r
-#define CD_FRAME_SIZE           (CD_MAX_SECTOR_DATA + CD_MAX_SUBCODE_DATA)\r
-#define CD_FRAMES_PER_HUNK      (8)\r
-\r
-#define CD_METADATA_WORDS       (1+(CD_MAX_TRACKS * 6))\r
-\r
-enum\r
-{\r
-       CD_TRACK_MODE1 = 0,         /* mode 1 2048 bytes/sector */\r
-       CD_TRACK_MODE1_RAW,         /* mode 1 2352 bytes/sector */\r
-       CD_TRACK_MODE2,             /* mode 2 2336 bytes/sector */\r
-       CD_TRACK_MODE2_FORM1,       /* mode 2 2048 bytes/sector */\r
-       CD_TRACK_MODE2_FORM2,       /* mode 2 2324 bytes/sector */\r
-       CD_TRACK_MODE2_FORM_MIX,    /* mode 2 2336 bytes/sector */\r
-       CD_TRACK_MODE2_RAW,         /* mode 2 2352 bytes / sector */\r
-       CD_TRACK_AUDIO,         /* redbook audio track 2352 bytes/sector (588 samples) */\r
-\r
-       CD_TRACK_RAW_DONTCARE       /* special flag for cdrom_read_data: just return me whatever is there */\r
-};\r
-\r
-enum\r
-{\r
-       CD_SUB_NORMAL = 0,          /* "cooked" 96 bytes per sector */\r
-       CD_SUB_RAW,                 /* raw uninterleaved 96 bytes per sector */\r
-       CD_SUB_NONE                 /* no subcode data stored */\r
-};\r
-\r
-#define CD_FLAG_GDROM   0x00000001  // disc is a GD-ROM, all tracks should be stored with GD-ROM metadata\r
-#define CD_FLAG_GDROMLE 0x00000002  // legacy GD-ROM, with little-endian CDDA data\r
-\r
-/***************************************************************************\r
-    FUNCTION PROTOTYPES\r
-***************************************************************************/\r
-\r
-// ECC utilities\r
-int ecc_verify(const uint8_t *sector);\r
-void ecc_generate(uint8_t *sector);\r
-void ecc_clear(uint8_t *sector);\r
-\r
-\r
-\r
-/***************************************************************************\r
-    INLINE FUNCTIONS\r
-***************************************************************************/\r
-\r
-static inline uint32_t msf_to_lba(uint32_t msf)\r
-{\r
-       return ( ((msf&0x00ff0000)>>16) * 60 * 75) + (((msf&0x0000ff00)>>8) * 75) + ((msf&0x000000ff)>>0);\r
-}\r
-\r
-static inline uint32_t lba_to_msf(uint32_t lba)\r
-{\r
-       uint8_t m, s, f;\r
-\r
-       m = lba / (60 * 75);\r
-       lba -= m * (60 * 75);\r
-       s = lba / 75;\r
-       f = lba % 75;\r
-\r
-       return ((m / 10) << 20) | ((m % 10) << 16) |\r
-                       ((s / 10) << 12) | ((s % 10) <<  8) |\r
-                       ((f / 10) <<  4) | ((f % 10) <<  0);\r
-}\r
-\r
-// segacd needs it like this.. investigate\r
-// Angelo also says PCE tracks often start playing at the\r
-// wrong address.. related?\r
-static inline uint32_t lba_to_msf_alt(int lba)\r
-{\r
-       uint32_t ret = 0;\r
-\r
-       ret |= ((lba / (60 * 75))&0xff)<<16;\r
-       ret |= (((lba / 75) % 60)&0xff)<<8;\r
-       ret |= ((lba % 75)&0xff)<<0;\r
-\r
-       return ret;\r
-}\r
-\r
-#endif  // __CDROM_H__\r
+/* license:BSD-3-Clause
+ * copyright-holders:Aaron Giles
+***************************************************************************
+
+    cdrom.h
+
+    Generic MAME cd-rom implementation
+
+***************************************************************************/
+
+#pragma once
+
+#ifndef __CDROM_H__
+#define __CDROM_H__
+
+#include <stdint.h>
+
+
+/***************************************************************************
+    CONSTANTS
+***************************************************************************/
+
+/* tracks are padded to a multiple of this many frames */
+extern const uint32_t CD_TRACK_PADDING;
+
+#define CD_MAX_TRACKS           (99)    /* AFAIK the theoretical limit */
+#define CD_MAX_SECTOR_DATA      (2352)
+#define CD_MAX_SUBCODE_DATA     (96)
+
+#define CD_FRAME_SIZE           (CD_MAX_SECTOR_DATA + CD_MAX_SUBCODE_DATA)
+#define CD_FRAMES_PER_HUNK      (8)
+
+#define CD_METADATA_WORDS       (1+(CD_MAX_TRACKS * 6))
+
+enum
+{
+       CD_TRACK_MODE1 = 0,         /* mode 1 2048 bytes/sector */
+       CD_TRACK_MODE1_RAW,         /* mode 1 2352 bytes/sector */
+       CD_TRACK_MODE2,             /* mode 2 2336 bytes/sector */
+       CD_TRACK_MODE2_FORM1,       /* mode 2 2048 bytes/sector */
+       CD_TRACK_MODE2_FORM2,       /* mode 2 2324 bytes/sector */
+       CD_TRACK_MODE2_FORM_MIX,    /* mode 2 2336 bytes/sector */
+       CD_TRACK_MODE2_RAW,         /* mode 2 2352 bytes / sector */
+       CD_TRACK_AUDIO,         /* redbook audio track 2352 bytes/sector (588 samples) */
+
+       CD_TRACK_RAW_DONTCARE       /* special flag for cdrom_read_data: just return me whatever is there */
+};
+
+enum
+{
+       CD_SUB_NORMAL = 0,          /* "cooked" 96 bytes per sector */
+       CD_SUB_RAW,                 /* raw uninterleaved 96 bytes per sector */
+       CD_SUB_NONE                 /* no subcode data stored */
+};
+
+#define CD_FLAG_GDROM   0x00000001  /* disc is a GD-ROM, all tracks should be stored with GD-ROM metadata */
+#define CD_FLAG_GDROMLE 0x00000002  /* legacy GD-ROM, with little-endian CDDA data */
+
+/***************************************************************************
+    FUNCTION PROTOTYPES
+***************************************************************************/
+
+/* ECC utilities */
+int ecc_verify(const uint8_t *sector);
+void ecc_generate(uint8_t *sector);
+void ecc_clear(uint8_t *sector);
+
+
+
+/***************************************************************************
+    INLINE FUNCTIONS
+***************************************************************************/
+
+static inline uint32_t msf_to_lba(uint32_t msf)
+{
+       return ( ((msf&0x00ff0000)>>16) * 60 * 75) + (((msf&0x0000ff00)>>8) * 75) + ((msf&0x000000ff)>>0);
+}
+
+static inline uint32_t lba_to_msf(uint32_t lba)
+{
+       uint8_t m, s, f;
+
+       m = lba / (60 * 75);
+       lba -= m * (60 * 75);
+       s = lba / 75;
+       f = lba % 75;
+
+       return ((m / 10) << 20) | ((m % 10) << 16) |
+                       ((s / 10) << 12) | ((s % 10) <<  8) |
+                       ((f / 10) <<  4) | ((f % 10) <<  0);
+}
+
+/**
+ * segacd needs it like this.. investigate
+ * Angelo also says PCE tracks often start playing at the
+ * wrong address.. related?
+ **/
+static inline uint32_t lba_to_msf_alt(int lba)
+{
+       uint32_t ret = 0;
+
+       ret |= ((lba / (60 * 75))&0xff)<<16;
+       ret |= (((lba / 75) % 60)&0xff)<<8;
+       ret |= ((lba % 75)&0xff)<<0;
+
+       return ret;
+}
+
+#endif  /* __CDROM_H__ */