#include <iostream.h>
#include <dos.h>
#include <stdlib.h>
#include <stdio.h>
#include <cstdlib>

typedef unsigned char UCHAR;

// Set graphics mode $13
void SetMcga()
{
//	__asm
//	{
//		mov eax, 13h
//		int 10h
//	}
	__asm                  // __asm block
{
   mov eax, 01h
   int 10h
}

}


// Set back textmode
void SetTextMode()
{
	__asm
	{
		mov eax,03h
		int 10h
	}
}

void Setpal(char Number,char R,char G,char B)
{
	__asm
	{
		mov dx, 0x3C8
		mov al, Number
		out dx, al
		inc dx
		mov al, R
		out dx, al
		mov al, G
		out dx, al
		mov al, B
		out dx, al
	}
}

// Wait for vertical retrace to occur - to avoid flicker on screen
void WaitRetrace()
{
	__asm
	{
		mov dx,0x3DA
//		@l1:
		in al,dx
		and al,0x08
//		jnz @l1
//		@l2:
		in al,dx
		and al,0x08
//		jz @l2
	}
}

// Quickly move 64000 bytes from source to dest
void FlipScreen(UCHAR *source, UCHAR *dest)
{
 __asm
  {
   mov esi,source
   mov edi,dest
   mov ecx,16000
   rep movsd
  }
}

// Quickly clear out 64000 bytes in buffer 'where' with color 'color'
void Clear(char color,UCHAR *where)
{
	__asm
	{
		mov edi,where
		xor ecx,ecx

		mov al,color
		mov ah,color
		rol eax,16
		mov al,color
		mov ah,color
		mov ecx,16000
		rep stosd
	}
}


// Plot a pixel of color 'col' to buffer 'where'
void PutPixel(int x, int y, char col,UCHAR *where)
{
	__asm
	{
		mov eax,where
		mov ebx,y
		shl ebx,8
		mov ecx,ebx
		shr ecx,2
		add ecx,ebx
		add ecx,x
		mov bl,col
		mov [eax+ecx],bl
	}
}

int main()
{
	SetMcga();
	return 0;
}
