/ crypt -- password incoding / mov $key,r0 / jsr pc,crypt .globl crypt, _crypt .globl savr5 _crypt: mov r5,-(sp) mov sp,r5 mov r5,savr5 mov 4(r5),r0 jsr pc,crypt clr savr5 mov (sp)+,r5 rts pc crypt: mov r1,-(sp) mov r2,-(sp) mov r3,-(sp) mov r4,-(sp) mov r5,-(sp) mov r0,r1 mov $key,r0 movb $004,(r0)+ movb $034,(r0)+ 1: cmp r0,$key+64. bhis 1f movb (r1)+,(r0)+ bne 1b 1: dec r0 / / / fill out key space with clever junk / mov $key,r1 1: movb -1(r0),r2 movb (r1)+,r3 xor r3,r2 movb r2,(r0)+ cmp r0,$key+128. blo 1b / / / establish wheel codes and cage codes / mov $wheelcode,r4 mov $cagecode,r5 mov $256.,-(sp) 2: clr r2 clr (r4) mov $wheeldiv,r3 3: clr r0 mov (sp),r1 div (r3)+,r0 add r1,r2 bic $40,r2 bis shift(r2),(r4) cmp r3,$wheeldiv+6. bhis 4f bis shift+4(r2),(r5) 4: cmp r3,$wheeldiv+10. blo 3b sub $2,(sp) tst (r4)+ tst (r5)+ cmp r4,$wheelcode+256. blo 2b tst (sp)+ / .data shift: 1;2;4;10;20;40;100;200;400;1000;2000;4000;10000;20000;40000;100000 1;2 wheeldiv: 32.; 18.; 10.; 6.; 4. .bss cagecode: .=.+256. wheelcode: .=.+256. .text / / / make the internal settings of the machine / both the lugs on the 128 cage bars and the lugs / on the 16 wheels are set from the expanded key / mov $key,r0 mov $cage,r2 mov $wheel,r3 1: movb (r0)+,r1 bic $!177,r1 asl r1 mov cagecode(r1),(r2)+ mov wheelcode(r1),(r3)+ cmp r0,$key+128. blo 1b / / / now spin the cage against the wheel to produce output. / mov $word,r4 mov $wheel+128.,r3 3: mov -(r3),r2 mov $cage,r0 clr r5 1: bit r2,(r0)+ beq 2f incb r5 2: cmp r0,$cage+256. blo 1b / / we have a piece of output from current wheel / it needs to be folded to remove lingering hopes of / inverting the function / mov r4,-(sp) clr r4 div $26.+26.+10.,r4 add $'0,r5 cmp r5,$'9 blos 1f add $'A-'9-1,r5 cmp r5,$'Z blos 1f add $'a-'Z-1,r5 1: mov (sp)+,r4 movb r5,(r4)+ cmp r4,$word+8. blo 3b / mov (sp)+,r5 mov (sp)+,r4 mov (sp)+,r3 mov (sp)+,r2 mov (sp)+,r1 mov $word,r0 rts pc .bss key: .=.+128. word: .=.+32. cage: .=.+256. wheel: .=.+256.