|
@@ -299,6 +299,7 @@ void setup()
|
|
db_bsrr[i] = genBSRR(i);
|
|
db_bsrr[i] = genBSRR(i);
|
|
}
|
|
}
|
|
gpioInit();
|
|
gpioInit();
|
|
|
|
+ digitalWrite( BOARD_TRANS_OE ,0);
|
|
// Default all SCSI command handlers to onUnimplemented
|
|
// Default all SCSI command handlers to onUnimplemented
|
|
for(unsigned i = 0; i < MAX_SCSI_COMMAND; i++)
|
|
for(unsigned i = 0; i < MAX_SCSI_COMMAND; i++)
|
|
{
|
|
{
|
|
@@ -389,6 +390,7 @@ void setup()
|
|
pinMode(TR_DBP, OUTPUT);
|
|
pinMode(TR_DBP, OUTPUT);
|
|
|
|
|
|
TRANSCEIVER_IO_SET(vTR_INITIATOR,TR_INPUT);
|
|
TRANSCEIVER_IO_SET(vTR_INITIATOR,TR_INPUT);
|
|
|
|
+ TRANSCEIVER_IO_SET(vTR_TARGET,TR_INPUT);
|
|
#else
|
|
#else
|
|
// set up OTYPER for open drain on SCSI pins of PA and PB
|
|
// set up OTYPER for open drain on SCSI pins of PA and PB
|
|
// PA 0-7, 11-14
|
|
// PA 0-7, 11-14
|
|
@@ -1052,6 +1054,8 @@ void loop()
|
|
TRANSCEIVER_IO_SET(vTR_DBP,TR_INPUT)
|
|
TRANSCEIVER_IO_SET(vTR_DBP,TR_INPUT)
|
|
SCSI_TARGET_INACTIVE();
|
|
SCSI_TARGET_INACTIVE();
|
|
TRANSCEIVER_IO_SET(vTR_TARGET,TR_INPUT)
|
|
TRANSCEIVER_IO_SET(vTR_TARGET,TR_INPUT)
|
|
|
|
+
|
|
|
|
+
|
|
// Reset target state bits (BSY, MSG, CD, REQ, IO)
|
|
// Reset target state bits (BSY, MSG, CD, REQ, IO)
|
|
GPIOB->regs->BSRR = 0x000000E8; // MSG, CD, REQ, IO
|
|
GPIOB->regs->BSRR = 0x000000E8; // MSG, CD, REQ, IO
|
|
GPIOA->regs->BSRR = 0x00000200; // BSY
|
|
GPIOA->regs->BSRR = 0x00000200; // BSY
|
|
@@ -1064,7 +1068,11 @@ void loop()
|
|
m_lun = 0xff;
|
|
m_lun = 0xff;
|
|
SCSI_DEVICE *dev = (SCSI_DEVICE *)0; // HDD image for current SCSI-ID, LUN
|
|
SCSI_DEVICE *dev = (SCSI_DEVICE *)0; // HDD image for current SCSI-ID, LUN
|
|
serial.println("test");
|
|
serial.println("test");
|
|
- do {} while( SCSI_IN(vBSY) || !SCSI_IN(vSEL) || SCSI_IN(vRST));
|
|
|
|
|
|
+ do {
|
|
|
|
+ serial.print(SCSI_IN(vBSY));
|
|
|
|
+ serial.print(SCSI_IN(vSEL));
|
|
|
|
+ serial.println(SCSI_IN(vRST));
|
|
|
|
+ } while( SCSI_IN(vBSY) || !SCSI_IN(vSEL) || SCSI_IN(vRST));
|
|
//do {} while( !SCSI_IN(vBSY) || SCSI_IN(vRST));
|
|
//do {} while( !SCSI_IN(vBSY) || SCSI_IN(vRST));
|
|
// We're in ARBITRATION
|
|
// We're in ARBITRATION
|
|
//LOG(" A:"); LOGHEX(readIO()); LOG(" ");
|
|
//LOG(" A:"); LOGHEX(readIO()); LOG(" ");
|
|
@@ -1082,6 +1090,7 @@ void loop()
|
|
|
|
|
|
#if XCVR == 1
|
|
#if XCVR == 1
|
|
TRANSCEIVER_IO_SET(vTR_TARGET,TR_OUTPUT);
|
|
TRANSCEIVER_IO_SET(vTR_TARGET,TR_OUTPUT);
|
|
|
|
+ TRANSCEIVER_IO_SET(vTR_INITIATOR,TR_OUTPUT);
|
|
#endif
|
|
#endif
|
|
SCSI_TARGET_ACTIVE() // (BSY), REQ, MSG, CD, IO output turned on
|
|
SCSI_TARGET_ACTIVE() // (BSY), REQ, MSG, CD, IO output turned on
|
|
|
|
|
|
@@ -1280,6 +1289,7 @@ BusFree:
|
|
SCSI_TARGET_INACTIVE() // Turn off BSY, REQ, MSG, CD, IO output
|
|
SCSI_TARGET_INACTIVE() // Turn off BSY, REQ, MSG, CD, IO output
|
|
#if XCVR == 1
|
|
#if XCVR == 1
|
|
TRANSCEIVER_IO_SET(vTR_TARGET,TR_INPUT);
|
|
TRANSCEIVER_IO_SET(vTR_TARGET,TR_INPUT);
|
|
|
|
+ TRANSCEIVER_IO_SET(vTR_INITIATOR,TR_INPUT);
|
|
// Something in code linked after this function is performing better with a +4 alignment.
|
|
// Something in code linked after this function is performing better with a +4 alignment.
|
|
// Adding this nop is causing the next function (_GLOBAL__sub_I_SD) to have an address with a last digit of 0x4.
|
|
// Adding this nop is causing the next function (_GLOBAL__sub_I_SD) to have an address with a last digit of 0x4.
|
|
// Last digit of 0xc also works.
|
|
// Last digit of 0xc also works.
|