|
|
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.