simple simulation loop (no stepping logic)