trunk/src/emu/machine/ncr5380.c
| r29255 | r29256 | |
| 64 | 64 | return 6; |
| 65 | 65 | } |
| 66 | 66 | |
| 67 | | //------------------------------------------------- |
| 68 | | // device_config_complete - perform any |
| 69 | | // operations now that the configuration is |
| 70 | | // complete |
| 71 | | //------------------------------------------------- |
| 72 | 67 | |
| 73 | | void ncr5380_device::device_config_complete() |
| 74 | | { |
| 75 | | // inherit a copy of the static data |
| 76 | | const NCR5380interface *intf = reinterpret_cast<const NCR5380interface *>(static_config()); |
| 77 | | if (intf != NULL) |
| 78 | | *static_cast<NCR5380interface *>(this) = *intf; |
| 79 | | |
| 80 | | // or initialize to defaults if none provided |
| 81 | | else |
| 82 | | { |
| 83 | | memset(&m_irq_cb, 0, sizeof(m_irq_cb)); |
| 84 | | } |
| 85 | | } |
| 86 | | |
| 87 | 68 | //************************************************************************** |
| 88 | 69 | // LIVE DEVICE |
| 89 | 70 | //************************************************************************** |
| r29255 | r29256 | |
| 95 | 76 | //------------------------------------------------- |
| 96 | 77 | |
| 97 | 78 | ncr5380_device::ncr5380_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) |
| 98 | | : device_t(mconfig, NCR5380, "5380 SCSI", tag, owner, clock, "ncr5380", __FILE__) |
| 79 | : device_t(mconfig, NCR5380, "5380 SCSI", tag, owner, clock, "ncr5380", __FILE__), |
| 80 | m_irq_cb(*this) |
| 99 | 81 | { |
| 100 | 82 | } |
| 101 | 83 | |
| r29255 | r29256 | |
| 110 | 92 | memset(m_scsi_devices, 0, sizeof(m_scsi_devices)); |
| 111 | 93 | |
| 112 | 94 | m_next_req_flag = 0; |
| 113 | | m_irq_func.resolve(m_irq_cb, *this); |
| 95 | m_irq_cb.resolve_safe(); |
| 114 | 96 | |
| 115 | 97 | save_item(NAME(m_5380_Registers)); |
| 116 | 98 | save_item(NAME(m_5380_Command)); |
trunk/src/emu/machine/ncr5380.h
| r29255 | r29256 | |
| 8 | 8 | |
| 9 | 9 | #include "machine/scsihle.h" |
| 10 | 10 | |
| 11 | | struct NCR5380interface |
| 12 | | { |
| 13 | | devcb_write_line m_irq_cb; /* irq callback */ |
| 14 | | }; |
| 15 | | |
| 16 | 11 | // 5380 registers |
| 17 | 12 | enum |
| 18 | 13 | { |
| r29255 | r29256 | |
| 36 | 31 | #define R5380_CURDATA_DTACK (R5380_CURDATA | 0x10) |
| 37 | 32 | |
| 38 | 33 | // device stuff |
| 39 | | #define MCFG_NCR5380_ADD(_tag, _clock, _intrf) \ |
| 40 | | MCFG_DEVICE_ADD(_tag, NCR5380, _clock) \ |
| 41 | | MCFG_DEVICE_CONFIG(_intrf) |
| 42 | 34 | |
| 43 | | class ncr5380_device : public device_t, |
| 44 | | public NCR5380interface |
| 35 | #define MCFG_NCR5380_IRQ_CB(_devcb) \ |
| 36 | devcb = &ncr5380_device::set_irq_callback(*device, DEVCB2_##_devcb); |
| 37 | |
| 38 | class ncr5380_device : public device_t |
| 45 | 39 | { |
| 46 | 40 | public: |
| 47 | 41 | // construction/destruction |
| 48 | 42 | ncr5380_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); |
| 43 | |
| 44 | template<class _Object> static devcb2_base &set_irq_callback(device_t &device, _Object object) { return downcast<ncr5380_device &>(device).m_irq_cb.set_callback(object); } |
| 49 | 45 | |
| 50 | 46 | // our API |
| 51 | 47 | UINT8 ncr5380_read_reg(UINT32 offset); |
| r29255 | r29256 | |
| 59 | 55 | virtual void device_start(); |
| 60 | 56 | virtual void device_reset(); |
| 61 | 57 | virtual void device_stop(); |
| 62 | | virtual void device_config_complete(); |
| 63 | 58 | |
| 64 | 59 | private: |
| 65 | 60 | scsihle_device *m_scsi_devices[8]; |
| r29255 | r29256 | |
| 69 | 64 | UINT8 m_5380_Command[32]; |
| 70 | 65 | INT32 m_cmd_ptr, m_d_ptr, m_d_limit, m_next_req_flag; |
| 71 | 66 | UINT8 m_5380_Data[512]; |
| 72 | | devcb_resolved_write_line m_irq_func; |
| 67 | devcb2_write_line m_irq_cb; /* irq callback */ |
| 73 | 68 | }; |
| 74 | 69 | |
| 75 | 70 | // device type definition |
trunk/src/mess/drivers/mac.c
| r29255 | r29256 | |
| 48 | 48 | #include "cpu/powerpc/ppc.h" |
| 49 | 49 | #include "cpu/m6805/m6805.h" |
| 50 | 50 | #include "machine/6522via.h" |
| 51 | | #include "machine/ncr5380.h" |
| 52 | 51 | #include "machine/applefdc.h" |
| 53 | 52 | #include "machine/swim.h" |
| 54 | 53 | #include "machine/sonydriv.h" |
| r29255 | r29256 | |
| 842 | 841 | sony_read_status |
| 843 | 842 | }; |
| 844 | 843 | |
| 845 | | static const struct NCR5380interface macplus_5380intf = |
| 846 | | { |
| 847 | | DEVCB_DRIVER_LINE_MEMBER(mac_state,mac_scsi_irq) // IRQ (unconnected on the Mac Plus) |
| 848 | | }; |
| 849 | | |
| 850 | 844 | static const struct NCR539Xinterface mac_539x_intf = |
| 851 | 845 | { |
| 852 | 846 | DEVCB_DRIVER_LINE_MEMBER(mac_state, irq_539x_1_w), |
| r29255 | r29256 | |
| 987 | 981 | MCFG_SCSIBUS_ADD("scsi") |
| 988 | 982 | MCFG_SCSIDEV_ADD("scsi:harddisk1", SCSIHD, SCSI_ID_6) |
| 989 | 983 | MCFG_SCSIDEV_ADD("scsi:harddisk2", SCSIHD, SCSI_ID_5) |
| 990 | | MCFG_NCR5380_ADD("scsi:ncr5380", C7M, macplus_5380intf) |
| 984 | MCFG_DEVICE_ADD("scsi:ncr5380", NCR5380, C7M) |
| 985 | MCFG_NCR5380_IRQ_CB(DEVWRITELINE(DEVICE_SELF_OWNER, mac_state, mac_scsi_irq)) |
| 991 | 986 | |
| 992 | 987 | MCFG_LEGACY_FLOPPY_SONY_2_DRIVES_MODIFY(mac_floppy_interface) |
| 993 | 988 | |
| r29255 | r29256 | |
| 1078 | 1073 | MCFG_SCSIBUS_ADD("scsi") |
| 1079 | 1074 | MCFG_SCSIDEV_ADD("scsi:harddisk1", SCSIHD, SCSI_ID_6) |
| 1080 | 1075 | MCFG_SCSIDEV_ADD("scsi:harddisk2", SCSIHD, SCSI_ID_5) |
| 1081 | | MCFG_NCR5380_ADD("scsi:ncr5380", C7M, macplus_5380intf) |
| 1076 | MCFG_DEVICE_ADD("scsi:ncr5380", NCR5380, C7M) |
| 1077 | MCFG_NCR5380_IRQ_CB(DEVWRITELINE(DEVICE_SELF_OWNER, mac_state, mac_scsi_irq)) |
| 1082 | 1078 | |
| 1083 | 1079 | MCFG_IWM_ADD("fdc", mac_iwm_interface) |
| 1084 | 1080 | MCFG_LEGACY_FLOPPY_SONY_2_DRIVES_ADD(mac_floppy_interface) |
| r29255 | r29256 | |
| 1130 | 1126 | MCFG_SCSIDEV_ADD("scsi:harddisk1", SCSIHD, SCSI_ID_6) |
| 1131 | 1127 | MCFG_SCSIDEV_ADD("scsi:harddisk2", SCSIHD, SCSI_ID_5) |
| 1132 | 1128 | MCFG_SCSIDEV_ADD("scsi:cdrom1", SCSICD, SCSI_ID_4) |
| 1133 | | MCFG_NCR5380_ADD("scsi:ncr5380", C7M, macplus_5380intf) |
| 1129 | MCFG_DEVICE_ADD("scsi:ncr5380", NCR5380, C7M) |
| 1130 | MCFG_NCR5380_IRQ_CB(DEVWRITELINE(DEVICE_SELF_OWNER, mac_state, mac_scsi_irq)) |
| 1134 | 1131 | |
| 1135 | 1132 | MCFG_IWM_ADD("fdc", mac_iwm_interface) |
| 1136 | 1133 | MCFG_LEGACY_FLOPPY_SONY_2_DRIVES_ADD(mac_floppy_interface) |
| r29255 | r29256 | |
| 1193 | 1190 | MCFG_SCSIBUS_ADD("scsi") |
| 1194 | 1191 | MCFG_SCSIDEV_ADD("scsi:harddisk1", SCSIHD, SCSI_ID_6) |
| 1195 | 1192 | MCFG_SCSIDEV_ADD("scsi:harddisk2", SCSIHD, SCSI_ID_5) |
| 1196 | | MCFG_NCR5380_ADD("scsi:ncr5380", C7M, macplus_5380intf) |
| 1193 | MCFG_DEVICE_ADD("scsi:ncr5380", NCR5380, C7M) |
| 1194 | MCFG_NCR5380_IRQ_CB(DEVWRITELINE(DEVICE_SELF_OWNER, mac_state, mac_scsi_irq)) |
| 1197 | 1195 | |
| 1198 | 1196 | MCFG_IWM_ADD("fdc", mac_iwm_interface) |
| 1199 | 1197 | MCFG_LEGACY_FLOPPY_SONY_2_DRIVES_ADD(mac_floppy_interface) |
| r29255 | r29256 | |
| 1435 | 1433 | MCFG_SCSIBUS_ADD("scsi") |
| 1436 | 1434 | MCFG_SCSIDEV_ADD("scsi:harddisk1", SCSIHD, SCSI_ID_6) |
| 1437 | 1435 | MCFG_SCSIDEV_ADD("scsi:harddisk2", SCSIHD, SCSI_ID_5) |
| 1438 | | MCFG_NCR5380_ADD("scsi:ncr5380", C7M, macplus_5380intf) |
| 1436 | MCFG_DEVICE_ADD("scsi:ncr5380", NCR5380, C7M) |
| 1437 | MCFG_NCR5380_IRQ_CB(DEVWRITELINE(DEVICE_SELF_OWNER, mac_state, mac_scsi_irq)) |
| 1439 | 1438 | |
| 1440 | 1439 | MCFG_NUBUS_BUS_ADD("pds", "maincpu", nubus_intf) |
| 1441 | 1440 | MCFG_NUBUS_SLOT_ADD("pds","pds030", mac_pds030_cards, NULL) |
| r29255 | r29256 | |
| 1500 | 1499 | MCFG_SCSIBUS_ADD("scsi") |
| 1501 | 1500 | MCFG_SCSIDEV_ADD("scsi:harddisk1", SCSIHD, SCSI_ID_6) |
| 1502 | 1501 | MCFG_SCSIDEV_ADD("scsi:harddisk2", SCSIHD, SCSI_ID_5) |
| 1503 | | MCFG_NCR5380_ADD("scsi:ncr5380", C7M, macplus_5380intf) |
| 1502 | MCFG_DEVICE_ADD("scsi:ncr5380", NCR5380, C7M) |
| 1503 | MCFG_NCR5380_IRQ_CB(DEVWRITELINE(DEVICE_SELF_OWNER, mac_state, mac_scsi_irq)) |
| 1504 | 1504 | |
| 1505 | 1505 | MCFG_SWIM_ADD("fdc", mac_iwm_interface) |
| 1506 | 1506 | MCFG_LEGACY_FLOPPY_SONY_2_DRIVES_ADD(mac_floppy_interface) |
| r29255 | r29256 | |
| 1582 | 1582 | MCFG_SCSIBUS_ADD("scsi") |
| 1583 | 1583 | MCFG_SCSIDEV_ADD("scsi:harddisk1", SCSIHD, SCSI_ID_6) |
| 1584 | 1584 | MCFG_SCSIDEV_ADD("scsi:harddisk2", SCSIHD, SCSI_ID_5) |
| 1585 | | MCFG_NCR5380_ADD("scsi:ncr5380", C7M, macplus_5380intf) |
| 1585 | MCFG_DEVICE_ADD("scsi:ncr5380", NCR5380, C7M) |
| 1586 | MCFG_NCR5380_IRQ_CB(DEVWRITELINE(DEVICE_SELF_OWNER, mac_state, mac_scsi_irq)) |
| 1586 | 1587 | |
| 1587 | 1588 | MCFG_SWIM_ADD("fdc", mac_iwm_interface) |
| 1588 | 1589 | MCFG_LEGACY_FLOPPY_SONY_2_DRIVES_ADD(mac_floppy_interface) |
| r29255 | r29256 | |
| 1778 | 1779 | MCFG_SCSIBUS_ADD("scsi") |
| 1779 | 1780 | MCFG_SCSIDEV_ADD("scsi:harddisk1", SCSIHD, SCSI_ID_6) |
| 1780 | 1781 | MCFG_SCSIDEV_ADD("scsi:harddisk2", SCSIHD, SCSI_ID_5) |
| 1781 | | MCFG_NCR5380_ADD("scsi:ncr5380", C7M, macplus_5380intf) |
| 1782 | MCFG_DEVICE_ADD("scsi:ncr5380", NCR5380, C7M) |
| 1783 | MCFG_NCR5380_IRQ_CB(DEVWRITELINE(DEVICE_SELF_OWNER, mac_state, mac_scsi_irq)) |
| 1782 | 1784 | |
| 1783 | 1785 | MCFG_IWM_ADD("fdc", mac_iwm_interface) |
| 1784 | 1786 | MCFG_LEGACY_FLOPPY_SONY_2_DRIVES_ADD(mac_floppy_interface) |