summaryrefslogtreecommitdiffstatshomepage
path: root/src/lib/formats/flopimg.cpp
diff options
context:
space:
mode:
author Sergey Svishchev <shattered@users.noreply.github.com>2019-07-01 23:56:11 +0300
committer Sergey Svishchev <shattered@users.noreply.github.com>2019-07-02 01:13:38 +0300
commita152d1125fde01e80ab3e9cccd475a50c22c6316 (patch)
tree1649ac05dc5a9b75a5458c7662d87d28cc812bae /src/lib/formats/flopimg.cpp
parent35af77fcfad6db45904b555e8bd2d2a97fc51800 (diff)
agat: basic emulation of agat9 (video, apple compat mode, LLE floppy)
also included: MX floppy format (nw)
Diffstat (limited to 'src/lib/formats/flopimg.cpp')
-rw-r--r--src/lib/formats/flopimg.cpp40
1 files changed, 40 insertions, 0 deletions
diff --git a/src/lib/formats/flopimg.cpp b/src/lib/formats/flopimg.cpp
index 3d05ec38d03..ea812506f50 100644
--- a/src/lib/formats/flopimg.cpp
+++ b/src/lib/formats/flopimg.cpp
@@ -1038,6 +1038,7 @@ bool floppy_image_format_t::type_data_mfm(int type, int p1, const gen_crc_info *
type == SIZE_ID ||
type == OFFSET_ID_O ||
type == OFFSET_ID_E ||
+ type == OFFSET_ID_FM ||
type == SECTOR_ID_O ||
type == SECTOR_ID_E ||
type == REMAIN_O ||
@@ -1521,6 +1522,14 @@ void floppy_image_format_t::generate_track(const desc_e *desc, int track, int he
mfm_half_w(buffer, 6, track*2+head);
break;
+ case OFFSET_ID_FM:
+ fm_w(buffer, 8, track*2+head);
+ break;
+
+ case OFFSET_ID:
+ mfm_w(buffer, 8, track*2+head);
+ break;
+
case SECTOR_ID_O:
mfm_half_w(buffer, 7, sector_idx);
break;
@@ -1650,6 +1659,37 @@ void floppy_image_format_t::generate_track(const desc_e *desc, int track, int he
break;
}
+ case SECTOR_DATA_MX: {
+ const desc_s *csect = sect + (desc[index].p1 >= 0 ? desc[index].p1 : sector_idx);
+ uint16_t cksum = 0, data;
+ for(int i=0; i < csect->size; i+=2)
+ {
+ data = csect->data[i+1];
+ fm_w(buffer, 8, data);
+ data = (data << 8) | csect->data[i];
+ fm_w(buffer, 8, csect->data[i]);
+ cksum += data;
+ }
+ fm_w(buffer, 16, cksum);
+ break;
+ }
+
+ case SECTOR_DATA_DS9: {
+ const desc_s *csect = sect + (desc[index].p1 >= 0 ? desc[index].p1 : sector_idx);
+ uint8_t data;
+ int cksum = 0;
+ for(int i=0; i != csect->size; i++)
+ {
+ if (cksum > 255) { cksum++; cksum &= 255; }
+ data = csect->data[i];
+ mfm_w(buffer, 8, data);
+ cksum += data;
+ }
+ cksum &= 255;
+ mfm_w(buffer, 8, cksum);
+ break;
+ }
+
default:
printf("%d.%d.%d (%d) unhandled\n", desc[index].type, desc[index].p1, desc[index].p2, index);
break;