Skip to content

Commit

Permalink
gdrom classifications dont belong in cdrom.h or cdrom.cpp
Browse files Browse the repository at this point in the history
  • Loading branch information
nathanhand committed Jan 29, 2021
1 parent e79599f commit 38a7fd7
Show file tree
Hide file tree
Showing 7 changed files with 96 additions and 57 deletions.
2 changes: 2 additions & 0 deletions scripts/src/lib.lua
Expand Up @@ -37,6 +37,8 @@ project "utils"
MAME_DIR .. "src/lib/util/bitmap.h",
MAME_DIR .. "src/lib/util/cdrom.cpp",
MAME_DIR .. "src/lib/util/cdrom.h",
MAME_DIR .. "src/lib/util/gdrom.cpp",
MAME_DIR .. "src/lib/util/gdrom.h",
MAME_DIR .. "src/lib/util/chd.cpp",
MAME_DIR .. "src/lib/util/chd.h",
MAME_DIR .. "src/lib/util/chdcd.cpp",
Expand Down
39 changes: 0 additions & 39 deletions src/lib/util/cdrom.cpp
Expand Up @@ -1774,42 +1774,3 @@ void ecc_clear(uint8_t *sector)
memset(&sector[ECC_P_OFFSET], 0, 2 * ECC_P_NUM_BYTES);
memset(&sector[ECC_Q_OFFSET], 0, 2 * ECC_Q_NUM_BYTES);
}


/*---------------------------------------------------------------------------------------
gdrom_identify_pattern - Dreamcast has well-known standardised GDROM patterns
----------------------------------------------------------------------------------------*/

/**
* Dreamcast GDROM patterns are identified by track types and number of tracks
*
* Pattern I - (SD) DATA + AUDIO, (HD) DATA
* Pattern II - (SD) DATA + AUDIO, (HD) DATA + ... + AUDIO
* Pattern III - (SD) DATA + AUDIO, (HD) DATA + ... + DATA
*
* And a III variant when two HD DATA tracks are split by one or more AUDIO tracks.
*/

enum gdrom_pattern gdrom_identify_pattern(const cdrom_toc *toc)
{
if (toc->numtrks > 4 && toc->tracks[toc->numtrks-1].trktype == CD_TRACK_MODE1_RAW)
{
if (toc->tracks[toc->numtrks-2].trktype == CD_TRACK_AUDIO)
return GDROM_TYPE_III_SPLIT;
else
return GDROM_TYPE_III;
}
else if (toc->numtrks > 3)
{
if (toc->tracks[toc->numtrks-1].trktype == CD_TRACK_AUDIO)
return GDROM_TYPE_II;
else
return GDROM_TYPE_III;
}
else if (toc->numtrks == 3)
{
return GDROM_TYPE_I;
}

return GDROM_TYPE_UNKNOWN;
}
18 changes: 0 additions & 18 deletions src/lib/util/cdrom.h
Expand Up @@ -58,21 +58,6 @@ enum
#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

enum gdrom_area
{
GDROM_SINGLE_DENSITY = 0,
GDROM_HIGH_DENSITY
};

enum gdrom_pattern
{
GDROM_TYPE_UNKNOWN = 0,
GDROM_TYPE_I,
GDROM_TYPE_II,
GDROM_TYPE_III,
GDROM_TYPE_III_SPLIT
};


/***************************************************************************
TYPE DEFINITIONS
Expand Down Expand Up @@ -155,9 +140,6 @@ const char *cdrom_get_subtype_string(uint32_t subtype);
chd_error cdrom_parse_metadata(chd_file *chd, cdrom_toc *toc);
chd_error cdrom_write_metadata(chd_file *chd, const cdrom_toc *toc);

/* GDROM utilities */
enum gdrom_pattern gdrom_identify_pattern(const cdrom_toc *toc);

// ECC utilities
bool ecc_verify(const uint8_t *sector);
void ecc_generate(uint8_t *sector);
Expand Down
1 change: 1 addition & 0 deletions src/lib/util/chdcd.cpp
Expand Up @@ -14,6 +14,7 @@
#include "chd.h"
#include "chdcd.h"
#include "corefile.h"
#include "gdrom.h"



Expand Down
51 changes: 51 additions & 0 deletions src/lib/util/gdrom.cpp
@@ -0,0 +1,51 @@
// license:BSD-3-Clause
/***************************************************************************
gdrom.cpp
GDROM routines
***************************************************************************/


#include "cdrom.h"
#include "gdrom.h"


/*---------------------------------------------------------------------------------------
gdrom_identify_pattern - Dreamcast has well-known standardised GDROM patterns
----------------------------------------------------------------------------------------*/

/**
* Dreamcast GDROM patterns are identified by track types and number of tracks
*
* Pattern I - (SD) DATA + AUDIO, (HD) DATA
* Pattern II - (SD) DATA + AUDIO, (HD) DATA + ... + AUDIO
* Pattern III - (SD) DATA + AUDIO, (HD) DATA + ... + DATA
*
* And a III variant when two HD DATA tracks are split by one or more AUDIO tracks.
*/

enum gdrom_pattern gdrom_identify_pattern(const cdrom_toc *toc)
{
if (toc->numtrks > 4 && toc->tracks[toc->numtrks-1].trktype == CD_TRACK_MODE1_RAW)
{
if (toc->tracks[toc->numtrks-2].trktype == CD_TRACK_AUDIO)
return GDROM_TYPE_III_SPLIT;
else
return GDROM_TYPE_III;
}
else if (toc->numtrks > 3)
{
if (toc->tracks[toc->numtrks-1].trktype == CD_TRACK_AUDIO)
return GDROM_TYPE_II;
else
return GDROM_TYPE_III;
}
else if (toc->numtrks == 3)
{
return GDROM_TYPE_I;
}

return GDROM_TYPE_UNKNOWN;
}
41 changes: 41 additions & 0 deletions src/lib/util/gdrom.h
@@ -0,0 +1,41 @@
// license:BSD-3-Clause
/***************************************************************************
gdrom.h
Definitions used in GDROM routines
***************************************************************************/

#ifndef MAME_UTIL_GDROM_H
#define MAME_UTIL_GDROM_H

#pragma once

/***************************************************************************
CONSTANTS
***************************************************************************/

enum gdrom_area
{
GDROM_SINGLE_DENSITY = 0,
GDROM_HIGH_DENSITY
};

enum gdrom_pattern
{
GDROM_TYPE_UNKNOWN = 0,
GDROM_TYPE_I,
GDROM_TYPE_II,
GDROM_TYPE_III,
GDROM_TYPE_III_SPLIT
};

/***************************************************************************
FUNCTION PROTOTYPES
***************************************************************************/

/* GDROM utilities */
enum gdrom_pattern gdrom_identify_pattern(const cdrom_toc *toc);

#endif // MAME_UTIL_GDROM_H
1 change: 1 addition & 0 deletions src/tools/chdman.cpp
Expand Up @@ -16,6 +16,7 @@
#include "bitmap.h"
#include "chdcd.h"
#include "corefile.h"
#include "gdrom.h"
#include "hashing.h"
#include "md5.h"
#include "vbiparse.h"
Expand Down

0 comments on commit 38a7fd7

Please sign in to comment.