|
|
1.1 root 1: /*
2: Hatari
3:
4: This file contains definitios used for hardware-level
5: harddrive emulation
6:
7: */
8:
9:
10: /* HD Command packet macros */
11: #define HD_OPCODE(a) (a.command[0] & 0x1F) /* get opcode (bit 0-4) */
12: #define HD_CONTROLLER(a) ((a.command[0] & 0xE0)>>5) /* get HD controller # (5-7) */
13: #define HD_DRIVENUM(a) ((a.command[1] & 0xE0) >>5) /* get drive # (5-7) */
14:
15: #define HD_LBA_MSB(a) ((unsigned) a.command[1] & 0x1F) /* Logical Block adress, MSB */
16: #define HD_LBA_MID(a) ((unsigned) a.command[2]) /* Logical Block adress */
17: #define HD_LBA_LSB(a) ((unsigned) a.command[3]) /* Logical Block adress, LSB */
18:
19: #define HD_SECTORCOUNT(a) (a.command[4] & 0xFF) /* get sector count */
20: #define HD_CONTROL(a) (a.command[5] & 0xFF) /* get control byte */
21:
22:
23: /* Opcodes */
24: /* The following are multi-sector transfers with seek implied */
25: #define HD_VERIFY_TRACK 0x05 /* Verify track */
26: #define HD_FORMAT_TRACK 0x06 /* Format track */
27: #define HD_READ_SECTOR 0x08 /* Read sector */
28: #define HD_WRITE_SECTOR 0x0A /* Write sector */
29:
30: /* other codes */
31: #define HD_SEEK 0x0B /* Seek */
32: #define HD_CORRECTION 0x0D /* Correction */
33: #define HD_INQUIRY 0x12 /* Inquiry */
34: #define HD_MODESENSE 0x1A /* Mode sense */
35: #define HD_REQ_SENSE 0x03 /* Request sense */
36: #define HD_SHIP 0x1B /* Ship drive */
37:
38: #define HD_STATUS_OK 0 /* OK return status */
39: #define HD_STATUS_NODRIVE 0x25 /* Invalid drive */
40: #define HD_STATUS_OPCODE 0x20 /* Opcode not supported */
41:
42: #define ACSI_EMU_ON (nPartitions != 0)
43: /* do we have hdc emulation */
44: /*
45: Structure representing an ACSI command block.
46: */
47: typedef struct {
48: int byteCount; /* count of number of command bytes written */
49: unsigned char command[6];
50: short int returnCode; /* return code from the HDC operation */
51: } HDCOMMAND;
52:
53: extern FILE *hd_image_file;
54: extern HDCOMMAND HDCCommand;
55: extern short int HDCSectorCount;
56: extern int nPartitions;
57:
58: extern void HDC_WriteCommandPacket();
59: extern void HDC_DebugCommandPacket();
60: extern void HDC_EmulateCommandPacket();
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.