mirror of
https://github.com/holub/mame
synced 2025-05-01 04:06:58 +03:00
flopimg: FM WIP (nw)
This commit is contained in:
parent
15604c6fc1
commit
cc35a4ed7d
@ -106,34 +106,32 @@ void wd177x_format::build_sector_description(const format &f, UINT8 *sectdata, d
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
floppy_image_format_t::desc_e* wd177x_format::get_desc_fm(const format &f, int ¤t_size)
|
floppy_image_format_t::desc_e* wd177x_format::get_desc_fm(const format &f, int ¤t_size, int &end_gap_index)
|
||||||
{
|
{
|
||||||
static floppy_image_format_t::desc_e desc[25] = {
|
static floppy_image_format_t::desc_e desc[23] = {
|
||||||
/* 00 */ { FM, 0xff, f.gap_1 },
|
/* 00 */ { FM, 0xff, f.gap_1 },
|
||||||
/* 01 */ { SECTOR_LOOP_START, 0, f.sector_count-1 },
|
/* 01 */ { SECTOR_LOOP_START, 0, f.sector_count-1 },
|
||||||
/* 02 */ { FM, 0x00, 6 },
|
/* 02 */ { FM, 0x00, 6 },
|
||||||
/* 03 */ { CRC_CCITT_FM_START, 1 },
|
/* 03 */ { CRC_CCITT_FM_START, 1 },
|
||||||
/* 04 */ { RAW, 0x4489, 0 }, // TODO remove
|
/* 04 */ { FM, 0xfe, 1 },
|
||||||
/* 05 */ { FM, 0xfe, 1 },
|
/* 05 */ { TRACK_ID_FM },
|
||||||
/* 06 */ { TRACK_ID_FM },
|
/* 06 */ { HEAD_ID_FM },
|
||||||
/* 07 */ { HEAD_ID_FM },
|
/* 07 */ { SECTOR_ID_FM },
|
||||||
/* 08 */ { SECTOR_ID_FM },
|
/* 08 */ { SIZE_ID_FM },
|
||||||
/* 09 */ { SIZE_ID_FM },
|
/* 09 */ { CRC_END, 1 },
|
||||||
/* 10 */ { CRC_END, 1 },
|
/* 10 */ { CRC, 1 },
|
||||||
/* 11 */ { CRC, 1 },
|
/* 11 */ { FM, 0xff, f.gap_2 },
|
||||||
/* 12 */ { FM, 0xff, f.gap_2 },
|
/* 12 */ { FM, 0x00, 6 },
|
||||||
/* 13 */ { FM, 0x00, 6 },
|
/* 13 */ { CRC_CCITT_FM_START, 2 },
|
||||||
/* 14 */ { CRC_CCITT_FM_START, 2 },
|
/* 14 */ { FM, 0xfb, 1 },
|
||||||
/* 15 */ { RAW, 0x4489, 0 }, // TODO remove
|
/* 15 */ { SECTOR_DATA_FM, -1 },
|
||||||
/* 16 */ { FM, 0xfb, 1 },
|
/* 16 */ { CRC_END, 2 },
|
||||||
/* 17 */ { SECTOR_DATA_FM, -1 },
|
/* 17 */ { CRC, 2 },
|
||||||
/* 18 */ { CRC_END, 2 },
|
/* 18 */ { FM, 0xff, f.gap_3 },
|
||||||
/* 19 */ { CRC, 2 },
|
/* 19 */ { SECTOR_LOOP_END },
|
||||||
/* 20 */ { FM, 0xff, f.gap_3 },
|
/* 20 */ { FM, 0x00, 0 },
|
||||||
/* 21 */ { SECTOR_LOOP_END },
|
/* 21 */ { RAWBITS, 0xffff, 0 },
|
||||||
/* 22 */ { FM, 0x00, 0 },
|
/* 22 */ { END }
|
||||||
/* 23 */ { RAWBITS, 0x9254, 0 },
|
|
||||||
/* 24 */ { END }
|
|
||||||
};
|
};
|
||||||
|
|
||||||
current_size = f.gap_1*16;
|
current_size = f.gap_1*16;
|
||||||
@ -145,10 +143,12 @@ floppy_image_format_t::desc_e* wd177x_format::get_desc_fm(const format &f, int &
|
|||||||
}
|
}
|
||||||
current_size += (6+1+4+2+f.gap_2+6+1+2+f.gap_3) * f.sector_count * 16;
|
current_size += (6+1+4+2+f.gap_2+6+1+2+f.gap_3) * f.sector_count * 16;
|
||||||
|
|
||||||
|
end_gap_index = 20;
|
||||||
|
|
||||||
return desc;
|
return desc;
|
||||||
}
|
}
|
||||||
|
|
||||||
floppy_image_format_t::desc_e* wd177x_format::get_desc_mfm(const format &f, int ¤t_size)
|
floppy_image_format_t::desc_e* wd177x_format::get_desc_mfm(const format &f, int ¤t_size, int &end_gap_index)
|
||||||
{
|
{
|
||||||
static floppy_image_format_t::desc_e desc[25] = {
|
static floppy_image_format_t::desc_e desc[25] = {
|
||||||
/* 00 */ { MFM, 0x4e, f.gap_1 },
|
/* 00 */ { MFM, 0x4e, f.gap_1 },
|
||||||
@ -187,6 +187,8 @@ floppy_image_format_t::desc_e* wd177x_format::get_desc_mfm(const format &f, int
|
|||||||
}
|
}
|
||||||
current_size += (12+3+1+4+2+f.gap_2+12+3+1+2+f.gap_3) * f.sector_count * 16;
|
current_size += (12+3+1+4+2+f.gap_2+12+3+1+2+f.gap_3) * f.sector_count * 16;
|
||||||
|
|
||||||
|
end_gap_index = 22;
|
||||||
|
|
||||||
return desc;
|
return desc;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -199,15 +201,16 @@ bool wd177x_format::load(io_generic *io, UINT32 form_factor, floppy_image *image
|
|||||||
const format &f = formats[type];
|
const format &f = formats[type];
|
||||||
floppy_image_format_t::desc_e *desc;
|
floppy_image_format_t::desc_e *desc;
|
||||||
int current_size;
|
int current_size;
|
||||||
|
int end_gap_index;
|
||||||
|
|
||||||
switch (f.encoding)
|
switch (f.encoding)
|
||||||
{
|
{
|
||||||
case floppy_image::FM:
|
case floppy_image::FM:
|
||||||
desc = get_desc_fm(f, current_size);
|
desc = get_desc_fm(f, current_size, end_gap_index);
|
||||||
break;
|
break;
|
||||||
case floppy_image::MFM:
|
case floppy_image::MFM:
|
||||||
default:
|
default:
|
||||||
desc = get_desc_mfm(f, current_size);
|
desc = get_desc_mfm(f, current_size, end_gap_index);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -217,9 +220,9 @@ bool wd177x_format::load(io_generic *io, UINT32 form_factor, floppy_image *image
|
|||||||
throw emu_fatalerror("wd177x_format: Incorrect track layout, max_size=%d, current_size=%d", total_size, current_size);
|
throw emu_fatalerror("wd177x_format: Incorrect track layout, max_size=%d, current_size=%d", total_size, current_size);
|
||||||
|
|
||||||
// Fixup the end gap
|
// Fixup the end gap
|
||||||
desc[22].p2 = remaining_size / 16;
|
desc[end_gap_index].p2 = remaining_size / 16;
|
||||||
desc[23].p2 = remaining_size & 15;
|
desc[end_gap_index + 1].p2 = remaining_size & 15;
|
||||||
desc[23].p1 >>= 16-(remaining_size & 15);
|
desc[end_gap_index + 1].p1 >>= 16-(remaining_size & 15);
|
||||||
|
|
||||||
int track_size = compute_track_size(f);
|
int track_size = compute_track_size(f);
|
||||||
|
|
||||||
|
@ -42,8 +42,8 @@ public:
|
|||||||
|
|
||||||
protected:
|
protected:
|
||||||
const format *formats;
|
const format *formats;
|
||||||
floppy_image_format_t::desc_e* get_desc_fm(const format &f, int ¤t_size);
|
floppy_image_format_t::desc_e* get_desc_fm(const format &f, int ¤t_size, int &end_gap_index);
|
||||||
floppy_image_format_t::desc_e* get_desc_mfm(const format &f, int ¤t_size);
|
floppy_image_format_t::desc_e* get_desc_mfm(const format &f, int ¤t_size, int &end_gap_index);
|
||||||
int find_size(io_generic *io, UINT32 form_factor);
|
int find_size(io_generic *io, UINT32 form_factor);
|
||||||
int compute_track_size(const format &f) const;
|
int compute_track_size(const format &f) const;
|
||||||
void build_sector_description(const format &d, UINT8 *sectdata, desc_s *sectors) const;
|
void build_sector_description(const format &d, UINT8 *sectdata, desc_s *sectors) const;
|
||||||
|
@ -236,7 +236,7 @@ UINT8 comx_fd_device::comx_io_r(address_space &space, offs_t offset)
|
|||||||
if (m_q)
|
if (m_q)
|
||||||
{
|
{
|
||||||
data = 0xfe | (m_fdc->intrq_r() ? 1 : 0);
|
data = 0xfe | (m_fdc->intrq_r() ? 1 : 0);
|
||||||
logerror("%s FDC intrq read %02x\n", machine().describe_context(), data);
|
//logerror("%s FDC intrq read %02x\n", machine().describe_context(), data);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user