For your Sattolo implementation, you have an error that requires an extra loop iteration. When i = 0 then j = 0, so you are swapping a[0] with a[0]. Therefore:

Line 12: while i > 0 do

should be

Line 12: while i > 1 do

That is not true. You will introduce a fixed member in that case, so it is no longer random over the population.

I also think you do not understand that Sattolo takes one less iteration compared to Fisher-Yates....

Unless I am proven wrong, I am not likely to adapt the code: It is an implementation of the standard algorithm.