summaryrefslogtreecommitdiffstatshomepage
path: root/src/lib
diff options
context:
space:
mode:
author AJR <ajrhacker@users.noreply.github.com>2023-03-19 17:06:55 -0400
committer AJR <ajrhacker@users.noreply.github.com>2023-03-19 17:06:55 -0400
commit40b5608160aef97ca0fb3a118a113d9558ada43c (patch)
tree032ea698a47b1d82268c6d3485f5d4bab5a99d7e /src/lib
parentea47c29c49bb189972dfa876c61fc5bf74bf795a (diff)
Encode certain tracks as single density in .d88 floppy format
* bml3mp1802, x1: Hook up DDEN control for FDC
Diffstat (limited to 'src/lib')
-rw-r--r--src/lib/formats/d88_dsk.cpp8
1 files changed, 7 insertions, 1 deletions
diff --git a/src/lib/formats/d88_dsk.cpp b/src/lib/formats/d88_dsk.cpp
index a64129cc3a4..9495f5a863d 100644
--- a/src/lib/formats/d88_dsk.cpp
+++ b/src/lib/formats/d88_dsk.cpp
@@ -500,6 +500,7 @@ bool d88_format::load(util::random_read &io, uint32_t form_factor, const std::ve
uint8_t sect_data[65536];
int sdatapos = 0;
int sector_count = 1;
+ uint8_t density = 0;
for(int i=0; i<sector_count; i++) {
if (pos + 16 > file_size)
@@ -519,6 +520,8 @@ bool d88_format::load(util::random_read &io, uint32_t form_factor, const std::ve
// Support broken vfman converter
if(sector_count == 0x1000)
sector_count = 0x10;
+
+ density = hs[6];
}
sects[i].track = hs[0];
@@ -539,7 +542,10 @@ bool d88_format::load(util::random_read &io, uint32_t form_factor, const std::ve
sects[i].data = nullptr;
}
- build_pc_track_mfm(track, head, image, cell_count, sector_count, sects, calc_default_pc_gap3_size(form_factor, sects[0].actual_size));
+ if(density == 0x40)
+ build_pc_track_fm(track, head, image, cell_count / 2, sector_count, sects, calc_default_pc_gap3_size(form_factor, sects[0].actual_size));
+ else
+ build_pc_track_mfm(track, head, image, cell_count, sector_count, sects, calc_default_pc_gap3_size(form_factor, sects[0].actual_size));
}
return true;