Previous 199869 Revisions Next

r20119 Monday 7th January, 2013 at 20:51:34 UTC by Curt Coder
flopimg: FM WIP (nw)
[src/lib/formats]flopimg.c wd177x_dsk.c wd177x_dsk.h
[src/mess/machine]comx_fd.c

trunk/src/lib/formats/wd177x_dsk.c
r20118r20119
106106   }
107107}
108108
109floppy_image_format_t::desc_e* wd177x_format::get_desc_fm(const format &f, int &current_size)
109floppy_image_format_t::desc_e* wd177x_format::get_desc_fm(const format &f, int &current_size, int &end_gap_index)
110110{
111   static floppy_image_format_t::desc_e desc[25] = {
111   static floppy_image_format_t::desc_e desc[23] = {
112112      /* 00 */ { FM, 0xff, f.gap_1 },
113113      /* 01 */ { SECTOR_LOOP_START, 0, f.sector_count-1 },
114114      /* 02 */ {   FM, 0x00, 6 },
115115      /* 03 */ {   CRC_CCITT_FM_START, 1 },
116      /* 04 */ {     RAW, 0x4489, 0 }, // TODO remove
117      /* 05 */ {     FM, 0xfe, 1 },
118      /* 06 */ {     TRACK_ID_FM },
119      /* 07 */ {     HEAD_ID_FM },
120      /* 08 */ {     SECTOR_ID_FM },
121      /* 09 */ {     SIZE_ID_FM },
122      /* 10 */ {   CRC_END, 1 },
123      /* 11 */ {   CRC, 1 },
124      /* 12 */ {   FM, 0xff, f.gap_2 },
125      /* 13 */ {   FM, 0x00, 6 },
126      /* 14 */ {   CRC_CCITT_FM_START, 2 },
127      /* 15 */ {     RAW, 0x4489, 0 }, // TODO remove
128      /* 16 */ {     FM, 0xfb, 1 },
129      /* 17 */ {     SECTOR_DATA_FM, -1 },
130      /* 18 */ {   CRC_END, 2 },
131      /* 19 */ {   CRC, 2 },
132      /* 20 */ {   FM, 0xff, f.gap_3 },
133      /* 21 */ { SECTOR_LOOP_END },
134      /* 22 */ { FM, 0x00, 0 },
135      /* 23 */ { RAWBITS, 0x9254, 0 },
136      /* 24 */ { END }
116      /* 04 */ {     FM, 0xfe, 1 },
117      /* 05 */ {     TRACK_ID_FM },
118      /* 06 */ {     HEAD_ID_FM },
119      /* 07 */ {     SECTOR_ID_FM },
120      /* 08 */ {     SIZE_ID_FM },
121      /* 09 */ {   CRC_END, 1 },
122      /* 10 */ {   CRC, 1 },
123      /* 11 */ {   FM, 0xff, f.gap_2 },
124      /* 12 */ {   FM, 0x00, 6 },
125      /* 13 */ {   CRC_CCITT_FM_START, 2 },
126      /* 14 */ {     FM, 0xfb, 1 },
127      /* 15 */ {     SECTOR_DATA_FM, -1 },
128      /* 16 */ {   CRC_END, 2 },
129      /* 17 */ {   CRC, 2 },
130      /* 18 */ {   FM, 0xff, f.gap_3 },
131      /* 19 */ { SECTOR_LOOP_END },
132      /* 20 */ { FM, 0x00, 0 },
133      /* 21 */ { RAWBITS, 0xffff, 0 },
134      /* 22 */ { END }
137135   };
138136
139137   current_size = f.gap_1*16;
r20118r20119
145143   }
146144   current_size += (6+1+4+2+f.gap_2+6+1+2+f.gap_3) * f.sector_count * 16;
147145
146   end_gap_index = 20;
147
148148   return desc;
149149}
150150
151floppy_image_format_t::desc_e* wd177x_format::get_desc_mfm(const format &f, int &current_size)
151floppy_image_format_t::desc_e* wd177x_format::get_desc_mfm(const format &f, int &current_size, int &end_gap_index)
152152{
153153   static floppy_image_format_t::desc_e desc[25] = {
154154      /* 00 */ { MFM, 0x4e, f.gap_1 },
r20118r20119
187187   }
188188   current_size += (12+3+1+4+2+f.gap_2+12+3+1+2+f.gap_3) * f.sector_count * 16;
189189
190   end_gap_index = 22;
191
190192   return desc;
191193}
192194
r20118r20119
199201   const format &f = formats[type];
200202   floppy_image_format_t::desc_e *desc;
201203   int current_size;
204   int end_gap_index;
202205
203206   switch (f.encoding)
204207   {
205208   case floppy_image::FM:
206      desc = get_desc_fm(f, current_size);
209      desc = get_desc_fm(f, current_size, end_gap_index);
207210      break;
208211   case floppy_image::MFM:
209212   default:
210      desc = get_desc_mfm(f, current_size);
213      desc = get_desc_mfm(f, current_size, end_gap_index);
211214      break;
212215   }
213216
r20118r20119
217220      throw emu_fatalerror("wd177x_format: Incorrect track layout, max_size=%d, current_size=%d", total_size, current_size);
218221
219222   // Fixup the end gap
220   desc[22].p2 = remaining_size / 16;
221   desc[23].p2 = remaining_size & 15;
222   desc[23].p1 >>= 16-(remaining_size & 15);
223   desc[end_gap_index].p2 = remaining_size / 16;
224   desc[end_gap_index + 1].p2 = remaining_size & 15;
225   desc[end_gap_index + 1].p1 >>= 16-(remaining_size & 15);
223226
224227   int track_size = compute_track_size(f);
225228
trunk/src/lib/formats/wd177x_dsk.h
r20118r20119
4242
4343protected:
4444   const format *formats;
45   floppy_image_format_t::desc_e* get_desc_fm(const format &f, int &current_size);
46   floppy_image_format_t::desc_e* get_desc_mfm(const format &f, int &current_size);
45   floppy_image_format_t::desc_e* get_desc_fm(const format &f, int &current_size, int &end_gap_index);
46   floppy_image_format_t::desc_e* get_desc_mfm(const format &f, int &current_size, int &end_gap_index);
4747   int find_size(io_generic *io, UINT32 form_factor);
4848   int compute_track_size(const format &f) const;
4949   void build_sector_description(const format &d, UINT8 *sectdata, desc_s *sectors) const;
trunk/src/lib/formats/flopimg.c
r20118r20119
12691269         switch(crcs[i].type) {
12701270         case CRC_AMIGA:   fixup_crc_amiga(buffer, crcs+i); break;
12711271         case CRC_CCITT:   fixup_crc_ccitt(buffer, crcs+i); break;
1272         case CRC_CCITT_FM:   fixup_crc_ccitt_fm(buffer, crcs+i); break;
1272         case CRC_CCITT_FM:fixup_crc_ccitt_fm(buffer, crcs+i); break;
12731273         case CRC_MACHEAD: fixup_crc_machead(buffer, crcs+i); break;
12741274         }
12751275         if(crcs[i].fixup_mfm_clock) {
trunk/src/mess/machine/comx_fd.c
r20118r20119
236236      if (m_q)
237237      {
238238         data = 0xfe | (m_fdc->intrq_r() ? 1 : 0);
239         logerror("%s FDC intrq read %02x\n", machine().describe_context(), data);
239         //logerror("%s FDC intrq read %02x\n", machine().describe_context(), data);
240240      }
241241      else
242242      {

Previous 199869 Revisions Next


© 1997-2024 The MAME Team