mit dieser einfachen methode kann man in Bascom jeden sector beschreiben und lesen.
mein zusätzlicher demoausbau:
die ersten 128 sectoren habe ich mir als merker eingerichtet wo etwas liegt. 4byte + 8buchstaben für name, von den 4byte sind die ersten 2 bytes der 1. sector von der datendatei und die bytes 3+4 sind der letzte sector der datendatei.

benutze ich für verschiedene datenarchivierungen.
ist meine eigenes suchsystem.
dieses dos-geschmirgel ist mir zu aufwändig.

mit einem eigenen programm auf dem pc mit python entworfen kann ich diese daten auch auf dem pc einlesen.

macht richtig spass mal etwas eigenes zu entwerfen für unseren kleinen atmega ohne an das dos-system von bill gates zu denken.





Code:
$regfile = "m32def.dat"
$framesize = 32
$swstack = 32
$hwstack = 64
$crystal = 8000000
$baud = 19200

Declare Sub Mc_init()
Declare Sub Mc_write()
Declare Sub Mc_read()

Dim Dout As Byte
Dim Din As Byte
Dim A As Word
Dim Cmd(6) As Byte
Dim Buffer(515) As Byte
Dim Tmp As Long
Dim Sector As Long

Mcs Alias Portb.4
Mosi Alias Portb.5
Miso Alias Pinb.6
Sck Alias Portb.7

Config Pinb.4 = Output
Config Pinb.5 = Output
Config Pinb.6 = Input
Config Pinb.7 = Output

Waitms 255

Buffer(1) = &HFE
Buffer(514) = &HFF
Buffer(515) = &HFF

For A = 2 To 513
   Buffer(a) = 14
Next
Call Mc_init()
Sector = 0
Call Mc_write()

For A = 2 To 513
   Buffer(a) = 15
Next
Call Mc_init()
Sector = 1
Call Mc_write()

For A = 2 To 513
   Buffer(a) = 16
Next
Call Mc_init()
Sector = 2
Call Mc_write()

Print
Print
Wait 1

' auslesen
Wait 1
Call Mc_init()
Sector = 0
Call Mc_read()

For A = 2 To 30
   Print "wert: " ; Buffer(a)
   Waitms 50
Next

'auslesen
Wait 1
Call Mc_init()
Sector = 1
Call Mc_read()

For A = 2 To 30
   Print "wert: " ; Buffer(a)
   Waitms 50
Next

'auslesen
Wait 1
Call Mc_init()
Sector = 2
Call Mc_read()

For A = 2 To 30
   Print "wert: " ; Buffer(a)
   Waitms 50
Next

End

Sub Mc_init()

   Set Mcs

   Dout = &HFF
   For A = 0 To 10
      Shiftout Mosi , Sck , Dout , 1 , 8 , 0
   Next

Anfang:
   Reset Mcs

   Cmd(1) = &H40
   Cmd(2) = 0
   Cmd(3) = 0
   Cmd(4) = 0
   Cmd(5) = 0
   Cmd(6) = &H95
   For A = 1 To 6
      Shiftout Mosi , Sck , Cmd(a) , 1 , 8 , 0
   Next

   Dout = &HFF
   Shiftout Mosi , Sck , Dout , 1 , 8 , 0

   Shiftin Miso , Sck , Din , 1 , 8 , 0
   If Din <> 1 Then
      Goto Anfang
   End If
   Print "idle-modus " ; Din

Anfang1:
   Reset Mcs

   Cmd(1) = &H41
   Cmd(2) = 0
   Cmd(3) = 0
   Cmd(4) = 0
   Cmd(5) = 0
   Cmd(6) = &HFF
   For A = 1 To 6
      Shiftout Mosi , Sck , Cmd(a) , 1 , 8 , 0
   Next

   Dout = &HFF
   Shiftout Mosi , Sck , Dout , 1 , 8 , 0

   Shiftin Miso , Sck , Din , 1 , 8 , 0
   If Din <> 0 Then
      Goto Anfang1
   End If
   Print "betriebs-modus " ; Din

   Set Mcs
End Sub

Sub Mc_read()
   Set Mcs

   Cmd(1) = &H51
   Cmd(2) = 0
   Cmd(3) = 0
   Cmd(4) = 0
   Cmd(5) = 0
   Cmd(6) = &HFF

   Shift Sector , Left , 9

   Tmp = Sector And &HFF000000
   Shift Tmp , Right , 24
   Cmd(2) = Tmp

   Tmp = Sector And &H00FF0000
   Shift Tmp , Right , 16
   Cmd(3) = Tmp

   Tmp = Sector And &H0000FF00
   Shift Tmp , Right , 8
   Cmd(4) = Tmp

Anfang3:
   Reset Mcs

   For A = 1 To 6
      Shiftout Mosi , Sck , Cmd(a) , 1 , 8 , 0
   Next

   Dout = &HFF
   Shiftout Mosi , Sck , Dout , 1 , 8 , 0

   Shiftin Miso , Sck , Din , 1 , 8 , 0
   If Din <> 0 Then
      Goto Anfang3
   End If
   Print "read-modus " ; Din

   Dout = &HFF
   Shiftout Mosi , Sck , Dout , 1 , 8 , 0
   Dout = &HFF
   Shiftout Mosi , Sck , Dout , 1 , 8 , 0

   Shiftin Miso , Sck , Din , 1 , 8 , 0
   If Din <> &HFE Then
      Goto Ende
   End If

   For A = 2 To 515
      Shiftin Miso , Sck , Buffer(a) , 1 , 8 , 0
   Next

Ende:
   Set Mcs
End Sub

Sub Mc_write()

   Set Mcs

   Cmd(1) = &H58
   Cmd(2) = 0
   Cmd(3) = 0
   Cmd(4) = 0
   Cmd(5) = 0
   Cmd(6) = &HFF

   Shift Sector , Left , 9

   Tmp = Sector And &HFF000000
   Shift Tmp , Right , 24
   Cmd(2) = Tmp

   Tmp = Sector And &H00FF0000
   Shift Tmp , Right , 16
   Cmd(3) = Tmp

   Tmp = Sector And &H0000FF00
   Shift Tmp , Right , 8
   Cmd(4) = Tmp

Anfang2:
   Reset Mcs

   For A = 1 To 6
      Shiftout Mosi , Sck , Cmd(a) , 1 , 8 , 0
   Next

   Dout = &HFF
   Shiftout Mosi , Sck , Dout , 1 , 8 , 0

   Shiftin Miso , Sck , Din , 1 , 8 , 0
   If Din <> 0 Then
      Goto Anfang2
   End If
   Print "write-modus " ; Din

   Dout = &HFF
   Shiftout Mosi , Sck , Dout , 1 , 8 , 0

   For A = 1 To 515
      Shiftout Mosi , Sck , Buffer(a) , 1 , 8 , 0
      Waitus 10
   Next

   Dout = &HFF
   Shiftout Mosi , Sck , Dout , 1 , 8 , 0

   Set Mcs
End Sub