/// <summary> /// Identifies the drive. /// </summary> protected void IdentifyDrive() { byte drive = (byte)(((deviceHead & 0x10) != 0x10) ? 0 : 1); byte d = (byte)('0' + drive + 1); BinaryFormat data = new BinaryFormat(bufferData); data.Fill(0, 0, 512); // fixed drive and over 5Mb/sec data.SetUShort(0x00, 0x140); // Serial Number data.Fill(0x0A * 2, d, 20); data.SetByte(0x0A * 2, d); // Firmware version data.Fill(0x17 * 2, d, 8); data.SetChar(0x17 * 2 + 0, '1'); data.SetChar(0x17 * 2 + 1, '.'); data.SetChar(0x17 * 2 + 2, '0'); // Model Number data.Fill(0x1B * 2, d, 40); data.SetChar(0x17 * 2 + 0, 'D'); data.SetChar(0x17 * 2 + 1, 'R'); data.SetChar(0x17 * 2 + 2, 'I'); data.SetChar(0x17 * 2 + 3, 'V'); data.SetChar(0x17 * 2 + 4, 'E'); data.SetByte(0x1B * 2 + 5, d); // lba28 data.SetUInt(0x3C * 2, (uint)(driveFiles[drive].Length / 512)); commandStatus = (byte)((commandStatus | 0x08) & ~0x80); // Set DRQ (bit 3), clear BUSY (bit 7) status = DeviceStatus.IdentifyDrive; }