mame/src/mess/includes/corvushd.h
2013-01-11 07:32:46 +00:00

183 lines
5.1 KiB
C

/*****************************************************************************
*
* 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_ */