mirror of
https://github.com/holub/mame
synced 2025-05-17 03:10:43 +03:00
Added 8" DSSD floppy type, WD177x inverted bus, and fixed DSKCHG signal. (nw)
This commit is contained in:
parent
3a4f79ac36
commit
ab2c58ca71
@ -27,6 +27,7 @@ const device_type FLOPPY_525_DD = &device_creator<floppy_525_dd>;
|
|||||||
const device_type FLOPPY_525_QD = &device_creator<floppy_525_qd>;
|
const device_type FLOPPY_525_QD = &device_creator<floppy_525_qd>;
|
||||||
const device_type FLOPPY_525_HD = &device_creator<floppy_525_hd>;
|
const device_type FLOPPY_525_HD = &device_creator<floppy_525_hd>;
|
||||||
const device_type FLOPPY_8_SSSD = &device_creator<floppy_8_sssd>;
|
const device_type FLOPPY_8_SSSD = &device_creator<floppy_8_sssd>;
|
||||||
|
const device_type FLOPPY_8_DSSD = &device_creator<floppy_8_dssd>;
|
||||||
const device_type FLOPPY_8_SSDD = &device_creator<floppy_8_ssdd>;
|
const device_type FLOPPY_8_SSDD = &device_creator<floppy_8_ssdd>;
|
||||||
const device_type FLOPPY_8_DSDD = &device_creator<floppy_8_dsdd>;
|
const device_type FLOPPY_8_DSDD = &device_creator<floppy_8_dsdd>;
|
||||||
|
|
||||||
@ -201,7 +202,7 @@ void floppy_image_device::device_start()
|
|||||||
cyl = 0;
|
cyl = 0;
|
||||||
ss = 0;
|
ss = 0;
|
||||||
stp = 1;
|
stp = 1;
|
||||||
dskchg = 0;
|
dskchg = exists() ? 1 : 0;
|
||||||
index_timer = timer_alloc(0);
|
index_timer = timer_alloc(0);
|
||||||
image_dirty = false;
|
image_dirty = false;
|
||||||
}
|
}
|
||||||
@ -364,6 +365,7 @@ void floppy_image_device::index_resync()
|
|||||||
|
|
||||||
if(new_idx != idx) {
|
if(new_idx != idx) {
|
||||||
idx = new_idx;
|
idx = new_idx;
|
||||||
|
|
||||||
if (!cur_index_pulse_cb.isnull())
|
if (!cur_index_pulse_cb.isnull())
|
||||||
cur_index_pulse_cb(this, idx);
|
cur_index_pulse_cb(this, idx);
|
||||||
}
|
}
|
||||||
@ -1142,7 +1144,7 @@ void floppy_525_hd::handled_variants(UINT32 *variants, int &var_count) const
|
|||||||
}
|
}
|
||||||
|
|
||||||
floppy_8_sssd::floppy_8_sssd(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) :
|
floppy_8_sssd::floppy_8_sssd(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) :
|
||||||
floppy_image_device(mconfig, FLOPPY_8_SSSD, "8\" single density floppy drive", tag, owner, clock)
|
floppy_image_device(mconfig, FLOPPY_8_SSSD, "8\" single density single sided floppy drive", tag, owner, clock)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1165,6 +1167,31 @@ void floppy_8_sssd::handled_variants(UINT32 *variants, int &var_count) const
|
|||||||
variants[var_count++] = floppy_image::SSSD;
|
variants[var_count++] = floppy_image::SSSD;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
floppy_8_dssd::floppy_8_dssd(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) :
|
||||||
|
floppy_image_device(mconfig, FLOPPY_8_SSSD, "8\" single density double sided floppy drive", tag, owner, clock)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
floppy_8_dssd::~floppy_8_dssd()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void floppy_8_dssd::setup_characteristics()
|
||||||
|
{
|
||||||
|
form_factor = floppy_image::FF_8;
|
||||||
|
tracks = 77;
|
||||||
|
sides = 2;
|
||||||
|
motor_always_on = true;
|
||||||
|
set_rpm(360);
|
||||||
|
}
|
||||||
|
|
||||||
|
void floppy_8_dssd::handled_variants(UINT32 *variants, int &var_count) const
|
||||||
|
{
|
||||||
|
var_count = 0;
|
||||||
|
variants[var_count++] = floppy_image::SSSD;
|
||||||
|
variants[var_count++] = floppy_image::DSSD;
|
||||||
|
}
|
||||||
|
|
||||||
floppy_8_ssdd::floppy_8_ssdd(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) :
|
floppy_8_ssdd::floppy_8_ssdd(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) :
|
||||||
floppy_image_device(mconfig, FLOPPY_8_DSDD, "8\" double density single sided floppy drive", tag, owner, clock)
|
floppy_image_device(mconfig, FLOPPY_8_DSDD, "8\" double density single sided floppy drive", tag, owner, clock)
|
||||||
{
|
{
|
||||||
|
@ -352,6 +352,17 @@ protected:
|
|||||||
virtual void setup_characteristics();
|
virtual void setup_characteristics();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
class floppy_8_dssd : public floppy_image_device {
|
||||||
|
public:
|
||||||
|
floppy_8_dssd(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
|
||||||
|
virtual ~floppy_8_dssd();
|
||||||
|
virtual void handled_variants(UINT32 *variants, int &var_count) const;
|
||||||
|
virtual void device_config_complete() { m_shortname = "floppy_8_dssd"; }
|
||||||
|
virtual const char *image_interface() const { return "floppy_8"; }
|
||||||
|
protected:
|
||||||
|
virtual void setup_characteristics();
|
||||||
|
};
|
||||||
|
|
||||||
class floppy_8_ssdd : public floppy_image_device {
|
class floppy_8_ssdd : public floppy_image_device {
|
||||||
public:
|
public:
|
||||||
floppy_8_ssdd(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
|
floppy_8_ssdd(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
|
||||||
@ -410,6 +421,7 @@ extern const device_type FLOPPY_525_DD;
|
|||||||
extern const device_type FLOPPY_525_QD;
|
extern const device_type FLOPPY_525_QD;
|
||||||
extern const device_type FLOPPY_525_HD;
|
extern const device_type FLOPPY_525_HD;
|
||||||
extern const device_type FLOPPY_8_SSSD;
|
extern const device_type FLOPPY_8_SSSD;
|
||||||
|
extern const device_type FLOPPY_8_DSSD;
|
||||||
extern const device_type FLOPPY_8_SSDD;
|
extern const device_type FLOPPY_8_SSDD;
|
||||||
extern const device_type FLOPPY_8_DSDD;
|
extern const device_type FLOPPY_8_DSDD;
|
||||||
|
|
||||||
|
@ -875,6 +875,8 @@ void wd_fdc_t::do_cmd_w()
|
|||||||
|
|
||||||
void wd_fdc_t::cmd_w(UINT8 val)
|
void wd_fdc_t::cmd_w(UINT8 val)
|
||||||
{
|
{
|
||||||
|
if (inverted_bus) val ^= 0xff;
|
||||||
|
|
||||||
logerror("wd1772 cmd: %02x\n", val);
|
logerror("wd1772 cmd: %02x\n", val);
|
||||||
|
|
||||||
if(intrq && !(intrq_cond & I_IMM)) {
|
if(intrq && !(intrq_cond & I_IMM)) {
|
||||||
@ -929,7 +931,10 @@ UINT8 wd_fdc_t::status_r()
|
|||||||
status &= ~S_NRDY;
|
status &= ~S_NRDY;
|
||||||
}
|
}
|
||||||
|
|
||||||
return status;
|
UINT8 val = status;
|
||||||
|
if (inverted_bus) val ^= 0xff;
|
||||||
|
|
||||||
|
return val;
|
||||||
}
|
}
|
||||||
|
|
||||||
void wd_fdc_t::do_track_w()
|
void wd_fdc_t::do_track_w()
|
||||||
@ -940,6 +945,8 @@ void wd_fdc_t::do_track_w()
|
|||||||
|
|
||||||
void wd_fdc_t::track_w(UINT8 val)
|
void wd_fdc_t::track_w(UINT8 val)
|
||||||
{
|
{
|
||||||
|
if (inverted_bus) val ^= 0xff;
|
||||||
|
|
||||||
// No more than one write in flight
|
// No more than one write in flight
|
||||||
if(track_buffer != -1)
|
if(track_buffer != -1)
|
||||||
return;
|
return;
|
||||||
@ -950,7 +957,10 @@ void wd_fdc_t::track_w(UINT8 val)
|
|||||||
|
|
||||||
UINT8 wd_fdc_t::track_r()
|
UINT8 wd_fdc_t::track_r()
|
||||||
{
|
{
|
||||||
return track;
|
UINT8 val = track;
|
||||||
|
if (inverted_bus) val ^= 0xff;
|
||||||
|
|
||||||
|
return val;
|
||||||
}
|
}
|
||||||
|
|
||||||
void wd_fdc_t::do_sector_w()
|
void wd_fdc_t::do_sector_w()
|
||||||
@ -961,6 +971,8 @@ void wd_fdc_t::do_sector_w()
|
|||||||
|
|
||||||
void wd_fdc_t::sector_w(UINT8 val)
|
void wd_fdc_t::sector_w(UINT8 val)
|
||||||
{
|
{
|
||||||
|
if (inverted_bus) val ^= 0xff;
|
||||||
|
|
||||||
// No more than one write in flight
|
// No more than one write in flight
|
||||||
if(sector_buffer != -1)
|
if(sector_buffer != -1)
|
||||||
return;
|
return;
|
||||||
@ -971,11 +983,16 @@ void wd_fdc_t::sector_w(UINT8 val)
|
|||||||
|
|
||||||
UINT8 wd_fdc_t::sector_r()
|
UINT8 wd_fdc_t::sector_r()
|
||||||
{
|
{
|
||||||
return sector;
|
UINT8 val = sector;
|
||||||
|
if (inverted_bus) val ^= 0xff;
|
||||||
|
|
||||||
|
return val;
|
||||||
}
|
}
|
||||||
|
|
||||||
void wd_fdc_t::data_w(UINT8 val)
|
void wd_fdc_t::data_w(UINT8 val)
|
||||||
{
|
{
|
||||||
|
if (inverted_bus) val ^= 0xff;
|
||||||
|
|
||||||
data = val;
|
data = val;
|
||||||
drop_drq();
|
drop_drq();
|
||||||
}
|
}
|
||||||
@ -983,7 +1000,11 @@ void wd_fdc_t::data_w(UINT8 val)
|
|||||||
UINT8 wd_fdc_t::data_r()
|
UINT8 wd_fdc_t::data_r()
|
||||||
{
|
{
|
||||||
drop_drq();
|
drop_drq();
|
||||||
return data;
|
|
||||||
|
UINT8 val = data;
|
||||||
|
if (inverted_bus) val ^= 0xff;
|
||||||
|
|
||||||
|
return val;
|
||||||
}
|
}
|
||||||
|
|
||||||
void wd_fdc_t::gen_w(int reg, UINT8 val)
|
void wd_fdc_t::gen_w(int reg, UINT8 val)
|
||||||
|
@ -26,7 +26,7 @@ public:
|
|||||||
int per_sector_size[40]; // if sector_base_size is 0
|
int per_sector_size[40]; // if sector_base_size is 0
|
||||||
int sector_base_id; // 0 or 1 usually, -1 if there's interleave
|
int sector_base_id; // 0 or 1 usually, -1 if there's interleave
|
||||||
int per_sector_id[40]; // if sector_base_id is -1. If both per are used, then sector per_sector_id[i] has size per_sector_size[i]
|
int per_sector_id[40]; // if sector_base_id is -1. If both per are used, then sector per_sector_id[i] has size per_sector_size[i]
|
||||||
int gap_1; // Usually around 544 - number of 4e between index and first IDAM sync
|
int gap_1; // Usually around 80 - number of 4e between index and first IDAM sync
|
||||||
int gap_2; // 22 for <=1.44Mb, 41 for 2.88Mb - number of 4e between sector header and data sync
|
int gap_2; // 22 for <=1.44Mb, 41 for 2.88Mb - number of 4e between sector header and data sync
|
||||||
int gap_3; // Usually 84 - number of 4e between sector crc and next IDAM
|
int gap_3; // Usually 84 - number of 4e between sector crc and next IDAM
|
||||||
};
|
};
|
||||||
|
Loading…
Reference in New Issue
Block a user