mirror of
https://github.com/holub/mame
synced 2025-04-22 16:31:49 +03:00
Added FM encoding support to upd765_dsk. [Curt Coder]
(MESS) bw2: Fixed floppy loading. [Curt Coder]
This commit is contained in:
parent
732a6d11f5
commit
e29bf515c4
@ -385,7 +385,7 @@ WRITE8_MEMBER(upd765_family_device::fifo_w)
|
||||
if(cmd == C_INVALID) {
|
||||
logerror("%s: Invalid on %02x\n", tag(), command[0]);
|
||||
main_phase = PHASE_RESULT;
|
||||
result[0] = 0x80;
|
||||
result[0] = ST0_UNK;
|
||||
result_pos = 1;
|
||||
return;
|
||||
}
|
||||
|
@ -1383,7 +1383,7 @@ void wd_fdc_t::live_run(attotime limit)
|
||||
cur_live.state = READ_HEADER_BLOCK_HEADER;
|
||||
}
|
||||
|
||||
if(dden && (cur_live.shift_reg == 0xf57e || cur_live.shift_reg == 0xf57e)) {
|
||||
if(dden && (cur_live.shift_reg == 0xf57e || cur_live.shift_reg == 0xf57f)) {
|
||||
cur_live.crc = cur_live.shift_reg == 0xf57e ? 0xef21 : 0xff00;
|
||||
cur_live.data_separator_phase = false;
|
||||
cur_live.bit_counter = 0;
|
||||
@ -1860,8 +1860,7 @@ void wd_fdc_t::live_run(attotime limit)
|
||||
cur_live.byte_counter = 0;
|
||||
cur_live.data_bit_context = cur_live.data_reg & 1;
|
||||
pll_start_writing(cur_live.tm);
|
||||
if(dden)
|
||||
live_write_fm(0x00);
|
||||
live_write_fm(0x00);
|
||||
}
|
||||
break;
|
||||
|
||||
@ -1971,7 +1970,7 @@ const int wd_fdc_digital_t::wd_digital_step_times[4] = { 12000, 24000, 40000, 60
|
||||
void wd_fdc_digital_t::pll_reset(bool fm, attotime when)
|
||||
{
|
||||
cur_pll.reset(when);
|
||||
cur_pll.set_clock(clocks_to_attotime(1));
|
||||
cur_pll.set_clock(clocks_to_attotime(fm ? 2 : 1)); // HACK
|
||||
}
|
||||
|
||||
void wd_fdc_digital_t::pll_start_writing(attotime tm)
|
||||
|
@ -64,7 +64,7 @@ const char *a5105_format::extensions() const
|
||||
// Unverified gap sizes
|
||||
const a5105_format::format a5105_format::formats[] = {
|
||||
{
|
||||
floppy_image::FF_525, floppy_image::DSQD,
|
||||
floppy_image::FF_525, floppy_image::DSQD, floppy_image::MFM,
|
||||
2000, // 2us, 300rpm
|
||||
5, 80, 2,
|
||||
1024, {},
|
||||
|
@ -64,7 +64,7 @@ const char *apollo_format::extensions() const
|
||||
// Unverified gap sizes
|
||||
const apollo_format::format apollo_format::formats[] = {
|
||||
{
|
||||
floppy_image::FF_525, floppy_image::DSHD,
|
||||
floppy_image::FF_525, floppy_image::DSHD, floppy_image::MFM,
|
||||
1200, // 1us, 360rpm
|
||||
8, 77, 2,
|
||||
1024, {},
|
||||
|
@ -64,7 +64,7 @@ const char *bw12_format::extensions() const
|
||||
// Unverified gap sizes
|
||||
const bw12_format::format bw12_format::formats[] = {
|
||||
{ // 180KB BW 12
|
||||
floppy_image::FF_525, floppy_image::SSDD,
|
||||
floppy_image::FF_525, floppy_image::SSDD, floppy_image::MFM,
|
||||
2000, // 2us, 300rpm
|
||||
18, 40, 1,
|
||||
256, {},
|
||||
@ -72,7 +72,7 @@ const bw12_format::format bw12_format::formats[] = {
|
||||
80, 50, 22, 80
|
||||
},
|
||||
{ // 360KB BW 12
|
||||
floppy_image::FF_525, floppy_image::DSDD,
|
||||
floppy_image::FF_525, floppy_image::DSDD, floppy_image::MFM,
|
||||
2000, // 2us, 300rpm
|
||||
18, 40, 2,
|
||||
256, {},
|
||||
@ -80,7 +80,7 @@ const bw12_format::format bw12_format::formats[] = {
|
||||
80, 50, 22, 80
|
||||
},
|
||||
{ // SVI-328
|
||||
floppy_image::FF_525, floppy_image::SSDD,
|
||||
floppy_image::FF_525, floppy_image::SSDD, floppy_image::MFM,
|
||||
2000, // 2us, 300rpm
|
||||
17, 40, 1,
|
||||
256, {},
|
||||
@ -88,7 +88,7 @@ const bw12_format::format bw12_format::formats[] = {
|
||||
80, 50, 22, 80
|
||||
},
|
||||
{ // SVI-328
|
||||
floppy_image::FF_525, floppy_image::DSDD,
|
||||
floppy_image::FF_525, floppy_image::DSDD, floppy_image::MFM,
|
||||
2000, // 2us, 300rpm
|
||||
17, 40, 2,
|
||||
256, {},
|
||||
@ -96,7 +96,7 @@ const bw12_format::format bw12_format::formats[] = {
|
||||
80, 50, 22, 80
|
||||
},
|
||||
{ // Kaypro II
|
||||
floppy_image::FF_525, floppy_image::SSDD,
|
||||
floppy_image::FF_525, floppy_image::SSDD, floppy_image::MFM,
|
||||
2000, // 2us, 300rpm
|
||||
10, 40, 1,
|
||||
512, {},
|
||||
|
@ -63,11 +63,11 @@ const char *bw2_format::extensions() const
|
||||
|
||||
const bw2_format::format bw2_format::formats[] = {
|
||||
{ // 340K 3 1/2 inch double density
|
||||
floppy_image::FF_35, floppy_image::SSDD,
|
||||
floppy_image::FF_35, floppy_image::SSDD, floppy_image::MFM,
|
||||
2000, 17, 80, 1, 256, {}, 0, {}, 80, 20, 22, 14
|
||||
},
|
||||
{ // 360K 3 1/2 inch double density
|
||||
floppy_image::FF_35, floppy_image::SSDD,
|
||||
floppy_image::FF_35, floppy_image::SSDD, floppy_image::MFM,
|
||||
2000, 18, 80, 1, 256, {}, 0, {}, 80, 20, 22, 14
|
||||
},
|
||||
{}
|
||||
|
@ -64,7 +64,7 @@ const char *iq151_format::extensions() const
|
||||
// Unverified gap sizes. May be FM.
|
||||
const iq151_format::format iq151_format::formats[] = {
|
||||
{
|
||||
floppy_image::FF_8, floppy_image::SSSD,
|
||||
floppy_image::FF_8, floppy_image::SSSD, floppy_image::MFM,
|
||||
2000, // maybe
|
||||
26, 77, 1,
|
||||
128, {},
|
||||
|
@ -65,7 +65,7 @@ const char *kc85_format::extensions() const
|
||||
// 640-800K on HD which handles 1.2M, really?
|
||||
const kc85_format::format kc85_format::formats[] = {
|
||||
{
|
||||
floppy_image::FF_525, floppy_image::DSHD,
|
||||
floppy_image::FF_525, floppy_image::DSHD, floppy_image::MFM,
|
||||
1200, // 1us, 360rpm
|
||||
5, 80, 2,
|
||||
1024, {},
|
||||
@ -73,7 +73,7 @@ const kc85_format::format kc85_format::formats[] = {
|
||||
80, 50, 22, 80
|
||||
},
|
||||
{
|
||||
floppy_image::FF_525, floppy_image::DSHD,
|
||||
floppy_image::FF_525, floppy_image::DSHD, floppy_image::MFM,
|
||||
1200, // 1us, 360rpm
|
||||
9, 80, 2,
|
||||
512, {},
|
||||
@ -81,7 +81,7 @@ const kc85_format::format kc85_format::formats[] = {
|
||||
80, 50, 22, 80
|
||||
},
|
||||
{
|
||||
floppy_image::FF_525, floppy_image::DSHD,
|
||||
floppy_image::FF_525, floppy_image::DSHD, floppy_image::MFM,
|
||||
1200, // 1us, 360rpm
|
||||
16, 80, 2,
|
||||
256, {},
|
||||
|
@ -64,7 +64,7 @@ const char *m5_format::extensions() const
|
||||
// Unverified gap sizes
|
||||
const m5_format::format m5_format::formats[] = {
|
||||
{
|
||||
floppy_image::FF_525, floppy_image::DSDD,
|
||||
floppy_image::FF_525, floppy_image::DSDD, floppy_image::MFM,
|
||||
2000, // 2us, 300rpm
|
||||
18, 40, 2,
|
||||
256, {},
|
||||
|
@ -83,7 +83,7 @@ const char *mm2_format::extensions() const
|
||||
// Unverified gap sizes
|
||||
const mm1_format::format mm1_format::formats[] = {
|
||||
{
|
||||
floppy_image::FF_525, floppy_image::DSQD,
|
||||
floppy_image::FF_525, floppy_image::DSQD, floppy_image::MFM,
|
||||
2000, // 2us, 300rpm
|
||||
8, 80, 2,
|
||||
512, {},
|
||||
@ -96,7 +96,7 @@ const mm1_format::format mm1_format::formats[] = {
|
||||
// Unverified gap sizes
|
||||
const mm2_format::format mm2_format::formats[] = {
|
||||
{
|
||||
floppy_image::FF_525, floppy_image::DSDD,
|
||||
floppy_image::FF_525, floppy_image::DSDD, floppy_image::MFM,
|
||||
2000, // 2us, 300rpm
|
||||
9, 40, 2,
|
||||
512, {},
|
||||
@ -106,7 +106,7 @@ const mm2_format::format mm2_format::formats[] = {
|
||||
// 40 tracks but 18 sectors implying HD density at 300rpm, i.e. on
|
||||
// 3.5" media? That makes no sense
|
||||
{
|
||||
floppy_image::FF_525, floppy_image::DSHD,
|
||||
floppy_image::FF_525, floppy_image::DSHD, floppy_image::MFM,
|
||||
1000, // 1us, 300rpm, otherwise it just won't fit
|
||||
18, 40, 2, // That line is just nonsense
|
||||
512, {},
|
||||
|
@ -65,7 +65,7 @@ const char *nanos_format::extensions() const
|
||||
// 800K on HD which handles 1.2M, really?
|
||||
const nanos_format::format nanos_format::formats[] = {
|
||||
{
|
||||
floppy_image::FF_525, floppy_image::DSHD,
|
||||
floppy_image::FF_525, floppy_image::DSHD, floppy_image::MFM,
|
||||
1200, // 1us, 360rpm
|
||||
5, 80, 2,
|
||||
1024, {},
|
||||
|
@ -158,47 +158,47 @@ const char *pc_format::extensions() const
|
||||
|
||||
const pc_format::format pc_format::formats[] = {
|
||||
{ /* 160K 5 1/4 inch double density single sided */
|
||||
floppy_image::FF_525, floppy_image::SSDD,
|
||||
floppy_image::FF_525, floppy_image::SSDD, floppy_image::MFM,
|
||||
2000, 8, 40, 1, 512, {}, 1, {}, 80, 50, 22, 80
|
||||
},
|
||||
{ /* 320K 5 1/4 inch double density */
|
||||
floppy_image::FF_525, floppy_image::DSDD,
|
||||
floppy_image::FF_525, floppy_image::DSDD, floppy_image::MFM,
|
||||
2000, 8, 40, 2, 512, {}, 1, {}, 80, 50, 22, 80
|
||||
},
|
||||
{ /* 180K 5 1/4 inch double density single sided */
|
||||
floppy_image::FF_525, floppy_image::SSDD,
|
||||
floppy_image::FF_525, floppy_image::SSDD, floppy_image::MFM,
|
||||
2000, 9, 40, 1, 512, {}, 1, {}, 80, 50, 22, 80
|
||||
},
|
||||
{ /* 360K 5 1/4 inch double density */
|
||||
floppy_image::FF_525, floppy_image::DSDD,
|
||||
floppy_image::FF_525, floppy_image::DSDD, floppy_image::MFM,
|
||||
2000, 9, 40, 2, 512, {}, 1, {}, 80, 50, 22, 80
|
||||
},
|
||||
{ /* 400K 5 1/4 inch double density - gaps unverified */
|
||||
floppy_image::FF_525, floppy_image::DSDD,
|
||||
floppy_image::FF_525, floppy_image::DSDD, floppy_image::MFM,
|
||||
2000, 10, 40, 2, 512, {}, 1, {}, 80, 50, 22, 80
|
||||
},
|
||||
{ /* 720K 5 1/4 inch quad density - gaps unverified */
|
||||
floppy_image::FF_525, floppy_image::DSQD,
|
||||
floppy_image::FF_525, floppy_image::DSQD, floppy_image::MFM,
|
||||
2000, 9, 80, 2, 512, {}, 1, {}, 80, 50, 22, 80
|
||||
},
|
||||
{ /* 1200K 5 1/4 inch high density */
|
||||
floppy_image::FF_525, floppy_image::DSHD,
|
||||
floppy_image::FF_525, floppy_image::DSHD, floppy_image::MFM,
|
||||
1200, 15, 40, 2, 512, {}, 1, {}, 80, 50, 22, 84
|
||||
},
|
||||
{ /* 720K 3 1/2 inch double density */
|
||||
floppy_image::FF_35, floppy_image::DSDD,
|
||||
floppy_image::FF_35, floppy_image::DSDD, floppy_image::MFM,
|
||||
2000, 9, 80, 2, 512, {}, 1, {}, 80, 50, 22, 80
|
||||
},
|
||||
{ /* 1200K 3 1/2 inch high density (japanese variant) - gaps unverified */
|
||||
floppy_image::FF_35, floppy_image::DSHD,
|
||||
floppy_image::FF_35, floppy_image::DSHD, floppy_image::MFM,
|
||||
1200, 15, 40, 2, 512, {}, 1, {}, 80, 50, 22, 84
|
||||
},
|
||||
{ /* 1440K 3 1/2 inch high density */
|
||||
floppy_image::FF_35, floppy_image::DSHD,
|
||||
floppy_image::FF_35, floppy_image::DSHD, floppy_image::MFM,
|
||||
1000, 18, 80, 2, 512, {}, 1, {}, 80, 50, 22, 108
|
||||
},
|
||||
{ /* 2880K 3 1/2 inch extended density - gaps unverified */
|
||||
floppy_image::FF_35, floppy_image::DSED,
|
||||
floppy_image::FF_35, floppy_image::DSED, floppy_image::MFM,
|
||||
500, 36, 80, 2, 512, {}, 1, {}, 80, 50, 41, 80
|
||||
},
|
||||
{}
|
||||
|
@ -65,7 +65,7 @@ const char *pyldin_format::extensions() const
|
||||
// 720K on HD which handles 1.2M, really?
|
||||
const pyldin_format::format pyldin_format::formats[] = {
|
||||
{
|
||||
floppy_image::FF_525, floppy_image::DSHD,
|
||||
floppy_image::FF_525, floppy_image::DSHD, floppy_image::MFM,
|
||||
1200, // 1us, 360rpm
|
||||
9, 80, 2,
|
||||
512, {},
|
||||
|
@ -64,7 +64,7 @@ const char *sf7000_format::extensions() const
|
||||
const sf7000_format::format sf7000_format::formats[] = {
|
||||
{
|
||||
// mfm h=00 n=01 sc=10 gpl=2a d=ff
|
||||
floppy_image::FF_3, floppy_image::SSDD,
|
||||
floppy_image::FF_3, floppy_image::SSDD, floppy_image::MFM,
|
||||
2000, // 2us, 300rpm
|
||||
16, 40, 1,
|
||||
256, {},
|
||||
|
@ -106,15 +106,54 @@ void upd765_format::build_sector_description(const format &f, UINT8 *sectdata, d
|
||||
}
|
||||
}
|
||||
|
||||
bool upd765_format::load(io_generic *io, UINT32 form_factor, floppy_image *image)
|
||||
floppy_image_format_t::desc_e* upd765_format::get_desc_fm(const format &f, int ¤t_size, int &end_gap_index)
|
||||
{
|
||||
int type = find_size(io, form_factor);
|
||||
if(type == -1)
|
||||
return false;
|
||||
static floppy_image_format_t::desc_e desc[29] = {
|
||||
/* 00 */ { FM, 0xff, f.gap_4a },
|
||||
/* 01 */ { FM, 0x00, 6 },
|
||||
/* 02 */ { RAW, 0xf77a, 1 },
|
||||
/* 03 */ { FM, 0xff, f.gap_1 },
|
||||
/* 04 */ { SECTOR_LOOP_START, 0, f.sector_count-1 },
|
||||
/* 05 */ { FM, 0x00, 12 },
|
||||
/* 06 */ { CRC_CCITT_FM_START, 1 },
|
||||
/* 07 */ { RAW, 0xf57e, 1 },
|
||||
/* 08 */ { TRACK_ID_FM },
|
||||
/* 09 */ { HEAD_ID_FM },
|
||||
/* 10 */ { SECTOR_ID_FM },
|
||||
/* 11 */ { SIZE_ID_FM },
|
||||
/* 12 */ { CRC_END, 1 },
|
||||
/* 13 */ { CRC, 1 },
|
||||
/* 14 */ { FM, 0xff, f.gap_2 },
|
||||
/* 15 */ { FM, 0x00, 6 },
|
||||
/* 16 */ { CRC_CCITT_FM_START, 2 },
|
||||
/* 17 */ { RAW, 0xf56f, 1 },
|
||||
/* 18 */ { SECTOR_DATA_FM, -1 },
|
||||
/* 19 */ { CRC_END, 2 },
|
||||
/* 20 */ { CRC, 2 },
|
||||
/* 21 */ { FM, 0xff, f.gap_3 },
|
||||
/* 22 */ { SECTOR_LOOP_END },
|
||||
/* 23 */ { FM, 0xff, 0 },
|
||||
/* 24 */ { RAWBITS, 0xffff, 0 },
|
||||
/* 25 */ { END }
|
||||
};
|
||||
|
||||
const format &f = formats[type];
|
||||
current_size = (f.gap_4a+6+1+f.gap_1)*16;
|
||||
if(f.sector_base_size)
|
||||
current_size += f.sector_base_size * f.sector_count * 16;
|
||||
else {
|
||||
for(int j=0; j != f.sector_count; j++)
|
||||
current_size += f.per_sector_size[j] * 16;
|
||||
}
|
||||
current_size += (12+1+4+2+f.gap_2+6+1+2+f.gap_3) * f.sector_count * 16;
|
||||
|
||||
floppy_image_format_t::desc_e desc[] = {
|
||||
end_gap_index = 23;
|
||||
|
||||
return desc;
|
||||
}
|
||||
|
||||
floppy_image_format_t::desc_e* upd765_format::get_desc_mfm(const format &f, int ¤t_size, int &end_gap_index)
|
||||
{
|
||||
static floppy_image_format_t::desc_e desc[29] = {
|
||||
/* 00 */ { MFM, 0x4e, f.gap_4a },
|
||||
/* 01 */ { MFM, 0x00, 12 },
|
||||
/* 02 */ { RAW, 0x5224, 3 },
|
||||
@ -146,7 +185,7 @@ bool upd765_format::load(io_generic *io, UINT32 form_factor, floppy_image *image
|
||||
/* 28 */ { END }
|
||||
};
|
||||
|
||||
int current_size = (f.gap_4a+12+3+1+f.gap_1)*16;
|
||||
current_size = (f.gap_4a+12+3+1+f.gap_1)*16;
|
||||
if(f.sector_base_size)
|
||||
current_size += f.sector_base_size * f.sector_count * 16;
|
||||
else {
|
||||
@ -155,15 +194,42 @@ bool upd765_format::load(io_generic *io, UINT32 form_factor, floppy_image *image
|
||||
}
|
||||
current_size += (12+3+1+4+2+f.gap_2+12+3+1+2+f.gap_3) * f.sector_count * 16;
|
||||
|
||||
end_gap_index = 26;
|
||||
|
||||
return desc;
|
||||
}
|
||||
|
||||
bool upd765_format::load(io_generic *io, UINT32 form_factor, floppy_image *image)
|
||||
{
|
||||
int type = find_size(io, form_factor);
|
||||
if(type == -1)
|
||||
return false;
|
||||
|
||||
const format &f = formats[type];
|
||||
floppy_image_format_t::desc_e *desc;
|
||||
int current_size;
|
||||
int end_gap_index;
|
||||
|
||||
switch (f.encoding)
|
||||
{
|
||||
case floppy_image::FM:
|
||||
desc = get_desc_fm(f, current_size, end_gap_index);
|
||||
break;
|
||||
case floppy_image::MFM:
|
||||
default:
|
||||
desc = get_desc_mfm(f, current_size, end_gap_index);
|
||||
break;
|
||||
}
|
||||
|
||||
int total_size = 200000000/f.cell_size;
|
||||
int remaining_size = total_size - current_size;
|
||||
if(remaining_size < 0)
|
||||
throw emu_fatalerror("upd765_format: Incorrect track layout, max_size=%d, current_size=%d", total_size, current_size);
|
||||
|
||||
// Fixup the end gap
|
||||
desc[26].p2 = remaining_size / 16;
|
||||
desc[27].p2 = remaining_size & 15;
|
||||
desc[27].p1 >>= 16-(remaining_size & 15);
|
||||
desc[end_gap_index].p2 = remaining_size / 16;
|
||||
desc[end_gap_index + 1].p2 = remaining_size & 15;
|
||||
desc[end_gap_index + 1].p1 >>= 16-(remaining_size & 15);
|
||||
|
||||
int track_size = compute_track_size(f);
|
||||
|
||||
@ -312,7 +378,16 @@ void upd765_format::check_compatibility(floppy_image *image, int *candidates, in
|
||||
|
||||
// Extract the sectors
|
||||
generate_bitstream_from_track(0, 0, formats[candidates[0]].cell_size, bitstream, track_size, image);
|
||||
extract_sectors_from_bitstream_mfm_pc(bitstream, track_size, sectors, sectdata, sizeof(sectdata));
|
||||
|
||||
switch (formats[candidates[0]].encoding)
|
||||
{
|
||||
case floppy_image::FM:
|
||||
extract_sectors_from_bitstream_fm_pc(bitstream, track_size, sectors, sectdata, sizeof(sectdata));
|
||||
break;
|
||||
case floppy_image::MFM:
|
||||
extract_sectors_from_bitstream_mfm_pc(bitstream, track_size, sectors, sectdata, sizeof(sectdata));
|
||||
break;
|
||||
}
|
||||
|
||||
// Check compatibility with every candidate, copy in-place
|
||||
int *ok_cands = candidates;
|
||||
@ -357,7 +432,16 @@ void upd765_format::extract_sectors(floppy_image *image, const format &f, desc_s
|
||||
|
||||
// Extract the sectors
|
||||
generate_bitstream_from_track(track, head, f.cell_size, bitstream, track_size, image);
|
||||
extract_sectors_from_bitstream_mfm_pc(bitstream, track_size, sectors, sectdata, sizeof(sectdata));
|
||||
|
||||
switch (f.encoding)
|
||||
{
|
||||
case floppy_image::FM:
|
||||
extract_sectors_from_bitstream_fm_pc(bitstream, track_size, sectors, sectdata, sizeof(sectdata));
|
||||
break;
|
||||
case floppy_image::MFM:
|
||||
extract_sectors_from_bitstream_mfm_pc(bitstream, track_size, sectors, sectdata, sizeof(sectdata));
|
||||
break;
|
||||
}
|
||||
|
||||
for(int i=0; i<f.sector_count; i++) {
|
||||
desc_s &ds = sdesc[i];
|
||||
|
@ -17,6 +17,7 @@ public:
|
||||
struct format {
|
||||
UINT32 form_factor; // See floppy_image for possible values
|
||||
UINT32 variant; // See floppy_image for possible values
|
||||
UINT32 encoding; // See floppy_image for possible values
|
||||
|
||||
int cell_size; // See floppy_image_format_t for details
|
||||
int sector_count;
|
||||
@ -42,6 +43,8 @@ public:
|
||||
|
||||
private:
|
||||
const format *formats;
|
||||
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, int &end_gap_index);
|
||||
int find_size(io_generic *io, UINT32 form_factor);
|
||||
int compute_track_size(const format &f) const;
|
||||
void build_sector_description(const format &d, UINT8 *sectdata, desc_s *sectors) const;
|
||||
|
@ -64,7 +64,7 @@ const char *xdf_format::extensions() const
|
||||
// Unverified gap sizes
|
||||
const xdf_format::format xdf_format::formats[] = {
|
||||
{
|
||||
floppy_image::FF_525, floppy_image::DSHD,
|
||||
floppy_image::FF_525, floppy_image::DSHD, floppy_image::MFM,
|
||||
1200, // 1us, 360rpm
|
||||
8, 77, 2,
|
||||
1024, {},
|
||||
|
@ -29,7 +29,7 @@
|
||||
|
||||
TODO:
|
||||
|
||||
- Osborne 1 DD disk format
|
||||
- floppy is broken
|
||||
- floppy motor off timer
|
||||
|
||||
*/
|
||||
@ -95,7 +95,8 @@ void bw12_state::set_floppy_motor_off_timer()
|
||||
|
||||
*/
|
||||
|
||||
m_floppy_timer->adjust(attotime::zero);
|
||||
//m_floppy_timer->adjust(attotime::zero);
|
||||
floppy_motor_off();
|
||||
}
|
||||
}
|
||||
|
||||
@ -384,13 +385,6 @@ void bw12_state::video_start()
|
||||
m_char_rom = memregion("chargen")->base();
|
||||
}
|
||||
|
||||
/* UPD765 Interface */
|
||||
|
||||
void bw12_state::fdc_intrq_w(bool state)
|
||||
{
|
||||
m_fdc_int = state;
|
||||
}
|
||||
|
||||
/* PIA6821 Interface */
|
||||
|
||||
READ8_MEMBER( bw12_state::pia_pa_r )
|
||||
@ -419,7 +413,7 @@ READ8_MEMBER( bw12_state::pia_pa_r )
|
||||
data |= (m_pit_out2 << 4);
|
||||
data |= (m_key_stb << 5);
|
||||
data |= (m_key_sin << 6);
|
||||
data |= (m_fdc_int << 7);
|
||||
data |= (m_fdc->get_irq() ? 1 : 0) << 7;
|
||||
|
||||
return data;
|
||||
}
|
||||
@ -595,7 +589,6 @@ void bw12_state::machine_start()
|
||||
save_item(NAME(m_key_sin));
|
||||
save_item(NAME(m_key_stb));
|
||||
save_item(NAME(m_key_shift));
|
||||
save_item(NAME(m_fdc_int));
|
||||
save_item(NAME(m_motor_on));
|
||||
save_item(NAME(m_motor0));
|
||||
save_item(NAME(m_motor1));
|
||||
@ -719,5 +712,5 @@ ROM_END
|
||||
/* System Drivers */
|
||||
|
||||
/* YEAR NAME PARENT COMPAT MACHINE INPUT INIT COMPANY FULLNAME FLAGS */
|
||||
COMP( 1984, bw12, 0, 0, bw12, bw12, driver_device, 0, "Bondwell Holding", "Bondwell 12", GAME_SUPPORTS_SAVE )
|
||||
COMP( 1984, bw14, bw12, 0, bw14, bw12, driver_device, 0, "Bondwell Holding", "Bondwell 14", GAME_SUPPORTS_SAVE )
|
||||
COMP( 1984, bw12, 0, 0, bw12, bw12, driver_device, 0, "Bondwell Holding", "Bondwell 12", GAME_NOT_WORKING | GAME_SUPPORTS_SAVE )
|
||||
COMP( 1984, bw14, bw12, 0, bw14, bw12, driver_device, 0, "Bondwell Holding", "Bondwell 14", GAME_NOT_WORKING | GAME_SUPPORTS_SAVE )
|
||||
|
@ -649,7 +649,7 @@ static MACHINE_CONFIG_START( bw2, bw2_state )
|
||||
MCFG_MSM6255_ADD(MSM6255_TAG, XTAL_16MHz, 0, SCREEN_TAG, lcdc_map)
|
||||
MCFG_CENTRONICS_PRINTER_ADD(CENTRONICS_TAG, standard_centronics)
|
||||
MCFG_I8251_ADD(I8251_TAG, default_i8251_interface)
|
||||
MCFG_WD2797x_ADD(WD2797_TAG, XTAL_16MHz/8)
|
||||
MCFG_WD2797x_ADD(WD2797_TAG, XTAL_16MHz/16)
|
||||
MCFG_FLOPPY_DRIVE_ADD(WD2797_TAG":0", bw2_floppies, "35dd", NULL, bw2_state::floppy_formats)
|
||||
MCFG_FLOPPY_DRIVE_ADD(WD2797_TAG":1", bw2_floppies, NULL, NULL, bw2_state::floppy_formats)
|
||||
MCFG_BW2_EXPANSION_SLOT_ADD(BW2_EXPANSION_SLOT_TAG, XTAL_16MHz, bw2_expansion_cards, NULL, NULL)
|
||||
|
@ -74,7 +74,6 @@ public:
|
||||
|
||||
DECLARE_READ8_MEMBER( ls259_r );
|
||||
DECLARE_WRITE8_MEMBER( ls259_w );
|
||||
void fdc_intrq_w(bool state);
|
||||
DECLARE_READ8_MEMBER( pia_pa_r );
|
||||
DECLARE_READ_LINE_MEMBER( pia_cb1_r );
|
||||
DECLARE_WRITE_LINE_MEMBER( pia_cb2_w );
|
||||
@ -100,7 +99,6 @@ public:
|
||||
int m_key_shift;
|
||||
|
||||
/* floppy state */
|
||||
int m_fdc_int;
|
||||
int m_motor_on;
|
||||
int m_motor0;
|
||||
int m_motor1;
|
||||
|
@ -149,9 +149,6 @@ void comx_fd_device::device_start()
|
||||
// find memory regions
|
||||
m_rom = memregion("c000")->base();
|
||||
|
||||
// initialize floppy controller
|
||||
m_fdc->dden_w(1);
|
||||
|
||||
// state saving
|
||||
save_item(NAME(m_ds));
|
||||
save_item(NAME(m_q));
|
||||
@ -166,8 +163,9 @@ void comx_fd_device::device_start()
|
||||
|
||||
void comx_fd_device::device_reset()
|
||||
{
|
||||
m_fdc->set_floppy(NULL);
|
||||
m_fdc->reset();
|
||||
m_fdc->dden_w(1);
|
||||
m_fdc->set_floppy(NULL);
|
||||
|
||||
m_addr = 0;
|
||||
m_disb = 1;
|
||||
@ -214,7 +212,7 @@ UINT8 comx_fd_device::comx_mrd_r(address_space &space, offs_t offset, int *extro
|
||||
data = m_rom[offset & 0x1fff];
|
||||
*extrom = 0;
|
||||
}
|
||||
if (offset >= 0xc000 && offset < 0xe000)
|
||||
else if (offset >= 0xc000 && offset < 0xe000)
|
||||
{
|
||||
data = m_rom[offset & 0x1fff];
|
||||
}
|
||||
@ -236,12 +234,11 @@ UINT8 comx_fd_device::comx_io_r(address_space &space, offs_t offset)
|
||||
if (m_q)
|
||||
{
|
||||
data = 0xfe | (m_fdc->intrq_r() ? 1 : 0);
|
||||
//logerror("%s FDC intrq read %02x\n", machine().describe_context(), data);
|
||||
}
|
||||
else
|
||||
{
|
||||
data = m_fdc->gen_r(m_addr);
|
||||
logerror("%s FDC read %u:%02x\n", machine().describe_context(), m_addr,data);
|
||||
if (m_addr==3) logerror("%s FDC read %u:%02x\n", machine().describe_context(), m_addr,data);
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user