Evening all. I've got a piece of code that I'm hoping someone more clever then me could take a look at and point me in the direction of my mistake. What I have here is some simple (as in, not realistic) movement code for my "space ship". The problem is, while it works well on one computer with a fairly terrible video card (50-60fps) it is uncontrollable and movement is far too fast on a machine with a good card (1800fps). I hit the acceleration and move half way across the universe in a flash and when I try to rotate the ship is spins around like mad.
First is some of the variables being used for reference:
//ship rotation variables
float _angleX;
float _angleY;
float _angleZ;
//movement variables
float _acceleration = 2.0f;
float _deceleration = 1.0f;
float _turnRatio = 5.0f;
float _maxSpeed = 40.0f;
float _speed = 0.0f;
This is the function handling input:
private void ProcessInput()
{
// Check if we pressed the Up key, if so, then we are accelerating
if (Input.IsKeyPressed(CONST_TV_KEY.TV_KEY_UP))
_speed += (_acceleration / (float)TV.AccurateTimeElapsed());
// Check if we pressed the Down key, if so, then we are decelerating
if (Input.IsKeyPressed(CONST_TV_KEY.TV_KEY_DOWN))
_speed += -(_deceleration / (float)TV.AccurateTimeElapsed());
// Check if we pressed the A key, if so, then turn to the left
if (Input.IsKeyPressed(CONST_TV_KEY.TV_KEY_A))
_angleY += -(_turnRatio / (float)TV.AccurateTimeElapsed());
// Check if we pressed the D key, if so, then turn to the right
else if (Input.IsKeyPressed(CONST_TV_KEY.TV_KEY_D))
_angleY += (_turnRatio / (float)TV.AccurateTimeElapsed());
// Check if we pressed the W key, if so, then rotate down
if (Input.IsKeyPressed(CONST_TV_KEY.TV_KEY_W))
_angleX += (_turnRatio / (float)TV.AccurateTimeElapsed());
//Check if we pressed the S key, if so, rotate up
else if (Input.IsKeyPressed(CONST_TV_KEY.TV_KEY_S))
_angleX += -(_turnRatio / (float)TV.AccurateTimeElapsed());
// Check if we pressed the Q key, if so, then rotate the ship counter clockwise
if (Input.IsKeyPressed(CONST_TV_KEY.TV_KEY_Q))
_angleZ += (_turnRatio / (float)TV.AccurateTimeElapsed());
// Check if we pressed the E key, if so, then rotate the ship clockwise
else if (Input.IsKeyPressed(CONST_TV_KEY.TV_KEY_E))
_angleZ += -(_turnRatio / (float)TV.AccurateTimeElapsed());
// Check if we pressed the Backspace key, if so, cut all speed
// TODO: this is hacky, should slow down not full stop, but good enough for now
if (Input.IsKeyPressed(CONST_TV_KEY.TV_KEY_BACKSPACE))
_speed = 0;
}
Lastly here is the function which updates the ship position:
private void ProcessMovement()
{
if (_speed > _maxSpeed)
_speed = _maxSpeed;
// From the angle variable, we update the ship rotation
PlayerShip.SetRotation(_angleX, _angleY, _angleZ);
PlayerShip.MoveRelative(_speed, 0.0f, 0.0f);
Scene.GetCamera().ChaseCamera(PlayerShip, new TV_3DVECTOR(0.0f, 200.0f, -500.0f), new TV_3DVECTOR(0.0f, 0.0f, 0.0f), 10);
}
I assumed at first that it had to do with me not accounting for elapsed time, but even after adding that in the movement on the low end machine is fine and the high end machine is unusable

I missed something I'm just not sure what. Any help would be appreciated.
-Arakiel