core/diskstart: handle more than 2^16 dwords
authorH. Peter Anvin <hpa@zytor.com>
Fri, 15 May 2009 01:04:25 +0000 (18:04 -0700)
committerH. Peter Anvin <hpa@zytor.com>
Fri, 15 May 2009 01:04:25 +0000 (18:04 -0700)
Handle more than 2^16 dwords in the checksumming loop.

Signed-off-by: H. Peter Anvin <hpa@zytor.com>
core/diskstart.inc

index c4fefbf..81b284f 100644 (file)
@@ -577,22 +577,23 @@ load_rest:
 ;
 verify_checksum:
                mov si,ldlinux_sys
-               mov cx,[LDLDwords]
-               mov edx,-LDLINUX_MAGIC
+               mov ecx,[LDLDwords]
+               mov eax,-LDLINUX_MAGIC
                push ds
 .checksum:
-               lodsd
-               add edx,eax
-               and di,di
+               add eax,[si]
+               add si,4
                jnz .nowrap
-               mov ax,ds
-               add ax,1000h
-               mov ds,ax
+               ; Handle segment wrap
+               mov dx,ds
+               add dx,1000h
+               mov ds,dx
 .nowrap:
-               loop .checksum
+               dec ecx
+               jnz .checksum
                pop ds
 
-               and edx,edx                     ; Should be zero
+               and eax,eax                     ; Should be zero
                jz all_read                     ; We're cool, go for it!
 
 ;