/ hash routine for diff / effectively spreads the string out into 7-bit / bytes, then sums the result 1's-complement / by 16-bit bytes and adds 1 to avoid zero answer / r4 hash accumulator / r3 current offset / r2 first time flag .globl _readhash .globl getc .data _readhash: mov 2(sp),0f mov r5,-(sp) mov r4,-(sp) mov r3,-(sp) mov r2,-(sp) mov $1,r4 mov r4,r2 clr r3 1: jsr r5,getc; 0: 0 bes 2f clr r2 cmp r0,$'\n beq 1f ashc $-16.,r0 ashc r3,r0 add r0,r4 adc r4 add r1,r4 adc r4 add $7,r3 cmp r3,$16. blt 1b sub $16.,r3 br 1b 2: tst r2 bne 2f mov $2,r0 sys write; 3f; 4f-3f 2: clr r4 1: mov r4,r0 mov (sp)+,r2 mov (sp)+,r3 mov (sp)+,r4 mov (sp)+,r5 rts pc 3: 4: .even