Autor Thema: CheckSumme und Bootsektor?  (Gelesen 8040 mal)

0 Mitglieder und 2 Gäste betrachten dieses Thema.

guest3621

  • Gast
CheckSumme und Bootsektor?
« am: Mo 29.12.2014, 23:02:44 »
Hallo zusammen,

ich habe schon ewig lange nicht mehr in OMIKRON-Basic programmiert. Aber nun habe ich mich wieder daran getraut und als erstes einmal die XBIOS Funktion FlopRd (Nummer acht) entdeckt. Soweit funktioniert auch alles, aber: Wie errechne ich denn nun die Checksumme des Bootsektors? (Also am Ende müsste $1234 herauskommen).

0 PRINT chr$(27)+"f": CLS
1 PRINT "Taste (A) Daten von Laufwerk "+chr$(27)+"pA"+chr$(27)+"q auslesen"
2 PRINT "Taste (B) Daten von Laufwerk "+chr$(27)+"pB"+chr$(27)+"q auslesen"
3 PRINT "Andere Taste Programmende."
4 A$= INPUT$(1)
5 Readfrom%L=2
6 IF A$="A" OR A$="a" THEN Readfrom%L=0
7 IF A$="B" OR A$="b" THEN Readfrom%L=1
8 IF Readfrom%L=2 THEN END
9 Disk%L= MEMORY(512)
10 Zubuf%L= MEMORY(4)
11 Sectno%L=1
12 Trackno%L=0
13 Sideno%L=0
14 Count%L=1
15 XBIOS (Fehler%L,8,L Disk%L,L Filler%L,Readfrom%L,Sectno%L,Trackno%L,Sideno%L,Count%L)
16 IF Fehler%L>0 THEN
17   PRINT "Ausgabe mit Fehler!"
18   END
19 ENDIF
20 J%L=0
21 Checksum%L=0
22 FOR I%L=Disk%L TO Disk%L+511 STEP 4
23   IF (J%L MOD 8)=0 THEN
24     IF J%L>0 THEN PRINT ""
25     A$= HEX$($10000+(J%L SHL 2))
26     PRINT MID$(A$,3, LEN(A$));" ";
27   ENDIF
28   A$= RIGHT$( HEX$( LPEEK(I%L)), LEN( HEX$( LPEEK(I%L)))-1)
29   A$= RIGHT$("00000000"+A$,8)
30   PRINT A$;" ";
31   Checksum%L=Checksum%L+ LPEEK(Zubuf%L)
32   J%L=J%L+1
33 NEXT I%L
34 PRINT ""
35 PRINT HEX$(Checksum%L)

Arne

  • Gast
Re: CheckSumme und Bootsektor?
« Antwort #1 am: Mo 29.12.2014, 23:38:09 »
Scheibenkleister sagt, dass das letzte 16bit Wort im Bootsektor die Differenz über die vorherigen 255 16bit Worte und $1234 ist.
Du addierst also alle 16bit Worte auf, nimmst das Ergebnis AND $FFFF (falls Du als Summenvariable nicht eh schon eine 16bit Variable genommen hast) und rechnest entweder
Prüfsumme := Summe - $1234
oder
Prüfsumme := $1234 - Summe

Eins von beidem müsste hinhauen.

guest3621

  • Gast
Re: CheckSumme und Bootsektor?
« Antwort #2 am: Do 01.01.2015, 11:24:23 »
Vielen Dank für die schnelle Antwort und sorry für die späte Antwort. Aber es funktioniert wie Du es beschrieben hast. Super!