Use VSYNC 1. Sometimes may require higher values, but normally 1 will work. Or use frame buffers by swapping GPAGEs for graphics, but text has to use vsync.
it's because you are using acls in the @moose label, so it is clearing the screen every time it loops, and re-making the image. Try just clearing the screen after you make a new circle
I also wouldn't recommend using ACLS in a loop either. It is better to just clear text with CLS, Graphics with GCLS, or the Background with BGCLR and just use the ones that you need. So if you are just using graphics just use GCLS.