Potrzebuję napisać w Turbo Pascal prosty program TSR działający w czystym DOSie, a dokładnie w emulatorze DosBox.

Napisałem taki próbny program:

{$M $800,0,0 }   { 2K stack, no heap }
uses Crt, Dos;
var
  KbdIntVec : Procedure;
{$F+}
procedure Keyclick; interrupt;
var X,Y:Integer;
K:Byte;
begin
 K:=Port[$60];
 if K < $80 then
 begin
  If K=44 Then  { Klawisz "z" - pojawienie sie gwiazdki w losowym miejscu i pisniecie }
  Begin
   X:=WhereX;
   Y:=WhereY;
   GotoXY(Random(79),Random(24));
   Write('*');
   GotoXY(X,Y);
   Sound(1000);
   Delay(10);
   Nosound;
  End;
  If K=45 Then  { Klawisz "x" - unload programu - JAK TO ZROBIC ??? }
  Begin
   SetIntVec($9,@KbdIntVec);
  End;
 end;
 inline ($9C); { PUSHF -- Push flags }
 KbdIntVec;
end;
{$F-}
begin
  GetIntVec($9,@KbdIntVec);
  SetIntVec($9,Addr(Keyclick));
  Keep(0);
end.

Tutaj jest tak, że podczas pracy w TSR, normalnie pracuje się w systemie DOS, ale każdorazowe wciśnięcie klawisza "z" powoduje wyświetlenie gwiazdki, a wciśnięcie klawisza "x" ma powodować usunięcie programu TSR. Udało mi się to zrobić, że przywraca oryginalny program obsługi przerwania dla klawiatury, ale program cały czas "siedzi" w pamieci (widać po wywołaniu komendy "MEM"). Próbowałem z instrukcją "Halt", ale nie wychodziło. Jak zrobić usunięcie programu z pamięci tak, że po wciśnięciu "x" program całkowicie zwalnia zajmowaną przez siebie pamiec?