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.