Read performance improvements
[SCSI2SD-V6.git] / software / SCSI2SD / SCSI2SD.cydsn / loopback.c
index 411899a..b64405a 100755 (executable)
 //     along with SCSI2SD.  If not, see <http://www.gnu.org/licenses/>.\r
 \r
 #include "loopback.h"\r
+#include "scsi.h"\r
 #include "device.h"\r
+#include "scsiPhy.h"\r
 \r
 // Return true if all inputs are un-asserted (1)\r
 // Note that CyPins returns non-zero if pin is active. It does NOT\r
 // necessarily return 1.\r
 static int test_initial_inputs(void)\r
 {\r
-       uint8 dbx = SCSI_In_DBx_Read();\r
+       uint8 dbx = scsiReadDBxPins();\r
        int result =\r
                (dbx == 0xFF) &&\r
                CyPins_ReadPin(SCSI_In_DBP) &&\r
-               CyPins_ReadPin(SCSI_In_ATN) &&\r
+               CyPins_ReadPin(SCSI_ATN_INT) &&\r
                CyPins_ReadPin(SCSI_In_BSY)     &&\r
                CyPins_ReadPin(SCSI_In_ACK) &&\r
-               CyPins_ReadPin(SCSI_In_RST) &&\r
+               CyPins_ReadPin(SCSI_RST_INT) &&\r
                CyPins_ReadPin(SCSI_In_MSG) &&\r
                CyPins_ReadPin(SCSI_In_SEL) &&\r
                CyPins_ReadPin(SCSI_In_CD) &&\r
@@ -40,6 +42,7 @@ static int test_initial_inputs(void)
        return result;\r
 }\r
 \r
+/* Not currently possible to write directly to the output pins\r
 static int test_data_lines(void)\r
 {\r
        int result = 1;\r
@@ -57,6 +60,7 @@ static int test_data_lines(void)
        SCSI_Out_DBx_Write(0);\r
        return result;\r
 }\r
+*/\r
 \r
 static int test_data_10MHz(void)\r
 {\r
@@ -68,11 +72,12 @@ static int test_data_10MHz(void)
        int i;\r
        for (i = 0; i < 100; ++i)\r
        {\r
+               uint8 dbx;\r
                // We write using Active High\r
                SCSI_Out_DBx_Write(0xFF);\r
                CyDelayCycles(3);\r
                // And expect an Active Low response.\r
-               uint8 dbx = SCSI_In_DBx_Read();\r
+               dbx = SCSI_In_DBx_Read();\r
                result = result && (dbx == 0);\r
                \r
                // We write using Active High\r
@@ -86,6 +91,25 @@ static int test_data_10MHz(void)
        return result;\r
 }\r
 \r
+static int test_ATN_interrupt(void)\r
+{\r
+       int result = 1;\r
+       int i;\r
+       \r
+       scsiDev.atnFlag = 0;\r
+       for (i = 0; i < 100 && result; ++i)\r
+       {\r
+               // We write using Active High\r
+               CyPins_SetPin(SCSI_Out_ATN);\r
+               CyDelayCycles(2);\r
+               result &= scsiDev.atnFlag == 1;\r
+               scsiDev.atnFlag = 0;\r
+               CyPins_ClearPin(SCSI_Out_ATN);\r
+               result &= scsiDev.atnFlag == 0;\r
+       }\r
+       return result;\r
+}\r
+\r
 static void test_error(void)\r
 {\r
        // Toggle LED.\r
@@ -111,7 +135,10 @@ static void test_success(void)
 }\r
 void scsi2sd_test_loopback(void)\r
 {\r
-       if (!test_initial_inputs() || !test_data_lines() || !test_data_10MHz())\r
+       if (!test_initial_inputs() ||\r
+               //!test_data_lines() ||\r
+               !test_data_10MHz() ||\r
+               !test_ATN_interrupt())\r
        {\r
                test_error();\r
        }\r
@@ -119,4 +146,4 @@ void scsi2sd_test_loopback(void)
        {\r
                test_success();\r
        }\r
-}
\ No newline at end of file
+}\r