Hola Rodrigo.
Las teclas especiales no tienen un valor ASCII, así que para leer alguna de ellas hay que leer con readkey, si la tecla que devuelve readkey es el ASCII 0, entonces es una tecla especial y hay que volver a hacer un readkey para obtener el valor.
Algo así:
var tecla:char;
repeat
Tecla:=readkey;
if Tecla=#0 then { Es tecla especial -> leemos de nuevo }
tecla:=readkey;
wirteln('Tecla apretada: ',Tecla);
until tecla=#27; {El escape es 27}
Las teclas de cursor serían 72, 75, 77 y 80 (después de leer un #0).
Si te interesa, tengo una unidad para leer teclas. No la pongo acá porque el código es muy largo y no entra...
Saludongos.