Hi, finally got round to trying this, took about 30 seconds to fix
Actually there was nothing wrong with your code, the cmaera, moving the car forward and backwards etc were perfect, the model was just loading backwards. I fixed that by rotating it and using "fix object pivot" after

nice and simple
Rem Project: Gt_Racer
Rem Created: 27/12/2005 12:05:37
Rem ***** Main Source File *****
rem
sync on : sync rate 60
load object "race track.x", 2
load image "gt4 works.jpg", 2 , 1
position object 2, 0, -3, 0
load object "gt4.x", 1
rotate object 1,0,180,0
fix object pivot 1
show object 1
texture object 1, 2
position object 1, 0, -3, 5
make camera 1
do
x#=object position x(1)
y#=object position y(1)
z#=object position z(1)
oldx#=x#
oldy#=y#
oldz#=z#
if upkey()=1 then xspeed#=sin(ay#)*30 : zspeed#=cos(ay#)*30
if downkey()=1 then xspeed#=sin(ay#)*-30 : zspeed#=cos(ay#)*-30
if rightkey()=1 then ay#=wrapvalue(ay#+2)
if leftkey()=1 then ay#=wrapvalue(ay#-2)
xspeed#=xspeed#*0.97
zspeed#=zspeed#*0.97
x#=x#+xspeed#
z#=z#+zspeed#
position object 1,x#,y#,z#
yrotate object 1,ay#
speed#=sqrt((x#-oldx#)^2+(y#-oldy#)^2+(z#-oldz#)^2)
Create_Speedometer(speed#,100,100,4,20,rgb(255,0,255),rgb(0,255,0))
ca#=curveangle(ay#,ca#,20.0)
cx#=x#-sin(ca#)*300
cz#=z#-cos(ca#)*300
cy#=curvevalue(y#+100,cy#,20.0)
position camera cx#,cy#,cz#
point camera x#,y#,z#
position camera 1,cx#,cy#,cz#
rem yrotate camera 1,wrapvalue(camera angle y(0)+180)
set camera to image 1,10,128,64
sprite 10,screen width()/2-64,30,10
sync
loop
Function create_speedometer(movespeed#,speedox,speedoy,speedow,speedl,col1,col2)
ink col1,0
line speedox,speedoy,speedox+sin(wrapvalue(int(360-movespeed#)+180))*(speedow/2),speedoy+cos(wrapvalue(int(360-movespeed#)+180))*(speedow/2)
line speedox,speedoy,speedox-sin(wrapvalue(int(360-movespeed#)+180))*(speedow/2),speedoy-cos(wrapvalue(int(360-movespeed#)+180))*(speedow/2)
line speedox+sin(wrapvalue(int(360-movespeed#)+180))*(speedow/2),speedoy+cos(wrapvalue(int(360-movespeed#)+180))*(speedow/2),speedox+sin(wrapvalue(int(360-movespeed#)+270))*speedl,speedoy+cos(wrapvalue(int(360-movespeed#)+270))*speedl
line speedox-sin(wrapvalue(int(360-movespeed#)+180))*(speedow/2),speedoy-cos(wrapvalue(int(360-movespeed#)+180))*(speedow/2),speedox+sin(wrapvalue(int(360-movespeed#)+270))*speedl,speedoy+cos(wrapvalue(int(360-movespeed#)+270))*speedl
ink col2,0
text speedox-(speedl*1.5),speedoy,"0"
text speedox,speedoy-(speedl*1.5),"90"
text speedox+(speedl*1.5),speedoy,"180"
text speedox,speedoy+(speedl*1.5),"270"
endfunction
This looks to be a good start to a game, obviously you have to make the car collide with the floor it just drives through it at the moment, but its a good start

Personally after doing that, I would make the car only steer when its moving forward or backwards, cars can't spin on the spot

The "physics" of acceleration are good, I like the code for the camera and speedometer too
"btw you can keep the model of the car and textures"
Um no offense but I'm 99% sure you didn't make that as I've seen it before (I know you didn't claim to make it

) - where'd you get it from?

Its cool, it looks like the car from Sega Rally. I also remember a similar model being in t3dgm.
Anyway I'm glad I could fix this for you, good luck with your project