mirror of
https://github.com/holub/mame
synced 2025-04-24 09:20:02 +03:00
acorn_dsk: Added support for Kenda formatted SSD images.
This commit is contained in:
parent
ea75086da7
commit
c2a670bda8
@ -50,6 +50,18 @@ int acorn_ssd_format::find_size(io_generic *io, uint32_t form_factor)
|
||||
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)
|
||||
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
|
||||
io_generic_read(io, cat, 0x0960, 8);
|
||||
if (cat[2] == 0 && ((uint64_t)cat[3] * 4 * 0x400 + 0x2000) == size && size == (uint64_t)compute_track_size(f) * f.track_count * f.head_count)
|
||||
{
|
||||
// valid blocks for single sided
|
||||
if (f.head_count == 1 && (cat[3] == 0x17 || cat[3] == 0x30))
|
||||
return i;
|
||||
// valid blocks for double sided
|
||||
if (f.head_count == 2 && (cat[3] == 0x2f || cat[3] == 0x62))
|
||||
return i;
|
||||
}
|
||||
|
||||
// read sector count from side 0 catalogue
|
||||
io_generic_read(io, cat, 0x100, 8);
|
||||
sectors0 = ((cat[6] & 3) << 8) + cat[7];
|
||||
@ -59,7 +71,7 @@ int acorn_ssd_format::find_size(io_generic *io, uint32_t form_factor)
|
||||
if (f.head_count == 2)
|
||||
{
|
||||
// read sector count from side 2 catalogue
|
||||
io_generic_read(io, cat, compute_track_size(f) * f.track_count + 0x100, 8); // sequential
|
||||
io_generic_read(io, cat, (uint64_t)compute_track_size(f) * f.track_count + 0x100, 8); // sequential
|
||||
sectors2 = ((cat[6] & 3) << 8) + cat[7];
|
||||
|
||||
// exception case for Acorn CP/M System Disc 1
|
||||
@ -282,7 +294,7 @@ int opus_ddos_format::find_size(io_generic *io, uint32_t form_factor)
|
||||
if (f.head_count == 2)
|
||||
{
|
||||
// read sector count from side 2 catalogue
|
||||
io_generic_read(io, cat, compute_track_size(f) * f.track_count + 0x1000, 8); // sequential
|
||||
io_generic_read(io, cat, (uint64_t)compute_track_size(f) * f.track_count + 0x1000, 8); // sequential
|
||||
sectors2 = (cat[1] << 8) + cat[2];
|
||||
LOG_FORMATS("ddos: sector count 2: %d %s\n", sectors2, sectors2 % 18 != 0 ? "invalid" : "");
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user