summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/bus/nscsi/cd.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/devices/bus/nscsi/cd.h')
-rw-r--r--src/devices/bus/nscsi/cd.h126
1 files changed, 126 insertions, 0 deletions
diff --git a/src/devices/bus/nscsi/cd.h b/src/devices/bus/nscsi/cd.h
new file mode 100644
index 00000000000..1a87e150b13
--- /dev/null
+++ b/src/devices/bus/nscsi/cd.h
@@ -0,0 +1,126 @@
+// license:BSD-3-Clause
+// copyright-holders:Olivier Galibert
+#ifndef MAME_BUS_NSCSI_CD_H
+#define MAME_BUS_NSCSI_CD_H
+
+#pragma once
+
+#include "machine/nscsi_bus.h"
+#include "imagedev/chd_cd.h"
+#include "cdrom.h"
+
+class nscsi_cdrom_device : public nscsi_full_device
+{
+public:
+ nscsi_cdrom_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock = 0);
+
+ void set_block_size(u32 block_size);
+
+protected:
+ nscsi_cdrom_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock = 0);
+
+ 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)
+ : nscsi_cdrom_device(mconfig, type, tag, owner, 0)
+ {
+ strncpy(manufacturer, mfr, 8);
+ strncpy(this->product, product, 16);
+ strncpy(revision, rev, 4);
+ inquiry_data = inq_data;
+ this->compliance = compliance;
+ }
+
+ virtual void device_start() override;
+ virtual void device_reset() override;
+ virtual void device_add_mconfig(machine_config &config) override;
+
+ virtual void scsi_command() override;
+ virtual uint8_t scsi_get_data(int id, int pos) override;
+ virtual void scsi_put_data(int buf, int offset, uint8_t data) override;
+
+ cdrom_file *cdrom;
+
+private:
+ static constexpr uint32_t bytes_per_sector = 2048;
+
+ uint8_t sector_buffer[bytes_per_sector];
+ uint32_t bytes_per_block;
+ int lba, cur_sector;
+ required_device<cdrom_image_device> image;
+ uint8_t mode_data[12];
+
+ char manufacturer[8];
+ char product[16];
+ char revision[4];
+ uint8_t inquiry_data;
+ uint8_t compliance;
+
+ void return_no_cd();
+ static int to_msf(int frame);
+};
+
+class nscsi_cdrom_sgi_device : public nscsi_cdrom_device
+{
+public:
+ nscsi_cdrom_sgi_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock = 0);
+
+protected:
+ virtual void scsi_command() override;
+ virtual bool scsi_command_done(uint8_t command, uint8_t length) override;
+};
+
+class nscsi_dec_rrd45_device : public nscsi_cdrom_device
+{
+public:
+ nscsi_dec_rrd45_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock = 0);
+};
+
+class nscsi_toshiba_xm3301_device : public nscsi_cdrom_device
+{
+public:
+ nscsi_toshiba_xm3301_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock = 0);
+};
+
+class nscsi_toshiba_xm5301_sun_device : public nscsi_cdrom_device
+{
+public:
+ nscsi_toshiba_xm5301_sun_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock = 0);
+};
+
+class nscsi_toshiba_xm5401_sun_device : public nscsi_cdrom_device
+{
+public:
+ nscsi_toshiba_xm5401_sun_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock = 0);
+};
+
+class nscsi_toshiba_xm5701_device : public nscsi_cdrom_device
+{
+public:
+ nscsi_toshiba_xm5701_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock = 0);
+};
+
+class nscsi_toshiba_xm5701_sun_device : public nscsi_cdrom_device
+{
+public:
+ nscsi_toshiba_xm5701_sun_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock = 0);
+};
+
+class nscsi_cdrom_apple_device : public nscsi_cdrom_device
+{
+public:
+ nscsi_cdrom_apple_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock = 0);
+
+protected:
+ virtual void scsi_command() override;
+};
+
+DECLARE_DEVICE_TYPE(NSCSI_CDROM, nscsi_cdrom_device)
+DECLARE_DEVICE_TYPE(NSCSI_CDROM_SGI, nscsi_cdrom_sgi_device)
+DECLARE_DEVICE_TYPE(NSCSI_RRD45, nscsi_dec_rrd45_device)
+DECLARE_DEVICE_TYPE(NSCSI_XM3301, nscsi_toshiba_xm3301_device)
+DECLARE_DEVICE_TYPE(NSCSI_XM5301SUN, nscsi_toshiba_xm5301_sun_device)
+DECLARE_DEVICE_TYPE(NSCSI_XM5401SUN, nscsi_toshiba_xm5401_sun_device)
+DECLARE_DEVICE_TYPE(NSCSI_XM5701, nscsi_toshiba_xm5701_device)
+DECLARE_DEVICE_TYPE(NSCSI_XM5701SUN, nscsi_toshiba_xm5701_sun_device)
+DECLARE_DEVICE_TYPE(NSCSI_CDROM_APPLE, nscsi_cdrom_apple_device)
+
+#endif // MAME_BUS_NSCSI_CD_H