dann stimmt die initialisierung der SPI nicht.
scheinbar ist der Port als Ausgang konfiguriert
und du ziehst den auf 0 bzw. 5V
Die Karte sollte ja nur die 3V3 ausgeben als Highpegel.

Dein Programmablauf gefällt mir
persönlich auch nicht so besonders ... goto meide ich
wie der Teufel das Weihwasser ... Do Loop Until ist
mir persönlich sympatischer

Code:
$regfile = "m16def.dat"
$crystal = 16000000
$hwstack = 32
$swstack = 32
$framesize = 64
$baud = 9600

Declare Sub Sramdump(byval Pwsrampointer As Word , Byval Pwlength As Word)

Dim Berror As Byte
Dim Abuffer(512) As Byte                                    ' SRAM-Bereich für den Transfer
Dim Wsrampointer As Word                                    ' Adress-Pointer für den Drive... Routine
Dim Lsectornumber As Long                                   ' Variable für Sektor-Nummer


do

$Include "Config_MMC.bas"
'$Include "Config_XRAMDrive0.bas" ' Zum Testen mit dem Simulator

If Gbdriveerror <> 0 Then
Print "MMC/SD Initialisierung fehlgeschlagen"
End If

loop until Gbdriveerror <> 0

do
' Adresse des Buffers in die Variable

Wsrampointer = Varptr(abuffer(1))

' Die ersten 100 Sektoren ausgeben
For Lsectornumber = 0 To 100

   Berror = Drivereadsector(wsrampointer , Lsectornumber)
   ' Konnte der Sektor eingelesen werden?
   If Berror > 0 Then
      Print "Drive Fehler: " ; Berror ; " bei Sektor " ; Lsectornumber
      Exit For
   End If

   Print "Sektor " ; Lsectornumber

   ' Sektor ausgeben
   Sramdump Wsrampointer , 512

Next

loop

End
seltsamerseise wird die SPI aber in der Lib deklariert:
Config Spi = Hard , Interrupt = Off , Data Order = Msb , Master = Yes , Polarity = High , Phase = 1 , Clockrate = 4 , Noss = 1
Spiinit ' Init SPI