<< Previous Message Main Index Next Message >>
<< Previous Message in Thread This Month Next Message in Thread >>
Date   : Wed, 25 Oct 2006 11:58:54 +0200
From   : kortink@... (John Kortink)
Subject: ADFS sector checksums

On 25 Oct 2006 01:28:49 +0100, Jonathan Graham Harston wrote:

>[...]
>
>For instance:
>Sector 0: 07 00 00 00 00 .... 00 00 00 00 20 xx
>FNsum returns &27, actual checksum is &27

Yes.

>Sector 1: F9 FF 1F 00 00 .... 00 27 E6 00 03 xx
>FNsum returns &2A, but actual checksum is &2B.

No, the actual checksum is &29.

The proof of the pudding : putting the relevant harddisc
images on GoMMC : &2B for sector 1, as expected, gives a
'Bad FS map' error. &29, as expected, doesn't.

>[...]
>
>John Kortink <kortink@...> wrote:
>> A 'C' code fragment that calculates the checksum correctly is :
>>
>> int ix, sum, cflag;
>> 
>> for (ix = 254, sum = 255, cflag = 0; ix >= 0; ix--)
>>   if ((cflag = ((sum += sector[ix] + cflag) > 255)) != 0)
>>     sum -= 256;
> 
>DEFFNsum(sector)
>sum=255
>cflag=0
>FOR ix=254 TO 0 STEP -1
>sum=sum+sector?ix+cflag
>cflag=0:IF sum>255:cflag=1:sum=sum-256
>NEXT
>=sum
> 
>Well, that gives me &21 instead of &2B.

No, it gives &29. Which is the correct answer. You
either forgot to properly zero out the rest of the
sector or your 6502 has forgotten how to add.


John Kortink

-- 

Email    : kortink@...         
Homepage : http://www.inter.nl.net/users/J.Kortink

GoMMC, the ultimate BBC B/B+/Master storage system :
http://web.inter.nl.net/users/J.Kortink/home/hardware/gommc
<< Previous Message Main Index Next Message >>
<< Previous Message in Thread This Month Next Message in Thread >>