Compare commits
28 Commits
prerelease
...
main
Author | SHA1 | Date |
---|---|---|
Eric Helgeson | bf5823468a | |
Eric Helgeson | 2baa0155e1 | |
Sam Edwards | 3a9db99723 | |
Sam Edwards | 70eda86484 | |
Sam Edwards | 9d4207ea14 | |
Sam Edwards | 1d49003fe1 | |
Sam Edwards | 0a30396c3b | |
Sam Edwards | ba06827814 | |
Eric Helgeson | a45af3edec | |
William Leara | 0be37ccde0 | |
Eric Helgeson | e236b5b054 | |
Sam Edwards | 47179c5fd0 | |
Eric Helgeson | 59c858332a | |
Eric Helgeson | dddb7bfc1c | |
Eric Helgeson | 8b79df00ba | |
Eric Helgeson | 7c9428131b | |
Eric Helgeson | e35bae560c | |
Eric Helgeson | 13d7b985b7 | |
Eric Helgeson | 27b7427301 | |
Eric Helgeson | 98162fcd84 | |
Eric Helgeson | 2be810e2ca | |
Eric Helgeson | 4f7c0fe2c2 | |
Sam Edwards | 458617a827 | |
Eric Helgeson | 810eae9be3 | |
Sam Edwards | d67fa80cf0 | |
Eric Helgeson | 9e746ba145 | |
Eric Helgeson | e0d115f33c | |
Eric Helgeson | 27d13192b0 |
|
@ -3,3 +3,4 @@
|
|||
.vscode/
|
||||
workspace.code-workspace
|
||||
dist/
|
||||
hw/*/*-backups/
|
||||
|
|
Binary file not shown.
|
@ -11,9 +11,7 @@ upload_protocol = stlink
|
|||
; Different gcc versions produce much different binaries in terms of speed.
|
||||
platform_packages = platformio/toolchain-gccarmnoneeabi@1.90301.200702
|
||||
build_flags =
|
||||
-DARDUINO_GENERIC_STM32F103C
|
||||
-DARDUINO_LIB_DISCOVERY_PHASE
|
||||
-DARDUINO=10813
|
||||
-DARDUINO_ARCH_STM32
|
||||
-DDEBUG_LEVEL=DEBUG_NONE
|
||||
-O2
|
||||
|
@ -78,9 +76,7 @@ build_flags =
|
|||
-D USB_MANUFACTURER="Unknown"
|
||||
-D USB_PRODUCT="\"BLUEPILL_F103C8\""
|
||||
-D HAL_PCD_MODULE_ENABLED
|
||||
-DARDUINO_GENERIC_STM32F103C
|
||||
-DARDUINO_LIB_DISCOVERY_PHASE
|
||||
-DARDUINO=10813
|
||||
-DARDUINO_ARCH_STM32
|
||||
-DDEBUG_LEVEL=DEBUG_NONE
|
||||
-O2
|
||||
|
|
768
src/BlueSCSI.cpp
768
src/BlueSCSI.cpp
File diff suppressed because it is too large
Load Diff
|
@ -99,8 +99,6 @@ enum SCSI_DEVICE_TYPE
|
|||
#define IO PB7 // SCSI:I/O
|
||||
|
||||
#define SD_CS PA4 // SDCARD:CS
|
||||
#define LED PC13 // LED
|
||||
#define LED2 PA0 // External LED
|
||||
|
||||
// Image Set Selector
|
||||
#ifdef XCVR
|
||||
|
@ -116,17 +114,29 @@ enum SCSI_DEVICE_TYPE
|
|||
#define PBREG GPIOB->regs
|
||||
#define PCREG GPIOC->regs
|
||||
|
||||
// LED control
|
||||
#define LED_ON() PCREG->BSRR = 0b00100000000000000000000000000000; PAREG->BSRR = 0b00000000000000000000000000000001;
|
||||
#define LED_OFF() PCREG->BSRR = 0b00000000000000000010000000000000; PAREG->BSRR = 0b00000000000000010000000000000000;
|
||||
|
||||
// Virtual pin (Arduio compatibility is slow, so make it MCU-dependent)
|
||||
#define PA(BIT) (BIT)
|
||||
#define PB(BIT) (BIT+16)
|
||||
#define PC(BIT) (BIT+32)
|
||||
|
||||
// Virtual pin decoding
|
||||
#define GPIOREG(VPIN) ((VPIN)>=16?PBREG:PAREG)
|
||||
#define GPIOREG(VPIN) ((VPIN)>=16?((VPIN)>=32?PCREG:PBREG):PAREG)
|
||||
#define BITMASK(VPIN) (1<<((VPIN)&15))
|
||||
|
||||
// Built-in LED
|
||||
#define LED PC13
|
||||
#define vLED PC(13)
|
||||
#define LED_MODE GPIO_OUTPUT_OD
|
||||
|
||||
// External LED
|
||||
#define LED2 PA0
|
||||
#define vLED2 PA(0)
|
||||
#define LED2_MODE GPIO_OUTPUT_PP
|
||||
|
||||
// LED control
|
||||
#define LED_ON() GPIOREG(vLED)->BSRR = BITMASK(vLED) << (LED_MODE == GPIO_OUTPUT_PP ? 0 : 16); GPIOREG(vLED2)->BSRR = BITMASK(vLED2) << (LED2_MODE == GPIO_OUTPUT_PP ? 0 : 16);
|
||||
#define LED_OFF() GPIOREG(vLED)->BSRR = BITMASK(vLED) << (LED_MODE == GPIO_OUTPUT_PP ? 16 : 0); GPIOREG(vLED2)->BSRR = BITMASK(vLED2) << (LED2_MODE == GPIO_OUTPUT_PP ? 16 : 0);
|
||||
|
||||
#define vATN PA(8) // SCSI:ATN
|
||||
#define vBSY PA(9) // SCSI:BSY
|
||||
#define vACK PA(10) // SCSI:ACK
|
||||
|
@ -172,7 +182,7 @@ enum SCSI_DEVICE_TYPE
|
|||
| 1 | 1 | 1 | MESSAGE IN | Initiator from target / | phase |
|
||||
|-----------------------------------------------------------------------------|
|
||||
| Key: 0 = False, 1 = True, * = Reserved for future standardization |
|
||||
+=============================================================================+
|
||||
+=============================================================================+
|
||||
*/
|
||||
// SCSI phase change as single write to port B
|
||||
#define SCSIPHASEMASK(MSGACTIVE, CDACTIVE, IOACTIVE) ((BITMASK(vMSG)<<((MSGACTIVE)?16:0)) | (BITMASK(vCD)<<((CDACTIVE)?16:0)) | (BITMASK(vIO)<<((IOACTIVE)?16:0)))
|
||||
|
@ -235,14 +245,15 @@ enum SCSI_DEVICE_TYPE
|
|||
// 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 = (uint32_t)(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
|
||||
#define HDIMG_LUN_POS 3 // Position to embed LUN numbers
|
||||
#define HDIMG_BLK_POS 5 // Position to embed block size numbers
|
||||
#define MAX_FILE_PATH 64 // Maximum file name length
|
||||
|
||||
#define MAX_MAC_PATH 32 // Maximum file name length on vintage macs
|
||||
#define MAC_BLK_SIZE 4096
|
||||
/*
|
||||
* Data byte to BSRR register setting value and parity table
|
||||
*/
|
||||
|
@ -329,15 +340,15 @@ typedef 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
|
||||
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
|
||||
SCSI_INQUIRY_DATA inquiry_block; // SCSI information
|
||||
SCSI_INQUIRY_DATA inquiry_block; // SCSI information
|
||||
uint8_t m_senseKey; // Sense key
|
||||
uint16_t m_additional_sense_code; // ASC/ASCQ
|
||||
uint16_t m_additional_sense_code; // ASC/ASCQ
|
||||
uint8_t m_sector_offset; // optical sector offset for missing sync header
|
||||
uint8_t flags; // various device flags
|
||||
} SCSI_DEVICE;
|
||||
|
|
|
@ -51,6 +51,14 @@
|
|||
#define SCSI_READ12 0xA8
|
||||
#define SCSI_VERIFY12 0xAF
|
||||
|
||||
#define BLUESCSI_LIST_FILES 0xD0
|
||||
#define BLUESCSI_GET_FILE 0xD1
|
||||
#define BLUESCSI_COUNT_FILES 0xD2
|
||||
#define BLUESCSI_SEND_PREP 0xD3
|
||||
#define BLUESCSI_SEND 0xD4
|
||||
#define BLUESCSI_SEND_END 0xD5
|
||||
|
||||
|
||||
|
||||
#define SCSI_TOC_LENGTH 20 // length for default CDROM TOC
|
||||
|
||||
|
|
|
@ -31,6 +31,9 @@
|
|||
#define SCSI_ASC_MEDIUM_NOT_PRESENT 0x3A00
|
||||
#define SCSI_ASC_LUN_NOT_READY_MANUAL_INTERVENTION_REQUIRED 0x0403
|
||||
|
||||
// OpenRetroSCSI Vendor Sense
|
||||
#define OPEN_RETRO_SCSI_TOO_MANY_FILES 0x0001
|
||||
|
||||
|
||||
// SCSI mode page codes
|
||||
#define SCSI_SENSE_MODE_VENDOR 0x00
|
||||
|
@ -44,6 +47,8 @@
|
|||
#define SCSI_SENSE_MODE_CDROM_AUDIO_CONTROL 0x0E
|
||||
#define SCSI_SENSE_MODE_VENDOR_APPLE 0x30
|
||||
|
||||
#define SCSI_SENSE_MODE_VENDOR_BLUESCSI 0x31 // Lookup range for vndr
|
||||
|
||||
#define SCSI_SENSE_MODE_ALL 0x3F
|
||||
|
||||
|
||||
|
|
Loading…
Reference in New Issue