Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
folium-app
GitHub Repository: folium-app/Folium
Path: blob/a-new-beginning/SharedDependencies/Sources/libchdr/include/cdrom.h
2 views
1
/* license:BSD-3-Clause
2
* copyright-holders:Aaron Giles
3
***************************************************************************
4
5
cdrom.h
6
7
Generic MAME cd-rom implementation
8
9
***************************************************************************/
10
11
#pragma once
12
13
#ifndef __CDROM_H__
14
#define __CDROM_H__
15
16
#include <stdint.h>
17
18
19
/***************************************************************************
20
CONSTANTS
21
***************************************************************************/
22
23
/* tracks are padded to a multiple of this many frames */
24
extern const uint32_t CD_TRACK_PADDING;
25
26
#define CD_MAX_TRACKS (99) /* AFAIK the theoretical limit */
27
#define CD_MAX_SECTOR_DATA (2352)
28
#define CD_MAX_SUBCODE_DATA (96)
29
30
#define CD_FRAME_SIZE (CD_MAX_SECTOR_DATA + CD_MAX_SUBCODE_DATA)
31
#define CD_FRAMES_PER_HUNK (8)
32
33
#define CD_METADATA_WORDS (1+(CD_MAX_TRACKS * 6))
34
35
enum
36
{
37
CD_TRACK_MODE1 = 0, /* mode 1 2048 bytes/sector */
38
CD_TRACK_MODE1_RAW, /* mode 1 2352 bytes/sector */
39
CD_TRACK_MODE2, /* mode 2 2336 bytes/sector */
40
CD_TRACK_MODE2_FORM1, /* mode 2 2048 bytes/sector */
41
CD_TRACK_MODE2_FORM2, /* mode 2 2324 bytes/sector */
42
CD_TRACK_MODE2_FORM_MIX, /* mode 2 2336 bytes/sector */
43
CD_TRACK_MODE2_RAW, /* mode 2 2352 bytes / sector */
44
CD_TRACK_AUDIO, /* redbook audio track 2352 bytes/sector (588 samples) */
45
46
CD_TRACK_RAW_DONTCARE /* special flag for cdrom_read_data: just return me whatever is there */
47
};
48
49
enum
50
{
51
CD_SUB_NORMAL = 0, /* "cooked" 96 bytes per sector */
52
CD_SUB_RAW, /* raw uninterleaved 96 bytes per sector */
53
CD_SUB_NONE /* no subcode data stored */
54
};
55
56
#define CD_FLAG_GDROM 0x00000001 /* disc is a GD-ROM, all tracks should be stored with GD-ROM metadata */
57
#define CD_FLAG_GDROMLE 0x00000002 /* legacy GD-ROM, with little-endian CDDA data */
58
59
/***************************************************************************
60
FUNCTION PROTOTYPES
61
***************************************************************************/
62
63
/* ECC utilities */
64
int ecc_verify(const uint8_t *sector);
65
void ecc_generate(uint8_t *sector);
66
void ecc_clear(uint8_t *sector);
67
68
69
70
/***************************************************************************
71
INLINE FUNCTIONS
72
***************************************************************************/
73
74
static inline uint32_t msf_to_lba(uint32_t msf)
75
{
76
return ( ((msf&0x00ff0000)>>16) * 60 * 75) + (((msf&0x0000ff00)>>8) * 75) + ((msf&0x000000ff)>>0);
77
}
78
79
static inline uint32_t lba_to_msf(uint32_t lba)
80
{
81
uint8_t m, s, f;
82
83
m = lba / (60 * 75);
84
lba -= m * (60 * 75);
85
s = lba / 75;
86
f = lba % 75;
87
88
return ((m / 10) << 20) | ((m % 10) << 16) |
89
((s / 10) << 12) | ((s % 10) << 8) |
90
((f / 10) << 4) | ((f % 10) << 0);
91
}
92
93
/**
94
* segacd needs it like this.. investigate
95
* Angelo also says PCE tracks often start playing at the
96
* wrong address.. related?
97
**/
98
static inline uint32_t lba_to_msf_alt(int lba)
99
{
100
uint32_t ret = 0;
101
102
ret |= ((lba / (60 * 75))&0xff)<<16;
103
ret |= (((lba / 75) % 60)&0xff)<<8;
104
ret |= ((lba % 75)&0xff)<<0;
105
106
return ret;
107
}
108
109
#endif /* __CDROM_H__ */
110
111