summaryrefslogtreecommitdiffstatshomepage
path: root/src/lib/formats/flopimg.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/formats/flopimg.c')
-rw-r--r--src/lib/formats/flopimg.c42
1 files changed, 42 insertions, 0 deletions
diff --git a/src/lib/formats/flopimg.c b/src/lib/formats/flopimg.c
index 5351cfd10ba..72c5acc7a1f 100644
--- a/src/lib/formats/flopimg.c
+++ b/src/lib/formats/flopimg.c
@@ -1077,6 +1077,7 @@ bool floppy_image_format_t::type_no_data(int type) const
type == CRC_AMIGA_START ||
type == CRC_CBM_START ||
type == CRC_MACHEAD_START ||
+ type == CRC_FCS_START ||
type == CRC_END ||
type == SECTOR_LOOP_START ||
type == SECTOR_LOOP_END ||
@@ -1115,6 +1116,9 @@ void floppy_image_format_t::collect_crcs(const desc_e *desc, gen_crc_info *crcs)
case CRC_MACHEAD_START:
crcs[desc[i].p1].type = CRC_MACHEAD;
break;
+ case CRC_FCS_START:
+ crcs[desc[i].p1].type = CRC_FCS;
+ break;
}
for(int i=0; desc[i].type != END; i++)
@@ -1133,6 +1137,7 @@ int floppy_image_format_t::crc_cells_size(int type) const
case CRC_AMIGA: return 64;
case CRC_CBM: return 10;
case CRC_MACHEAD: return 8;
+ case CRC_FCS: return 20;
default: return 0;
}
}
@@ -1200,6 +1205,16 @@ void floppy_image_format_t::gcr5_w(UINT32 *buffer, int &offset, int n, UINT32 va
raw_w(buffer, offset, 5, e1, size);
}
+void floppy_image_format_t::_8n1_w(UINT32 *buffer, int &offset, int n, UINT32 val, UINT32 size)
+{
+ bit_w(buffer, offset++, 0);
+ for(int i=n-1; i>=0; i--) {
+ int bit = (val >> i) & 1;
+ bit_w(buffer, offset++, bit, size);
+ }
+ bit_w(buffer, offset++, 1);
+}
+
void floppy_image_format_t::fixup_crc_amiga(UINT32 *buffer, const gen_crc_info *crc)
{
UINT16 res = 0;
@@ -1258,6 +1273,11 @@ void floppy_image_format_t::fixup_crc_machead(UINT32 *buffer, const gen_crc_info
raw_w(buffer, offset, 8, gcr6fw_tb[v]);
}
+void floppy_image_format_t::fixup_crc_fcs(UINT32 *buffer, const gen_crc_info *crc)
+{
+ // TODO
+}
+
void floppy_image_format_t::fixup_crcs(UINT32 *buffer, gen_crc_info *crcs)
{
for(int i=0; i != MAX_CRC_COUNT; i++)
@@ -1268,6 +1288,7 @@ void floppy_image_format_t::fixup_crcs(UINT32 *buffer, gen_crc_info *crcs)
case CRC_CCITT: fixup_crc_ccitt(buffer, crcs+i); break;
case CRC_CCITT_FM:fixup_crc_ccitt_fm(buffer, crcs+i); break;
case CRC_MACHEAD: fixup_crc_machead(buffer, crcs+i); break;
+ case CRC_FCS: fixup_crc_fcs(buffer, crcs+i); break;
}
if(crcs[i].fixup_mfm_clock) {
int offset = crcs[i].write + crc_cells_size(crcs[i].type);
@@ -1367,6 +1388,11 @@ void floppy_image_format_t::generate_track(const desc_e *desc, int track, int he
gcr5_w(buffer, offset, 8, desc[index].p1);
break;
+ case _8N1:
+ for(int i=0; i<desc[index].p2; i++)
+ _8n1_w(buffer, offset, 8, desc[index].p1);
+ break;
+
case RAW:
for(int i=0; i<desc[index].p2; i++)
raw_w(buffer, offset, 16, desc[index].p1);
@@ -1393,6 +1419,10 @@ void floppy_image_format_t::generate_track(const desc_e *desc, int track, int he
raw_w(buffer, offset, 8, gcr6fw_tb[track & 0x3f]);
break;
+ case TRACK_ID_8N1:
+ _8n1_w(buffer, offset, 8, track);
+ break;
+
case HEAD_ID:
mfm_w(buffer, offset, 8, head);
break;
@@ -1425,6 +1455,10 @@ void floppy_image_format_t::generate_track(const desc_e *desc, int track, int he
raw_w(buffer, offset, 8, gcr6fw_tb[sect[sector_idx].sector_id]);
break;
+ case SECTOR_ID_8N1:
+ _8n1_w(buffer, offset, 8, sect[sector_idx].sector_id);
+ break;
+
case SIZE_ID: {
int size = sect[sector_idx].size;
int id;
@@ -1497,6 +1531,7 @@ void floppy_image_format_t::generate_track(const desc_e *desc, int track, int he
case CRC_CCITT_START:
case CRC_CCITT_FM_START:
case CRC_MACHEAD_START:
+ case CRC_FCS_START:
crcs[desc[index].p1].start = offset;
break;
@@ -1572,6 +1607,13 @@ void floppy_image_format_t::generate_track(const desc_e *desc, int track, int he
break;
}
+ case SECTOR_DATA_8N1: {
+ const desc_s *csect = sect + (desc[index].p1 >= 0 ? desc[index].p1 : sector_idx);
+ for(int i=0; i != csect->size; i++)
+ _8n1_w(buffer, offset, 8, csect->data[i]);
+ break;
+ }
+
default:
printf("%d.%d.%d (%d) unhandled\n", desc[index].type, desc[index].p1, desc[index].p2, index);
break;