I think this is pretty close for decrypt , but don't ask me how it works or why it loops 528 times

Code:
x  var long
r  var long
keyBitVal  var long
bitVal     var long
key    var byte[8] ;key is long + long  = 64 bits you need to input this somehow
index  var word
KeeLoq_NLF     const         $3A5C742E
 
 
decrypt:  ;  input to decrypt is in var x  ->   output is in var x
while  r<528
   keyBitNo = (15-r) & 63
   keyBitVal = key.0[keyBitNo]
   index = 1 * x0.[1] + 2 * x.0[9] + 4 * x.0[20] + 8 * x.0[26] + 16 * x.0[31]    
   bitVal = x0.[0] ^ x.0[16] ^ KeeLoq_NLF.0[index] ^ keyBitVal
   x = (x>>1) ^ bitVal<<31;
   r=r+1
wend
 return