Hi

Ich hab das jetzt etwas anders gelöst.

Code:
$regfile = "m32def.dat"
$crystal = 16000000
$lib "mmc.lib"
Config Lcdpin = Pin , Db4 = Portc.5 , Db5 = Portc.4 , Db6 = Portc.3 , Db7 = Portc.2 , E = Portc.7 , Rs = Portc.6
Config Lcd = 16 * 4
Dim Abuffer As String * 512 At $60                          ' Hold Sector to and from CF-Card
Dim String1 As String * 254 At $60 Overlay
Dim String2 As String * 254 At $10a Overlay
Dim String3 As String * 171 At $1b4 Overlay
$include "config_mmc.bas"
Dim Berror As Byte
Dim Wsrampointer As Word                                    ' Address-Pointer for write
Dim Lsectornumber As Long                                   ' Sector Number
Dim Ende As Byte
Dim S_position As Word
Dim S_position2 As Byte
Dim S_position3 As Byte
Dim E_position As Word
Dim E_position2 As Byte
Dim E_position3 As Byte
Dim S_sektor As Long
Dim E_sektor As Long
Dim Datenmenge As Word
Dim Temp As Word

Ende = 0
Lsectornumber = 0
Cls
If Gbdriveerror = 0 Then
   Cls
   Do
     Wsrampointer = Varptr(abuffer)
     Berror = Drivereadsector(wsrampointer , Lsectornumber)
     If S_position = 0 Then
       S_position = Instr(1 , String1 , "<START>")
       S_position2 = Instr(1 , String2 , "<START>")
       S_position3 = Instr(1 , String3 , "<START>")
       If S_position2 <> 0 Then
          S_position = S_position2 + 170
       End If
       If S_position3 <> 0 Then
          S_position = S_position3 + 340
       End If
       S_sektor = Lsectornumber
     End If
     If S_position <> 0 Then
       E_position = Instr(1 , String1 , "<ENDE>")
       E_position2 = Instr(1 , String2 , "<ENDE>")
       E_position3 = Instr(1 , String3 , "<ENDE>")
       If E_position2 <> 0 Then
          E_position = E_position2 + 170
       End If
       If E_position3 <> 0 Then
          E_position = E_position3 + 340
       End If
       If E_position <> 0 Then
         E_sektor = Lsectornumber
         Ende = 1
       End If
     End If
     Incr Lsectornumber
   Loop Until Ende = 1
Else
   Lcd "Fehler :-("
End If
If S_sektor = E_sektor Then
   Datenmenge = S_position + 7
   Datenmenge = E_position - Datenmenge
Else
   Datenmenge = S_position + 6
   Datenmenge = 512 - Datenmenge
   Temp = E_sektor - S_sektor
   Temp = Temp - 1
   Temp = Temp * 512
   Datenmenge = Datenmenge + Temp
   Datenmenge = Datenmenge + E_position
   Datenmenge = Datenmenge - 1
End If
If Gbdriveerror = 0 Then
   Cls
   Lcd S_sektor ; ":" ; S_position ; "-" ; E_sektor ; ":" ; E_position
   'Lcd E_position ; "--" ; E_position2
   Locate 2 , 1
   Lcd "Menge: " ; Datenmenge ; " Bytes"
   Thirdline
   Lcd "Text"
End If
End                                                         'end program                                                       'end program
So funktioniert es jetzt einwandfrei. ich hab extra 3 Strings genommen, die sich überschneiden, damit er auch was findet, wenn z.B. "<ENDE>" genau an der Grenze der Strings steht.

Nun muss ich aber noch den Sonderfall einbauen, dass der String "<START>" bzw. "<ENDE>" über eine Sektorgrenze geht. Das wird noch aufwändig