trunk/src/emu/machine/idehd.h
| r23686 | r23687 | |
| 34 | 34 | virtual DECLARE_WRITE16_MEMBER(write_cs0) = 0; |
| 35 | 35 | virtual DECLARE_WRITE16_MEMBER(write_cs1) = 0; |
| 36 | 36 | |
| 37 | | UINT8 *get_features() { return m_features;} |
| 37 | virtual UINT8 *get_features() = 0; |
| 38 | 38 | |
| 39 | | UINT16 get_cylinders() { return m_num_cylinders; } |
| 40 | | UINT16 get_sectors() { return m_num_sectors; } |
| 41 | | UINT16 get_heads() { return m_num_heads; } |
| 42 | | virtual bool is_ready() { return true; } |
| 43 | | virtual void read_key(UINT8 key[]) { } |
| 44 | | |
| 45 | 39 | UINT8 m_master_password_enable; |
| 46 | 40 | UINT8 m_user_password_enable; |
| 47 | 41 | const UINT8 * m_master_password; |
| 48 | 42 | const UINT8 * m_user_password; |
| 49 | 43 | |
| 50 | | UINT8 m_gnetreadlock; |
| 51 | | |
| 52 | 44 | int m_csel; |
| 53 | 45 | int m_dasp; |
| 54 | 46 | |
| 55 | 47 | devcb2_write_line m_irq_handler; |
| 56 | 48 | devcb2_write_line m_dmarq_handler; |
| 57 | | |
| 58 | | protected: |
| 59 | | UINT8 m_features[IDE_DISK_SECTOR_SIZE]; |
| 60 | | UINT16 m_num_cylinders; |
| 61 | | UINT8 m_num_sectors; |
| 62 | | UINT8 m_num_heads; |
| 63 | 49 | }; |
| 64 | 50 | |
| 65 | 51 | class ide_mass_storage_device : public device_t, |
| r23686 | r23687 | |
| 80 | 66 | virtual DECLARE_WRITE16_MEMBER(write_cs0); |
| 81 | 67 | virtual DECLARE_WRITE16_MEMBER(write_cs1); |
| 82 | 68 | |
| 69 | virtual UINT8 *get_features() { return m_features; } |
| 70 | |
| 83 | 71 | protected: |
| 84 | 72 | virtual void device_start(); |
| 85 | 73 | virtual void device_reset(); |
| 86 | 74 | virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr); |
| 87 | 75 | |
| 76 | virtual bool is_ready() = 0; |
| 77 | virtual void read_key(UINT8 key[]) = 0; |
| 78 | |
| 79 | UINT8 m_gnetreadlock; |
| 80 | |
| 81 | UINT8 m_features[IDE_DISK_SECTOR_SIZE]; |
| 82 | UINT16 m_num_cylinders; |
| 83 | UINT8 m_num_sectors; |
| 84 | UINT8 m_num_heads; |
| 85 | |
| 88 | 86 | private: |
| 89 | 87 | UINT32 lba_address(); |
| 90 | | void set_geometry(UINT8 sectors, UINT8 heads) { m_num_sectors= sectors; m_num_heads=heads; } |
| 88 | void set_geometry(UINT8 sectors, UINT8 heads) { m_num_sectors = sectors; m_num_heads = heads; } |
| 91 | 89 | void read_sector_done(); |
| 92 | 90 | void write_sector_done(); |
| 93 | 91 | void read_next_sector(); |
| r23686 | r23687 | |
| 141 | 139 | |
| 142 | 140 | virtual int read_sector(UINT32 lba, void *buffer) { return hard_disk_read(m_disk, lba, buffer); } |
| 143 | 141 | virtual int write_sector(UINT32 lba, const void *buffer) { return hard_disk_write(m_disk, lba, buffer); } |
| 144 | | virtual void read_key(UINT8 key[]); |
| 142 | |
| 145 | 143 | protected: |
| 146 | 144 | // device-level overrides |
| 147 | 145 | virtual void device_reset(); |
| r23686 | r23687 | |
| 149 | 147 | // optional information overrides |
| 150 | 148 | virtual machine_config_constructor device_mconfig_additions() const; |
| 151 | 149 | |
| 150 | virtual bool is_ready() { return (m_disk != NULL); } |
| 151 | virtual void read_key(UINT8 key[]); |
| 152 | |
| 152 | 153 | void ide_build_features(); |
| 153 | | virtual bool is_ready() { return (m_disk != NULL); } |
| 154 | | protected: |
| 154 | |
| 155 | 155 | chd_file *m_handle; |
| 156 | 156 | hard_disk_file *m_disk; |
| 157 | 157 | }; |