Я как-то тоже столкнулся с этой проблемой, и единственное, что придумал - переписать на асме все жизненно необходимые функции. Т.к. прога была небольшой - меня на них хватило

Вот чуть-чуть:
procedure cls;assembler; {clear screen}
asm
mov AH,06
mov AL,0
mov CX,0
mov DH,50
mov DL,80
mov BH,07
int 10h
mov DH,0
mov DL,0
mov AH,02
xor BH,BH
int 10h
end;
procedure gtxy(x, y : byte);assembler; {gotoxy}
asm
mov DH,byte ptr y { coords x}
mov DL,byte ptr x { y}
mov AH,02
int 10h
end;
function getkey:char;assembler; {аналог readkey}
asm
mov AH,10h
int 16h
end;
function getextkey:integer;assembler;
{аналог readkey- только дает расширенный код символа}
asm
mov AH,10h
int 16h
procedure wait(time:longint); assembler; {эту я откуда-то сдул}
asm
mov AH,86h
mov DX,word ptr time
mov CX,word ptr time+2
int 15h
end;