EMU EMAX 1/2 fixes.
[SCSI2SD.git] / software / SCSI2SD / src / scsiPhy.c
index bdd98732072aa3fb2be48a7fb09f03acffe5fcbd..dd3a5797745a54c1b751f580348381340d840027 100755 (executable)
@@ -69,6 +69,14 @@ CY_ISR(scsiResetISR)
        scsiDev.resetFlag = 1;\r
 }\r
 \r
+CY_ISR_PROTO(scsiSelectionISR);\r
+CY_ISR(scsiSelectionISR)\r
+{\r
+       // The SEL signal ISR ensures we wake up from a _WFI() (wait-for-interrupt)\r
+       // call in the main loop without waiting for our 1ms timer to\r
+       // expire. This is done for performance reasons only.\r
+}\r
+\r
 uint8_t\r
 scsiReadDBxPins()\r
 {\r
@@ -221,7 +229,7 @@ scsiReadDMAPoll()
 void\r
 scsiRead(uint8_t* data, uint32_t count)\r
 {\r
-       if (count < 8)\r
+       if (count < 12)\r
        {\r
                scsiReadPIO(data, count);\r
        }\r
@@ -349,7 +357,7 @@ scsiWriteDMAPoll()
 void\r
 scsiWrite(const uint8_t* data, uint32_t count)\r
 {\r
-       if (count < 8)\r
+       if (count < 12)\r
        {\r
                scsiWritePIO(data, count);\r
        }\r
@@ -381,6 +389,11 @@ void scsiEnterPhase(int phase)
        {\r
                SCSI_CTL_PHASE_Write(phase > 0 ? phase : 0);\r
                busSettleDelay();\r
+\r
+               if (scsiDev.compatMode < COMPAT_SCSI2)\r
+               {\r
+                       CyDelayUs(100);\r
+               }\r
        }\r
 }\r
 \r
@@ -470,6 +483,9 @@ void scsiPhyInit()
        scsiPhyInitDMA();\r
 \r
        SCSI_RST_ISR_StartEx(scsiResetISR);\r
+\r
+       SCSI_SEL_ISR_StartEx(scsiSelectionISR);\r
+\r
 }\r
 \r
 // 1 = DBx error\r