home *** CD-ROM | disk | FTP | other *** search
- ; ----------------------------------------------------------------------
- ; Copyright (C) 1990 by Natürlich!
- ; This file is copyrighted!
- ; Refer to the documentation for details.
- ; ----------------------------------------------------------------------
- .export calc_hash
- .import hash_tab
-
-
- calc_hash:
- move.l a1,-(a7)
- move.l d1,-(a7)
-
- lea hash_tab,a1
- moveq #0,d0 ; target register clean
- clr.w d1
- move.b (a0)+,d0 ; get first byte into it d0
- beq.b done ; quit on 0
- move.b 0(a1,d0.w),d0 ; get hash value for char
-
- move.b (a0)+,d1 ; get next char
- beq.b done ; EOL = 0 then ->
- move.b 0(a1,d1.w),d1 ; get hash value
- asl.w #5,d0 ; shift old 5 bits up
- or.w d1,d0 ; and OR our new value
-
- move.b (a0)+,d1 ; next
- beq.b done
- move.b 0(a1,d1.w),d1
- asl.w #5,d0
- or.w d1,d0
-
- swap d0 ; don't want to shift 32 bits
-
- move.b (a0)+,d0 ; start with fresh 16 bits
- beq.b done
- move.b 0(a1,d0.w),d0
-
- move.b (a0)+,d1
- beq.b done
- move.b 0(a1,d1.w),d1
- asl.w #5,d0
- or.w d1,d0
-
- move.b (a0),d1
- beq.b done
- move.b 0(a1,d1.w),d1
- asl.w #5,d0
- or.w d1,d0
-
- done: move.l (a7)+,d1
- move.l (a7)+,a1
- rts
-
-
-