I haven't tested the code yet (but thanks VERY much for posting it!!).

But I noticed one thing...

You have SR0 and SR1 as the first 2 bytes returned. The datasheet shows that the first TWO bytes returned are SR0 for every SPI command (as SR0 is 2 bytes long). So SR1 should actually be the THIRD byte returned?

SR0 var ISD_Data[0]
SR0b var ISD_Data[1] 'or whatever you want to name it
SR1 var ISD_Data[2]

Or am I missing something? I don't think this would cause a problem in your examples as you are not checking the isReady bit.