summaryrefslogtreecommitdiffstatshomepage
path: root/src/lib/formats/fs_vtech.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/formats/fs_vtech.cpp')
-rw-r--r--src/lib/formats/fs_vtech.cpp74
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);