Merge pull request #130 from mynameistroy/troy/optical
CD/DVD emulation
This commit is contained in:
commit
dc9552410f
1296
src/BlueSCSI.cpp
1296
src/BlueSCSI.cpp
File diff suppressed because it is too large
Load Diff
|
@ -26,6 +26,17 @@
|
|||
#define ERROR_FALSE_INIT 3
|
||||
#define ERROR_NO_SDCARD 5
|
||||
|
||||
enum SCSI_DEVICE_TYPE
|
||||
{
|
||||
SCSI_DEVICE_HDD,
|
||||
SCSI_DEVICE_OPTICAL,
|
||||
};
|
||||
|
||||
#define CDROM_RAW_SECTORSIZE 2352
|
||||
#define CDROM_COMMON_SECTORSIZE 2048
|
||||
|
||||
#define MAX_SCSI_COMMAND 0xff
|
||||
#define SCSI_COMMAND_HANDLER(x) static byte x(SCSI_DEVICE *dev, const byte *cdb)
|
||||
|
||||
#if DEBUG
|
||||
#define LOG(XX) Serial.print(XX)
|
||||
|
@ -178,7 +189,7 @@
|
|||
|
||||
#define SCSI_TARGET_ACTIVE() { gpio_mode(REQ, GPIO_OUTPUT_PP); gpio_mode(MSG, GPIO_OUTPUT_PP); gpio_mode(CD, GPIO_OUTPUT_PP); gpio_mode(IO, GPIO_OUTPUT_PP); gpio_mode(BSY, GPIO_OUTPUT_PP); TRANSCEIVER_IO_SET(vTR_TARGET,TR_OUTPUT);}
|
||||
// BSY,REQ,MSG,CD,IO Turn off output, BSY is the last input
|
||||
#define SCSI_TARGET_INACTIVE() { pinMode(REQ, INPUT); pinMode(MSG, INPUT); pinMode(CD, INPUT); pinMode(IO, INPUT); pinMode(BSY, INPUT); TRANSCEIVER_IO_SET(vTR_TARGET,TR_INPUT); }
|
||||
#define SCSI_TARGET_INACTIVE() { gpio_mode(REQ, GPIO_INPUT_FLOATING); gpio_mode(MSG, GPIO_INPUT_FLOATING); gpio_mode(CD, GPIO_INPUT_FLOATING); gpio_mode(IO, GPIO_INPUT_FLOATING); gpio_mode(BSY, GPIO_INPUT_FLOATING); TRANSCEIVER_IO_SET(vTR_TARGET,TR_INPUT); }
|
||||
|
||||
#define DB_MODE_OUT 1 // push-pull mode
|
||||
#define DB_MODE_IN 4 // floating inputs
|
||||
|
@ -207,7 +218,7 @@
|
|||
// Put DB and DP in output mode
|
||||
#define SCSI_DB_OUTPUT() { PBREG->CRL=(PBREG->CRL &0xfffffff0)|DB_MODE_OUT; PBREG->CRH = 0x11111111*DB_MODE_OUT; }
|
||||
// Put DB and DP in input mode
|
||||
#define SCSI_DB_INPUT() { PBREG->CRL=(PBREG->CRL &0xfffffff0)|DB_MODE_IN ; PBREG->CRH = 0x11111111*DB_MODE_IN; }
|
||||
#define SCSI_DB_INPUT() { PBREG->CRL=(PBREG->CRL &0xfffffff0)|DB_MODE_IN ; PBREG->CRH = (uint32_t)(0x11111111*DB_MODE_IN); }
|
||||
|
||||
// HDDiamge file
|
||||
#define HDIMG_ID_POS 2 // Position to embed ID number
|
||||
|
@ -250,14 +261,7 @@ uint32_t db_bsrr[256];
|
|||
// #define GET_CDB6_LBA(x) ((x[2] & 01f) << 16) | (x[3] << 8) | x[4]
|
||||
#define READ_DATA_BUS() (byte)((~(uint32_t)GPIOB->regs->IDR)>>8)
|
||||
|
||||
enum SCSI_DEVICE_TYPE
|
||||
{
|
||||
SCSI_DEVICE_HDD,
|
||||
SCSI_DEVICE_OPTICAL,
|
||||
};
|
||||
|
||||
#define CDROM_RAW_SECTORSIZE 2352
|
||||
#define CDROM_COMMON_SECTORSIZE 2048
|
||||
|
||||
struct SCSI_INQUIRY_DATA
|
||||
{
|
||||
|
@ -307,16 +311,18 @@ struct SCSI_INQUIRY_DATA
|
|||
// HDD image
|
||||
typedef __attribute__((aligned(4))) struct _SCSI_DEVICE
|
||||
{
|
||||
FsFile *m_file; // File object
|
||||
uint64_t m_fileSize; // File size
|
||||
uint16_t m_blocksize; // SCSI BLOCK size
|
||||
uint8_t m_type; // SCSI device type
|
||||
uint32_t m_blockcount; // blockcount
|
||||
bool m_raw; // Raw disk
|
||||
SCSI_INQUIRY_DATA *inquiry_block; // SCSI information
|
||||
FsFile *m_file; // File object
|
||||
uint64_t m_fileSize; // File size
|
||||
uint16_t m_blocksize; // SCSI BLOCK size
|
||||
uint16_t m_rawblocksize; // OPTICAL raw sector size
|
||||
uint8_t m_type; // SCSI device type
|
||||
uint32_t m_blockcount; // blockcount
|
||||
bool m_raw; // Raw disk
|
||||
SCSI_INQUIRY_DATA *inquiry_block; // SCSI information
|
||||
uint8_t m_senseKey; // Sense key
|
||||
uint16_t m_additional_sense_code; // ASC/ASCQ
|
||||
bool m_mode2; // MODE2 CDROM
|
||||
uint8_t m_sector_offset; // optical sector offset for missing sync header
|
||||
} SCSI_DEVICE;
|
||||
|
||||
|
||||
|
|
|
@ -27,6 +27,7 @@
|
|||
#define SCSI_ASC_WRITE_PROTECTED 0x2700
|
||||
#define SCSI_ASC_CANNOT_READ_MEDIUM_UNKNOWN_FORMAT 0x3001
|
||||
#define SCSI_ASC_CANNOT_READ_MEDIUM_INCOMPATIBLE_FORMAT 0x3002
|
||||
#define SCSI_ASC_SAVING_PARAMETERS_NOT_SUPPORTED 0x3900
|
||||
#define SCSI_ASC_MEDIUM_NOT_PRESENT 0x3A00
|
||||
#define SCSI_ASC_LUN_NOT_READY_MANUAL_INTERVENTION_REQUIRED 0x0403
|
||||
|
||||
|
@ -39,6 +40,8 @@
|
|||
#define SCSI_SENSE_MODE_DISK_GEOMETRY 0x04
|
||||
#define SCSI_SENSE_MODE_FLEXABLE_GEOMETRY 0x05
|
||||
#define SCSI_SENSE_MODE_CACHING 0x08
|
||||
#define SCSI_SENSE_MODE_CDROM 0x0D
|
||||
#define SCSI_SENSE_MODE_CDROM_AUDIO_CONTROL 0x0E
|
||||
#define SCSI_SENSE_MODE_VENDOR_APPLE 0x30
|
||||
|
||||
#define SCSI_SENSE_MODE_ALL 0x3F
|
||||
|
|
Loading…
Reference in New Issue