diff options
Diffstat (limited to 'src/devices/machine/pc_fdc.cpp')
-rw-r--r-- | src/devices/machine/pc_fdc.cpp | 57 |
1 files changed, 12 insertions, 45 deletions
diff --git a/src/devices/machine/pc_fdc.cpp b/src/devices/machine/pc_fdc.cpp index 8f48da0f505..6c737f03364 100644 --- a/src/devices/machine/pc_fdc.cpp +++ b/src/devices/machine/pc_fdc.cpp @@ -14,10 +14,9 @@ **********************************************************************/ #include "emu.h" -#include "machine/pc_fdc.h" -#include "imagedev/floppy.h" +#include "pc_fdc.h" -//#define LOG_GENERAL (1U << 0) //defined in logmacro.h already +#include "imagedev/floppy.h" //#define VERBOSE (LOG_GENERAL) //#define LOG_OUTPUT_STREAM std::cout @@ -26,11 +25,6 @@ DEFINE_DEVICE_TYPE(PC_FDC_XT, pc_fdc_xt_device, "pc_fdc_xt", "PC FDC (XT)") -DEFINE_DEVICE_TYPE(PC_FDC_AT, pc_fdc_at_device, "pc_fdc_at", "PC FDC (AT)") - -void pc_fdc_family_device::map(address_map &map) -{ -} // The schematics show address decoding is minimal void pc_fdc_xt_device::map(address_map &map) @@ -43,16 +37,8 @@ void pc_fdc_xt_device::map(address_map &map) } -// Decoding is through a PAL, so presumably complete -void pc_fdc_at_device::map(address_map &map) -{ - map(0x2, 0x2).rw(FUNC(pc_fdc_at_device::dor_r), FUNC(pc_fdc_at_device::dor_w)); - map(0x4, 0x5).m(fdc, FUNC(upd765a_device::map)); - map(0x7, 0x7).rw(FUNC(pc_fdc_at_device::dir_r), FUNC(pc_fdc_at_device::ccr_w)); -} - pc_fdc_family_device::pc_fdc_family_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock) : - pc_fdc_interface(mconfig, type, tag, owner, clock), fdc(*this, "upd765"), + device_t(mconfig, type, tag, owner, clock), fdc(*this, "upd765"), intrq_cb(*this), drq_cb(*this) { @@ -82,9 +68,6 @@ void pc_fdc_family_device::device_add_mconfig(machine_config &config) void pc_fdc_family_device::device_start() { - intrq_cb.resolve(); - drq_cb.resolve(); - for(int i=0; i<4; i++) { char name[2] = {static_cast<char>('0'+i), 0}; floppy_connector *conn = subdevice<floppy_connector>(name); @@ -109,7 +92,7 @@ void pc_fdc_family_device::device_reset() // Bit 4-7 control the drive motors -WRITE8_MEMBER( pc_fdc_family_device::dor_w ) +void pc_fdc_family_device::dor_w(uint8_t data) { LOG("dor = %02x\n", data); uint8_t pdor = dor; @@ -131,43 +114,31 @@ WRITE8_MEMBER( pc_fdc_family_device::dor_w ) fdc->reset(); } -READ8_MEMBER( pc_fdc_family_device::dor_r ) +uint8_t pc_fdc_family_device::dor_r() { return dor; } -READ8_MEMBER( pc_fdc_family_device::dir_r ) -{ - return do_dir_r(); -} - -WRITE8_MEMBER( pc_fdc_family_device::ccr_w ) +void pc_fdc_family_device::ccr_w(uint8_t data) { static const int rates[4] = { 500000, 300000, 250000, 1000000 }; LOG("ccr = %02x\n", data); fdc->set_rate(rates[data & 3]); } -uint8_t pc_fdc_family_device::do_dir_r() -{ - if(floppy[dor & 3]) - return floppy[dor & 3]->dskchg_r() ? 0x00 : 0x80; - return 0x00; -} - -WRITE8_MEMBER( pc_fdc_xt_device::dor_fifo_w) +void pc_fdc_xt_device::dor_fifo_w(uint8_t data) { fdc->fifo_w(data); - dor_w(space, 0, data, mem_mask); + dor_w(data); } -WRITE_LINE_MEMBER( pc_fdc_family_device::irq_w ) +void pc_fdc_family_device::irq_w(int state) { fdc_irq = state; check_irq(); } -WRITE_LINE_MEMBER( pc_fdc_family_device::drq_w ) +void pc_fdc_family_device::drq_w(int state) { fdc_drq = state; check_drq(); @@ -177,7 +148,7 @@ void pc_fdc_family_device::check_irq() { bool pirq = irq; irq = fdc_irq && (dor & 4) && (dor & 8); - if(irq != pirq && !intrq_cb.isnull()) { + if(irq != pirq) { LOG("pc_irq = %d\n", irq); intrq_cb(irq); } @@ -187,14 +158,10 @@ void pc_fdc_family_device::check_drq() { bool pdrq = drq; drq = fdc_drq && (dor & 4) && (dor & 8); - if(drq != pdrq && !drq_cb.isnull()) + if(drq != pdrq) drq_cb(drq); } pc_fdc_xt_device::pc_fdc_xt_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) : pc_fdc_family_device(mconfig, PC_FDC_XT, tag, owner, clock) { } - -pc_fdc_at_device::pc_fdc_at_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) : pc_fdc_family_device(mconfig, PC_FDC_AT, tag, owner, clock) -{ -} |