#ifndef VGARESOLUTION_HH
	#define VGARESOLUTION_HH

#include "videodef.hh"
#include "typedef.hh"

#define ATTRCON_ADDR    0x3C0
#define MISC_ADDR       0x3C2
#define VGAENABLE_ADDR  0x3C3
#define SEQU_ADDR       0x3C4
#define GRACON_ADDR     0x3CE
#define CRTC_ADDR       0x3D4
#define STATUS_ADDR     0x3DA

class VGAresolution
{
	public:
		VGAresolution(UBYTE mode); //Initialize custom unchained VGA mode
		~VGAresolution(void);
		void SetText80x25(void); // Return to text mode
		//Various unchained VGA modes
		void Set256x224x256(void);
		void Set256x240x256(void);
		void Set256x256x256(void);
		void Set256x480x256(void);
		void Set320x200x256(void);
		void Set320x240x256(void);
		void Set320x400x256(void);
		void Set320x480x256(void);
		void Set360x200x256(void);
		void Set360x240x256(void);
		void Set360x270x256(void);
		void Set360x360x256(void);
		void Set360x400x256(void);
		void Set360x480x256(void);
		void Set376x282x256(void);
		void Set376x564x256(void);
		void Set400x300x256(void);
		void Set400x600x256(void);
		void Set640x400x256(void);
		UWORD GetXres(void);
		UWORD GetYres(void);
//		void SetWritePlane(UWORD plane_mask);
//		void SetReadPlane(UWORD plane_mask);
	private:
		void SetBaseXMode(void);
		void OutReg(UWORD *r);
		void OutRegArray(UWORD *r, DWORD n);

		UWORD height;
		UWORD width;
};

#endif

