mirror of
https://github.com/holub/mame
synced 2025-04-24 01:11:11 +03:00
Encode certain tracks as single density in .d88 floppy format
* bml3mp1802, x1: Hook up DDEN control for FDC
This commit is contained in:
parent
ea47c29c49
commit
40b5608160
@ -91,7 +91,7 @@ void bml3bus_mp1802_device::bml3_mp1802_w(uint8_t data)
|
||||
floppy_image_device *floppy = m_floppy[data & 0x03]->get_device();
|
||||
|
||||
m_fdc->set_floppy(floppy);
|
||||
//m_fdc->dden_w(!BIT(data, 5)); // TODO: support FM tracks in d88_format
|
||||
m_fdc->dden_w(!BIT(data, 5));
|
||||
|
||||
if (floppy)
|
||||
{
|
||||
|
@ -500,6 +500,7 @@ bool d88_format::load(util::random_read &io, uint32_t form_factor, const std::ve
|
||||
uint8_t sect_data[65536];
|
||||
int sdatapos = 0;
|
||||
int sector_count = 1;
|
||||
uint8_t density = 0;
|
||||
for(int i=0; i<sector_count; i++) {
|
||||
|
||||
if (pos + 16 > file_size)
|
||||
@ -519,6 +520,8 @@ bool d88_format::load(util::random_read &io, uint32_t form_factor, const std::ve
|
||||
// Support broken vfman converter
|
||||
if(sector_count == 0x1000)
|
||||
sector_count = 0x10;
|
||||
|
||||
density = hs[6];
|
||||
}
|
||||
|
||||
sects[i].track = hs[0];
|
||||
@ -539,7 +542,10 @@ bool d88_format::load(util::random_read &io, uint32_t form_factor, const std::ve
|
||||
sects[i].data = nullptr;
|
||||
}
|
||||
|
||||
build_pc_track_mfm(track, head, image, cell_count, sector_count, sects, calc_default_pc_gap3_size(form_factor, sects[0].actual_size));
|
||||
if(density == 0x40)
|
||||
build_pc_track_fm(track, head, image, cell_count / 2, sector_count, sects, calc_default_pc_gap3_size(form_factor, sects[0].actual_size));
|
||||
else
|
||||
build_pc_track_mfm(track, head, image, cell_count, sector_count, sects, calc_default_pc_gap3_size(form_factor, sects[0].actual_size));
|
||||
}
|
||||
|
||||
return true;
|
||||
|
@ -730,16 +730,26 @@ uint8_t x1_state::x1_fdc_r(offs_t offset)
|
||||
case 0x0ffb:
|
||||
return m_fdc->data_r();
|
||||
case 0x0ffc:
|
||||
logerror("FDC: read FM type\n");
|
||||
if (!machine().side_effects_disabled())
|
||||
{
|
||||
logerror("FDC: read FM type\n");
|
||||
m_fdc->dden_w(1);
|
||||
}
|
||||
return 0xff;
|
||||
case 0x0ffd:
|
||||
logerror("FDC: read MFM type\n");
|
||||
if (!machine().side_effects_disabled())
|
||||
{
|
||||
logerror("FDC: read MFM type\n");
|
||||
m_fdc->dden_w(0);
|
||||
}
|
||||
return 0xff;
|
||||
case 0x0ffe:
|
||||
logerror("FDC: read 1.6M type\n");
|
||||
if (!machine().side_effects_disabled())
|
||||
logerror("FDC: read 1.6M type\n");
|
||||
return 0xff;
|
||||
case 0x0fff:
|
||||
logerror("FDC: switching between 500k/1M\n");
|
||||
if (!machine().side_effects_disabled())
|
||||
logerror("FDC: switching between 500k/1M\n");
|
||||
return 0xff;
|
||||
}
|
||||
|
||||
@ -2096,6 +2106,8 @@ MACHINE_RESET_MEMBER(x1_state,x1)
|
||||
|
||||
m_ram_bank = 0;
|
||||
// m_old_vpos = -1;
|
||||
|
||||
m_fdc->dden_w(0);
|
||||
}
|
||||
|
||||
MACHINE_RESET_MEMBER(x1_state,x1turbo)
|
||||
@ -2203,7 +2215,7 @@ void x1_state::x1(machine_config &config)
|
||||
|
||||
GFXDECODE(config, m_gfxdecode, m_palette, gfx_x1);
|
||||
|
||||
MB8877(config, m_fdc, MAIN_CLOCK / 16);
|
||||
MB8877(config, m_fdc, 16_MHz_XTAL / 16); // clocked by SED9421C0B
|
||||
// TODO: guesswork, try to implicitly start the motor
|
||||
m_fdc->hld_wr_callback().set(FUNC(x1_state::hdl_w));
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user