diff options
| author | 2022-04-04 17:23:05 +0200 | |
|---|---|---|
| committer | 2022-04-04 17:42:19 +0200 | |
| commit | 3fc66954975655066d0109c49986a360f9f24df1 (patch) | |
| tree | c20637bf2157f99663b383f5e15b6780994e6f67 /src/lib | |
| parent | 65a2e8d004dd8ddcd27e22df30ec48626f6b3187 (diff) | |
hard_disk_file: Hide the chd
Diffstat (limited to 'src/lib')
| -rw-r--r-- | src/lib/util/harddisk.cpp | 33 | ||||
| -rw-r--r-- | src/lib/util/harddisk.h | 8 |
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 |
