#ifndef MODEX_H
#define MODEX_H

class ModeX
{
private:
	void WaitRetrace(void);  //wait for vertical retrace
	int hpage;               //address of hidden page
	unsigned char* softbuf;

public:
	ModeX(void)
	{
		hpage=16000u;
		softbuf=new unsigned char[64000u];
	}
	~ModeX(void)
	{
		delete[] softbuf;
	}
	void initMode(void);
	void textMode(void);
	void onVidPage(unsigned char* bitmap,
								 unsigned int pic_size,
								 unsigned int page);
	void VidBufonScr(void);
	void putPixelonVidBuf(unsigned int x,unsigned int y,unsigned int col);
	void setPalette(unsigned char col, unsigned char red,
									unsigned char gre, unsigned char blu);
	void setPalette(unsigned char* palette);
	void onSoftBuf(unsigned char* bmp,unsigned int pic_size=64000u,
								 int transparent=0);
	void putPixelonSoftBuf(unsigned int x, unsigned int y,unsigned int col)
	{softbuf[y*320+x]=col;}
	void putPixelonSoftBuf(unsigned int offset, unsigned int col)
	{softbuf[offset]=col;}
	unsigned char* SoftBuf(void){return softbuf;}
	void SoftBufonVidBuf(void){onVidPage(softbuf,64000u,hpage);}
	void SoftBufonScr(void){SoftBufonVidBuf();VidBufonScr();}
};

#endif