// "Mirror kaleidoscope" intro.
// (c)2001 Wega (2:5055/141.10@FidoNet)


// Текстмод
:fastcall TextMode()
{
 AX=03h; $int 10h
}


// Графмод
:fastcall GraphMode()
{
 AX=13h; $int 10h
}


// Вывод видеобуфера
:fastcall PutVideoBuf()
{
 $push DS,ES
 $push ES
 $pop DS
 ES=0A000h;
 SI=0;DI=0;
 CX=320*200/2;
 $rep $movsw
 $pop ES,DS
}


// Очистка видеобуфера
:fastcall ClrVideoBuf()
{
 DI=0;AX=0;
 CX=320*200/2;
 $rep $stosw
}


// Ожидание перерисовки экрана видеоадаптером
:fastcall WaitRetrace()
{
 asm{
  mov DX,03DAh
V1:
  in AL,DX
  and AL,08H
  jnz V1
V2:
  in AL,DX
  and AL,08H
  jz V2
 }
}


// Вывод пиксела с зеркальным отражением
// word x, y; byte color
:fastcall PutPixels(AX,BX,CL)
{
 SI=BX<<6;
 AX+=SI;
 SI=BX<<8;
 SI+=AX;
 ESBYTE[SI]+=CL;
 DI=64000-SI;
 ESBYTE[DI]+=CL;
}


// Начало
:fastcall Begin()
{
 @GraphMode();

 // Сегмент видеобуфера
 AX=DS;
 AX+=4096;
 ES=AX;

 @ClrVideoBuf();
}


// Конец
:fastcall End()
{
 @TextMode();
 AX=0; $int 16h
}
