summaryrefslogtreecommitdiffstatshomepage
path: root/src/mess/includes/corvushd.h
blob: 22eab1bcd1f3a9141ebaa017c608fbfa46d840e3 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
/*****************************************************************************
 *
 * includes/corvushd.h
 *
 * Implementation of the Corvus Systems Flat Cable Hard Disk controller
 *
 ****************************************************************************/

#ifndef CORVUSHD_H_
#define CORVUSHD_H_


//
// Controller Commands
//

// Read/Write Commands

#define READ_SECTOR_256			0x02
#define WRITE_SECTOR_256		0x03
#define READ_CHUNK_128			0x12
#define READ_CHUNK_256			0x22
#define READ_CHUNK_512			0x32
#define WRITE_CHUNK_128			0x13
#define WRITE_CHUNK_256			0x23
#define WRITE_CHUNK_512			0x33

// Semaphore Commands

#define SEMAPHORE_LOCK_CODE		0x0b
#define SEMAPHORE_LOCK_MOD			0x01
#define SEMAPHORE_UNLOCK_CODE	0x0b
#define SEMAPHORE_UNLOCK_MOD		0x11
#define SEMAPHORE_INIT_CODE		0x1a
#define SEMAPHORE_INIT_MOD			0x10
#define SEMAPHORE_STATUS_CODE	0x1a
#define SEMAPHORE_STATUS_MOD		0x41

// Pipe Commands

#define PIPE_READ_CODE			0x1a
#define PIPE_READ_MOD				0x20
#define PIPE_WRITE_CODE			0x1a
#define PIPE_WRITE_MOD				0x21
#define PIPE_CLOSE_CODE			0x1a
#define PIPE_CLOSE_MOD				0x40
#define PIPE_STATUS_CODE		0x1a
#define PIPE_STATUS_MOD				0x41
#define PIPE_OPEN_WRITE_CODE	0x1b
#define PIPE_OPEN_WRITE_MOD			0x80
#define PIPE_AREA_INIT_CODE		0x1b
#define PIPE_AREA_INIT_MOD			0xa0
#define PIPE_OPEN_READ_CODE		0x1b
#define PIPE_OPEN_READ_MOD			0xc0

// Active User Table Commands

#define ADDACTIVE_CODE			0x34
#define ADDACTIVE_MOD				0x03
#define DELACTIVEUSR_REVBH_CODE	0x34
#define DELACTIVEUSR_REVBH_MOD		0x00
#define DELACTIVENUM_OMNI_CODE	0x34
#define DELACTIVENUM_OMNI_MOD		0x00
#define DELACTIVEUSR_OMNI_CODE	0x34
#define DELACTIVEUSR_OMNI_MOD		0x31
#define FINDACTIVE_CODE			0x34
#define FINDACTIVE_MOD				0x05
#define READTEMPBLOCK			0xc4
#define WRITETEMPBLOCK			0xb4

// Miscellaneous Commands

#define BOOT					0x14
#define READ_BOOT_BLOCK			0x44
#define GET_DRIVE_PARAMETERS	0x10
#define PARK_HEADS_REVH			0x11
#define PARK_HEADS_OMNI			0x80
#define ECHO					0xf4

// Put drive in Prep Mode

#define PREP_MODE_SELECT		0x11

// Prep Mode Commands

#define PREP_RESET_DRIVE		0x00
#define PREP_FORMAT_DRIVE		0x01
#define PREP_FILL_DRIVE_OMNI	0x81
#define PREP_VERIFY				0x07
#define PREP_READ_FIRMWARE		0x32
#define PREP_WRITE_FIRMWARE		0x33

//
// Controller Status Codes
//

// Disk status codes

#define STAT_SUCCESS			0x00

#define STAT_HEADER_FAULT		0x00
#define STAT_SEEK_TIMEOUT		0x01
#define STAT_SEEK_FAULT			0x02
#define STAT_SEEK_ERROR			0x03
#define STAT_HEADER_CRC_ERROR	0x04
#define STAT_REZERO_FAULT		0x05
#define STAT_REZERO_TIMEOUT		0x06
#define	STAT_DRIVE_NOT_ONLINE	0x07
#define	STAT_WRITE_FAULT		0x08
#define STAT_NOT_USED			0x09
#define STAT_READ_DATA_FAULT	0x0a
#define STAT_DATA_CRC_ERROR		0x0b
#define STAT_SECTOR_LOCATE_ERR	0x0c
#define STAT_WRITE_PROTECTED	0x0d
#define STAT_ILL_SECTOR_ADDRESS	0x0e
#define STAT_ILL_CMD_OP_CODE	0x0f
#define STAT_DRIVE_NOT_ACK		0x10
#define STAT_ACK_STUCK_ACTIVE	0x11
#define STAT_TIMEOUT			0x12
#define STAT_FAULT				0x13
#define STAT_CRC				0x14
#define STAT_SEEK				0x15
#define STAT_VERIFICATION		0x16
#define STAT_SPEED_ERROR		0x17
#define STAT_ILL_ADDRESS		0x18
#define STAT_RW_FAULT_ERROR		0x19
#define STAT_SERVO_ERROR		0x1a
#define STAT_GUARD_BAND			0x1b
#define STAT_PLO_ERROR			0x1c
#define STAT_RW_UNSAFE			0x1d

// Disk status modifiers (added to status code)

#define STAT_RECOVERABLE_ERR	0x20
#define STAT_VERIFY_ERR			0x40
#define STAT_FATAL_ERR			0x80

// Semaphore status codes

#define SEM_PRIOR_STATE_NOT_SET	0x00
#define SEM_PRIOR_STATE_SET		0x80
#define SEM_TABLE_FULL			0xfd
#define SEM_DISK_ERROR			0xfe

// Pipe Status codes

#define PIPE_REQ_SUCCESSFUL		0x00
#define PIPE_EMPTY_PIPE_READ	0x08
#define PIPE_NOT_OPEN			0x09
#define PIPE_WRITE_TO_FULL_PIPE	0x0a
#define PIPE_OPEN_OPEN_PIPE		0x0b
#define PIPE_PIPE_NOT_EXIST		0x0c
#define PIPE_NO_ROOM_FOR_NEW	0x0d
#define PIPE_ILLEGAL_COMMAND	0x0e
#define PIPE_AREA_NOT_INIT		0x0f

// Pipe State codes

#define PIPE_OPEN_WRITE_EMPTY	0x01
#define PIPE_OPEN_READ_EMPTY	0x02
#define PIPE_NOT_OPEN_FULL		0x80
#define PIPE_OPEN_WRITE_FULL	0x81
#define PIPE_OPEN_READ_FULL		0x82

// Status Register Bits

#define CONTROLLER_BUSY			0x80	// Set = Busy, Clear = Ready
#define CONTROLLER_DIRECTION	0x40	// Set = Controller->Host, Clear = Host->Controller


/*----------- defined in machine/corvushd.c -----------*/

//
// Prototypes
//
UINT8 corvus_hdc_init( running_machine &machine );
DECLARE_READ8_HANDLER ( corvus_hdc_status_r );
DECLARE_READ8_HANDLER ( corvus_hdc_data_r );
DECLARE_WRITE8_HANDLER ( corvus_hdc_data_w );


#endif /* CORVUSHD_H_ */