summaryrefslogtreecommitdiffstatshomepage
path: root/src/lib
diff options
context:
space:
mode:
author R. Belmont <rb6502@users.noreply.github.com>2020-02-05 13:42:04 -0500
committer GitHub <noreply@github.com>2020-02-05 13:42:04 -0500
commit3f972f86c708e70c7e41c74db07270980ac4e9ab (patch)
tree3790cb63594dc136931249ae0d38f3ebcee6ac5b /src/lib
parent2915959bf4401d20ca223ee941ab0a9e3b0e4590 (diff)
parentc12f5eecda283a173d1b7b5b54e6eea686aa1fd5 (diff)
Merge pull request #6245 from shattered/_27394e2f097
aim_dsk: use splice position recorded in the image, if available (nw)
Diffstat (limited to 'src/lib')
-rw-r--r--src/lib/formats/aim_dsk.cpp34
1 files changed, 29 insertions, 5 deletions
diff --git a/src/lib/formats/aim_dsk.cpp b/src/lib/formats/aim_dsk.cpp
index 5abc410d57c..e1c48dabd25 100644
--- a/src/lib/formats/aim_dsk.cpp
+++ b/src/lib/formats/aim_dsk.cpp
@@ -66,23 +66,41 @@ bool aim_format::load(io_generic *io, uint32_t form_factor, floppy_image *image)
std::vector<uint8_t> track_data(track_size);
std::vector<uint32_t> raw_track_data;
int data_count = 0;
+ int splice_pos = -1;
bool header = false;
// Read track
io_generic_read(io, &track_data[0], ( heads * track + head ) * track_size, track_size);
+ // Find first sector header or index mark
for (int offset = 0; offset < track_size; offset += 2)
{
- switch (track_data[offset + 1] & 1)
+ if (track_data[offset + 1] == 1 && splice_pos < 0)
{
- case 0:
+ splice_pos = offset - (20 * 2);
+ }
+ if (track_data[offset + 1] == 3)
+ {
+ splice_pos = offset;
+ }
+ }
+ if (splice_pos < 0)
+ {
+ splice_pos = 0;
+ }
+
+ for (int offset = splice_pos; offset < track_size + splice_pos; offset += 2)
+ {
+ switch (track_data[(offset + 1) % track_size])
+ {
+ case 0: // regular data
if (data_count == 0)
- header = (track_data[offset] == 0x95) ? true : false;
+ header = (track_data[offset % track_size] == 0x95) ? true : false;
data_count++;
- mfm_w(raw_track_data, 8, track_data[offset]);
+ mfm_w(raw_track_data, 8, track_data[offset % track_size]);
break;
- case 1:
+ case 1: // sync mark
if (header && data_count < 11) // XXX hack
{
for (; data_count < 12; data_count++)
@@ -93,6 +111,12 @@ bool aim_format::load(io_generic *io, uint32_t form_factor, floppy_image *image)
raw_w(raw_track_data, 16, 0x8924);
raw_w(raw_track_data, 16, 0x5555);
data_count = 0;
+
+ // TELETEXT.AIM and others
+ case 0xff:
+ break;
+
+ default:
break;
}
}