1 // license:BSD-3-Clause 2 // copyright-holders:Olivier Galibert 3 #ifndef MAME_BUS_NSCSI_CD_H 4 #define MAME_BUS_NSCSI_CD_H 5 6 #pragma once 7 8 #include "machine/nscsi_bus.h" 9 #include "imagedev/chd_cd.h" 10 #include "cdrom.h" 11 12 class nscsi_cdrom_device : public nscsi_full_device 13 { 14 public: 15 nscsi_cdrom_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock = 0); 16 17 void set_block_size(u32 block_size); 18 19 protected: 20 nscsi_cdrom_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock = 0); 21 nscsi_cdrom_device(const machine_config & mconfig,device_type type,const char * tag,device_t * owner,const char * mfr,const char * product,const char * rev,uint8_t inq_data,uint8_t compliance)22 nscsi_cdrom_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, const char *mfr, const char *product, const char *rev, uint8_t inq_data, uint8_t compliance) 23 : nscsi_cdrom_device(mconfig, type, tag, owner, 0) 24 { 25 strncpy(manufacturer, mfr, 8); 26 strncpy(this->product, product, 16); 27 strncpy(revision, rev, 4); 28 inquiry_data = inq_data; 29 this->compliance = compliance; 30 } 31 32 virtual void device_start() override; 33 virtual void device_reset() override; 34 virtual void device_add_mconfig(machine_config &config) override; 35 36 virtual void scsi_command() override; 37 virtual uint8_t scsi_get_data(int id, int pos) override; 38 virtual void scsi_put_data(int buf, int offset, uint8_t data) override; 39 40 cdrom_file *cdrom; 41 42 private: 43 static constexpr uint32_t bytes_per_sector = 2048; 44 45 uint8_t sector_buffer[bytes_per_sector]; 46 uint32_t bytes_per_block; 47 int lba, cur_sector; 48 required_device<cdrom_image_device> image; 49 uint8_t mode_data[12]; 50 51 char manufacturer[8]; 52 char product[16]; 53 char revision[4]; 54 uint8_t inquiry_data; 55 uint8_t compliance; 56 57 void return_no_cd(); 58 static int to_msf(int frame); 59 }; 60 61 class nscsi_cdrom_sgi_device : public nscsi_cdrom_device 62 { 63 public: 64 nscsi_cdrom_sgi_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock = 0); 65 66 protected: 67 virtual void scsi_command() override; 68 virtual bool scsi_command_done(uint8_t command, uint8_t length) override; 69 }; 70 71 class nscsi_dec_rrd45_device : public nscsi_cdrom_device 72 { 73 public: 74 nscsi_dec_rrd45_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock = 0); 75 }; 76 77 class nscsi_toshiba_xm3301_device : public nscsi_cdrom_device 78 { 79 public: 80 nscsi_toshiba_xm3301_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock = 0); 81 }; 82 83 class nscsi_toshiba_xm5301_sun_device : public nscsi_cdrom_device 84 { 85 public: 86 nscsi_toshiba_xm5301_sun_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock = 0); 87 }; 88 89 class nscsi_toshiba_xm5401_sun_device : public nscsi_cdrom_device 90 { 91 public: 92 nscsi_toshiba_xm5401_sun_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock = 0); 93 }; 94 95 class nscsi_toshiba_xm5701_device : public nscsi_cdrom_device 96 { 97 public: 98 nscsi_toshiba_xm5701_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock = 0); 99 }; 100 101 class nscsi_toshiba_xm5701_sun_device : public nscsi_cdrom_device 102 { 103 public: 104 nscsi_toshiba_xm5701_sun_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock = 0); 105 }; 106 107 class nscsi_cdrom_apple_device : public nscsi_cdrom_device 108 { 109 public: 110 nscsi_cdrom_apple_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock = 0); 111 112 protected: 113 virtual void scsi_command() override; 114 }; 115 116 DECLARE_DEVICE_TYPE(NSCSI_CDROM, nscsi_cdrom_device) 117 DECLARE_DEVICE_TYPE(NSCSI_CDROM_SGI, nscsi_cdrom_sgi_device) 118 DECLARE_DEVICE_TYPE(NSCSI_RRD45, nscsi_dec_rrd45_device) 119 DECLARE_DEVICE_TYPE(NSCSI_XM3301, nscsi_toshiba_xm3301_device) 120 DECLARE_DEVICE_TYPE(NSCSI_XM5301SUN, nscsi_toshiba_xm5301_sun_device) 121 DECLARE_DEVICE_TYPE(NSCSI_XM5401SUN, nscsi_toshiba_xm5401_sun_device) 122 DECLARE_DEVICE_TYPE(NSCSI_XM5701, nscsi_toshiba_xm5701_device) 123 DECLARE_DEVICE_TYPE(NSCSI_XM5701SUN, nscsi_toshiba_xm5701_sun_device) 124 DECLARE_DEVICE_TYPE(NSCSI_CDROM_APPLE, nscsi_cdrom_apple_device) 125 126 #endif // MAME_BUS_NSCSI_CD_H 127