Previous 199869 Revisions Next

r37189 Wednesday 15th April, 2015 at 08:15:33 UTC by Olivier Galibert
Fix gcr5 conversion (nw)
[src/lib/formats]flopimg.c flopimg.h

trunk/src/lib/formats/flopimg.c
r245700r245701
12241224   }
12251225}
12261226
1227void floppy_image_format_t::gcr5_w(std::vector<UINT32> &buffer, int n, UINT32 val, UINT32 size)
1227void floppy_image_format_t::gcr5_w(std::vector<UINT32> &buffer, UINT8 val, UINT32 size)
12281228{
12291229   UINT32 e0 = gcr5fw_tb[val >> 4];
12301230   UINT32 e1 = gcr5fw_tb[val & 0x0f];
r245700r245701
12321232   raw_w(buffer, 5, e1, size);
12331233}
12341234
1235void floppy_image_format_t::gcr5_w(std::vector<UINT32> &buffer, int start_bit, int n, UINT32 val, UINT32 size)
1235void floppy_image_format_t::gcr5_w(std::vector<UINT32> &buffer, UINT8 val, UINT32 size, int offset)
12361236{
12371237   UINT32 e0 = gcr5fw_tb[val >> 4];
12381238   UINT32 e1 = gcr5fw_tb[val & 0x0f];
1239   raw_w(buffer, 5, e0, size, start_bit);
1240   raw_w(buffer, 5, e1, size, start_bit+5);
1239   raw_w(buffer, 5, e0, size, offset);
1240   raw_w(buffer, 5, e1, size, offset+5);
12411241}
12421242
12431243void floppy_image_format_t::_8n1_w(std::vector<UINT32> &buffer, int n, UINT32 val, UINT32 size)
r245700r245701
12681268      v = v ^ (gcr5bw_tb[bitn_r(buffer, o, 5)] << 4);
12691269      v = v ^ gcr5bw_tb[bitn_r(buffer, o+5, 5)];
12701270   }
1271   gcr5_w(buffer, 10, v, 1000, crc->write);
1271   gcr5_w(buffer, v, 1000, crc->write);
12721272}
12731273
12741274UINT16 floppy_image_format_t::calc_crc_ccitt(const std::vector<UINT32> &buffer, int start, int end)
r245700r245701
13131313   UINT8 v = 0;
13141314   for(int o = crc->start; o < crc->end; o+=10)
13151315      v += ((gcr5bw_tb[bitn_r(buffer, o, 5)] << 4) | gcr5bw_tb[bitn_r(buffer, o+5, 5)]);
1316   gcr5_w(buffer, 10, v, 1000, crc->write);
1316   gcr5_w(buffer, v, 1000, crc->write);
13171317}
13181318
13191319void floppy_image_format_t::fixup_crc_victor_data(std::vector<UINT32> &buffer, const gen_crc_info *crc)
r245700r245701
13211321   UINT16 v = 0;
13221322   for(int o = crc->start; o < crc->end; o+=10)
13231323      v += ((gcr5bw_tb[bitn_r(buffer, o, 5)] << 4) | gcr5bw_tb[bitn_r(buffer, o+5, 5)]);
1324   gcr5_w(buffer, 10, v & 0xff, 1000, crc->write);
1325   gcr5_w(buffer, 10, v >> 8, 1000, crc->write+10);
1324   gcr5_w(buffer, v & 0xff, 1000, crc->write);
1325   gcr5_w(buffer, v >> 8, 1000, crc->write+10);
13261326}
13271327
13281328void floppy_image_format_t::fixup_crcs(std::vector<UINT32> &buffer, gen_crc_info *crcs)
r245700r245701
14351435
14361436      case GCR5:
14371437         for(int i=0; i<desc[index].p2; i++)
1438            gcr5_w(buffer, 10, desc[index].p1);
1438            gcr5_w(buffer, desc[index].p1);
14391439         break;
14401440
14411441      case _8N1:
r245700r245701
14711471         break;
14721472
14731473      case TRACK_ID_DOS2_GCR5:
1474         gcr5_w(buffer, 10, 1 + (track >> 1) + (head * 35));
1474         gcr5_w(buffer, 1 + (track >> 1) + (head * 35));
14751475         break;
14761476
14771477      case TRACK_ID_DOS25_GCR5:
1478         gcr5_w(buffer, 10, 1 + track + (head * 77));
1478         gcr5_w(buffer, 1 + track + (head * 77));
14791479         break;
14801480
14811481      case TRACK_ID_GCR6:
r245700r245701
14871487         break;
14881488
14891489      case TRACK_ID_VICTOR_GCR5:
1490         gcr5_w(buffer, 10, track + (head * 0x80));
1490         gcr5_w(buffer, track + (head * 0x80));
14911491         break;
14921492
14931493      case HEAD_ID:
r245700r245701
15151515         break;
15161516
15171517      case SECTOR_ID_GCR5:
1518         gcr5_w(buffer, 10, sect[sector_idx].sector_id);
1518         gcr5_w(buffer, sect[sector_idx].sector_id);
15191519         break;
15201520
15211521      case SECTOR_ID_GCR6:
r245700r245701
16441644      case SECTOR_DATA_GCR5: {
16451645         const desc_s *csect = sect + (desc[index].p1 >= 0 ? desc[index].p1 : sector_idx);
16461646         for(int i=0; i != csect->size; i++)
1647            gcr5_w(buffer, 10, csect->data[i]);
1647            gcr5_w(buffer, csect->data[i]);
16481648         break;
16491649      }
16501650
trunk/src/lib/formats/flopimg.h
r245700r245701
558558   //! MFM-encode every two bits and write
559559   void mfm_half_w(std::vector<UINT32> &buffer, int start_bit, UINT32 val, UINT32 size = 1000);
560560   //! GCR5-encode and write a series of bits
561   void gcr5_w(std::vector<UINT32> &buffer, int n, UINT32 val, UINT32 size = 1000);
562   void gcr5_w(std::vector<UINT32> &buffer, int offset, int n, UINT32 val, UINT32 size = 1000);
561   void gcr5_w(std::vector<UINT32> &buffer, UINT8 val, UINT32 size = 1000);
562   void gcr5_w(std::vector<UINT32> &buffer, UINT8 val, UINT32 size, int offset);
563563   //! 8N1-encode and write a series of bits
564564   void _8n1_w(std::vector<UINT32> &buffer, int n, UINT32 val, UINT32 size = 1000);
565565   //! GCR4 encode (Apple II sector header)


Previous 199869 Revisions Next


© 1997-2024 The MAME Team