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