trunk/src/emu/machine/wd33c93.c
| r28759 | r28760 | |
| 203 | 203 | regs[WD_AUXILIARY_STATUS] &= ~(ASR_CIP | ASR_BSY); |
| 204 | 204 | |
| 205 | 205 | /* if we have a callback, call it */ |
| 206 | | if (!m_irq_func.isnull()) |
| 206 | if (!m_irq_cb.isnull()) |
| 207 | 207 | { |
| 208 | | m_irq_func(1); |
| 208 | m_irq_cb(1); |
| 209 | 209 | } |
| 210 | 210 | } |
| 211 | 211 | |
| r28759 | r28760 | |
| 643 | 643 | { |
| 644 | 644 | regs[WD_AUXILIARY_STATUS] &= ~ASR_INT; |
| 645 | 645 | |
| 646 | | if (!m_irq_func.isnull()) |
| 646 | if (!m_irq_cb.isnull()) |
| 647 | 647 | { |
| 648 | | m_irq_func(0); |
| 648 | m_irq_cb(0); |
| 649 | 649 | } |
| 650 | 650 | |
| 651 | 651 | LOG(( "WD33C93: PC=%08x - Status read (%02x)\n", space.device().safe_pc(), regs[WD_SCSI_STATUS] )); |
| r28759 | r28760 | |
| 742 | 742 | } |
| 743 | 743 | |
| 744 | 744 | wd33c93_device::wd33c93_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) |
| 745 | | : device_t(mconfig, WD33C93, "33C93 SCSI", tag, owner, clock, "wd33c93", __FILE__) |
| 745 | : device_t(mconfig, WD33C93, "33C93 SCSI", tag, owner, clock, "wd33c93", __FILE__), |
| 746 | m_irq_cb(*this) |
| 746 | 747 | { |
| 747 | 748 | } |
| 748 | 749 | |
| 749 | | void wd33c93_device::device_config_complete() |
| 750 | | { |
| 751 | | // inherit a copy of the static data |
| 752 | | const WD33C93interface *intf = reinterpret_cast<const WD33C93interface *>(static_config()); |
| 753 | | if (intf != NULL) |
| 754 | | { |
| 755 | | *static_cast<WD33C93interface *>(this) = *intf; |
| 756 | | } |
| 757 | | } |
| 758 | | |
| 759 | 750 | void wd33c93_device::device_start() |
| 760 | 751 | { |
| 761 | 752 | memset(regs, 0, sizeof(regs)); |
| r28759 | r28760 | |
| 779 | 770 | devices[scsidev->GetDeviceID()] = scsidev; |
| 780 | 771 | } |
| 781 | 772 | } |
| 782 | | m_irq_func.resolve(m_irq_cb, *this); |
| 773 | m_irq_cb.resolve(); |
| 783 | 774 | |
| 784 | 775 | /* allocate a timer for commands */ |
| 785 | 776 | cmd_timer = timer_alloc(0); |
trunk/src/emu/machine/wd33c93.h
| r28759 | r28760 | |
| 8 | 8 | |
| 9 | 9 | #include "machine/scsihle.h" |
| 10 | 10 | |
| 11 | | struct WD33C93interface |
| 12 | | { |
| 13 | | devcb_write_line m_irq_cb; /* irq callback */ |
| 14 | | }; |
| 15 | | |
| 16 | 11 | /* wd register names */ |
| 17 | 12 | |
| 18 | 13 | enum |
| r28759 | r28760 | |
| 50 | 45 | #define TEMP_INPUT_LEN 262144 |
| 51 | 46 | #define FIFO_SIZE 12 |
| 52 | 47 | |
| 53 | | #define MCFG_WD33C93_ADD( _tag, _config ) \ |
| 54 | | MCFG_DEVICE_ADD( _tag, WD33C93, 0 ) \ |
| 55 | | MCFG_DEVICE_CONFIG(_config) |
| 48 | #define MCFG_WD33C93_IRQ_CB(_devcb) \ |
| 49 | devcb = &wd33c93_device::set_irq_callback(*device, DEVCB2_##_devcb); |
| 56 | 50 | |
| 57 | | class wd33c93_device : public device_t, |
| 58 | | public WD33C93interface |
| 51 | class wd33c93_device : public device_t |
| 59 | 52 | { |
| 60 | 53 | public: |
| 61 | 54 | // construction/destruction |
| 62 | 55 | wd33c93_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); |
| 56 | |
| 57 | template<class _Object> static devcb2_base &set_irq_callback(device_t &device, _Object object) { return downcast<wd33c93_device &>(device).m_irq_cb.set_callback(object); } |
| 63 | 58 | |
| 64 | 59 | DECLARE_READ8_MEMBER(read); |
| 65 | 60 | DECLARE_WRITE8_MEMBER(write); |
| r28759 | r28760 | |
| 71 | 66 | |
| 72 | 67 | protected: |
| 73 | 68 | // device-level overrides |
| 74 | | virtual void device_config_complete(); |
| 75 | 69 | virtual void device_start(); |
| 76 | 70 | virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr); |
| 77 | 71 | |
| r28759 | r28760 | |
| 107 | 101 | emu_timer *cmd_timer; |
| 108 | 102 | emu_timer *service_req_timer; |
| 109 | 103 | emu_timer *deassert_cip_timer; |
| 110 | | devcb_resolved_write_line m_irq_func; |
| 104 | devcb2_write_line m_irq_cb; /* irq callback */ |
| 111 | 105 | }; |
| 112 | 106 | |
| 113 | 107 | // device type definition |
trunk/src/mess/drivers/ip20.c
| r28759 | r28760 | |
| 480 | 480 | { |
| 481 | 481 | } |
| 482 | 482 | |
| 483 | | static const struct WD33C93interface wd33c93_intf = |
| 484 | | { |
| 485 | | DEVCB_DRIVER_LINE_MEMBER(ip20_state,scsi_irq) /* command completion IRQ */ |
| 486 | | }; |
| 487 | | |
| 488 | 483 | DRIVER_INIT_MEMBER(ip20_state,ip204415) |
| 489 | 484 | { |
| 490 | 485 | } |
| r28759 | r28760 | |
| 613 | 608 | |
| 614 | 609 | MCFG_SCSIBUS_ADD("scsi") |
| 615 | 610 | MCFG_SCSIDEV_ADD("scsi:cdrom", SCSICD, SCSI_ID_6) |
| 616 | | MCFG_WD33C93_ADD("scsi:wd33c93", wd33c93_intf) |
| 611 | MCFG_DEVICE_ADD("scsi:wd33c93", WD33C93, 0) |
| 612 | MCFG_WD33C93_IRQ_CB(DEVWRITELINE(DEVICE_SELF_OWNER, ip20_state, scsi_irq)) /* command completion IRQ */ |
| 617 | 613 | |
| 618 | 614 | MCFG_SOUND_MODIFY( "scsi:cdrom:cdda" ) |
| 619 | 615 | MCFG_SOUND_ROUTE(ALL_OUTPUTS, "^^^mono", 1.0) |
trunk/src/mess/drivers/ip22.c
| r28759 | r28760 | |
| 1478 | 1478 | } |
| 1479 | 1479 | } |
| 1480 | 1480 | |
| 1481 | | static const struct WD33C93interface wd33c93_intf = |
| 1482 | | { |
| 1483 | | DEVCB_DRIVER_LINE_MEMBER(ip22_state,scsi_irq) /* command completion IRQ */ |
| 1484 | | }; |
| 1485 | | |
| 1486 | 1481 | void ip22_state::machine_start() |
| 1487 | 1482 | { |
| 1488 | 1483 | sgi_mc_init(machine()); |
| r28759 | r28760 | |
| 1638 | 1633 | MCFG_SCSIBUS_ADD("scsi") |
| 1639 | 1634 | MCFG_SCSIDEV_ADD("scsi:harddisk1", SCSIHD, SCSI_ID_1) |
| 1640 | 1635 | MCFG_SCSIDEV_ADD("scsi:cdrom", SCSICD, SCSI_ID_4) |
| 1641 | | MCFG_WD33C93_ADD("scsi:wd33c93", wd33c93_intf) |
| 1636 | MCFG_DEVICE_ADD("scsi:wd33c93", WD33C93, 0) |
| 1637 | MCFG_WD33C93_IRQ_CB(DEVWRITELINE(DEVICE_SELF_OWNER, ip22_state,scsi_irq)) |
| 1642 | 1638 | |
| 1643 | 1639 | MCFG_SOUND_MODIFY( "scsi:cdrom:cdda" ) |
| 1644 | 1640 | MCFG_SOUND_ROUTE(ALL_OUTPUTS, "^^^lspeaker", 1.0) |
trunk/src/mame/drivers/cps3.c
| r28759 | r28760 | |
| 2328 | 2328 | //static sh2_cpu_core sh2cp_conf_slave = { 1, NULL }; |
| 2329 | 2329 | |
| 2330 | 2330 | |
| 2331 | | static const struct WD33C93interface wd33c93_intf = |
| 2332 | | { |
| 2333 | | DEVCB_NULL /* command completion IRQ */ |
| 2334 | | }; |
| 2335 | | |
| 2336 | 2331 | void cps3_state::machine_reset() |
| 2337 | 2332 | { |
| 2338 | 2333 | m_current_table_address = -1; |
| r28759 | r28760 | |
| 2567 | 2562 | |
| 2568 | 2563 | MCFG_SCSIBUS_ADD("scsi") |
| 2569 | 2564 | MCFG_SCSIDEV_ADD("scsi:cdrom", SCSICD, SCSI_ID_1) |
| 2570 | | MCFG_WD33C93_ADD("scsi:wd33c93", wd33c93_intf) |
| 2565 | MCFG_DEVICE_ADD("scsi:wd33c93", WD33C93, 0) |
| 2571 | 2566 | |
| 2572 | 2567 | /* video hardware */ |
| 2573 | 2568 | MCFG_SCREEN_ADD("screen", RASTER) |