summaryrefslogtreecommitdiffstatshomepage
path: root/src/lib
diff options
context:
space:
mode:
author Nigel Barnes <Pernod70@users.noreply.github.com>2022-05-15 16:17:35 +0100
committer Nigel Barnes <Pernod70@users.noreply.github.com>2022-05-15 16:17:35 +0100
commit41cffee11ae8b8aa59c1e8d9e6e29222110353d9 (patch)
tree7463b75dfb2a8d51299ad126d1b1d046480154f7 /src/lib
parent3377ee1d7985fe6a2b4d79dd5d75c828bccbbbc2 (diff)
acorn_dsk: Adjusted returned FFID's to indicate verified internal structure.
Diffstat (limited to 'src/lib')
-rw-r--r--src/lib/formats/acorn_dsk.cpp25
1 files changed, 15 insertions, 10 deletions
diff --git a/src/lib/formats/acorn_dsk.cpp b/src/lib/formats/acorn_dsk.cpp
index 002c3aa1d37..3b9df1a585d 100644
--- a/src/lib/formats/acorn_dsk.cpp
+++ b/src/lib/formats/acorn_dsk.cpp
@@ -55,12 +55,12 @@ int acorn_ssd_format::find_size(util::random_read &io, uint32_t form_factor, con
// test for Torch CPN - test pattern at sector &0018
io.read_at(0x32800, cat, 8, actual);
- if (memcmp(cat, "\xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd", 4) == 0 && size == (uint64_t)compute_track_size(f) * f.track_count * f.head_count)
+ if (memcmp(cat, "\xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd", 8) == 0 && size == (uint64_t)compute_track_size(f) * f.track_count * f.head_count)
return i;
// test for HADFS - test pattern at sector 70
io.read_at(0x04610, cat, 8, actual);
- if (memcmp(cat, "\x00\x28\x43\x29\x4a\x47\x48\x00", 4) == 0 && size == (uint64_t)compute_track_size(f) * f.track_count * f.head_count)
+ if (memcmp(cat, "\x00\x28\x43\x29\x4a\x47\x48\x00", 8) == 0 && size == (uint64_t)compute_track_size(f) * f.track_count * f.head_count)
return i;
// test for Kenda SD - offset &0962 = 0 SD/1 DD, offset &0963 = disk size blocks / 4 (block size = 1K, ie. 0x400 bytes), reserved tracks = 3, ie. 0x1e00 bytes, soft stagger = 2 sectors, ie. 0x200 bytes
@@ -113,7 +113,7 @@ int acorn_ssd_format::identify(util::random_read &io, uint32_t form_factor, cons
int type = find_size(io, form_factor, variants);
if (type != -1)
- return FIFID_SIZE;
+ return FIFID_SIZE | FIFID_STRUCT;
return 0;
}
@@ -207,14 +207,19 @@ int acorn_dsd_format::find_size(util::random_read &io, uint32_t form_factor, con
// test for Torch CPN - test pattern at sector &0018
io.read_at(0x1200, cat, 8, actual);
- if (memcmp(cat, "\xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd", 4) == 0 && size == (uint64_t)compute_track_size(f) * f.track_count * f.head_count)
+ if (memcmp(cat, "\xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd", 8) == 0 && size == (uint64_t)compute_track_size(f) * f.track_count * f.head_count)
return i;
// test for HADFS - test pattern at sector 70
io.read_at(0x08c10, cat, 8, actual);
- if (memcmp(cat, "\x00\x28\x43\x29\x4a\x47\x48\x00", 4) == 0 && size == (uint64_t)compute_track_size(f) * f.track_count * f.head_count)
+ if (memcmp(cat, "\x00\x28\x43\x29\x4a\x47\x48\x00", 8) == 0 && size == (uint64_t)compute_track_size(f) * f.track_count * f.head_count)
return i;
+ // test for FLEX - from System Information Record
+ io.read_at(0x0226, cat, 2, actual);
+ if ((memcmp(cat, "\x4f\x14", 2) == 0 || memcmp(cat, "\x4f\x0a", 2) == 0) && size == (uint64_t)compute_track_size(f) * f.track_count * f.head_count)
+ return i;
+
// read sector count from side 0 catalogue
io.read_at(0x100, cat, 8, actual);
sectors0 = ((cat[6] & 3) << 8) + cat[7];
@@ -246,7 +251,7 @@ int acorn_dsd_format::identify(util::random_read &io, uint32_t form_factor, cons
int type = find_size(io, form_factor, variants);
if (type != -1)
- return FIFID_SIZE;
+ return FIFID_STRUCT | FIFID_SIZE;
return 0;
}
@@ -351,7 +356,7 @@ int opus_ddos_format::identify(util::random_read &io, uint32_t form_factor, cons
int type = find_size(io, form_factor, variants);
if (type != -1)
- return FIFID_SIZE;
+ return FIFID_STRUCT | FIFID_SIZE;
return 0;
}
@@ -448,7 +453,7 @@ int acorn_adfs_old_format::identify(util::random_read &io, uint32_t form_factor,
int type = find_size(io, form_factor, variants);
if(type != -1)
- return FIFID_SIZE;
+ return FIFID_STRUCT | FIFID_SIZE;
return 0;
}
@@ -552,7 +557,7 @@ int acorn_adfs_new_format::identify(util::random_read &io, uint32_t form_factor,
int type = find_size(io, form_factor, variants);
if (type != -1)
- return FIFID_SIZE;
+ return FIFID_STRUCT | FIFID_SIZE;
return 0;
}
@@ -633,7 +638,7 @@ int acorn_dos_format::identify(util::random_read &io, uint32_t form_factor, cons
int type = find_size(io, form_factor, variants);
if (type != -1)
- return FIFID_SIZE;
+ return FIFID_STRUCT | FIFID_SIZE;
return 0;
}