この2つを使って、コルーチンを起動してみる
起動される簡単なルーチン
procedure MyProg;
var i:Integer;
begin
 allocConsole;
 i:=0;
 while true do begin
   writeln('MyProg ',CoGate(i));
   inc(i);
 end;
end;

起動するルーチンは フォームにメモと、ボタンを貼り付けて
var Stack:array[0..2000] of integer; // スタック用の領域確保の為だけ

procedure TForm1.Button1Click(Sender: TObject);
var i:Integer;
begin
  CoSetup(Stack[1000],MyProg);
  for i:=100 to 110 do begin
  Memo1.Lines.Add( format('%5d',[CoGate(i)]) );
  end;
end;

これを実行してトレースしてゆくと、MyProgと Buttin1を交互に、互いに変数を交換しあって動くのが判ると思う