Hi All

i have a checksum calculation routine that works in Visual Basic i am trying to convert to PicBasic.

the source for the checksum are the first 32 locations in a AT93C46 EEprom (16 bit mode).

i am sure i am doing something stupid but all i get with the Picversion is FFFF,FFFF(sometimes FFFF,7FFF) independent of the eeprom contents.
after spending 5 days on this i hope some fresh eyes will spot my error.

thanks in advance

dj.lambert


VB code:

<code>
Private Sub Checksumme(dat$)
' Checksumme berechnen
Dim x, d, cs$
adrx1 = 1: adrx2 = 31: GoSub summe1x
cs$ = Right$("00" + Hex$(summe), 2)
adrx1 = 9: adrx2 = 18: GoSub summe1x
cs$ = Right$("00" + Hex$(summe), 2) + cs$
'Stop
cs = cs$

Label5.Caption = "Checksum : " & cs
If writecsum = True Then
WriteCheckSum cs$
'Stop
End If
writecsum = False
Exit Sub

summe1x:

summe = &HA5
For x = adrx1 To adrx2 Step 1
d = Mid$(dat$, x * 5 + 1, 4)
'Stop
d = Val("&H" + Mid$(dat$, x * 5 + 1, 4))
summe = (summe + (d And &HFF)) And &HFF
If (summe And 1) = 1 Then
summe = summe \ 2 + &H80
Else
summe = summe \ 2
End If
summe = (summe + (d And &HFF00) \ &H100) And &HFF
If (summe And 1) = 1 Then
summe = summe \ 2 + &H80
Else
summe = summe \ 2
End If

Next
summe = summe And &HFF

Return

End Sub

</code>

PicBasic code:

<code>
CheckSum:
adrx1 = 1
adrx2 = 31
gosub summe1x

adrx1 = 9
adrx2 = 18
gosub summe1x

return


Summe1X:
summe = $A5
for addr = adrx1 to adrx2 step 1
d= b3a(addr)
temp=d
serout2 PortB.1, 84, [hex summe, hex d, 10,13]
summe = (summe + (templo)) and $FF
serout2 PortB.1, 84, [hex summe, 10, 13]
if (summe and 1) = 1 then
summe = summe / 2 + $80
else
summe = summe / 2
endif
serout2 PortB.1, 84, [hex summe, 10, 13]
summe = (summe + (temphi) / $100) and $FF
serout2 PortB.1, 84, [hex summe, 10, 13]
if (summe and 1) = 1 then
summe = summe / 2 + $80
else
summe = summe / 2
endif
serout2 PortB.1, 84, [hex summe, 10, 13]

next
serout2 PortB.1, 84, [hex summe, 10, 13]
summe = summe and $FF
serout2 PortB.1, 84, [hex summe, 10, 13]




return



</code>
variable declarations for PB:

B3A var word(32)
temp var word
tempLo var temp.byte0
tempHi var temp.byte1
adrx1 var byte
adrx2 var byte
CheckSumme var word
Summe var word
d var word