diff options
Diffstat (limited to 'src/lib/formats/fs_vtech.cpp')
-rw-r--r-- | src/lib/formats/fs_vtech.cpp | 74 |
1 files changed, 37 insertions, 37 deletions
diff --git a/src/lib/formats/fs_vtech.cpp b/src/lib/formats/fs_vtech.cpp index 39e116a7ed8..163b2ae6d53 100644 --- a/src/lib/formats/fs_vtech.cpp +++ b/src/lib/formats/fs_vtech.cpp @@ -55,7 +55,7 @@ public: private: meta_data file_metadata(const u8 *entry); - std::tuple<fsblk_t::block_t, u32> file_find(std::string_view name); + std::tuple<fsblk_t::block_t::ptr, u32> file_find(std::string_view name); std::vector<std::pair<u8, u8>> allocate_blocks(u32 count); void free_blocks(const std::vector<std::pair<u8, u8>> &blocks); u32 free_block_count(); @@ -126,7 +126,7 @@ vtech_impl::vtech_impl(fsblk_t &blockdev) : filesystem_t(blockdev, 128) std::error_condition vtech_impl::format(const meta_data &meta) { - m_blockdev.fill(0); + m_blockdev.fill_all(0); return std::error_condition(); } @@ -152,23 +152,23 @@ meta_data vtech_impl::file_metadata(const u8 *entry) return res; } -std::tuple<fsblk_t::block_t, u32> vtech_impl::file_find(std::string_view name) +std::tuple<fsblk_t::block_t::ptr, u32> vtech_impl::file_find(std::string_view name) { for(int sect = 0; sect != 14; sect++) { auto bdir = m_blockdev.get(sect); for(u32 i = 0; i != 8; i ++) { u32 off = i*16; - u8 type = bdir.r8(off); + u8 type = bdir->r8(off); if(type < 'A' || type > 'Z') continue; - if(bdir.r8(off+1) != ':') + if(bdir->r8(off+1) != ':') continue; - if(trim_end_spaces(bdir.rstr(off+2, 8)) == name) { + if(trim_end_spaces(bdir->rstr(off+2, 8)) == name) { return std::make_tuple(bdir, off); } } } - return std::make_tuple(fsblk_t::block_t(), 0xffffffff); + return std::make_tuple(fsblk_t::block_t::ptr(), 0xffffffff); } std::pair<std::error_condition, meta_data> vtech_impl::metadata(const std::vector<std::string> &path) @@ -180,7 +180,7 @@ std::pair<std::error_condition, meta_data> vtech_impl::metadata(const std::vecto if(off == 0xffffffff) return std::make_pair(error::not_found, meta_data()); - return std::make_pair(std::error_condition(), file_metadata(bdir.rodata() + off)); + return std::make_pair(std::error_condition(), file_metadata(bdir->rodata() + off)); } std::error_condition vtech_impl::metadata_change(const std::vector<std::string> &path, const meta_data &meta) @@ -192,7 +192,7 @@ std::error_condition vtech_impl::metadata_change(const std::vector<std::string> if(off == 0xffffffff) return error::not_found; - u8 *entry = bdir.data() + off; + u8 *entry = bdir->data() + off; if(meta.has(meta_name::file_type)) entry[0x0] = meta.get_string(meta_name::file_type)[0]; if(meta.has(meta_name::name)) { @@ -225,12 +225,12 @@ std::pair<std::error_condition, std::vector<dir_entry>> vtech_impl::directory_co auto bdir = m_blockdev.get(sect); for(u32 i = 0; i != 8; i ++) { u32 off = i*16; - u8 type = bdir.r8(off); + u8 type = bdir->r8(off); if(type < 'A' || type > 'Z') continue; - if(bdir.r8(off+1) != ':') + if(bdir->r8(off+1) != ':') continue; - meta_data meta = file_metadata(bdir.rodata()+off); + meta_data meta = file_metadata(bdir->rodata()+off); res.second.emplace_back(dir_entry(dir_entry_type::file, meta)); } } @@ -248,7 +248,7 @@ std::error_condition vtech_impl::rename(const std::vector<std::string> &opath, c std::string name = npath[0]; name.resize(8, ' '); - wstr(bdir.data() + off + 2, name); + wstr(bdir->data() + off + 2, name); return std::error_condition(); } @@ -269,18 +269,18 @@ std::error_condition vtech_impl::file_create(const std::vector<std::string> &pat auto bdir = m_blockdev.get(sect); for(u32 i = 0; i != 16; i ++) { u32 off = i*16; - u8 type = bdir.r8(off); + u8 type = bdir->r8(off); if(type != 'T' && type != 'B') { std::string fname = meta.get_string(meta_name::name, ""); fname.resize(8, ' '); - bdir.w8 (off+0x0, meta.get_string(meta_name::file_type, "T")[0]); - bdir.w8 (off+0x1, ':'); - bdir.wstr(off+0x2, fname); - bdir.w8 (off+0xa, 0x00); - bdir.w8 (off+0xb, 0x00); - bdir.w16l(off+0xc, meta.get_number(meta_name::loading_address, 0x7ae9)); - bdir.w16l(off+0xe, bdir.r16l(off+0xc)); // Size 0 initially + bdir->w8 (off+0x0, meta.get_string(meta_name::file_type, "T")[0]); + bdir->w8 (off+0x1, ':'); + bdir->wstr(off+0x2, fname); + bdir->w8 (off+0xa, 0x00); + bdir->w8 (off+0xb, 0x00); + bdir->w16l(off+0xc, meta.get_number(meta_name::loading_address, 0x7ae9)); + bdir->w16l(off+0xe, bdir->r16l(off+0xc)); // Size 0 initially return std::error_condition(); } } @@ -299,7 +299,7 @@ std::pair<std::error_condition, std::vector<u8>> vtech_impl::file_read(const std if(off == 0xffffffff) return std::make_pair(error::not_found, data); - const u8 *entry = bdir.rodata() + off; + const u8 *entry = bdir->rodata() + off; u8 track = entry[0xa]; u8 sector = entry[0xb]; @@ -314,10 +314,10 @@ std::pair<std::error_condition, std::vector<u8>> vtech_impl::file_read(const std int size = len - pos; if(size > 126) size = 126; - memcpy(data.data() + pos, dblk.data(), size); + dblk->read(0, data.data() + pos, size); pos += size; - track = dblk.r8(126); - sector = dblk.r8(127); + track = dblk->r8(126); + sector = dblk->r8(127); } return std::make_pair(std::error_condition(), data); } @@ -331,7 +331,7 @@ std::error_condition vtech_impl::file_write(const std::vector<std::string> &path if(off == 0xffffffff) return error::not_found; - u8 *entry = bdir.data() + off; + u8 *entry = bdir->data() + off; u32 cur_len = (get_u16le(entry + 0xe) - get_u16le(entry + 0xc)) & 0xffff; u32 new_len = data.size(); @@ -350,8 +350,8 @@ std::error_condition vtech_impl::file_write(const std::vector<std::string> &path for(u32 i = 0; i != cur_ns; i++) { tofree.emplace_back(std::make_pair(track, sector)); auto dblk = m_blockdev.get(track*16 + sector); - track = dblk.r8(126); - sector = dblk.r8(127); + track = dblk->r8(126); + sector = dblk->r8(127); } free_blocks(tofree); @@ -363,13 +363,13 @@ std::error_condition vtech_impl::file_write(const std::vector<std::string> &path if(len > 126) len = 126; else if(len < 126) - dblk.fill(0x00); - memcpy(dblk.data(), data.data() + 126*i, len); + dblk->fill(0x00); + dblk->write(0, data.data() + 126*i, len); if(i < need_ns) { - dblk.w8(126, blocks[i+1].first); - dblk.w8(127, blocks[i+1].second); + dblk->w8(126, blocks[i+1].first); + dblk->w8(127, blocks[i+1].second); } else - dblk.w16l(126, 0); + dblk->w16l(126, 0); } u16 end_address = (get_u16le(entry + 0xc) + data.size()) & 0xffff; @@ -394,8 +394,8 @@ std::vector<std::pair<u8, u8>> vtech_impl::allocate_blocks(u32 count) for(u8 sector = 0; sector != 16; sector++) { u32 off = (track-1)*2 + (sector / 8); u32 bit = 1 << (sector & 7); - if(!(fmap.r8(off) & bit)) { - fmap.w8(off, fmap.r8(off) | bit); + if(!(fmap->r8(off) & bit)) { + fmap->w8(off, fmap->r8(off) | bit); blocks.emplace_back(std::make_pair(track, sector)); if(blocks.size() == count) return blocks; @@ -412,7 +412,7 @@ void vtech_impl::free_blocks(const std::vector<std::pair<u8, u8>> &blocks) u8 sector = ref.second; u32 off = (track-1)*2 + (sector / 8); u32 bit = 1 << (sector & 7); - fmap.w8(off, fmap.r8(off) & ~bit); + fmap->w8(off, fmap->r8(off) & ~bit); } } @@ -421,7 +421,7 @@ u32 vtech_impl::free_block_count() auto fmap = m_blockdev.get(15); u32 nf = 0; for(u32 off = 0; off != (40-1)*2; off++) { - u8 m = fmap.r8(off); + u8 m = fmap->r8(off); // Count 1 bits; m = ((m & 0xaa) >> 1) | (m & 0x55); m = ((m & 0xcc) >> 2) | (m & 0x33); |