1 // license:BSD-3-Clause 2 // copyright-holders:Olivier Galibert 3 #ifndef MAME_MACHINE_NSCSI_S1410_H 4 #define MAME_MACHINE_NSCSI_S1410_H 5 6 #pragma once 7 8 #include "machine/nscsi_bus.h" 9 #include "bus/nscsi/hd.h" 10 11 class nscsi_s1410_device : public nscsi_harddisk_device 12 { 13 public: 14 nscsi_s1410_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); 15 16 protected: 17 // SCSI status returns 18 enum { 19 SS_GOOD = 0x00, 20 SS_NO_INDEX = 0x01, 21 SS_NO_SEEK_COMPLETE = 0x02, 22 SS_WRITE_FAULT = 0x03, 23 SS_NOT_READY = 0x04, 24 SS_TK00_NOT_FOUND = 0x06, 25 SS_SEEK_IN_PROGRESS = 0x08, 26 SS_ID_FIELD_ERROR = 0x10, 27 SS_DATA_ERROR = 0x11, 28 SS_SAM_NOT_FOUND = 0x12, 29 SS_SECTOR_NOT_FOUND = 0x14, 30 SS_SEEK_ERROR = 0x15, 31 SS_ECC = 0x18, 32 SS_BAD_TRACK = 0x19, 33 SS_FORMAT_ERROR = 0x1a, 34 SS_ALT_TRACK = 0x1c, 35 SS_ALT_TRACK_DEFECT = 0x1d, 36 SS_ALT_TRACK_NOT_FOUND = 0x1e, 37 SS_ALT_TRACK_SAME = 0x1f, 38 SS_RAM_ERROR = 0x30, 39 SS_ROM_ERROR = 0x31, 40 SS_ECC_CHECK_FAILURE = 0x32 41 }; 42 43 // SCSI commands 44 enum { 45 SC_TEST_UNIT_READY = 0x00, 46 SC_REZERO = 0x01, 47 SC_REQUEST_SENSE = 0x03, 48 SC_FORMAT_UNIT = 0x04, 49 SC_CHECK_TRACK_FORMAT = 0x05, 50 SC_FORMAT_TRACK = 0x06, 51 SC_REASSIGN_BLOCKS = 0x07, 52 SC_READ = 0x08, 53 SC_WRITE = 0x0a, 54 SC_SEEK = 0x0b, 55 SC_INIT_DRIVE_PARAMS = 0x0c, 56 SC_READ_ECC_BURST = 0x0d, 57 SC_FORMAT_ALT_TRACK = 0x0e, 58 SC_WRITE_SECTOR_BUFFER = 0x0f, 59 SC_READ_SECTOR_BUFFER = 0x10, 60 SC_RAM_DIAG = 0xe0, 61 SC_DRIVE_DIAG = 0xe3, 62 SC_CONTROLLER_DIAG = 0xe4, 63 SC_READ_LONG = 0xe5, 64 SC_WRITE_LONG = 0xe6 65 }; 66 67 virtual void device_reset() override; 68 69 virtual void scsi_command() override; 70 virtual uint8_t scsi_get_data(int id, int pos) override; 71 virtual void scsi_put_data(int buf, int offset, uint8_t data) override; 72 73 uint8_t params[8]; 74 }; 75 76 DECLARE_DEVICE_TYPE(NSCSI_S1410, nscsi_s1410_device) 77 78 #endif // MAME_BUS_NSCSI_S1410_H 79