summaryrefslogtreecommitdiffstatshomepage
path: root/src/lib
diff options
context:
space:
mode:
author Olivier Galibert <galibert@pobox.com>2022-04-04 17:23:05 +0200
committer Olivier Galibert <galibert@pobox.com>2022-04-04 17:42:19 +0200
commit3fc66954975655066d0109c49986a360f9f24df1 (patch)
treec20637bf2157f99663b383f5e15b6780994e6f67 /src/lib
parent65a2e8d004dd8ddcd27e22df30ec48626f6b3187 (diff)
hard_disk_file: Hide the chd
Diffstat (limited to 'src/lib')
-rw-r--r--src/lib/util/harddisk.cpp33
-rw-r--r--src/lib/util/harddisk.h8
2 files changed, 34 insertions, 7 deletions
diff --git a/src/lib/util/harddisk.cpp b/src/lib/util/harddisk.cpp
index d009317922e..46cf88bab43 100644
--- a/src/lib/util/harddisk.cpp
+++ b/src/lib/util/harddisk.cpp
@@ -24,7 +24,7 @@ hard_disk_file::hard_disk_file(chd_file *_chd)
{
chd = _chd;
fhandle = nullptr;
- hdinfo.fileoffset = 0;
+ fileoffset = 0;
std::string metadata;
std::error_condition err;
@@ -56,7 +56,7 @@ hard_disk_file::hard_disk_file(util::random_read_write &corefile, uint32_t skipo
hdinfo.cylinders = 0;
hdinfo.heads = 0;
hdinfo.sectors = 0;
- hdinfo.fileoffset = skipoffs;
+ fileoffset = skipoffs;
// attempt to guess geometry in case this is an ATA situation
for (uint32_t totalsectors = (length - skipoffs) / hdinfo.sectorbytes; ; totalsectors++)
@@ -113,7 +113,7 @@ bool hard_disk_file::read(uint32_t lbasector, void *buffer)
else
{
size_t actual = 0;
- std::error_condition err = fhandle->seek(hdinfo.fileoffset + (lbasector * hdinfo.sectorbytes), SEEK_SET);
+ std::error_condition err = fhandle->seek(fileoffset + (lbasector * hdinfo.sectorbytes), SEEK_SET);
if (!err)
err = fhandle->read(buffer, hdinfo.sectorbytes, actual);
return !err && (actual == hdinfo.sectorbytes);
@@ -146,7 +146,7 @@ bool hard_disk_file::write(uint32_t lbasector, const void *buffer)
else
{
size_t actual = 0;
- std::error_condition err = fhandle->seek(hdinfo.fileoffset + (lbasector * hdinfo.sectorbytes), SEEK_SET);
+ std::error_condition err = fhandle->seek(fileoffset + (lbasector * hdinfo.sectorbytes), SEEK_SET);
if (!err)
err = fhandle->write(buffer, hdinfo.sectorbytes, actual);
return !err && (actual == hdinfo.sectorbytes);
@@ -190,3 +190,28 @@ bool hard_disk_file::set_block_size(uint32_t blocksize)
return true;
}
}
+
+
+std::error_condition hard_disk_file::get_inquiry_data(std::vector<uint8_t> &data) const
+{
+ if(chd)
+ return chd->read_metadata(HARD_DISK_IDENT_METADATA_TAG, 0, data);
+ else
+ return std::error_condition(chd_file::error::METADATA_NOT_FOUND);
+}
+
+std::error_condition hard_disk_file::get_cis_data(std::vector<uint8_t> &data) const
+{
+ if(chd)
+ return chd->read_metadata(PCMCIA_CIS_METADATA_TAG, 0, data);
+ else
+ return std::error_condition(chd_file::error::METADATA_NOT_FOUND);
+}
+
+std::error_condition hard_disk_file::get_disk_key_data(std::vector<uint8_t> &data) const
+{
+ if(chd)
+ return chd->read_metadata(HARD_DISK_KEY_METADATA_TAG, 0, data);
+ else
+ return std::error_condition(chd_file::error::METADATA_NOT_FOUND);
+}
diff --git a/src/lib/util/harddisk.h b/src/lib/util/harddisk.h
index d7aff5b8384..ab70bad995f 100644
--- a/src/lib/util/harddisk.h
+++ b/src/lib/util/harddisk.h
@@ -27,16 +27,13 @@ public:
uint32_t heads;
uint32_t sectors;
uint32_t sectorbytes;
- uint32_t fileoffset; // offset in the file where the HDD image starts. not valid for CHDs.
};
-
hard_disk_file(chd_file *chd);
hard_disk_file(util::random_read_write &corefile, uint32_t skipoffs);
~hard_disk_file();
- chd_file *get_chd() const { return chd; }
const info &get_info() const { return hdinfo; }
bool set_block_size(uint32_t blocksize);
@@ -44,10 +41,15 @@ public:
bool read(uint32_t lbasector, void *buffer);
bool write(uint32_t lbasector, const void *buffer);
+ std::error_condition get_inquiry_data(std::vector<uint8_t> &data) const;
+ std::error_condition get_cis_data(std::vector<uint8_t> &data) const;
+ std::error_condition get_disk_key_data(std::vector<uint8_t> &data) const;
+
private:
chd_file * chd; // CHD file
util::random_read_write * fhandle; // file if not a CHD
info hdinfo; // hard disk info
+ uint32_t fileoffset; // offset in the file where the HDD image starts. not valid for CHDs.
};
#endif // MAME_LIB_UTIL_HARDDISK_H