0-500 A/D:
In my head, I see it like this. 1 timer for the 165uS time base.
2 software counters, 1 for X and 1 for Y.
These counters will count from 0 to modified A/D value.
If the counter >= A/D value(0-500 not the whole value) send a pluse, reset counter.

I would have my main loop do this:
check for timer overflow , if overflow, inc both counters and reload timer.
check limit switches, if any hit, don't allow movement in that direction
get A/D values
gosub A/D massage therpy
Main Loop

now does this make sense? lets see, if A/D= 0, pulses will send every 165uS. full speed
if A/D = 500, pulses will send every 165*500=82mS. so Very slow

Then have the Z pot change the timer duration and you are golden (i think).

Of course A/D massage therpy may be a trick. This is where you turn the value into 0-500 upper and lower.

Oh, and since this is not a tracker, you don't need to worry about the 12 pulses per a/d bit. That was just to scale the joystick to the travel of your table.