trunk/src/emu/machine/idehd.c
| r23687 | r23688 | |
| 80 | 80 | ide_device_interface::ide_device_interface(const machine_config &mconfig, device_t &device) : |
| 81 | 81 | m_master_password(NULL), |
| 82 | 82 | m_user_password(NULL), |
| 83 | | m_csel(0), |
| 84 | | m_dasp(0), |
| 85 | 83 | m_irq_handler(device), |
| 86 | 84 | m_dmarq_handler(device) |
| 87 | 85 | { |
| 88 | 86 | } |
| 89 | 87 | |
| 90 | | void ide_device_interface::set_irq(int state) |
| 88 | ide_mass_storage_device::ide_mass_storage_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock,const char *shortname, const char *source) |
| 89 | : device_t(mconfig, type, name, tag, owner, clock, shortname, source), |
| 90 | ide_device_interface(mconfig, *this), |
| 91 | device_slot_card_interface(mconfig, *this), |
| 92 | m_csel(0), |
| 93 | m_dasp(0) |
| 91 | 94 | { |
| 95 | } |
| 96 | |
| 97 | void ide_mass_storage_device::set_irq(int state) |
| 98 | { |
| 92 | 99 | if (state == ASSERT_LINE) |
| 93 | 100 | LOG(("IDE interrupt assert\n")); |
| 94 | 101 | else |
| 95 | 102 | LOG(("IDE interrupt clear\n")); |
| 96 | 103 | |
| 104 | m_interrupt_pending = state; |
| 105 | |
| 97 | 106 | /* signal an interrupt */ |
| 98 | 107 | m_irq_handler(state); |
| 99 | 108 | } |
| 100 | 109 | |
| 101 | | void ide_device_interface::set_dmarq(int state) |
| 110 | void ide_mass_storage_device::set_dmarq(int state) |
| 102 | 111 | { |
| 103 | 112 | m_dmarq_handler(state); |
| 104 | 113 | } |
| 105 | 114 | |
| 106 | | ide_mass_storage_device::ide_mass_storage_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock,const char *shortname, const char *source) |
| 107 | | : device_t(mconfig, type, name, tag, owner, clock, shortname, source), |
| 108 | | ide_device_interface(mconfig, *this), |
| 109 | | device_slot_card_interface(mconfig, *this) |
| 115 | WRITE_LINE_MEMBER( ide_mass_storage_device::write_csel ) |
| 110 | 116 | { |
| 117 | m_csel = state; |
| 111 | 118 | } |
| 112 | 119 | |
| 120 | WRITE_LINE_MEMBER( ide_mass_storage_device::write_dasp ) |
| 121 | { |
| 122 | m_dasp = state; |
| 123 | } |
| 124 | |
| 113 | 125 | /************************************* |
| 114 | 126 | * |
| 115 | 127 | * Compute the LBA address |
| r23687 | r23688 | |
| 364 | 376 | set_dmarq(CLEAR_LINE); |
| 365 | 377 | } |
| 366 | 378 | |
| 367 | | void ide_mass_storage_device::set_irq(int state) |
| 368 | | { |
| 369 | | ide_device_interface::set_irq(state); |
| 370 | | |
| 371 | | m_interrupt_pending = state; |
| 372 | | } |
| 373 | | |
| 374 | 379 | void ide_mass_storage_device::signal_delayed_interrupt(attotime time, int buffer_ready) |
| 375 | 380 | { |
| 376 | 381 | /* clear buffer ready and set the busy flag */ |
trunk/src/emu/machine/idehd.h
| r23687 | r23688 | |
| 24 | 24 | public: |
| 25 | 25 | ide_device_interface(const machine_config &mconfig, device_t &device); |
| 26 | 26 | |
| 27 | | virtual void set_irq(int state); |
| 28 | | virtual void set_dmarq(int state); |
| 29 | | |
| 30 | 27 | virtual UINT16 read_dma() = 0; |
| 31 | 28 | virtual DECLARE_READ16_MEMBER(read_cs0) = 0; |
| 32 | 29 | virtual DECLARE_READ16_MEMBER(read_cs1) = 0; |
| 30 | |
| 33 | 31 | virtual void write_dma(UINT16 data) = 0; |
| 34 | 32 | virtual DECLARE_WRITE16_MEMBER(write_cs0) = 0; |
| 35 | 33 | virtual DECLARE_WRITE16_MEMBER(write_cs1) = 0; |
| 34 | virtual DECLARE_WRITE_LINE_MEMBER(write_csel) = 0; |
| 35 | virtual DECLARE_WRITE_LINE_MEMBER(write_dasp) = 0; |
| 36 | 36 | |
| 37 | 37 | virtual UINT8 *get_features() = 0; |
| 38 | 38 | |
| r23687 | r23688 | |
| 41 | 41 | const UINT8 * m_master_password; |
| 42 | 42 | const UINT8 * m_user_password; |
| 43 | 43 | |
| 44 | | int m_csel; |
| 45 | | int m_dasp; |
| 46 | | |
| 47 | 44 | devcb2_write_line m_irq_handler; |
| 48 | 45 | devcb2_write_line m_dmarq_handler; |
| 49 | 46 | }; |
| r23687 | r23688 | |
| 55 | 52 | public: |
| 56 | 53 | ide_mass_storage_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock,const char *shortname = "", const char *source = __FILE__); |
| 57 | 54 | |
| 58 | | virtual int read_sector(UINT32 lba, void *buffer) = 0; |
| 59 | | virtual int write_sector(UINT32 lba, const void *buffer) = 0; |
| 60 | | |
| 61 | | virtual void set_irq(int state); |
| 62 | 55 | virtual UINT16 read_dma(); |
| 63 | 56 | virtual DECLARE_READ16_MEMBER(read_cs0); |
| 64 | 57 | virtual DECLARE_READ16_MEMBER(read_cs1); |
| 58 | |
| 65 | 59 | virtual void write_dma(UINT16 data); |
| 66 | 60 | virtual DECLARE_WRITE16_MEMBER(write_cs0); |
| 67 | 61 | virtual DECLARE_WRITE16_MEMBER(write_cs1); |
| 62 | virtual DECLARE_WRITE_LINE_MEMBER(write_csel); |
| 63 | virtual DECLARE_WRITE_LINE_MEMBER(write_dasp); |
| 68 | 64 | |
| 69 | 65 | virtual UINT8 *get_features() { return m_features; } |
| 70 | 66 | |
| r23687 | r23688 | |
| 73 | 69 | virtual void device_reset(); |
| 74 | 70 | virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr); |
| 75 | 71 | |
| 72 | virtual int read_sector(UINT32 lba, void *buffer) = 0; |
| 73 | virtual int write_sector(UINT32 lba, const void *buffer) = 0; |
| 76 | 74 | virtual bool is_ready() = 0; |
| 77 | 75 | virtual void read_key(UINT8 key[]) = 0; |
| 78 | 76 | |
| 77 | void set_irq(int state); |
| 78 | void set_dmarq(int state); |
| 79 | |
| 79 | 80 | UINT8 m_gnetreadlock; |
| 80 | 81 | |
| 81 | 82 | UINT8 m_features[IDE_DISK_SECTOR_SIZE]; |
| r23687 | r23688 | |
| 99 | 100 | void read_buffer_empty(); |
| 100 | 101 | void write_buffer_full(); |
| 101 | 102 | |
| 103 | int m_csel; |
| 104 | int m_dasp; |
| 105 | |
| 102 | 106 | int m_cur_drive; |
| 103 | 107 | UINT16 m_cur_cylinder; |
| 104 | 108 | UINT8 m_cur_sector; |