#ifndef MODEX_H
#define MODEX_H

class ModeX
{
private:
	int hpage;               //address of hidden page
	unsigned char* softbuf;

public:
	ModeX(void)
	{
		hpage=16000u;
		softbuf=new unsigned char[64000u];
	}
	~ModeX(void)
	{
		delete[] softbuf;
	}
	static void initMode(void);
	static void textMode(void);
	static 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);
	static void setPalette(unsigned char col, unsigned char red,
												 unsigned char gre, unsigned char blu);
	static 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();}
	static void WaitRetrace(void);  //wait for vertical retrace
	static void setStart(unsigned int row);
};

#endif