Solo comentar que a mi las viejas funciones ord y chr siempre me han funcionado, y veo aqui una confusión.
La definición de estas funciones seria algo como:
function chr(codigoASCII : byte) : Char;
function ord(caracter : char) : Byte;
de alli que
chr('ñ'), no debiera compilar.
dado que se tienen los límites bien definidos, y sabiendo que chr(32) = ' ' y chr(165) = 'Ñ', podria funcionar la comparación directa de caracteres, que es perfectamente soportada por pascal.
Código Delphi
[-]
if (cadena[i] < ' ') or (cadena[i] > 'Ñ') Then
Error;
Hasta luego.