diff options
author | 2015-11-08 12:56:12 +0100 | |
---|---|---|
committer | 2015-11-08 12:56:12 +0100 | |
commit | 7c19aac60e12d6f5ea301bdb34d7826a01e0b06f (patch) | |
tree | f310d86aa2c6bfc19d115307dedde4eb0cd52dad /src/lib/util/harddisk.cpp | |
parent | a57b46ae933badd7441ce1644711dbb851e2b504 (diff) |
Rename *.c -> *.cpp in our source (nw)
Diffstat (limited to 'src/lib/util/harddisk.cpp')
-rw-r--r-- | src/lib/util/harddisk.cpp | 161 |
1 files changed, 161 insertions, 0 deletions
diff --git a/src/lib/util/harddisk.cpp b/src/lib/util/harddisk.cpp new file mode 100644 index 00000000000..b1082f3234f --- /dev/null +++ b/src/lib/util/harddisk.cpp @@ -0,0 +1,161 @@ +// license:BSD-3-Clause +// copyright-holders:Aaron Giles +/*************************************************************************** + + hardisk.c + + Generic MAME hard disk implementation, with differencing files + +***************************************************************************/ + +#include <assert.h> + +#include "harddisk.h" + +#include <stdlib.h> + + +/*************************************************************************** + TYPE DEFINITIONS +***************************************************************************/ + +struct hard_disk_file +{ + chd_file * chd; /* CHD file */ + hard_disk_info info; /* hard disk info */ +}; + + + +/*************************************************************************** + CORE IMPLEMENTATION +***************************************************************************/ + +/*------------------------------------------------- + hard_disk_open - open a hard disk handle, + given a chd_file +-------------------------------------------------*/ + +hard_disk_file *hard_disk_open(chd_file *chd) +{ + int cylinders, heads, sectors, sectorbytes; + hard_disk_file *file; + std::string metadata; + chd_error err; + + /* punt if no CHD */ + if (chd == NULL) + return NULL; + + /* read the hard disk metadata */ + err = chd->read_metadata(HARD_DISK_METADATA_TAG, 0, metadata); + if (err != CHDERR_NONE) + return NULL; + + /* parse the metadata */ + if (sscanf(metadata.c_str(), HARD_DISK_METADATA_FORMAT, &cylinders, &heads, §ors, §orbytes) != 4) + return NULL; + + /* allocate memory for the hard disk file */ + file = (hard_disk_file *)malloc(sizeof(hard_disk_file)); + if (file == NULL) + return NULL; + + /* fill in the data */ + file->chd = chd; + file->info.cylinders = cylinders; + file->info.heads = heads; + file->info.sectors = sectors; + file->info.sectorbytes = sectorbytes; + return file; +} + + +/*------------------------------------------------- + hard_disk_close - close a hard disk handle +-------------------------------------------------*/ + +void hard_disk_close(hard_disk_file *file) +{ + free(file); +} + + +/*------------------------------------------------- + hard_disk_get_chd - get a handle to a CHD + from a hard disk +-------------------------------------------------*/ + +chd_file *hard_disk_get_chd(hard_disk_file *file) +{ + return file->chd; +} + + +/*------------------------------------------------- + hard_disk_get_info - return information about + a hard disk +-------------------------------------------------*/ + +/** + * @fn hard_disk_info *hard_disk_get_info(hard_disk_file *file) + * + * @brief Hard disk get information. + * + * @param [in,out] file If non-null, the file. + * + * @return null if it fails, else a hard_disk_info*. + */ + +hard_disk_info *hard_disk_get_info(hard_disk_file *file) +{ + return &file->info; +} + + +/*------------------------------------------------- + hard_disk_read - read sectors from a hard + disk +-------------------------------------------------*/ + +/** + * @fn UINT32 hard_disk_read(hard_disk_file *file, UINT32 lbasector, void *buffer) + * + * @brief Hard disk read. + * + * @param [in,out] file If non-null, the file. + * @param lbasector The lbasector. + * @param [in,out] buffer If non-null, the buffer. + * + * @return An UINT32. + */ + +UINT32 hard_disk_read(hard_disk_file *file, UINT32 lbasector, void *buffer) +{ + chd_error err = file->chd->read_units(lbasector, buffer); + return (err == CHDERR_NONE); +} + + +/*------------------------------------------------- + hard_disk_write - write sectors to a hard + disk +-------------------------------------------------*/ + +/** + * @fn UINT32 hard_disk_write(hard_disk_file *file, UINT32 lbasector, const void *buffer) + * + * @brief Hard disk write. + * + * @param [in,out] file If non-null, the file. + * @param lbasector The lbasector. + * @param buffer The buffer. + * + * @return An UINT32. + */ + +UINT32 hard_disk_write(hard_disk_file *file, UINT32 lbasector, const void *buffer) +{ + chd_error err = file->chd->write_units(lbasector, buffer); + return (err == CHDERR_NONE); +} |