{
>Does anybody know how to write to disk inside a TSR using
>turbo pascal?  I know all about how to write a simple TSR,
>cannot call Dos functions from within a hardware interrupt.

Here is parts of a tsr to write to disk when a hotkey is pressed
(Leftshift,left alt,right alt)
}

uses dos,crt;
const
 hotkey : byte = 5;
 writekey : byte = 10; {write to disk when this combo comes up }
var
  dat : file of word;  {keep file definition on globals}

procedure diskit;
var
    x,y : word;
begin
  if not cracking then
  begin
    cracking := true;  {disable checking for hotkey while writing}
    assign(dat,'a:\dump.scr');
    rewrite(Dat);
    display;
    for y := 0 to 24 do
      for x := 0 to 79 do
      write(dat,wind[X,y]);
    close(dat);
    current := 1;        {Reset current to 0}
    cracking := false;
  end;
end;
{------------------------------------------------------------}
procedure calloldint(sub:pointer);
begin {calloldint}
inline($9C/$FF/$5E/$06);   {Assembly to pop pointer off stack and call it}
end; {calloldint}
{-------------------------------------------------------------}

procedure tick(flags,cs,ip,ax,bx,cx,dx,si,di,ds,es,bp:word); interrupt;
var regs:registers;
begin
calloldint(oldvec);
   regs.ah := $12;
   intr($16, regs);
   statflags := (regs.al and  regs.ah) and hotkey;
   regflags := (regs.al and  regs.ah) and writekey;
if (statflags = hotkey) and (cnt =0) then
  begin
  cnt := 1;
  display;
  cnt := 0;
  end
else if (regflags = writekey) and (cnt = 0) then
  begin
   cnt := 1;
   diskit;     {write to disk if hotkey}
   cnt := 0;
  end
else inline($FB);
end; {tick}
{-----------------------------------------------------}

begin {MAIN}
writeln('Saving screens function activated');
current := 1;
getintvec($08,oldvec);
setintvec($08,@tick);
getintvec($09,oldkbdvec);
setintvec($09,@keyboard);
cnt := 0;
Cracking := false;
keep(0);
end. {MAIN}

{
This will work for writing to disk as long as no other disk activity is being
performed.
}